diff --git a/apps/qmode_rc_encoder.cc b/apps/qmode_rc_encoder.cc
index 8e7c3a6..b4a4263 100644
--- a/apps/qmode_rc_encoder.cc
+++ b/apps/qmode_rc_encoder.cc
@@ -24,7 +24,7 @@
   std::string input_file = "/export/hda3/Videos/derf/bus_cif.y4m";
   aom_rational_t frame_rate = { 30, 1 };
   aom::VideoInfo input_video = { 352, 288,       frame_rate, AOM_IMG_FMT_I420,
-                                 55,  input_file };
+                                 25,  input_file };
   aom::DuckyEncode ducky_encode(input_video);
   aom::AV1RateControlQMode qmode_rc;
   aom::RateControlParam rc_param = {};
@@ -33,6 +33,7 @@
   rc_param.max_gop_show_frame_count = 16;
   rc_param.min_gop_show_frame_count = 4;
   rc_param.ref_frame_table_size = 7;
+  rc_param.base_q_index = 128;
 
   const aom::Status status = qmode_rc.SetRcParam(rc_param);
 
@@ -66,25 +67,21 @@
 
     // TODO(jingning): Extract the tpl stats through ducky_encode and make
     // frame encoding decisions.
-    aom::GopEncodeInfo gop_encode_info;
-    // = qmode_rc.GetGopEncodeInfo(gop_struct, tpl_gop_stats, ref_frame_table);
+    aom::GopEncodeInfo gop_encode_info =
+        qmode_rc.GetGopEncodeInfo(gop_struct, tpl_gop_stats, ref_frame_table);
     ref_frame_table = gop_encode_info.final_snapshot;
     gop_encode_info_list.push_back(gop_encode_info);
   }
-
   ducky_encode.EndEncode();
 
   fprintf(stderr, "tpl stats completed.\n");
 
-  // TODO(jingning): Re-enable the next final encoding stage once the TPL stats
-  // collection is done.
-  return 0;
-
   // Full encoding of the video sequence.
   // Do binary search with rc_param.base_q_index around this block.
   ducky_encode.StartEncode(frame_stats);
   ducky_encode.EncodeVideo(gop_list, gop_encode_info_list);
   ducky_encode.EndEncode();
 
+  fprintf(stderr, "final encoding completed.\n");
   return 0;
 }
diff --git a/av1/ducky_encode.cc b/av1/ducky_encode.cc
index 8919531..449c349 100644
--- a/av1/ducky_encode.cc
+++ b/av1/ducky_encode.cc
@@ -356,13 +356,15 @@
   const uint8_t block_mis_log2 = ppi->tpl_data.tpl_stats_block_mis_log2;
 
   for (size_t idx = 0; idx < gop_struct.gop_frame_list.size(); ++idx) {
-    TplFrameStats tpl_frame_stats;
+    TplFrameStats tpl_frame_stats = {};
     TplDepFrame *tpl_frame = &ppi->tpl_data.tpl_frame[idx];
 
     if (gop_struct.gop_frame_list[idx].update_type == GopFrameType::kOverlay ||
         gop_struct.gop_frame_list[idx].update_type ==
-            GopFrameType::kIntermediateOverlay)
+            GopFrameType::kIntermediateOverlay) {
+      tpl_gop_stats.frame_stats_list.push_back(tpl_frame_stats);
       continue;
+    }
 
     const int mi_rows = tpl_frame->mi_rows;
     const int mi_cols = tpl_frame->mi_cols;
diff --git a/av1/ratectrl_qmode.cc b/av1/ratectrl_qmode.cc
index 18b3d62..02824d3 100644
--- a/av1/ratectrl_qmode.cc
+++ b/av1/ratectrl_qmode.cc
@@ -1091,10 +1091,12 @@
 
 TplGopDepStats ComputeTplGopDepStats(
     const TplGopStats &tpl_gop_stats,
-    const std::vector<RefFrameTable> &ref_frame_table_list,
-    const int frame_count) {
+    const std::vector<RefFrameTable> &ref_frame_table_list) {
+  const int frame_count =
+      static_cast<int>(tpl_gop_stats.frame_stats_list.size());
   // Create the struct to store TPL dependency stats
   TplGopDepStats tpl_gop_dep_stats;
+
   for (int coding_idx = 0; coding_idx < frame_count; coding_idx++) {
     tpl_gop_dep_stats.frame_dep_stats_list.push_back(
         CreateTplFrameDepStatsWithoutPropagation(
@@ -1135,29 +1137,37 @@
 
   GopEncodeInfo gop_encode_info;
   gop_encode_info.final_snapshot = ref_frame_table_list.back();
-  TplGopDepStats gop_dep_stats = ComputeTplGopDepStats(
-      tpl_gop_stats, ref_frame_table_list, gop_struct.show_frame_count);
+  TplGopDepStats gop_dep_stats =
+      ComputeTplGopDepStats(tpl_gop_stats, ref_frame_table_list);
   const int frame_count =
       static_cast<int>(tpl_gop_stats.frame_stats_list.size());
   for (int i = 0; i < frame_count; i++) {
-    const TplFrameDepStats &frame_dep_stats =
-        gop_dep_stats.frame_dep_stats_list[i];
-    const double cost_without_propagation =
-        TplFrameDepStatsAccumulateIntraCost(frame_dep_stats);
-    const double cost_with_propagation =
-        TplFrameDepStatsAccumulate(frame_dep_stats);
-    const double frame_importance =
-        cost_with_propagation / cost_without_propagation;
-    // Imitate the behavior of av1_tpl_get_qstep_ratio()
-    const double qstep_ratio = sqrt(1 / frame_importance);
     FrameEncodeParameters param;
-    param.q_index = av1_get_q_index_from_qstep_ratio(rc_param_.base_q_index,
-                                                     qstep_ratio, AOM_BITS_8);
     const GopFrame &gop_frame = gop_struct.gop_frame_list[i];
-    if (gop_frame.is_key_frame) {
-      // TODO(jianj): QP for key frame could be 0 when base q index is set very
-      // low. Tune the calculation for frame_importance. Cap it at 1 for now.
-      param.q_index = AOMMAX(param.q_index, 1);
+
+    if (gop_frame.update_type == GopFrameType::kOverlay ||
+        gop_frame.update_type == GopFrameType::kIntermediateOverlay) {
+      param.q_index = rc_param_.base_q_index;
+    } else {
+      const TplFrameDepStats &frame_dep_stats =
+          gop_dep_stats.frame_dep_stats_list[i];
+      const double cost_without_propagation =
+          TplFrameDepStatsAccumulateIntraCost(frame_dep_stats);
+      const double cost_with_propagation =
+          TplFrameDepStatsAccumulate(frame_dep_stats);
+      const double frame_importance =
+          cost_with_propagation / cost_without_propagation;
+      // Imitate the behavior of av1_tpl_get_qstep_ratio()
+      const double qstep_ratio = sqrt(1 / frame_importance);
+      param.q_index = av1_get_q_index_from_qstep_ratio(rc_param_.base_q_index,
+                                                       qstep_ratio, AOM_BITS_8);
+
+      if (gop_frame.is_key_frame) {
+        // TODO(jianj): QP for key frame could be 0 when base q index is set
+        // very low. Tune the calculation for frame_importance. Cap it at 1 for
+        // now.
+        param.q_index = AOMMAX(param.q_index, 1);
+      }
     }
     param.rdmult = GetRDMult(gop_frame, param.q_index);
     gop_encode_info.param_list.push_back(param);
diff --git a/av1/ratectrl_qmode.h b/av1/ratectrl_qmode.h
index cceb217..4517d2d 100644
--- a/av1/ratectrl_qmode.h
+++ b/av1/ratectrl_qmode.h
@@ -81,8 +81,7 @@
 
 TplGopDepStats ComputeTplGopDepStats(
     const TplGopStats &tpl_gop_stats,
-    const std::vector<RefFrameTable> &ref_frame_table_list,
-    const int frame_count);
+    const std::vector<RefFrameTable> &ref_frame_table_list);
 
 class AV1RateControlQMode : public AV1RateControlQModeInterface {
  public:
diff --git a/test/ratectrl_qmode_test.cc b/test/ratectrl_qmode_test.cc
index 5b9aa99..d2eb25c 100644
--- a/test/ratectrl_qmode_test.cc
+++ b/test/ratectrl_qmode_test.cc
@@ -626,8 +626,8 @@
 
     ref_frame_table_list.push_back(CreateToyRefFrameTable(i));
   }
-  const TplGopDepStats &gop_dep_stats = ComputeTplGopDepStats(
-      tpl_gop_stats, ref_frame_table_list, gop_struct.show_frame_count);
+  const TplGopDepStats &gop_dep_stats =
+      ComputeTplGopDepStats(tpl_gop_stats, ref_frame_table_list);
 
   double expected_sum = 0;
   for (int i = 2; i >= 0; i--) {
