diff --git a/av1/encoder/encode_strategy.c b/av1/encoder/encode_strategy.c
index 006bc36..2f2b3c7 100644
--- a/av1/encoder/encode_strategy.c
+++ b/av1/encoder/encode_strategy.c
@@ -199,29 +199,6 @@
   return gf_group->update_type[gf_group->index];
 }
 
-// Note: the parameters related to OVERLAY_UPDATE will be taken care of in
-// av1_get_second_pass_params().
-static void check_show_existing_frame(AV1_COMP *const cpi,
-                                      EncodeFrameParams *const frame_params) {
-  const GF_GROUP *const gf_group = &cpi->gf_group;
-  assert(gf_group->index <= gf_group->size);
-  (void)gf_group;
-  AV1_COMMON *const cm = &cpi->common;
-  if (cm->show_existing_frame == 1) {
-    frame_params->show_existing_frame = 0;
-  } else {
-    const FRAME_UPDATE_TYPE frame_update_type = get_frame_update_type(cpi);
-    if (frame_update_type == INTNL_OVERLAY_UPDATE) {
-      frame_params->show_existing_frame = 1;
-      frame_params->existing_fb_idx_to_show =
-          get_ref_frame_map_idx(cm, BWDREF_FRAME);
-
-    } else {
-      frame_params->show_existing_frame = 0;
-    }
-  }
-}
-
 static void set_ext_overrides(AV1_COMP *const cpi,
                               EncodeFrameParams *const frame_params) {
   // Overrides the defaults with the externally supplied values with
@@ -1158,6 +1135,7 @@
                         int flush) {
   const AV1EncoderConfig *const oxcf = &cpi->oxcf;
   AV1_COMMON *const cm = &cpi->common;
+  GF_GROUP *gf_group = &cpi->gf_group;
 
   EncodeFrameInput frame_input;
   EncodeFrameParams frame_params;
@@ -1171,7 +1149,8 @@
     cpi->oxcf.gf_max_pyr_height = USE_ALTREF_FOR_ONE_PASS;
 
   if (oxcf->pass == 0 || oxcf->pass == 2) {
-    check_show_existing_frame(cpi, &frame_params);
+    frame_params.show_existing_frame =
+        gf_group->update_type[gf_group->index] == INTNL_OVERLAY_UPDATE;
     frame_params.show_existing_frame &= allow_show_existing(cpi, *frame_flags);
   } else {
     frame_params.show_existing_frame = 0;
@@ -1322,6 +1301,11 @@
 
     frame_params.refresh_frame_flags = av1_get_refresh_frame_flags(
         cpi, &frame_params, frame_update_type, &cpi->ref_buffer_stack);
+
+    frame_params.existing_fb_idx_to_show =
+        frame_params.show_existing_frame
+            ? get_ref_frame_map_idx(cm, BWDREF_FRAME)
+            : INVALID_IDX;
   }
 
   // The way frame_params->remapped_ref_idx is setup is a placeholder.
diff --git a/av1/encoder/gop_structure.c b/av1/encoder/gop_structure.c
index df0001b..c694a14 100644
--- a/av1/encoder/gop_structure.c
+++ b/av1/encoder/gop_structure.c
@@ -132,6 +132,11 @@
   assert(next_height >= MIN_PYRAMID_LVL);
   set_multi_layer_params(cpi, gf_group, 0, gf_interval, &frame_index, 0,
                          next_height, use_altref + 1);
+
+  // The end frame will be Overlay frame for an ARF GOP; otherwise set it to
+  // be GF, for consistency, which will be updated in the next GOP.
+  gf_group->update_type[frame_index] = use_altref ? OVERLAY_UPDATE : GF_UPDATE;
+  gf_group->arf_src_offset[frame_index] = 0;
   return frame_index;
 }
 
diff --git a/av1/encoder/tpl_model.c b/av1/encoder/tpl_model.c
index 2fe8800..9756328 100644
--- a/av1/encoder/tpl_model.c
+++ b/av1/encoder/tpl_model.c
@@ -635,11 +635,6 @@
   for (gf_index = cur_frame_idx; gf_index <= gop_length; ++gf_index) {
     TplDepFrame *tpl_frame = &cpi->tpl_frame[gf_index];
     FRAME_UPDATE_TYPE frame_update_type = gf_group->update_type[gf_index];
-    if (gf_index == gf_group->size) {
-      frame_update_type = INTNL_OVERLAY_UPDATE;
-      gf_group->update_type[gf_index] = frame_update_type;
-      gf_group->q_val[gf_index] = gf_group->q_val[1];
-    }
 
     frame_params.show_frame = frame_update_type != ARF_UPDATE &&
                               frame_update_type != INTNL_ARF_UPDATE;
@@ -768,14 +763,11 @@
     // Backward propagation from tpl_group_frames to 1.
     for (int frame_idx = cpi->tpl_gf_group_frames - 1;
          frame_idx >= gf_group->index; --frame_idx) {
-      int is_process = 1;
+      if (gf_group->update_type[frame_idx] == INTNL_OVERLAY_UPDATE ||
+          gf_group->update_type[frame_idx] == OVERLAY_UPDATE)
+        continue;
 
-      if (frame_idx == gf_group->size) is_process = 0;
-      if (frame_idx < gf_group->size)
-        if (gf_group->update_type[frame_idx] == INTNL_OVERLAY_UPDATE)
-          is_process = 0;
-
-      if (is_process) mc_flow_dispenser(cpi, frame_idx);
+      mc_flow_dispenser(cpi, frame_idx);
     }
   }
 
