diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index ab41354..e77e30c 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -2222,19 +2222,19 @@
   //     shifted and become the new virtual indexes for LAST2_FRAME and
   //     LAST3_FRAME.
   refresh_mask |=
-      (cpi->refresh_last_frame << cpi->remapped_ref_idx[LAST3_FRAME - 1]);
+      (cpi->refresh_last_frame << get_ref_frame_map_idx(cpi, LAST3_FRAME));
+
 #if USE_SYMM_MULTI_LAYER
-  refresh_mask |= (cpi->new_bwdref_update_rule == 1)
-                      ? (cpi->refresh_bwd_ref_frame
-                         << cpi->remapped_ref_idx[EXTREF_FRAME - 1])
-                      : (cpi->refresh_bwd_ref_frame
-                         << cpi->remapped_ref_idx[BWDREF_FRAME - 1]);
+  const int bwd_ref_frame =
+      (cpi->new_bwdref_update_rule == 1) ? EXTREF_FRAME : BWDREF_FRAME;
 #else
-  refresh_mask |=
-      (cpi->refresh_bwd_ref_frame << cpi->remapped_ref_idx[BWDREF_FRAME - 1]);
+  const int bwd_ref_frame = BWDREF_FRAME;
 #endif
   refresh_mask |=
-      (cpi->refresh_alt2_ref_frame << cpi->remapped_ref_idx[ALTREF2_FRAME - 1]);
+      (cpi->refresh_bwd_ref_frame << get_ref_frame_map_idx(cpi, bwd_ref_frame));
+
+  refresh_mask |= (cpi->refresh_alt2_ref_frame
+                   << get_ref_frame_map_idx(cpi, ALTREF2_FRAME));
 
   if (av1_preserve_existing_gf(cpi)) {
     // We have decided to preserve the previously existing golden frame as our
@@ -2252,13 +2252,13 @@
       return refresh_mask;
     } else {
       return refresh_mask | (cpi->refresh_golden_frame
-                             << cpi->remapped_ref_idx[ALTREF_FRAME - 1]);
+                             << get_ref_frame_map_idx(cpi, ALTREF_FRAME));
     }
   } else {
-    const int arf_idx = cpi->remapped_ref_idx[ALTREF_FRAME - 1];
+    const int arf_idx = get_ref_frame_map_idx(cpi, ALTREF_FRAME);
     return refresh_mask |
            (cpi->refresh_golden_frame
-            << cpi->remapped_ref_idx[GOLDEN_FRAME - 1]) |
+            << get_ref_frame_map_idx(cpi, GOLDEN_FRAME)) |
            (cpi->refresh_alt_ref_frame << arf_idx);
   }
 }
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 43218b4..08f3f2b 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -3249,8 +3249,8 @@
     cpi->rc.is_src_frame_alt_ref = 1;
     cpi->existing_fb_idx_to_show =
         (next_frame_update_type == OVERLAY_UPDATE)
-            ? cpi->remapped_ref_idx[ALTREF_FRAME - 1]
-            : cpi->remapped_ref_idx[bwdref_to_show - 1];
+            ? get_ref_frame_map_idx(cpi, ALTREF_FRAME)
+            : get_ref_frame_map_idx(cpi, bwdref_to_show);
 #if USE_SYMM_MULTI_LAYER
     if (cpi->new_bwdref_update_rule == 0)
 #endif
@@ -3541,13 +3541,13 @@
     if (!cpi->preserve_arf_as_gld) {
       assign_frame_buffer(
           pool->frame_bufs,
-          &cm->ref_frame_map[cpi->remapped_ref_idx[ALTREF_FRAME - 1]],
+          &cm->ref_frame_map[get_ref_frame_map_idx(cpi, ALTREF_FRAME)],
           cm->new_fb_idx);
     }
 
-    tmp = cpi->remapped_ref_idx[ALTREF_FRAME - 1];
+    tmp = get_ref_frame_map_idx(cpi, ALTREF_FRAME);
     cpi->remapped_ref_idx[ALTREF_FRAME - 1] =
-        cpi->remapped_ref_idx[GOLDEN_FRAME - 1];
+        get_ref_frame_map_idx(cpi, GOLDEN_FRAME);
     cpi->remapped_ref_idx[GOLDEN_FRAME - 1] = tmp;
 
     // TODO(zoeliu): Do we need to copy cpi->interp_filter_selected[0] over to
@@ -3566,11 +3566,11 @@
     // Deal with the special case for showing existing internal ALTREF_FRAME
     // Refresh the LAST_FRAME with the ALTREF_FRAME and retire the LAST3_FRAME
     // by updating the virtual indices.
-    const int last3_remapped_idx = cpi->remapped_ref_idx[LAST3_FRAME - 1];
+    const int last3_remapped_idx = get_ref_frame_map_idx(cpi, LAST3_FRAME);
     shift_last_ref_frames(cpi);
 
     cpi->remapped_ref_idx[LAST_FRAME - 1] =
-        cpi->remapped_ref_idx[bwdref_to_show - 1];
+        get_ref_frame_map_idx(cpi, bwdref_to_show);
 
     memcpy(cpi->interp_filter_selected[LAST_FRAME],
            cpi->interp_filter_selected[bwdref_to_show],
@@ -3590,7 +3590,7 @@
   } else { /* For non key/golden frames */
     // === ALTREF_FRAME ===
     if (cpi->refresh_alt_ref_frame) {
-      int arf_idx = cpi->remapped_ref_idx[ALTREF_FRAME - 1];
+      int arf_idx = get_ref_frame_map_idx(cpi, ALTREF_FRAME);
       assign_frame_buffer(pool->frame_bufs, &cm->ref_frame_map[arf_idx],
                           cm->new_fb_idx);
 
@@ -3603,7 +3603,7 @@
     if (cpi->refresh_golden_frame) {
       assign_frame_buffer(
           pool->frame_bufs,
-          &cm->ref_frame_map[cpi->remapped_ref_idx[GOLDEN_FRAME - 1]],
+          &cm->ref_frame_map[get_ref_frame_map_idx(cpi, GOLDEN_FRAME)],
           cm->new_fb_idx);
 
       memcpy(cpi->interp_filter_selected[GOLDEN_FRAME],
@@ -3619,7 +3619,7 @@
         // BWDREF -> ALTREF2 -> EXTREF
         // and assign the newly coded frame to BWDREF so that it always
         // keeps the nearest future frame
-        int tmp = cpi->remapped_ref_idx[EXTREF_FRAME - 1];
+        int tmp = get_ref_frame_map_idx(cpi, EXTREF_FRAME);
         assign_frame_buffer(pool->frame_bufs, &cm->ref_frame_map[tmp],
                             cm->new_fb_idx);
 
@@ -3629,7 +3629,7 @@
 #endif  // USE_SYMM_MULTI_LAYER
         assign_frame_buffer(
             pool->frame_bufs,
-            &cm->ref_frame_map[cpi->remapped_ref_idx[BWDREF_FRAME - 1]],
+            &cm->ref_frame_map[get_ref_frame_map_idx(cpi, BWDREF_FRAME)],
             cm->new_fb_idx);
 #if USE_SYMM_MULTI_LAYER
       }
@@ -3643,7 +3643,7 @@
     if (cpi->refresh_alt2_ref_frame) {
       assign_frame_buffer(
           pool->frame_bufs,
-          &cm->ref_frame_map[cpi->remapped_ref_idx[ALTREF2_FRAME - 1]],
+          &cm->ref_frame_map[get_ref_frame_map_idx(cpi, ALTREF2_FRAME)],
           cm->new_fb_idx);
 
       memcpy(cpi->interp_filter_selected[ALTREF2_FRAME],
@@ -3685,10 +3685,10 @@
     // remapped_ref_idx[2],   remapped_ref_idx[0],     remapped_ref_idx[1]
     assign_frame_buffer(
         pool->frame_bufs,
-        &cm->ref_frame_map[cpi->remapped_ref_idx[LAST3_FRAME - 1]],
+        &cm->ref_frame_map[get_ref_frame_map_idx(cpi, LAST3_FRAME)],
         cm->new_fb_idx);
 
-    int last3_remapped_idx = cpi->remapped_ref_idx[LAST3_FRAME - 1];
+    int last3_remapped_idx = get_ref_frame_map_idx(cpi, LAST3_FRAME);
 
     shift_last_ref_frames(cpi);
     cpi->remapped_ref_idx[LAST_FRAME - 1] = last3_remapped_idx;
@@ -3714,11 +3714,11 @@
       //       virtual index reshuffling for BWDREF, the encoder always
       //       specifies a LAST_BIPRED right before BWDREF and completes the
       //       reshuffling job accordingly.
-      last3_remapped_idx = cpi->remapped_ref_idx[LAST3_FRAME - 1];
+      last3_remapped_idx = get_ref_frame_map_idx(cpi, LAST3_FRAME);
 
       shift_last_ref_frames(cpi);
       cpi->remapped_ref_idx[LAST_FRAME - 1] =
-          cpi->remapped_ref_idx[BWDREF_FRAME - 1];
+          get_ref_frame_map_idx(cpi, BWDREF_FRAME);
       cpi->remapped_ref_idx[BWDREF_FRAME - 1] = last3_remapped_idx;
 
       memcpy(cpi->interp_filter_selected[LAST_FRAME],
@@ -4733,54 +4733,54 @@
       map[cpi->remapped_ref_idx[1]] == map[cpi->remapped_ref_idx[0]];
   const int last3_is_last =
       map[cpi->remapped_ref_idx[2]] == map[cpi->remapped_ref_idx[0]];
-  const int gld_is_last = map[cpi->remapped_ref_idx[GOLDEN_FRAME - 1]] ==
+  const int gld_is_last = map[get_ref_frame_map_idx(cpi, GOLDEN_FRAME)] ==
                           map[cpi->remapped_ref_idx[0]];
-  const int bwd_is_last = map[cpi->remapped_ref_idx[BWDREF_FRAME - 1]] ==
+  const int bwd_is_last = map[get_ref_frame_map_idx(cpi, BWDREF_FRAME)] ==
                           map[cpi->remapped_ref_idx[0]];
-  const int alt2_is_last = map[cpi->remapped_ref_idx[ALTREF2_FRAME - 1]] ==
+  const int alt2_is_last = map[get_ref_frame_map_idx(cpi, ALTREF2_FRAME)] ==
                            map[cpi->remapped_ref_idx[0]];
-  const int alt_is_last = map[cpi->remapped_ref_idx[ALTREF_FRAME - 1]] ==
+  const int alt_is_last = map[get_ref_frame_map_idx(cpi, ALTREF_FRAME)] ==
                           map[cpi->remapped_ref_idx[0]];
 
   // No.2 Priority: ALTREF_FRAME
   const int last2_is_alt = map[cpi->remapped_ref_idx[1]] ==
-                           map[cpi->remapped_ref_idx[ALTREF_FRAME - 1]];
+                           map[get_ref_frame_map_idx(cpi, ALTREF_FRAME)];
   const int last3_is_alt = map[cpi->remapped_ref_idx[2]] ==
-                           map[cpi->remapped_ref_idx[ALTREF_FRAME - 1]];
-  const int gld_is_alt = map[cpi->remapped_ref_idx[GOLDEN_FRAME - 1]] ==
-                         map[cpi->remapped_ref_idx[ALTREF_FRAME - 1]];
-  const int bwd_is_alt = map[cpi->remapped_ref_idx[BWDREF_FRAME - 1]] ==
-                         map[cpi->remapped_ref_idx[ALTREF_FRAME - 1]];
-  const int alt2_is_alt = map[cpi->remapped_ref_idx[ALTREF2_FRAME - 1]] ==
-                          map[cpi->remapped_ref_idx[ALTREF_FRAME - 1]];
+                           map[get_ref_frame_map_idx(cpi, ALTREF_FRAME)];
+  const int gld_is_alt = map[get_ref_frame_map_idx(cpi, GOLDEN_FRAME)] ==
+                         map[get_ref_frame_map_idx(cpi, ALTREF_FRAME)];
+  const int bwd_is_alt = map[get_ref_frame_map_idx(cpi, BWDREF_FRAME)] ==
+                         map[get_ref_frame_map_idx(cpi, ALTREF_FRAME)];
+  const int alt2_is_alt = map[get_ref_frame_map_idx(cpi, ALTREF2_FRAME)] ==
+                          map[get_ref_frame_map_idx(cpi, ALTREF_FRAME)];
 
   // No.3 Priority: LAST2_FRAME
   const int last3_is_last2 =
       map[cpi->remapped_ref_idx[2]] == map[cpi->remapped_ref_idx[1]];
-  const int gld_is_last2 = map[cpi->remapped_ref_idx[GOLDEN_FRAME - 1]] ==
+  const int gld_is_last2 = map[get_ref_frame_map_idx(cpi, GOLDEN_FRAME)] ==
                            map[cpi->remapped_ref_idx[1]];
-  const int bwd_is_last2 = map[cpi->remapped_ref_idx[BWDREF_FRAME - 1]] ==
+  const int bwd_is_last2 = map[get_ref_frame_map_idx(cpi, BWDREF_FRAME)] ==
                            map[cpi->remapped_ref_idx[1]];
-  const int alt2_is_last2 = map[cpi->remapped_ref_idx[ALTREF2_FRAME - 1]] ==
+  const int alt2_is_last2 = map[get_ref_frame_map_idx(cpi, ALTREF2_FRAME)] ==
                             map[cpi->remapped_ref_idx[1]];
 
   // No.4 Priority: LAST3_FRAME
-  const int gld_is_last3 = map[cpi->remapped_ref_idx[GOLDEN_FRAME - 1]] ==
+  const int gld_is_last3 = map[get_ref_frame_map_idx(cpi, GOLDEN_FRAME)] ==
                            map[cpi->remapped_ref_idx[2]];
-  const int bwd_is_last3 = map[cpi->remapped_ref_idx[BWDREF_FRAME - 1]] ==
+  const int bwd_is_last3 = map[get_ref_frame_map_idx(cpi, BWDREF_FRAME)] ==
                            map[cpi->remapped_ref_idx[2]];
-  const int alt2_is_last3 = map[cpi->remapped_ref_idx[ALTREF2_FRAME - 1]] ==
+  const int alt2_is_last3 = map[get_ref_frame_map_idx(cpi, ALTREF2_FRAME)] ==
                             map[cpi->remapped_ref_idx[2]];
 
   // No.5 Priority: GOLDEN_FRAME
-  const int bwd_is_gld = map[cpi->remapped_ref_idx[BWDREF_FRAME - 1]] ==
-                         map[cpi->remapped_ref_idx[GOLDEN_FRAME - 1]];
-  const int alt2_is_gld = map[cpi->remapped_ref_idx[ALTREF2_FRAME - 1]] ==
-                          map[cpi->remapped_ref_idx[GOLDEN_FRAME - 1]];
+  const int bwd_is_gld = map[get_ref_frame_map_idx(cpi, BWDREF_FRAME)] ==
+                         map[get_ref_frame_map_idx(cpi, GOLDEN_FRAME)];
+  const int alt2_is_gld = map[get_ref_frame_map_idx(cpi, ALTREF2_FRAME)] ==
+                          map[get_ref_frame_map_idx(cpi, GOLDEN_FRAME)];
 
   // No.6 Priority: BWDREF_FRAME
-  const int alt2_is_bwd = map[cpi->remapped_ref_idx[ALTREF2_FRAME - 1]] ==
-                          map[cpi->remapped_ref_idx[BWDREF_FRAME - 1]];
+  const int alt2_is_bwd = map[get_ref_frame_map_idx(cpi, ALTREF2_FRAME)] ==
+                          map[get_ref_frame_map_idx(cpi, BWDREF_FRAME)];
 
   // No.7 Priority: ALTREF2_FRAME
 
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index 8b35cae..c7afcb7 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -927,7 +927,9 @@
 
 static INLINE int get_ref_frame_map_idx(const AV1_COMP *cpi,
                                         MV_REFERENCE_FRAME ref_frame) {
-  return (ref_frame >= 1) ? cpi->remapped_ref_idx[ref_frame - 1] : INVALID_IDX;
+  return (ref_frame >= LAST_FRAME)
+             ? cpi->remapped_ref_idx[ref_frame - LAST_FRAME]
+             : INVALID_IDX;
 }
 
 static INLINE int get_ref_frame_buf_idx(const AV1_COMP *cpi,
diff --git a/av1/encoder/firstpass.c b/av1/encoder/firstpass.c
index ca2761e..cd6b5e3 100644
--- a/av1/encoder/firstpass.c
+++ b/av1/encoder/firstpass.c
@@ -1062,8 +1062,8 @@
     if (gld_yv12 != NULL) {
       assign_frame_buffer(
           pool->frame_bufs,
-          &cm->ref_frame_map[cpi->remapped_ref_idx[GOLDEN_FRAME - 1]],
-          cm->ref_frame_map[cpi->remapped_ref_idx[LAST_FRAME - 1]]);
+          &cm->ref_frame_map[get_ref_frame_map_idx(cpi, GOLDEN_FRAME)],
+          cm->ref_frame_map[get_ref_frame_map_idx(cpi, LAST_FRAME)]);
     }
     twopass->sr_update_lag = 1;
   } else {
@@ -1073,18 +1073,19 @@
   aom_extend_frame_borders(new_yv12, num_planes);
 
   // The frame we just compressed now becomes the last frame.
-  assign_frame_buffer(pool->frame_bufs,
-                      &cm->ref_frame_map[cpi->remapped_ref_idx[LAST_FRAME - 1]],
-                      cm->new_fb_idx);
+  assign_frame_buffer(
+      pool->frame_bufs,
+      &cm->ref_frame_map[get_ref_frame_map_idx(cpi, LAST_FRAME)],
+      cm->new_fb_idx);
 
   // Special case for the first frame. Copy into the GF buffer as a second
   // reference.
   if (cm->current_video_frame == 0 &&
-      cpi->remapped_ref_idx[GOLDEN_FRAME - 1] != INVALID_IDX) {
+      get_ref_frame_map_idx(cpi, GOLDEN_FRAME) != INVALID_IDX) {
     assign_frame_buffer(
         pool->frame_bufs,
-        &cm->ref_frame_map[cpi->remapped_ref_idx[GOLDEN_FRAME - 1]],
-        cm->ref_frame_map[cpi->remapped_ref_idx[LAST_FRAME - 1]]);
+        &cm->ref_frame_map[get_ref_frame_map_idx(cpi, GOLDEN_FRAME)],
+        cm->ref_frame_map[get_ref_frame_map_idx(cpi, LAST_FRAME)]);
   }
 
   // Use this to see what the first pass reconstruction looks like.
