diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 10b1377..2effddb 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -8940,38 +8940,27 @@
   }
 }
 
-// check if there is saved result match with this search
-static INLINE int is_interp_filter_exact_match(
-    const INTERPOLATION_FILTER_STATS *st, MB_MODE_INFO *const mi) {
-  for (int i = 0; i < 2; ++i) {
-    if ((st->ref_frames[i] != mi->ref_frame[i]) ||
-        (st->mv[i].as_int != mi->mv[i].as_int)) {
-      return 0;
-    }
-  }
-  if (has_second_ref(mi) && st->comp_type != mi->interinter_comp.type) return 0;
-  if (has_second_ref(mi) && st->compound_idx != mi->compound_idx) return 0;
-  return 1;
-}
-
 // return mv_diff
 static INLINE int is_interp_filter_good_match(
-    const INTERPOLATION_FILTER_STATS *st, MB_MODE_INFO *const mi) {
+    const INTERPOLATION_FILTER_STATS *st, MB_MODE_INFO *const mi,
+    int skip_level) {
   const int is_comp = has_second_ref(mi);
   int i;
 
   for (i = 0; i < 1 + is_comp; ++i) {
-    if (st->ref_frames[i] != mi->ref_frame[i]) return -1;
+    if (st->ref_frames[i] != mi->ref_frame[i]) return INT_MAX;
   }
 
-  const int thr = is_comp ? 7 : 3;
+  if (skip_level == 1 && is_comp) {
+    if (st->comp_type != mi->interinter_comp.type) return INT_MAX;
+    if (st->compound_idx != mi->compound_idx) return INT_MAX;
+  }
+
   int mv_diff = 0;
   for (i = 0; i < 1 + is_comp; ++i) {
     mv_diff += abs(st->mv[i].as_mv.row - mi->mv[i].as_mv.row) +
                abs(st->mv[i].as_mv.col - mi->mv[i].as_mv.col);
   }
-  if (mv_diff > thr) return -1;
-
   return mv_diff;
 }
 
@@ -9024,35 +9013,31 @@
 static INLINE int find_interp_filter_in_stats(
     MB_MODE_INFO *const mbmi, INTERPOLATION_FILTER_STATS *interp_filter_stats,
     int interp_filter_stats_idx, int skip_level) {
-  if (skip_level < 2) {
-    // Find exact match.
-    // TODO(yunqing): Use a small threshold instead. Combine this with finding
-    // good enough match.
-    for (int j = 0; j < interp_filter_stats_idx; ++j) {
-      const INTERPOLATION_FILTER_STATS *st = &interp_filter_stats[j];
-      if (is_interp_filter_exact_match(st, mbmi)) {
-        mbmi->interp_filters = st->filters;
-        return j;
-      }
+  // [skip_levels][single or comp]
+  const int thr[2][2] = { { 0, 0 }, { 3, 7 } };
+  const int is_comp = has_second_ref(mbmi);
+
+  // Find good enough match.
+  // TODO(yunqing): Separate single-ref mode and comp mode stats for fast
+  // search.
+  int best = INT_MAX;
+  int match = -1;
+  for (int j = 0; j < interp_filter_stats_idx; ++j) {
+    const INTERPOLATION_FILTER_STATS *st = &interp_filter_stats[j];
+    const int mv_diff = is_interp_filter_good_match(st, mbmi, skip_level);
+    // Exact match is found.
+    if (mv_diff == 0) {
+      match = j;
+      break;
+    } else if (mv_diff < best && mv_diff <= thr[skip_level - 1][is_comp]) {
+      best = mv_diff;
+      match = j;
     }
-  } else {
-    // Find good enough match.
-    // TODO(yunqing): Separate single-ref mode and comp mode stats for fast
-    // search.
-    int best = INT_MAX;
-    int match = -1;
-    for (int j = 0; j < interp_filter_stats_idx; ++j) {
-      const INTERPOLATION_FILTER_STATS *st = &interp_filter_stats[j];
-      const int mv_diff = is_interp_filter_good_match(st, mbmi);
-      if (mv_diff != -1 && mv_diff < best) {
-        best = mv_diff;
-        match = j;
-      }
-    }
-    if (match != -1) {
-      mbmi->interp_filters = interp_filter_stats[match].filters;
-      return match;
-    }
+  }
+
+  if (match != -1) {
+    mbmi->interp_filters = interp_filter_stats[match].filters;
+    return match;
   }
   return -1;  // no match result found
 }
@@ -9125,10 +9110,10 @@
     INTERPOLATION_FILTER_STATS *interp_filter_stats,
     int interp_filter_stats_idx) {
   int match_found_idx = -1;
-  if (cpi->sf.skip_repeat_interpolation_filter_search && need_search)
-    match_found_idx = find_interp_filter_in_stats(
-        mbmi, interp_filter_stats, interp_filter_stats_idx,
-        cpi->sf.skip_repeat_interpolation_filter_search);
+  if (cpi->sf.use_interp_filter && need_search)
+    match_found_idx = find_interp_filter_in_stats(mbmi, interp_filter_stats,
+                                                  interp_filter_stats_idx,
+                                                  cpi->sf.use_interp_filter);
 
   if (!need_search || match_found_idx == -1)
     set_default_interp_filters(mbmi, assign_filter);
@@ -9325,7 +9310,7 @@
   x->pred_sse[ref_frame] = (unsigned int)(rd_stats_luma.sse >> 4);
 
   // save search results
-  if (cpi->sf.skip_repeat_interpolation_filter_search) {
+  if (cpi->sf.use_interp_filter) {
     assert(match_found_idx == -1);
     args->interp_filter_stats_idx = save_interp_filter_search_stat(
         mbmi, *rd, x->pred_sse[ref_frame], args->interp_filter_stats,
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 2b432c1..4979c95 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -300,7 +300,7 @@
     sf->prune_ref_frame_for_gm_search = boosted ? 0 : 1;
     sf->intra_tx_size_search_init_depth_rect = 1;
 
-    sf->skip_repeat_interpolation_filter_search = 1;
+    sf->use_interp_filter = 1;
     sf->tx_type_search.skip_tx_search = 1;
     sf->tx_type_search.ml_tx_split_thresh = 4000;
     sf->adaptive_txb_search_level = 2;
@@ -463,7 +463,7 @@
     // sf->tx_domain_dist_level = 2;
     sf->tx_domain_dist_thres_level = 2;
     sf->simple_motion_search_prune_agg = 2;
-    sf->skip_repeat_interpolation_filter_search = 2;
+    sf->use_interp_filter = 2;
     sf->prune_ref_mv_idx_search = 1;
   }
 
@@ -533,7 +533,7 @@
     sf->intra_tx_size_search_init_depth_rect = 1;
     sf->tx_size_search_lgr_block = 1;
     sf->prune_ext_partition_types_search_level = 2;
-    sf->skip_repeat_interpolation_filter_search = 1;
+    sf->use_interp_filter = 1;
     sf->tx_type_search.skip_tx_search = 1;
     sf->tx_type_search.ml_tx_split_thresh = 4000;
     sf->adaptive_txb_search_level = 2;
@@ -898,7 +898,7 @@
   sf->prune_ref_frame_for_gm_search = 0;
   sf->use_fast_interpolation_filter_search = 0;
   sf->disable_dual_filter = 0;
-  sf->skip_repeat_interpolation_filter_search = 0;
+  sf->use_interp_filter = 0;
   sf->use_hash_based_trellis = 0;
   sf->prune_comp_search_by_single_result = 0;
   sf->skip_repeated_newmv = 0;
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index 7433eb5..d4e9070 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -539,9 +539,9 @@
   int disable_dual_filter;
 
   // Save results of interpolation_filter_search for a block
-  // Check mv and ref_frames before search, if they are same with previous
-  // saved results, it can be skipped.
-  int skip_repeat_interpolation_filter_search;
+  // Check mv and ref_frames before search, if they are very close with previous
+  // saved results, filter search can be skipped.
+  int use_interp_filter;
 
   // Use a hash table to store previously computed optimized qcoeffs from
   // expensive calls to optimize_txb.
