diff --git a/hdl/corr_ll.vhd b/hdl/corr_ll.vhd
index 4b3447649dd4ba99b0d6953a6ac28147bcc1cef3..d19c68fbdd1435d169e69b2a855741a92fd1feee 100644
--- a/hdl/corr_ll.vhd
+++ b/hdl/corr_ll.vhd
@@ -12,13 +12,20 @@ entity corr_ll is
         clk             : in std_logic;
         rst_n           : in std_logic;
 
-        coef_a          : in signed(C_W_COR_COEF-1 downto 0);
-        coef_b          : in signed(C_W_COR_COEF-1 downto 0);
-        coef_ic         : in signed(C_W_COR_COEF-1 downto 0);
-        coef_d          : in signed(C_W_COR_COEF-1 downto 0);
 
-        enable_corr     : in std_logic;
-        reset_corr      : in std_logic;
+        coef_a_x        : in signed(C_W_COR_COEF-1 downto 0);
+        coef_b_x        : in signed(C_W_COR_COEF-1 downto 0);
+        coef_ic_x       : in signed(C_W_COR_COEF-1 downto 0);
+        coef_d_x        : in signed(C_W_COR_COEF-1 downto 0);
+        coef_a_y        : in signed(C_W_COR_COEF-1 downto 0);
+        coef_b_y        : in signed(C_W_COR_COEF-1 downto 0);
+        coef_ic_y       : in signed(C_W_COR_COEF-1 downto 0);
+        coef_d_y        : in signed(C_W_COR_COEF-1 downto 0);
+
+        enable_corr_x   : in std_logic;
+        reset_corr_x    : in std_logic;
+        enable_corr_y   : in std_logic;
+        reset_corr_y    : in std_logic;
 
         matmult         : in signed_array(0 to C_N_MM_PSC-1)(C_W_MM-1 downto 0);
         matmult_valid   : in std_logic;
@@ -83,8 +90,33 @@ begin
         signal rz_mult_b    : signed(C_W_COR_SUMSAT-1 downto 0);
         signal rz_mult_d    : signed(C_W_COR_SUMSAT-1 downto 0);
 
+        signal coef_a       : signed(C_W_COR_COEF-1 downto 0);
+        signal coef_b       : signed(C_W_COR_COEF-1 downto 0);
+        signal coef_ic      : signed(C_W_COR_COEF-1 downto 0);
+        signal coef_d       : signed(C_W_COR_COEF-1 downto 0);
+
+        signal enable_corr  : std_logic;
+        signal reset_corr   : std_logic;
+
     begin
 
+        -- Signal mux for X/Y coef and enable/reset, based on PSCID number
+        if I < 51 then
+            coef_a         <= coef_a_x;
+            coef_b         <= coef_b_x;
+            coef_ic        <= coef_ic_x;
+            coef_d         <= coef_d_x;
+            enable_corr    <= enable_corr_x;
+            reset_corr     <= reset_corr_x;
+        else
+            coef_a         <= coef_a_y;
+            coef_b         <= coef_b_y;
+            coef_ic        <= coef_ic_y;
+            coef_d         <= coef_d_y;
+            enable_corr    <= enable_corr_y;
+            reset_corr     <= reset_corr_y;
+        end if;
+
         p_main:process(clk, rst_n)
         begin
             if rst_n = '0' then
diff --git a/hdl/top_corr_matrix.vhd b/hdl/top_corr_matrix.vhd
index ec4e21245e0d53727202323b10a7cd06b1a4d594..25a7ed1266fb21076cb8958b39c8cecc4e51955e 100644
--- a/hdl/top_corr_matrix.vhd
+++ b/hdl/top_corr_matrix.vhd
@@ -65,7 +65,8 @@ architecture struct of top_corr_matrix is
     signal corrout_valid   : std_logic;
     signal corrout_seq     : std_logic_vector(C_W_BPMSEQ-1 downto 0);
     signal corrout         : signed_array(0 to C_N_MM_PSC-1)(C_W_COR-1 downto 0);
-    signal enable_corr     : std_logic;
+    signal enable_corr_x   : std_logic;
+    signal enable_corr_y   : std_logic;
 
     -- Serializer
     signal overrun_flag     : std_logic;
@@ -230,13 +231,19 @@ begin
         matmult_seq     => matmult_seq,
 
         -- Corr coefs
-        coef_a          => signed(mm_a2l.CORR_K1A.data.data),
-        coef_b          => signed(mm_a2l.CORR_K1B.data.data),
-        coef_ic         => signed(mm_a2l.CORR_K1IC.data.data),
-        coef_d          => signed(mm_a2l.CORR_K1D.data.data),
-
-        reset_corr      => mm_a2l.CONTROL.RST_CORR.data(0),
-        enable_corr     => enable_corr,
+        coef_a_x        => signed(mm_a2l.CORR_K1A_X.data.data),
+        coef_b_x        => signed(mm_a2l.CORR_K1B_X.data.data),
+        coef_ic_x       => signed(mm_a2l.CORR_K1IC_X.data.data),
+        coef_d_x        => signed(mm_a2l.CORR_K1D_X.data.data),
+        coef_a_y        => signed(mm_a2l.CORR_K1A_Y.data.data),
+        coef_b_y        => signed(mm_a2l.CORR_K1B_Y.data.data),
+        coef_ic_y       => signed(mm_a2l.CORR_K1IC_Y.data.data),
+        coef_d_y        => signed(mm_a2l.CORR_K1D_Y.data.data),
+
+        reset_corr_x    => mm_a2l.CONTROL.RST_CORR.data(0),
+        enable_corr_x   => enable_corr_x,
+        reset_corr_y    => mm_a2l.CONTROL.RST_CORR.data(0),
+        enable_corr_y   => enable_corr_y,
 
         -- Corr output
         corrout_valid   => corrfirst_valid,
@@ -259,13 +266,19 @@ begin
         matmult_seq     => corrfirst_seq,
 
         -- Corr coefs
-        coef_a          => signed(mm_a2l.CORR_K2A.data.data),
-        coef_b          => signed(mm_a2l.CORR_K2B.data.data),
-        coef_ic         => signed(mm_a2l.CORR_K2IC.data.data),
-        coef_d          => signed(mm_a2l.CORR_K2D.data.data),
-
-        reset_corr      => mm_a2l.CONTROL.RST_CORR.data(0),
-        enable_corr     => enable_corr,
+        coef_a_x        => signed(mm_a2l.CORR_K2A_X.data.data),
+        coef_b_x        => signed(mm_a2l.CORR_K2B_X.data.data),
+        coef_ic_x       => signed(mm_a2l.CORR_K2IC_X.data.data),
+        coef_d_x        => signed(mm_a2l.CORR_K2D_X.data.data),
+        coef_a_y        => signed(mm_a2l.CORR_K2A_Y.data.data),
+        coef_b_y        => signed(mm_a2l.CORR_K2B_Y.data.data),
+        coef_ic_y       => signed(mm_a2l.CORR_K2IC_Y.data.data),
+        coef_d_y        => signed(mm_a2l.CORR_K2D_Y.data.data),
+
+        reset_corr_x    => mm_a2l.CONTROL_X.RST_CORR.data(0),
+        enable_corr_x   => enable_corr_x,
+        reset_corr_y    => mm_a2l.CONTROL_Y.RST_CORR.data(0),
+        enable_corr_y   => enable_corr_y,
 
         -- Corr output
         corrout_valid   => corrout_valid,
@@ -273,7 +286,8 @@ begin
         corrout         => corrout
     );
 
-    enable_corr    <= mm_a2l.CONTROL.ENABLE_CORR.data(0) and not thresh_reached;
+    enable_corr_x  <= mm_a2l.CONTROL_X.ENABLE_CORR.data(0) and not thresh_reached;
+    enable_corr_y  <= mm_a2l.CONTROL_Y.ENABLE_CORR.data(0) and not thresh_reached;
 
     ---------------------
     -- DATA SERIALIZER --
@@ -347,8 +361,8 @@ begin
         s_axis_tdata_cor    => ser_tdata(C_W_COR-1 downto 0),
         s_axis_tvalid       => ser_tvalid,
 
-        enable_thresh       => mm_a2l.CONTROL.ENABLE_THRESH.data(0),
-        rst_thresh          => mm_a2l.CONTROL.RST_THRESH.data(0),
+        enable_thresh       => mm_a2l.THRESH.ENABLE.data(0),
+        rst_thresh          => mm_a2l.THRESH.RST.data(0),
         thresh_reached      => thresh_reached
     );
 
diff --git a/rdl/corr_matrix.rdl b/rdl/corr_matrix.rdl
index db5f92f692c14b82883f53f3adf1a0de574e671d..59a4356773efc30eace19a5a206c5b70702904ee 100644
--- a/rdl/corr_matrix.rdl
+++ b/rdl/corr_matrix.rdl
@@ -28,13 +28,25 @@ addrmap corr_matrix {
     } VERSION @0x04;
 
     reg {
-        desc="Global control of the corrector.";
+        desc="X-plane control of the corrector.";
         default sw=rw; default hw=r;
         field {} ENABLE_CORR;
         field {} RST_CORR;
-        field {} ENABLE_THRESH;
-        field {} RST_THRESH;
-    } CONTROL;
+    } CONTROL_X;
+
+    reg {
+        desc="Y-plane control of the corrector.";
+        default sw=rw; default hw=r;
+        field {} ENABLE_CORR;
+        field {} RST_CORR;
+    } CONTROL_Y;
+
+    reg {
+        desc="Theshold autostop.";
+        default sw=rw; default hw=r;
+        field {} ENABLE;
+        field {} RST;
+    } THRESH;
 
     reg {
         desc="Global status of the corrector.";
@@ -45,43 +57,84 @@ addrmap corr_matrix {
     reg {
         desc="Correction coefficient A.";
         field {sw = rw; hw = r;} data[`C_W_COR_COEF];
-    } CORR_K1A;
+    } CORR_K1A_X;
+
+    reg {
+        desc="Correction coefficient B.";
+        field {sw = rw; hw = r;} data[`C_W_COR_COEF];
+    } CORR_K1B_X;
+
+    reg {
+        desc="Correction coefficient (inverse) C.";
+        field {sw = rw; hw = r;} data[`C_W_COR_COEF];
+    } CORR_K1IC_X;
+
+    reg {
+        desc="Correction coefficient D.";
+        field {sw = rw; hw = r;} data[`C_W_COR_COEF];
+    } CORR_K1D_X;
+
+
+    reg {
+        desc="Correction coefficient A.";
+        field {sw = rw; hw = r;} data[`C_W_COR_COEF];
+    } CORR_K2A_X;
 
     reg {
         desc="Correction coefficient B.";
         field {sw = rw; hw = r;} data[`C_W_COR_COEF];
-    } CORR_K1B;
+    } CORR_K2B_X;
 
     reg {
         desc="Correction coefficient (inverse) C.";
         field {sw = rw; hw = r;} data[`C_W_COR_COEF];
-    } CORR_K1IC;
+    } CORR_K2IC_X;
 
     reg {
         desc="Correction coefficient D.";
         field {sw = rw; hw = r;} data[`C_W_COR_COEF];
-    } CORR_K1D;
+    } CORR_K2D_X;
+
+    reg {
+        desc="Correction coefficient A.";
+        field {sw = rw; hw = r;} data[`C_W_COR_COEF];
+    } CORR_K1A_Y;
+
+    reg {
+        desc="Correction coefficient B.";
+        field {sw = rw; hw = r;} data[`C_W_COR_COEF];
+    } CORR_K1B_Y;
+
+    reg {
+        desc="Correction coefficient (inverse) C.";
+        field {sw = rw; hw = r;} data[`C_W_COR_COEF];
+    } CORR_K1IC_Y;
+
+    reg {
+        desc="Correction coefficient D.";
+        field {sw = rw; hw = r;} data[`C_W_COR_COEF];
+    } CORR_K1D_Y;
 
 
     reg {
         desc="Correction coefficient A.";
         field {sw = rw; hw = r;} data[`C_W_COR_COEF];
-    } CORR_K2A;
+    } CORR_K2A_Y;
 
     reg {
         desc="Correction coefficient B.";
         field {sw = rw; hw = r;} data[`C_W_COR_COEF];
-    } CORR_K2B;
+    } CORR_K2B_Y;
 
     reg {
         desc="Correction coefficient (inverse) C.";
         field {sw = rw; hw = r;} data[`C_W_COR_COEF];
-    } CORR_K2IC;
+    } CORR_K2IC_Y;
 
     reg {
         desc="Correction coefficient D.";
         field {sw = rw; hw = r;} data[`C_W_COR_COEF];
-    } CORR_K2D;
+    } CORR_K2D_Y;
 
     reg {
         desc="Number of ID to count for matrix multiplication.";
@@ -121,7 +174,7 @@ addrmap corr_matrix {
     } external ERRORBITX;
 
     mem {
-        desc = "X Average orbit error";
+        desc = "Y Average orbit error";
         sw=r;
         memwidth = 32;
         mementries = 2**`C_W_MM_IDCNT;