diff --git a/av1/common/av1_common_int.h b/av1/common/av1_common_int.h
index 5ce40fb..7d193e7 100644
--- a/av1/common/av1_common_int.h
+++ b/av1/common/av1_common_int.h
@@ -1236,6 +1236,21 @@
   return mi_alloc_row * mi_params->mi_alloc_cols + mi_alloc_col;
 }
 
+// For this partition block, set pointers in mi_params->mi_grid_base and xd->mi.
+static INLINE void set_mi_offsets(const CommonModeInfoParams *const mi_params,
+                                  MACROBLOCKD *const xd, int mi_row,
+                                  int mi_col) {
+  // 'mi_grid_base' should point to appropriate memory in 'mi'.
+  const int mi_grid_idx = get_mi_grid_idx(mi_params, mi_row, mi_col);
+  const int mi_alloc_idx = get_alloc_mi_idx(mi_params, mi_row, mi_col);
+  mi_params->mi_grid_base[mi_grid_idx] = &mi_params->mi[mi_alloc_idx];
+  // 'xd->mi' should point to an offset in 'mi_grid_base';
+  xd->mi = mi_params->mi_grid_base + mi_grid_idx;
+  // 'xd->tx_type_map' should point to an offset in 'mi_params->tx_type_map'.
+  xd->tx_type_map = mi_params->tx_type_map + mi_grid_idx;
+  xd->tx_type_map_stride = mi_params->mi_stride;
+}
+
 static INLINE void txfm_partition_update(TXFM_CONTEXT *above_ctx,
                                          TXFM_CONTEXT *left_ctx,
                                          TX_SIZE tx_size, TX_SIZE txb_size) {
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index ccad632..29a758a 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -324,13 +324,7 @@
   const CommonModeInfoParams *const mi_params = &cm->mi_params;
   const TileInfo *const tile = &xd->tile;
 
-  xd->mi = mi_params->mi_grid_base + get_mi_grid_idx(mi_params, mi_row, mi_col);
-  xd->mi[0] = &mi_params->mi[get_alloc_mi_idx(mi_params, mi_row, mi_col)];
-  xd->tx_type_map =
-      &mi_params->tx_type_map[mi_row * mi_params->mi_stride + mi_col];
-  xd->tx_type_map_stride = mi_params->mi_stride;
-  // TODO(slavarnway): Generate sb_type based on bwl and bhl, instead of
-  // passing bsize from decode_partition().
+  set_mi_offsets(mi_params, xd, mi_row, mi_col);
   xd->mi[0]->sb_type = bsize;
 #if CONFIG_RD_DEBUG
   xd->mi[0]->mi_row = mi_row;
diff --git a/av1/encoder/encode_strategy.c b/av1/encoder/encode_strategy.c
index 3b7f842..c5b1cee 100644
--- a/av1/encoder/encode_strategy.c
+++ b/av1/encoder/encode_strategy.c
@@ -875,11 +875,7 @@
   av1_setup_block_planes(xd, cm->seq_params.subsampling_x,
                          cm->seq_params.subsampling_y, num_planes);
 
-  const CommonModeInfoParams *const mi_params = &cm->mi_params;
-  xd->mi = mi_params->mi_grid_base;
-  xd->mi[0] = mi_params->mi;
-  xd->tx_type_map = mi_params->tx_type_map;
-  xd->tx_type_map_stride = mi_params->mi_stride;
+  set_mi_offsets(&cm->mi_params, xd, 0, 0);
 }
 
 // Apply temporal filtering to key frames and encode the filtered frame.
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index a3f3a81..9b0d0e3 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -4163,10 +4163,10 @@
     // before mi is assigned for each block in current superblock
     for (int j = 0; j < AOMMIN(mib_size, mi_params->mi_rows - mi_row); j++) {
       for (int k = 0; k < AOMMIN(mib_size, mi_params->mi_cols - mi_col); k++) {
-        const int mi_idx = get_alloc_mi_idx(mi_params, mi_row + j, mi_col + k);
-        mi_params->mi[mi_idx].delta_lf_from_base = delta_lf;
+        const int grid_idx = get_mi_grid_idx(mi_params, mi_row + j, mi_col + k);
+        mi_params->mi_grid_base[grid_idx]->delta_lf_from_base = delta_lf;
         for (int lf_id = 0; lf_id < frame_lf_count; ++lf_id) {
-          mi_params->mi[mi_idx].delta_lf[lf_id] = delta_lf;
+          mi_params->mi_grid_base[grid_idx]->delta_lf[lf_id] = delta_lf;
         }
       }
     }
@@ -5598,10 +5598,7 @@
     mi_params->setup_mi(mi_params);
   }
 
-  xd->mi = mi_params->mi_grid_base;
-  xd->mi[0] = mi_params->mi;
-  xd->tx_type_map = mi_params->tx_type_map;
-  xd->tx_type_map_stride = mi_params->mi_stride;
+  set_mi_offsets(mi_params, xd, 0, 0);
 
 #if CONFIG_AV1_HIGHBITDEPTH
   x->fwd_txfm4x4 = aom_fdct4x4;
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index aa40799..10a1363 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -1549,14 +1549,8 @@
                                          MACROBLOCKD *const xd, int mi_row,
                                          int mi_col) {
   const CommonModeInfoParams *const mi_params = &cpi->common.mi_params;
-  const int grid_idx = get_mi_grid_idx(mi_params, mi_row, mi_col);
-  const int mi_idx = get_alloc_mi_idx(mi_params, mi_row, mi_col);
+  set_mi_offsets(mi_params, xd, mi_row, mi_col);
   const int ext_idx = get_mi_ext_idx(mi_params, mi_row, mi_col);
-
-  xd->mi = mi_params->mi_grid_base + grid_idx;
-  xd->mi[0] = mi_params->mi + mi_idx;
-  xd->tx_type_map = mi_params->tx_type_map + grid_idx;
-  xd->tx_type_map_stride = mi_params->mi_stride;
   x->mbmi_ext_frame = cpi->mbmi_ext_frame_base + ext_idx;
 }
 
diff --git a/av1/encoder/firstpass.c b/av1/encoder/firstpass.c
index 9abd0c6..11a6aa8 100644
--- a/av1/encoder/firstpass.c
+++ b/av1/encoder/firstpass.c
@@ -367,9 +367,8 @@
   av1_setup_frame_size(cpi);
   aom_clear_system_state();
 
-  xd->mi = mi_params->mi_grid_base;
-  xd->mi[0] = mi_params->mi;
-  x->e_mbd.mi[0]->sb_type = BLOCK_16X16;
+  set_mi_offsets(mi_params, xd, 0, 0);
+  xd->mi[0]->sb_type = BLOCK_16X16;
 
   intra_factor = 0.0;
   brightness_factor = 0.0;
@@ -392,8 +391,7 @@
     av1_setup_pre_planes(xd, 0, lst_yv12, 0, 0, NULL, num_planes);
   }
 
-  xd->mi = mi_params->mi_grid_base;
-  xd->mi[0] = mi_params->mi;
+  set_mi_offsets(mi_params, xd, 0, 0);
 
   // Don't store luma on the fist pass since chroma is not computed
   xd->cfl.store_y = 0;
@@ -442,14 +440,7 @@
 
       aom_clear_system_state();
 
-      const int grid_idx =
-          get_mi_grid_idx(mi_params, mb_row * mb_scale, mb_col * mb_scale);
-      const int mi_idx =
-          get_alloc_mi_idx(mi_params, mb_row * mb_scale, mb_col * mb_scale);
-      xd->mi = mi_params->mi_grid_base + grid_idx;
-      xd->mi[0] = mi_params->mi + mi_idx;
-      xd->tx_type_map = mi_params->tx_type_map + grid_idx;
-      xd->tx_type_map_stride = mi_params->mi_stride;
+      set_mi_offsets(mi_params, xd, mb_row * mb_scale, mb_col * mb_scale);
       xd->plane[0].dst.buf = new_yv12->y_buffer + recon_yoffset;
       xd->plane[1].dst.buf = new_yv12->u_buffer + recon_uvoffset;
       xd->plane[2].dst.buf = new_yv12->v_buffer + recon_uvoffset;
