diff --git a/av1/encoder/encode_strategy.c b/av1/encoder/encode_strategy.c
index e9bc75a..0d7973e 100644
--- a/av1/encoder/encode_strategy.c
+++ b/av1/encoder/encode_strategy.c
@@ -933,7 +933,7 @@
   }
   const int apply_filtering =
       oxcf->pass == 2 && frame_params->frame_type == KEY_FRAME &&
-      frame_params->show_frame &&
+      !frame_params->show_existing_frame &&
       cpi->rc.frames_to_key > NUM_KEY_FRAME_DENOISING && noise_level > 0 &&
       !is_lossless_requested(oxcf) && oxcf->arnr_max_frames > 0;
   // Save the pointer to the original source image.
@@ -958,7 +958,12 @@
     av1_frame_init_quantizer(cpi);
     av1_setup_past_independence(cm);
 
-    av1_temporal_filter(cpi, -1, NULL);
+    if (!frame_params->show_frame) {
+      int arf_src_index = get_arf_src_index(&cpi->gf_group, cpi->oxcf.pass);
+      av1_temporal_filter(cpi, -1 * arf_src_index, NULL);
+    } else {
+      av1_temporal_filter(cpi, -1, NULL);
+    }
     aom_extend_frame_borders(&cpi->alt_ref_buffer, num_planes);
     // Use the filtered frame for encoding.
     frame_input->source = &cpi->alt_ref_buffer;
diff --git a/av1/encoder/temporal_filter.c b/av1/encoder/temporal_filter.c
index 5f2af82..f8a318c1 100644
--- a/av1/encoder/temporal_filter.c
+++ b/av1/encoder/temporal_filter.c
@@ -1572,14 +1572,24 @@
     return 0;
   }
 
-  if (distance == -1) {
-    // Apply temporal filtering on key frame.
-    strength = estimate_strength(cpi, distance, rc->gfu_boost, &sigma);
-    // Number of frames for temporal filtering, could be tuned.
+  if (distance < 0) {
     frames_to_blur = NUM_KEY_FRAME_DENOISING;
-    frames_to_blur_backward = 0;
-    frames_to_blur_forward = frames_to_blur - 1;
-    start_frame = distance + frames_to_blur_forward;
+    if (distance == -1) {
+      // Apply temporal filtering on key frame.
+      strength = estimate_strength(cpi, distance, rc->gfu_boost, &sigma);
+      // Number of frames for temporal filtering, could be tuned.
+      frames_to_blur_backward = 0;
+      frames_to_blur_forward = frames_to_blur - 1;
+      start_frame = distance + frames_to_blur_forward;
+    } else {
+      // Apply temporal filtering on forward key frame. This requires filtering
+      // backwards rather than forwards.
+      strength = estimate_strength(cpi, -1 * distance, rc->gfu_boost, &sigma);
+      // Number of frames for temporal filtering, could be tuned.
+      frames_to_blur_backward = frames_to_blur - 1;
+      frames_to_blur_forward = 0;
+      start_frame = -1 * distance;
+    }
   } else {
     adjust_arnr_filter(cpi, distance, rc->gfu_boost, &frames_to_blur, &strength,
                        &sigma, &frames_to_blur_backward,
@@ -1613,9 +1623,9 @@
 
   FRAME_DIFF diff = temporal_filter_iterate_c(cpi, frames, frames_to_blur,
                                               frames_to_blur_backward, strength,
-                                              sigma, distance == -1, &sf);
+                                              sigma, distance < 0, &sf);
 
-  if (distance == -1) return 1;
+  if (distance < 0) return 1;
 
   if (show_existing_alt_ref != NULL && cpi->sf.adaptive_overlay_encoding) {
     AV1_COMMON *const cm = &cpi->common;
