diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 6255259..bfbf417 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -1323,11 +1323,13 @@
     }
   }
   if (!is_720p_or_larger) {
+    if (speed == 8) sf->rt_sf.prefer_large_partition_blocks = 2;
     if (speed >= 9) {
       sf->rt_sf.force_large_partition_blocks_intra = 1;
     }
   } else {
     if (speed >= 6) sf->rt_sf.skip_newmv_mode_based_on_sse = 3;
+    if (speed == 8) sf->rt_sf.prefer_large_partition_blocks = 1;
     if (speed >= 9) {
       sf->rt_sf.sad_based_adp_altref_lag = 1;
       sf->rt_sf.sad_based_comp_prune = 1;
@@ -1392,7 +1394,7 @@
     sf->rt_sf.sad_based_comp_prune = 0;
     sf->rt_sf.source_metrics_sb_nonrd = 1;
     if (cpi->rc.high_source_sad == 1) {
-      sf->rt_sf.force_large_partition_blocks = 0;
+      sf->rt_sf.prefer_large_partition_blocks = 0;
       sf->part_sf.max_intra_bsize = BLOCK_128X128;
       for (int i = 0; i < BLOCK_SIZES; ++i) {
         if (i > BLOCK_32X32)
@@ -1678,7 +1680,7 @@
     sf->rt_sf.sse_early_term_inter_search = EARLY_TERM_IDX_3;
     sf->rt_sf.screen_content_cdef_filter_qindex_thresh = 20;
     sf->rt_sf.estimate_motion_for_var_based_partition = 0;
-    sf->rt_sf.force_large_partition_blocks = 1;
+    sf->rt_sf.prefer_large_partition_blocks = 3;
     sf->rt_sf.skip_intra_pred = 2;
     sf->rt_sf.var_part_split_threshold_shift = 9;
     for (int i = 0; i < BLOCK_SIZES; ++i)
@@ -1994,7 +1996,7 @@
   rt_sf->source_metrics_sb_nonrd = 0;
   rt_sf->overshoot_detection_cbr = NO_DETECTION;
   rt_sf->check_scene_detection = 0;
-  rt_sf->force_large_partition_blocks = 0;
+  rt_sf->prefer_large_partition_blocks = 0;
   rt_sf->use_temporal_noise_estimate = 0;
   rt_sf->fullpel_search_step_param = 0;
   for (int i = 0; i < BLOCK_SIZES; ++i)
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index 7ba118b..3c53b53 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -1456,8 +1456,9 @@
   // Check for scene/content change detection on every frame before encoding.
   int check_scene_detection;
 
-  // Forces larger partition blocks in variance based partitioning
-  int force_large_partition_blocks;
+  // For nonrd mode: Prefer larger partition blks in variance based partitioning
+  // 0: disabled, 1-2: increasing aggressiveness
+  int prefer_large_partition_blocks;
 
   // uses results of temporal noise estimate
   int use_temporal_noise_estimate;
diff --git a/av1/encoder/var_based_part.c b/av1/encoder/var_based_part.c
index 2c88427..75533bd 100644
--- a/av1/encoder/var_based_part.c
+++ b/av1/encoder/var_based_part.c
@@ -428,6 +428,25 @@
   return threshold;
 }
 
+static AOM_INLINE void tune_thresh_based_on_qindex_window(
+    int qindex, int th, int64_t thresholds[]) {
+  const int win = 45;
+  double weight;
+
+  if (qindex < th - win)
+    weight = 1.0;
+  else if (qindex > th + win)
+    weight = 0.0;
+  else
+    weight = 1.0 - (qindex - th + win) / (2 * win);
+  thresholds[1] =
+      (int)((1 - weight) * (thresholds[1] << 1) + weight * thresholds[1]);
+  thresholds[2] =
+      (int)((1 - weight) * (thresholds[2] << 1) + weight * thresholds[2]);
+  thresholds[3] =
+      (int)((1 - weight) * (thresholds[3] << 2) + weight * thresholds[3]);
+}
+
 static AOM_INLINE void set_vbp_thresholds(AV1_COMP *cpi, int64_t thresholds[],
                                           int q, int content_lowsumdiff,
                                           int source_sad_nonrd,
@@ -477,7 +496,7 @@
     if (noise_level == kHigh)
       threshold_base = (5 * threshold_base) >> 1;
     else if (noise_level == kMedium &&
-             !cpi->sf.rt_sf.force_large_partition_blocks)
+             !cpi->sf.rt_sf.prefer_large_partition_blocks)
       threshold_base = (5 * threshold_base) >> 2;
   }
   // TODO(kyslov) Enable var based partition adjusment on temporal denoising
@@ -548,7 +567,8 @@
   } else {
     thresholds[2] = (5 * threshold_base) >> 1;
   }
-  if (cpi->sf.rt_sf.force_large_partition_blocks) {
+  // Tune thresholds less or more aggressively to prefer larger partitions
+  if (cpi->sf.rt_sf.prefer_large_partition_blocks >= 3) {
     double weight;
     const int win = 20;
     if (current_qindex < QINDEX_LARGE_BLOCK_THR - win)
@@ -597,6 +617,13 @@
           (int)((1 - weight) * (thresholds[2] << 4) + weight * thresholds[2]);
       thresholds[3] = INT32_MAX;
     }
+  } else if (cpi->sf.rt_sf.prefer_large_partition_blocks >= 2) {
+    tune_thresh_based_on_qindex_window(current_qindex, QINDEX_LARGE_BLOCK_THR,
+                                       thresholds);
+  } else if (cpi->sf.rt_sf.prefer_large_partition_blocks >= 1) {
+    thresholds[3] <<= 2;
+    thresholds[1] <<= (source_sad_nonrd == kLowSad) ? 1 : 0;
+    thresholds[2] <<= (source_sad_nonrd == kLowSad) ? 1 : 0;
   }
   if (cpi->sf.part_sf.disable_8x8_part_based_on_qidx && (current_qindex < 128))
     thresholds[3] = INT64_MAX;
@@ -1379,7 +1406,7 @@
                    (((maxvar_16x16[m][i] - minvar_16x16[m][i]) >
                          (thresholds[2] >> 1) &&
                      maxvar_16x16[m][i] > thresholds[2]) ||
-                    (cpi->sf.rt_sf.force_large_partition_blocks &&
+                    (cpi->sf.rt_sf.prefer_large_partition_blocks &&
                      x->content_state_sb.source_sad_nonrd > kLowSad &&
                      cpi->rc.frame_source_sad < 20000 &&
                      maxvar_16x16[m][i] > (thresholds[2] >> 4) &&
@@ -1405,7 +1432,7 @@
           (max_var_32x32[m] - min_var_32x32[m]) > 3 * (thresholds[1] >> 3) &&
           max_var_32x32[m] > thresholds[1] >> 1 &&
           (noise_level >= kMedium || cpi->ppi->use_svc ||
-           cpi->sf.rt_sf.force_large_partition_blocks)) {
+           cpi->sf.rt_sf.prefer_large_partition_blocks)) {
         force_split[1 + m] = PART_EVAL_ONLY_SPLIT;
         force_split[0] = PART_EVAL_ONLY_SPLIT;
       }
diff --git a/test/rt_end_to_end_test.cc b/test/rt_end_to_end_test.cc
index a6f39c1..6e9711e 100644
--- a/test/rt_end_to_end_test.cc
+++ b/test/rt_end_to_end_test.cc
@@ -40,9 +40,9 @@
                            { 10, { { 0, 34.7 }, { 3, 35.3 } } } } },
                        { "paris_352_288_30.y4m",
                          { { 5, { { 0, 36.2 }, { 3, 36.7 } } },
-                           { 6, { { 0, 36.1 }, { 3, 36.5 } } },
+                           { 6, { { 0, 36.1 }, { 3, 36.48 } } },
                            { 7, { { 0, 35.5 }, { 3, 36.0 } } },
-                           { 8, { { 0, 36.0 }, { 3, 36.5 } } },
+                           { 8, { { 0, 35.98 }, { 3, 36.48 } } },
                            { 9, { { 0, 35.5 }, { 3, 36.0 } } },
                            { 10, { { 0, 35.3 }, { 3, 35.9 } } } } },
                        { "niklas_1280_720_30.y4m",
