diff --git a/av1/encoder/block.h b/av1/encoder/block.h
index 200ddbb..3f93a8e 100644
--- a/av1/encoder/block.h
+++ b/av1/encoder/block.h
@@ -324,7 +324,6 @@
 
   // Force the coding block to skip transform and quantization.
   int force_skip;
-  int skip_chroma_rd;
   int skip_cost[SKIP_CONTEXTS][2];
 
   int skip_mode;  // 0: off; 1: on
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index 4df5647..8dda309 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -784,7 +784,6 @@
   mbmi->skip = 0;
   // Reset skip mode flag.
   mbmi->skip_mode = 0;
-  x->skip_chroma_rd = !xd->is_chroma_ref;
 
   if (is_cur_buf_hbd(xd)) {
     x->source_variance = av1_high_get_sby_perpixel_variance(
diff --git a/av1/encoder/intra_mode_search.c b/av1/encoder/intra_mode_search.c
index f2b88b9..88f11ff 100644
--- a/av1/encoder/intra_mode_search.c
+++ b/av1/encoder/intra_mode_search.c
@@ -1196,7 +1196,7 @@
   // Use an estimated rd for uv_intra based on DC_PRED if the
   // appropriate speed flag is set.
   init_sbuv_mode(mbmi);
-  if (x->skip_chroma_rd) {
+  if (!xd->is_chroma_ref) {
     *rate_uv = 0;
     *rate_uv_tokenonly = 0;
     *dist_uv = 0;
@@ -1887,7 +1887,7 @@
     // not the tokenonly rate.
     rd_stats_y->rate -= tx_size_cost(x, bsize, mbmi->tx_size);
   }
-  if (num_planes > 1 && !x->skip_chroma_rd) {
+  if (num_planes > 1 && xd->is_chroma_ref) {
     const int uv_mode_cost =
         x->intra_uv_mode_cost[is_cfl_allowed(xd)][mode][mbmi->uv_mode];
     rd_stats->rate +=
diff --git a/av1/encoder/model_rd.h b/av1/encoder/model_rd.h
index 9fc96fc..1ca636d 100644
--- a/av1/encoder/model_rd.h
+++ b/av1/encoder/model_rd.h
@@ -163,6 +163,7 @@
   assert(bsize < BLOCK_SIZES_ALL);
 
   for (plane = plane_from; plane <= plane_to; ++plane) {
+    if (plane && !xd->is_chroma_ref) break;
     struct macroblock_plane *const p = &x->plane[plane];
     struct macroblockd_plane *const pd = &xd->plane[plane];
     const BLOCK_SIZE plane_bsize =
@@ -174,8 +175,6 @@
     int rate;
     int64_t dist;
 
-    if (x->skip_chroma_rd && plane) continue;
-
     sse = calculate_sse(xd, p, pd, bw, bh);
 
     model_rd_from_sse(cpi, x, plane_bsize, plane, sse, bw * bh, &rate, &dist);
@@ -213,14 +212,12 @@
   int64_t total_sse = 0;
 
   for (int plane = plane_from; plane <= plane_to; ++plane) {
+    if (plane && !xd->is_chroma_ref) break;
     struct macroblockd_plane *const pd = &xd->plane[plane];
     const BLOCK_SIZE plane_bsize =
         get_plane_block_size(bsize, pd->subsampling_x, pd->subsampling_y);
     int64_t dist, sse;
     int rate;
-
-    if (x->skip_chroma_rd && plane) continue;
-
     int bw, bh;
     const struct macroblock_plane *const p = &x->plane[plane];
     get_txb_dimensions(xd, plane, plane_bsize, 0, 0, plane_bsize, NULL, NULL,
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 2585863..2188751 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -616,14 +616,13 @@
   const MB_MODE_INFO *mbmi = xd->mi[0];
   int64_t total_sse = 0;
   for (int plane = 0; plane < num_planes; ++plane) {
+    if (plane && !xd->is_chroma_ref) break;
     const struct macroblock_plane *const p = &x->plane[plane];
     const struct macroblockd_plane *const pd = &xd->plane[plane];
     const BLOCK_SIZE bs = get_plane_block_size(mbmi->sb_type, pd->subsampling_x,
                                                pd->subsampling_y);
     unsigned int sse;
 
-    if (x->skip_chroma_rd && plane) continue;
-
     cpi->fn_ptr[bs].vf(p->src.buf, p->src.stride, pd->dst.buf, pd->dst.stride,
                        &sse);
     total_sse += sse;
@@ -2628,7 +2627,6 @@
   int rate_y = 0, rate_uv = 0, rate_y_tokenonly = 0, rate_uv_tokenonly = 0;
   int y_skip = 0, uv_skip = 0;
   int64_t dist_y = 0, dist_uv = 0;
-  TX_SIZE max_uv_tx_size;
 
   ctx->rd_stats.skip = 0;
   mbmi->ref_frame[0] = INTRA_FRAME;
@@ -2660,11 +2658,12 @@
       xd->cfl.store_y = 0;
     }
     if (num_planes > 1) {
-      max_uv_tx_size = av1_get_tx_size(AOM_PLANE_U, xd);
       init_sbuv_mode(mbmi);
-      if (!x->skip_chroma_rd)
+      if (xd->is_chroma_ref) {
+        const TX_SIZE max_uv_tx_size = av1_get_tx_size(AOM_PLANE_U, xd);
         av1_rd_pick_intra_sbuv_mode(cpi, x, &rate_uv, &rate_uv_tokenonly,
                                     &dist_uv, &uv_skip, bsize, max_uv_tx_size);
+      }
     }
 
     // Intra block is always coded as non-skip
diff --git a/av1/encoder/rdopt_utils.h b/av1/encoder/rdopt_utils.h
index f30e760..0be3d25 100644
--- a/av1/encoder/rdopt_utils.h
+++ b/av1/encoder/rdopt_utils.h
@@ -504,7 +504,7 @@
                                                       const MACROBLOCK *x) {
   const MACROBLOCKD *xd = &x->e_mbd;
 
-  if (cm->seq_params.monochrome || x->skip_chroma_rd) return CFL_DISALLOWED;
+  if (cm->seq_params.monochrome || !xd->is_chroma_ref) return CFL_DISALLOWED;
 
   if (!xd->cfl.is_chroma_reference) {
     // For non-chroma-reference blocks, we should always store the luma pixels,
diff --git a/av1/encoder/tx_search.c b/av1/encoder/tx_search.c
index d1a2d57..ee85454 100644
--- a/av1/encoder/tx_search.c
+++ b/av1/encoder/tx_search.c
@@ -3347,7 +3347,7 @@
   av1_init_rd_stats(rd_stats);
   int is_cost_valid = 1;
   if (ref_best_rd < 0) is_cost_valid = 0;
-  if (x->skip_chroma_rd || !is_cost_valid) return is_cost_valid;
+  if (!x->e_mbd.is_chroma_ref || !is_cost_valid) return is_cost_valid;
 
   MACROBLOCKD *const xd = &x->e_mbd;
   MB_MODE_INFO *const mbmi = xd->mi[0];
