diff --git a/av1/common/cfl.c b/av1/common/cfl.c
index c2ce88b..853ee1d 100644
--- a/av1/common/cfl.c
+++ b/av1/common/cfl.c
@@ -44,13 +44,15 @@
   assert(pred_plane < CFL_PRED_PLANES);
   assert(width <= CFL_BUF_LINE);
 
-  memcpy(xd->cfl.dc_pred_cache[pred_plane], input, width << 1);
+  memcpy(xd->cfl.dc_pred_cache[pred_plane], input,
+         width << xd->cfl.subsampling_x);
   return;
 }
 
 static void cfl_load_dc_pred_hbd(const int16_t *dc_pred_cache, uint16_t *dst,
-                                 int dst_stride, int width, int height) {
-  const size_t num_bytes = width << 1;
+                                 int dst_stride, int width, int height,
+                                 int sub_x) {
+  const size_t num_bytes = width << sub_x;
   for (int j = 0; j < height; j++) {
     memcpy(dst, dc_pred_cache, num_bytes);
     dst += dst_stride;
@@ -64,7 +66,7 @@
   assert(width <= CFL_BUF_LINE);
   assert(height <= CFL_BUF_LINE);
   cfl_load_dc_pred_hbd(xd->cfl.dc_pred_cache[pred_plane], dst, dst_stride,
-                       width, height);
+                       width, height, xd->cfl.subsampling_x);
 }
 
 // Due to frame boundary issues, it is possible that the total area covered by
@@ -956,10 +958,14 @@
         A[0][count] = (l[i + j * ref_stride] >> 3);  // C
         if (dir == 0) {
           A[1][count] = (l[i + (j - 1) * ref_stride] >> 3);  // N 1, -1
-          A[2][count] = (l[i + (j + 1) * ref_stride] >> 3);  // S 1,  1
+          A[2][count] = (i >= left_lines && j + 1 >= above_lines)
+                            ? (l[i + (j)*ref_stride] >> 3)
+                            : (l[i + (j + 1) * ref_stride] >> 3);  // S 1,  1
         } else {
           A[1][count] = (l[(i - 1) + j * ref_stride] >> 3);  // W 1, -1
-          A[2][count] = (l[(i + 1) + j * ref_stride] >> 3);  // E 1,  1
+          A[2][count] = (i + 1 >= left_lines && j >= above_lines)
+                            ? (l[(i) + j * ref_stride] >> 3)
+                            : (l[(i + 1) + j * ref_stride] >> 3);  // E 1,  1
         }
         A[3][count] = NON_LINEAR((l[i + j * ref_stride] >> 3), mid, xd->bd);
         A[4][count] = mid;
@@ -1012,7 +1018,7 @@
           ATA[coli0][coli1] >>= matrixShift;
 
       for (int coli = 0; coli < MHCCP_NUM_PARAMS; coli++)
-        Ty[coli] <<= matrixShift;
+        Ty[coli] >>= matrixShift;
     }
     int64_t U[MHCCP_NUM_PARAMS][MHCCP_NUM_PARAMS];
     int64_t diag[MHCCP_NUM_PARAMS];
diff --git a/av1/common/reconintra.c b/av1/common/reconintra.c
index a26b039..b6dba3d 100644
--- a/av1/common/reconintra.c
+++ b/av1/common/reconintra.c
@@ -2143,32 +2143,43 @@
     }
 #if CONFIG_ADPTIVE_DS_422
     else if (sub_x) {
-      input = dst - input_stride;
-      for (int i = 0; i < width; i += 2) {
+      for (int h = 0; h < (*ref_height); h++) {
+        for (int i = 0; i < (*ref_width); i += 2) {
 #if CONFIG_ADAPTIVE_DS_FILTER
-        const int filter_type = cm->seq_params.enable_cfl_ds_filter;
-        if (filter_type == 1) {
-          output_q3[i >> 1] =
-              (input[AOMMAX(0, i - 1)] + 2 * input[i] + input[i + 1]) << 1;
-        } else if (filter_type == 2) {
-          output_q3[i >> 1] = input[i] << 3;
-        } else {
-          output_q3[i >> 1] = (input[i] + input[i + 1]) << 2;
-        }
+          const int filter_type = cm->seq_params.enable_cfl_ds_filter;
+          if (filter_type == 1) {
+            output_q3[i >> 1] =
+                (input[AOMMAX(0, i - 1)] + 2 * input[i] + input[i + 1]) << 1;
+          } else if (filter_type == 2) {
+            output_q3[i >> 1] = input[i] << 3;
+          } else {
+            output_q3[i >> 1] = (input[i] + input[i + 1]) << 2;
+          }
 #else
-        output_q3[i >> 1] = input[i] << 3;
+          output_q3[i >> 1] = input[i] << 3;
 #endif  // CONFIG_ADAPTIVE_DS_FILTER
+        }
+        output_q3 += output_stride;
+        input += input_stride;
       }
-#endif                   // CONFIG_ADPTIVE_DS_422
-    } else if (sub_y) {  // @todo extend for 422
-      input = dst - 2 * input_stride;
-      for (int i = 0; i < width; ++i) {
-        const int bot = i + input_stride;
-        output_q3[i] = (input[i] + input[bot]) << 2;
+#endif
+    } else if (sub_y) {
+      for (int h = 0; h < (*ref_height); h += 2) {
+        for (int i = 0; i < (*ref_width); ++i) {
+          const int bot = i + input_stride;
+          output_q3[i] = (input[i] + input[bot]) << 2;
+        }
+        output_q3 += output_stride;
+        input += input_stride * 2;
       }
-    } else {  // @todo extend for 444
-      input = dst - input_stride;
-      for (int i = 0; i < width; ++i) output_q3[i] = input[i] << 3;
+    } else {
+      for (int h = 0; h < (*ref_height); h++) {
+        for (int i = 0; i < (*ref_width); ++i) {
+          output_q3[i] = input[i] << 3;
+        }
+        output_q3 += output_stride;
+        input += input_stride;
+      }
     }
   }
 }
@@ -2271,7 +2282,14 @@
     }
 #if CONFIG_IMPROVED_CFL
     CFL_CTX *const cfl = &xd->cfl;
+    const int sub_x = cfl->subsampling_x;
+    const int sub_y = cfl->subsampling_y;
+
     CFL_PRED_TYPE pred_plane = get_cfl_pred_type(plane);
+    if (mbmi->cfl_idx == CFL_DERIVED_ALPHA) {
+      cfl->dc_pred_is_cached[pred_plane] = 0;
+      cfl->use_dc_pred_cache = 0;
+    }
     if (cfl->dc_pred_is_cached[pred_plane] == 0) {
       av1_predict_intra_block(cm, xd, pd->width, pd->height, tx_size, mode,
                               angle_delta, use_palette, filter_intra_mode, dst,
@@ -2306,10 +2324,11 @@
             cm, xd, blk_row << cfl->subsampling_y,
             blk_col << cfl->subsampling_x, tx_size, &above_lines, &left_lines,
             &ref_width, &ref_height);
-        above_lines >>= 1;
-        left_lines >>= 1;
-        ref_width >>= 1;
-        ref_height >>= 1;
+
+        above_lines >>= sub_y;
+        left_lines >>= sub_x;
+        ref_width >>= sub_x;
+        ref_height >>= sub_y;
         mhccp_implicit_fetch_neighbor_chroma(xd, plane, blk_row, blk_col,
                                              tx_size, above_lines, left_lines,
                                              ref_width, ref_height);
@@ -2320,10 +2339,10 @@
             cm, xd, blk_row << cfl->subsampling_y,
             blk_col << cfl->subsampling_x, tx_size, &above_lines, &left_lines,
             &ref_width, &ref_height);
-        above_lines >>= 1;
-        left_lines >>= 1;
-        ref_width >>= 1;
-        ref_height >>= 1;
+        above_lines >>= sub_y;
+        left_lines >>= sub_x;
+        ref_width >>= sub_x;
+        ref_height >>= sub_y;
         mhccp_implicit_fetch_neighbor_chroma(xd, plane, blk_row, blk_col,
                                              tx_size, above_lines, left_lines,
                                              ref_width, ref_height);
@@ -2336,7 +2355,7 @@
     }
 #endif
     cfl_predict_block(xd, dst, dst_stride, tx_size, plane, above_lines > 0,
-                      left_lines > 0, above_lines, above_lines);
+                      left_lines > 0, above_lines, left_lines);
     return;
   }
 
