diff --git a/vp9/common/vp9_reconintra.c b/vp9/common/vp9_reconintra.c
index 9e580c7f62fa0a85ded421d71451c9364de439ba..ea4805f3374822cdfd12549015bd3ae562ef356e 100644
--- a/vp9/common/vp9_reconintra.c
+++ b/vp9/common/vp9_reconintra.c
@@ -378,19 +378,21 @@ void vp9_build_intra_predictors_sby_s(MACROBLOCKD *xd,
 
 void vp9_build_intra_predictors_sbuv_s(MACROBLOCKD *xd,
                                        BLOCK_SIZE_TYPE bsize) {
-  const int bwl = b_width_log2(bsize), bw = 2 << bwl;
-  const int bhl = b_height_log2(bsize), bh = 2 << bhl;
+  int p;
 
-  vp9_build_intra_predictors(xd->plane[1].dst.buf, xd->plane[1].dst.stride,
-                             xd->plane[1].dst.buf, xd->plane[1].dst.stride,
-                             xd->mode_info_context->mbmi.uv_mode,
-                             bw, bh, xd->up_available,
-                             xd->left_available, 0 /*xd->right_available*/);
-  vp9_build_intra_predictors(xd->plane[2].dst.buf, xd->plane[1].dst.stride,
-                             xd->plane[2].dst.buf, xd->plane[1].dst.stride,
-                             xd->mode_info_context->mbmi.uv_mode,
-                             bw, bh, xd->up_available,
-                             xd->left_available, 0 /*xd->right_available*/);
+  for (p = 1; p < MAX_MB_PLANE; p++) {
+    const struct macroblockd_plane* const pd = &xd->plane[p];
+    const int bwl = b_width_log2(bsize) - pd->subsampling_x;
+    const int bw = 4 << bwl;
+    const int bhl = b_height_log2(bsize) - pd->subsampling_y;
+    const int bh = 4 << bhl;
+
+    vp9_build_intra_predictors(pd->dst.buf, pd->dst.stride,
+                               pd->dst.buf, pd->dst.stride,
+                               xd->mode_info_context->mbmi.uv_mode,
+                               bw, bh, xd->up_available,
+                               xd->left_available, 0 /*xd->right_available*/);
+  }
 }
 
 void vp9_intra4x4_predict(MACROBLOCKD *xd,