diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index 5ef2260..2974a7e 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -4179,7 +4179,6 @@
   const int mib_size = cm->seq_params.mib_size;
   const int mib_size_log2 = cm->seq_params.mib_size_log2;
   const int sb_row = (mi_row - tile_info->mi_row_start) >> mib_size_log2;
-  int sb_mi_size = av1_get_sb_mi_size(cm);
 
 #if CONFIG_COLLECT_COMPONENT_TIMING
   start_timing(cpi, encode_sb_time);
@@ -4201,8 +4200,6 @@
   // Code each SB in the row
   for (int mi_col = tile_info->mi_col_start, sb_col_in_tile = 0;
        mi_col < tile_info->mi_col_end; mi_col += mib_size, sb_col_in_tile++) {
-    if (!cpi->sf.use_real_time_ref_set)
-      memset(x->mbmi_ext, 0, sb_mi_size * sizeof(*x->mbmi_ext));
     (*(cpi->row_mt_sync_read_ptr))(&tile_data->row_mt_sync, sb_row,
                                    sb_col_in_tile);
     if (tile_data->allow_update_cdf && (cpi->row_mt == 1) &&
@@ -4267,17 +4264,12 @@
         break;
       default: assert(0);
     }
-    x->mb_rd_record.num = x->mb_rd_record.index_start = 0;
     x->color_sensitivity[0] = 0;
     x->color_sensitivity[1] = 0;
 
-    if (cpi->sf.use_inter_txb_hash) {
-      av1_zero(x->txb_rd_record_8X8);
-      av1_zero(x->txb_rd_record_16X16);
-      av1_zero(x->txb_rd_record_32X32);
-      av1_zero(x->txb_rd_record_64X64);
-      av1_zero(x->txb_rd_record_intra);
-    }
+    // Reset hash state for transform/mode rd hash information
+    reset_hash_records(x, cpi->sf.use_inter_txb_hash);
+
     if (!use_nonrd_mode) {
       av1_zero(x->picked_ref_frames_mask);
       av1_zero(x->pred_mv);
diff --git a/av1/encoder/rd.h b/av1/encoder/rd.h
index b50af0f..4bb7aa9 100644
--- a/av1/encoder/rd.h
+++ b/av1/encoder/rd.h
@@ -283,26 +283,29 @@
 }
 
 // Used to reset the state of tx/mb rd hash information
-static INLINE void reset_hash_records(MACROBLOCK *const x) {
+static INLINE void reset_hash_records(MACROBLOCK *const x,
+                                      int use_inter_txb_hash) {
   int32_t record_idx;
 
   // Reset the state for use_inter_txb_hash
-  for (record_idx = 0; record_idx < ((MAX_MIB_SIZE >> 1) * (MAX_MIB_SIZE >> 1));
-       record_idx++)
-    x->txb_rd_record_8X8[record_idx].num =
-        x->txb_rd_record_8X8[record_idx].index_start = 0;
-  for (record_idx = 0; record_idx < ((MAX_MIB_SIZE >> 2) * (MAX_MIB_SIZE >> 2));
-       record_idx++)
-    x->txb_rd_record_16X16[record_idx].num =
-        x->txb_rd_record_16X16[record_idx].index_start = 0;
-  for (record_idx = 0; record_idx < ((MAX_MIB_SIZE >> 3) * (MAX_MIB_SIZE >> 3));
-       record_idx++)
-    x->txb_rd_record_32X32[record_idx].num =
-        x->txb_rd_record_32X32[record_idx].index_start = 0;
-  for (record_idx = 0; record_idx < ((MAX_MIB_SIZE >> 4) * (MAX_MIB_SIZE >> 4));
-       record_idx++)
-    x->txb_rd_record_64X64[record_idx].num =
-        x->txb_rd_record_64X64[record_idx].index_start = 0;
+  if (use_inter_txb_hash) {
+    for (record_idx = 0;
+         record_idx < ((MAX_MIB_SIZE >> 1) * (MAX_MIB_SIZE >> 1)); record_idx++)
+      x->txb_rd_record_8X8[record_idx].num =
+          x->txb_rd_record_8X8[record_idx].index_start = 0;
+    for (record_idx = 0;
+         record_idx < ((MAX_MIB_SIZE >> 2) * (MAX_MIB_SIZE >> 2)); record_idx++)
+      x->txb_rd_record_16X16[record_idx].num =
+          x->txb_rd_record_16X16[record_idx].index_start = 0;
+    for (record_idx = 0;
+         record_idx < ((MAX_MIB_SIZE >> 3) * (MAX_MIB_SIZE >> 3)); record_idx++)
+      x->txb_rd_record_32X32[record_idx].num =
+          x->txb_rd_record_32X32[record_idx].index_start = 0;
+    for (record_idx = 0;
+         record_idx < ((MAX_MIB_SIZE >> 4) * (MAX_MIB_SIZE >> 4)); record_idx++)
+      x->txb_rd_record_64X64[record_idx].num =
+          x->txb_rd_record_64X64[record_idx].index_start = 0;
+  }
 
   // Reset the state for use_intra_txb_hash
   x->txb_rd_record_intra.num = x->txb_rd_record_intra.index_start = 0;
diff --git a/av1/encoder/rdopt.h b/av1/encoder/rdopt.h
index b371c95..381432f 100644
--- a/av1/encoder/rdopt.h
+++ b/av1/encoder/rdopt.h
@@ -380,7 +380,7 @@
       // the decisions would have been sub-optimal
       // TODO(any): Move the evaluation of palette/IntraBC modes before winner
       // mode is processed and clean-up the code below
-      reset_hash_records(x);
+      reset_hash_records(x, cpi->sf.use_inter_txb_hash);
 
       break;
     default: assert(0);
