diff --git a/av1/encoder/encode_strategy.c b/av1/encoder/encode_strategy.c
index 667951d..6bd325a 100644
--- a/av1/encoder/encode_strategy.c
+++ b/av1/encoder/encode_strategy.c
@@ -910,7 +910,7 @@
     // Unfortunately the encoder interface reflects the old refresh_*_frame
     // flags so we have to replicate the old refresh_frame_flags logic here in
     // order to preserve the behaviour of the flag overrides.
-    int ref_frame_map_idx = get_ref_frame_map_idx(cm, LAST3_FRAME);
+    int ref_frame_map_idx = get_ref_frame_map_idx(cm, LAST_FRAME);
     if (ref_frame_map_idx != INVALID_IDX)
       refresh_mask |= cpi->ext_refresh_last_frame << ref_frame_map_idx;
 
diff --git a/examples/svc_encoder_rtc.c b/examples/svc_encoder_rtc.c
index c5d97cd..2e9d5fc 100644
--- a/examples/svc_encoder_rtc.c
+++ b/examples/svc_encoder_rtc.c
@@ -30,7 +30,7 @@
 
 void usage_exit(void) { exit(EXIT_FAILURE); }
 
-static int mode_to_num_layers[4] = { 1, 2, 3, 3 };
+static int mode_to_num_layers[5] = { 1, 2, 3, 3, 2 };
 
 // For rate control encoding stats.
 struct RateControlMetrics {
@@ -238,8 +238,10 @@
 // Layer pattern configuration.
 static int set_layer_pattern(int layering_mode, int frame_cnt,
                              aom_svc_layer_id_t *layer_id,
-                             aom_svc_ref_frame_config_t *ref_frame_config) {
+                             aom_svc_ref_frame_config_t *ref_frame_config,
+                             int *use_svc_control) {
   int i;
+  *use_svc_control = 1;
   // No spatial layers in this test.
   layer_id->spatial_layer_id = 0;
   // Set the referende map buffer idx for the 7 references:
@@ -327,6 +329,22 @@
         layer_flags |= AOM_EFLAG_NO_REF_LAST;
       }
       break;
+    case 4:
+      // 2-layer with the old update flags, not with the new SVC control.
+      *use_svc_control = 0;
+      //    1    3    5
+      //  0    2    4
+      if (frame_cnt % 2 == 0) {
+        layer_id->temporal_layer_id = 0;
+        // Update LAST on layer 0, reference LAST and GF.
+        layer_flags |= AOM_EFLAG_NO_UPD_GF | AOM_EFLAG_NO_UPD_ARF;
+      } else {
+        layer_id->temporal_layer_id = 1;
+        // No updates on layer 1, only reference LAST (TL0).
+        layer_flags |= AOM_EFLAG_NO_UPD_LAST | AOM_EFLAG_NO_UPD_GF |
+                       AOM_EFLAG_NO_UPD_ARF | AOM_EFLAG_NO_REF_GF;
+      }
+      break;
     default: assert(0); die("Error: Unsupported temporal layering mode!\n");
   }
   return layer_flags;
@@ -362,6 +380,7 @@
   double sum_bitrate = 0.0;
   double sum_bitrate2 = 0.0;
   double framerate = 30.0;
+  int use_svc_control = 1;
   zero(rc.layer_target_bitrate);
   memset(&layer_id, 0, sizeof(aom_svc_layer_id_t));
   memset(&input_ctx, 0, sizeof(input_ctx));
@@ -549,9 +568,11 @@
     // Set the reference/update flags, layer_id, and reference_map
     // buffer index.
     flags = set_layer_pattern(layering_mode, frame_cnt, &layer_id,
-                              &ref_frame_config);
+                              &ref_frame_config, &use_svc_control);
     aom_codec_control(&codec, AV1E_SET_SVC_LAYER_ID, &layer_id);
-    aom_codec_control(&codec, AV1E_SET_SVC_REF_FRAME_CONFIG, &ref_frame_config);
+    if (use_svc_control)
+      aom_codec_control(&codec, AV1E_SET_SVC_REF_FRAME_CONFIG,
+                        &ref_frame_config);
 
     frame_avail = read_frame(&input_ctx, &raw);
     if (frame_avail) ++rc.layer_input_frames[layer_id.temporal_layer_id];
