diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 9e301b5518bf465f35cf3983e0aeed35ba899801..1584202dd4b9e02553bf88e1418bcf7003a33302 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -9428,6 +9428,9 @@ void av1_rd_pick_inter_mode_sb(const AV1_COMP *cpi, TileDataEnc *tile_data,
       skippable = rd_stats_y.skip;
 
 #if CONFIG_FILTER_INTRA
+      uint8_t best_blk_skip[MAX_MIB_SIZE * MAX_MIB_SIZE * 8];
+      memcpy(best_blk_skip, x->blk_skip[0], sizeof(uint8_t) * ctx->num_4x4_blk);
+
       if (mbmi->mode == DC_PRED && !xd->lossless[mbmi->segment_id]) {
         RD_STATS rd_stats_y_fi;
         int filter_intra_selected_flag = 0;
@@ -9472,6 +9475,8 @@ void av1_rd_pick_inter_mode_sb(const AV1_COMP *cpi, TileDataEnc *tile_data,
                    sizeof(*best_txk_type) *
                        (MAX_SB_SQUARE / (TX_SIZE_W_MIN * TX_SIZE_H_MIN)));
 #endif
+            memcpy(best_blk_skip, x->blk_skip[0],
+                   sizeof(uint8_t) * ctx->num_4x4_blk);
             best_fi_mode = fi_mode;
             rd_stats_y = rd_stats_y_fi;
             rate_y = rd_stats_y_fi.rate;
@@ -9489,6 +9494,9 @@ void av1_rd_pick_inter_mode_sb(const AV1_COMP *cpi, TileDataEnc *tile_data,
                sizeof(*best_txk_type) *
                    (MAX_SB_SQUARE / (TX_SIZE_W_MIN * TX_SIZE_H_MIN)));
 #endif
+        memcpy(x->blk_skip[0], best_blk_skip,
+               sizeof(uint8_t) * ctx->num_4x4_blk);
+
         if (filter_intra_selected_flag) {
           mbmi->filter_intra_mode_info.use_filter_intra = 1;
           mbmi->filter_intra_mode_info.filter_intra_mode = best_fi_mode;
@@ -10266,6 +10274,9 @@ void av1_rd_pick_inter_mode_sb(const AV1_COMP *cpi, TileDataEnc *tile_data,
       best_mbmode = *mbmi;
       best_skip2 = 0;
       best_mode_skippable = skippable;
+      for (i = 0; i < MAX_MB_PLANE; ++i)
+        memcpy(ctx->blk_skip[i], x->blk_skip[i],
+               sizeof(uint8_t) * ctx->num_4x4_blk);
     }
   }
 PALETTE_EXIT: