diff --git a/av1/encoder/intra_mode_search.c b/av1/encoder/intra_mode_search.c
index 048f5b9..d50f8ea 100644
--- a/av1/encoder/intra_mode_search.c
+++ b/av1/encoder/intra_mode_search.c
@@ -851,7 +851,8 @@
                               BLOCK_SIZE bsize, unsigned int ref_frame_cost,
                               const PICK_MODE_CONTEXT *ctx, RD_STATS *rd_stats,
                               RD_STATS *rd_stats_y, RD_STATS *rd_stats_uv,
-                              int64_t best_rd, int64_t *best_intra_rd) {
+                              int64_t best_rd, int64_t *best_intra_rd,
+                              int64_t *best_pred_rd) {
   const AV1_COMMON *cm = &cpi->common;
   const SPEED_FEATURES *const sf = &cpi->sf;
   MACROBLOCKD *const xd = &x->e_mbd;
@@ -1018,8 +1019,7 @@
   }
 
   for (int i = 0; i < REFERENCE_MODES; ++i) {
-    intra_search_state->best_pred_rd[i] =
-        AOMMIN(intra_search_state->best_pred_rd[i], this_rd);
+    best_pred_rd[i] = AOMMIN(best_pred_rd[i], this_rd);
   }
 
   return this_rd;
diff --git a/av1/encoder/intra_mode_search.h b/av1/encoder/intra_mode_search.h
index 4e52f02..974b3b9 100644
--- a/av1/encoder/intra_mode_search.h
+++ b/av1/encoder/intra_mode_search.h
@@ -66,11 +66,6 @@
   PALETTE_MODE_INFO pmi_uv;   /*!< \brief Color map if mode_uv is palette */
   int8_t uv_angle_delta;      /*!< \brief Angle delta if mode_uv directional */
   /**@}*/
-
-  /*!
-   * \brief Keep track of best intra rd for use in compound mode.
-   */
-  int64_t best_pred_rd[REFERENCE_MODES];
 } IntraModeSearchState;
 
 /*!\brief Evaluate a given intra-mode for inter frames.
@@ -89,24 +84,23 @@
  * support palette mode prediction in the luma channel, but it does search for
  * palette mode in the chroma channel.
  *
- * \param[in]    intra_search_state Structure to hold the best luma intra mode
- *                                  and cache chroma prediction for speed up.
- * \param[in]    cpi                Top-level encoder structure.
- * \param[in]    x                  Pointer to structure holding all the data
- *                                  for the current macroblock.
- * \param[in]    bsize              Current partition block size.
- * \param[in]    ref_frame_cost     The entropy cost for signaling that the
- *                                  current ref frame is an intra frame.
- * \param[in]    ctx                Structure to hold the number of 4x4 blks to
- *                                  copy the tx_type and txfm_skip arrays.
- * \param[in]    rd_stats           Struct to keep track of the current
+ * \param[in,out]    intra_search_state Structure to hold the best luma intra
+ * mode and cache chroma prediction for speed up. \param[in]    cpi Top-level
+ * encoder structure. \param[in,out]    x                  Pointer to structure
+ * holding all the data for the current macroblock. \param[in]    bsize Current
+ * partition block size. \param[in]    ref_frame_cost     The entropy cost for
+ * signaling that the current ref frame is an intra frame. \param[in]    ctx
+ * Structure to hold the number of 4x4 blks to copy the tx_type and txfm_skip
+ * arrays. \param[out]    rd_stats           Struct to keep track of the current
  *                                  intra-mode's rd_stats.
- * \param[in]    rd_stats_y         Struct to keep track of the current
+ * \param[out]    rd_stats_y         Struct to keep track of the current
  *                                  intra-mode's rd_stats (luma only).
- * \param[in]    rd_stats_uv        Struct to keep track of the current
+ * \param[out]    rd_stats_uv        Struct to keep track of the current
  *                                  intra-mode's rd_stats (chroma only).
  * \param[in]    best_rd            Best RD seen for this block so far.
- * \param[in]    best_intra_rd      Best intra RD seen for this block so far.
+ * \param[in,out]    best_intra_rd      Best intra RD seen for this block so
+ * far. \param[out]    best_pred_rd      Array of best pred rd for
+ * single/compound refs.
  *
  * \return Returns the rdcost of the current intra-mode if it's available,
  * otherwise returns INT64_MAX. The corresponding values in x->e_mbd.mi[0],
@@ -121,7 +115,8 @@
                               BLOCK_SIZE bsize, unsigned int ref_frame_cost,
                               const PICK_MODE_CONTEXT *ctx, RD_STATS *rd_stats,
                               RD_STATS *rd_stats_y, RD_STATS *rd_stats_uv,
-                              int64_t best_rd, int64_t *best_intra_rd);
+                              int64_t best_rd, int64_t *best_intra_rd,
+                              int64_t *best_pred_rd);
 
 /*!\brief Evaluate luma palette mode for inter frames.
  *
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 8b131e3..026d9a1 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -317,6 +317,11 @@
   int64_t mode_threshold[MAX_MODES];
   int64_t best_intra_rd;
   unsigned int best_pred_sse;
+
+  /*!
+   * \brief Keep track of best intra rd for use in compound mode.
+   */
+  int64_t best_pred_rd[REFERENCE_MODES];
   int64_t best_pred_diff[REFERENCE_MODES];
   // Save a set of single_newmv for each checked ref_mv.
   int_mv single_newmv[MAX_REF_MV_SEARCH][REF_FRAMES];
@@ -3956,8 +3961,6 @@
   av1_zero(intra_search_state->directional_mode_skip_mask);
   intra_search_state->rate_uv_intra = INT_MAX;
   av1_zero(intra_search_state->pmi_uv);
-  for (int i = 0; i < REFERENCE_MODES; ++i)
-    intra_search_state->best_pred_rd[i] = INT64_MAX;
 }
 
 static AOM_INLINE void init_inter_mode_search_state(
@@ -4042,6 +4045,10 @@
   }
   av1_zero(search_state->single_state_cnt);
   av1_zero(search_state->single_state_modelled_cnt);
+
+  for (int i = 0; i < REFERENCE_MODES; ++i) {
+    search_state->best_pred_rd[i] = INT64_MAX;
+  }
 }
 
 static bool mask_says_skip(const mode_skip_mask_t *mode_skip_mask,
@@ -4881,20 +4888,14 @@
   hybrid_rd = RDCOST(rdmult, hybrid_rate, rd_stats->dist);
 
   if (!comp_pred) {
-    if (single_rd <
-        search_state->intra_search_state.best_pred_rd[SINGLE_REFERENCE])
-      search_state->intra_search_state.best_pred_rd[SINGLE_REFERENCE] =
-          single_rd;
+    if (single_rd < search_state->best_pred_rd[SINGLE_REFERENCE])
+      search_state->best_pred_rd[SINGLE_REFERENCE] = single_rd;
   } else {
-    if (single_rd <
-        search_state->intra_search_state.best_pred_rd[COMPOUND_REFERENCE])
-      search_state->intra_search_state.best_pred_rd[COMPOUND_REFERENCE] =
-          single_rd;
+    if (single_rd < search_state->best_pred_rd[COMPOUND_REFERENCE])
+      search_state->best_pred_rd[COMPOUND_REFERENCE] = single_rd;
   }
-  if (hybrid_rd <
-      search_state->intra_search_state.best_pred_rd[REFERENCE_MODE_SELECT])
-    search_state->intra_search_state.best_pred_rd[REFERENCE_MODE_SELECT] =
-        hybrid_rd;
+  if (hybrid_rd < search_state->best_pred_rd[REFERENCE_MODE_SELECT])
+    search_state->best_pred_rd[REFERENCE_MODE_SELECT] = hybrid_rd;
 }
 
 // Does a transform search over a list of the best inter mode candidates.
@@ -5452,7 +5453,8 @@
     intra_rd_stats.rdcost = av1_handle_intra_mode(
         &search_state.intra_search_state, cpi, x, bsize, intra_ref_frame_cost,
         ctx, &intra_rd_stats, &intra_rd_stats_y, &intra_rd_stats_uv,
-        search_state.best_rd, &search_state.best_intra_rd);
+        search_state.best_rd, &search_state.best_intra_rd,
+        search_state.best_pred_rd);
 
     // Collect mode stats for multiwinner mode processing
     const int txfm_search_done = 1;
@@ -5567,12 +5569,11 @@
   }
 
   for (i = 0; i < REFERENCE_MODES; ++i) {
-    if (search_state.intra_search_state.best_pred_rd[i] == INT64_MAX) {
+    if (search_state.best_pred_rd[i] == INT64_MAX) {
       search_state.best_pred_diff[i] = INT_MIN;
     } else {
       search_state.best_pred_diff[i] =
-          search_state.best_rd -
-          search_state.intra_search_state.best_pred_rd[i];
+          search_state.best_rd - search_state.best_pred_rd[i];
     }
   }
 
