diff --git a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl.vhd b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl.vhd
index 02708a7acb4f9dd1f7021786114d15b9d5e73557..f9d7419f6564895b29f0487983d5c53845c136cb 100644
--- a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl.vhd
+++ b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl.vhd
@@ -85,6 +85,7 @@ ARCHITECTURE str OF ddrctrl IS
   CONSTANT  c_io_ddr_data_w   : NATURAL                                     := func_tech_ddr_ctlr_data_w( g_tech_ddr );
   CONSTANT  c_wr_fifo_depth   : NATURAL                                     := 256;                                           -- defined at DDR side of the FIFO, >=16 and independent of wr burst size, default >= 256 because 32b*256 fits in 1 M9K so c_ctlr_data_w=256b will require 8 M9K
   CONSTANT  c_rd_fifo_depth   : NATURAL                                     := 256;                                           -- defined at DDR side of the FIFO, >=16 AND > max number of rd burst sizes (so > c_rd_fifo_af_margin), default >= 256 because 32b*256 fits in 1 M9K so c_ctlr_data_w=256b will require 8 M9K
+  CONSTANT  c_rd_fifo_uw_w    : NATURAL                                     := ceil_log2(c_rd_fifo_depth*(func_tech_ddr_ctlr_data_w(g_tech_ddr)/c_io_ddr_data_w));
 
   -- signals for connecting the components
   SIGNAL    ctrl_clk     : STD_LOGIC;
@@ -98,7 +99,7 @@ ARCHITECTURE str OF ddrctrl IS
   SIGNAL    rd_siso      : t_dp_siso                                        := c_dp_siso_rst;
   SIGNAL    rd_sosi      : t_dp_sosi                                        := c_dp_sosi_init;
   SIGNAL    stop         : STD_LOGIC;
-  SIGNAL    rd_fifo_usedw: STD_LOGIC_VECTOR(ceil_log2(c_rd_fifo_depth*(func_tech_ddr_ctlr_data_w(g_tech_ddr)/c_io_ddr_data_w) )-1 DOWNTO 0);
+  SIGNAL    rd_fifo_usedw: STD_LOGIC_VECTOR(c_rd_fifo_uw_w-1 DOWNTO 0);
   SIGNAL    rd_ready     : STD_LOGIC;
   SIGNAL    inp_ds       : NATURAL;
   SIGNAL    inp_bsn      : STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0);
@@ -236,7 +237,8 @@ BEGIN
     g_out_data_w              => g_data_w,
     g_wr_data_w               => c_io_ddr_data_w,
     g_rd_fifo_depth           => c_rd_fifo_depth,
-    g_rd_data_w               => c_io_ddr_data_w
+    g_rd_data_w               => c_io_ddr_data_w,
+    g_rd_fifo_uw_w            => c_rd_fifo_uw_w
   )
   PORT MAP(
     clk                       => clk,
diff --git a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_controller.vhd b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_controller.vhd
index 2da04e15bcee33174de1ef7a49fcfa75d3858e6b..106dbaf1f8fdc877eae1ce30799c56c734cfb901 100644
--- a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_controller.vhd
+++ b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_controller.vhd
@@ -44,7 +44,8 @@ ENTITY ddrctrl_controller IS
     g_out_data_w              : NATURAL;
     g_wr_data_w               : NATURAL;
     g_rd_fifo_depth           : NATURAL;
-    g_rd_data_w               : NATURAL
+    g_rd_data_w               : NATURAL;
+    g_rd_fifo_uw_w            : NATURAL
   );
   PORT (
     clk                       : IN  STD_LOGIC;
@@ -62,7 +63,7 @@ ENTITY ddrctrl_controller IS
     dvr_mosi                  : OUT t_mem_ctlr_mosi;
     dvr_miso                  : IN  t_mem_ctlr_miso;
     wr_sosi                   : OUT t_dp_sosi;
-    rd_fifo_usedw             : IN  STD_LOGIC_VECTOR(ceil_log2(g_rd_fifo_depth * (func_tech_ddr_ctlr_data_w(g_tech_ddr)/g_rd_data_w) )-1 DOWNTO 0);
+    rd_fifo_usedw             : IN  STD_LOGIC_VECTOR(g_rd_fifo_uw_w-1 DOWNTO 0);
 
     -- ddrctrl_output
     outp_ds                   : OUT NATURAL;
@@ -96,7 +97,7 @@ ARCHITECTURE rtl OF ddrctrl_controller IS
   -- state of program
   state                       : t_state;
 
-  -- stoppping signals
+  -- stopping signals
   stop_adr                    : STD_LOGIC_VECTOR(c_adr_w-1 DOWNTO 0);
   stopped                     : STD_LOGIC;
 
@@ -131,22 +132,11 @@ BEGIN
 
     v := q_reg;
 
+
     CASE q_reg.state IS
     WHEN RESET =>
       v := c_t_reg_init;
 
-      IF rst = '1' THEN
-        v.state := RESET;
-      ELSIF stop_in = '1' THEN
-        v.state := SET_STOP;
-      ELSIF v.stop_adr = TO_UVEC(inp_adr, c_adr_w) AND v.stop_adr(c_bitshift_adr-1 DOWNTO 0) = c_zeros(c_bitshift_adr-1 DOWNTO 0) AND q_reg.stopped = '0' THEN
-        v.state := STOP_WRITING;
-      ELSIF v.stopped = '1' THEN
-        v.state := IDLE;
-      ELSE
-        v.state := WRITING;
-      END IF;
-
 
     WHEN WRITING =>
       -- if adr mod c_burstsize = 0
@@ -167,20 +157,6 @@ BEGIN
       v.wr_sosi                 := inp_sosi;
 
 
-
-      IF rst = '1' THEN
-        v.state := RESET;
-      ELSIF stop_in = '1' THEN
-        v.state := SET_STOP;
-      ELSIF v.stop_adr = TO_UVEC(inp_adr, c_adr_w) AND v.stop_adr(c_bitshift_adr-1 DOWNTO 0) = c_zeros(c_bitshift_adr-1 DOWNTO 0) AND q_reg.stopped = '0' THEN
-        v.state := STOP_WRITING;
-      ELSIF v.stopped = '1' THEN
-        v.state := IDLE;
-      ELSE
-        v.state := WRITING;
-      END IF;
-
-
     WHEN SET_STOP =>
       --setting a stop address dependend on the g_stop_percentage
       IF inp_adr+c_pof_ma >= c_max_adr THEN
@@ -209,20 +185,6 @@ BEGIN
       v.wr_sosi                                 := inp_sosi;
 
 
-
-      IF rst = '1' THEN
-        v.state := RESET;
-      ELSIF stop_in = '1' THEN
-        v.state := SET_STOP;
-      ELSIF v.stop_adr = TO_UVEC(inp_adr, c_adr_w) AND v.stop_adr(c_bitshift_adr-1 DOWNTO 0) = c_zeros(c_bitshift_adr-1 DOWNTO 0) AND q_reg.stopped = '0' THEN
-        v.state := STOP_WRITING;
-      ELSIF v.stopped = '1' THEN
-        v.state := IDLE;
-      ELSE
-        v.state := WRITING;
-      END IF;
-
-
     WHEN STOP_WRITING =>
       v.dvr_mosi.burstbegin := '0';
       -- wait until the write burst is finished
@@ -236,11 +198,6 @@ BEGIN
       END IF;
 
 
-      IF rst = '1' THEN
-        v.state := RESET;
-      END IF;
-
-
     WHEN START_READING =>
       v.rd_burst_en                             := '1';
       v.dvr_mosi.wr                             := '0';
@@ -256,13 +213,7 @@ BEGIN
       END LOOP;
 
       v.outp_bsn := TO_UVEC(TO_UINT(inp_bsn)-((inp_bsn_adr+(c_max_adr-TO_UINT(q_reg.stop_adr)))*g_wr_data_w+v.outp_ds-inp_ds)/c_rd_data_w, c_dp_stream_bsn_w); -- WRONG, wil be fixed after L2SDP-705, 706, 707 and 708
-
-
-      IF rst = '1' THEN
-        v.state := RESET;
-      ELSE
-        v.state := READING;
-      END IF;
+      v.state := READING;
 
 
     WHEN READING =>
@@ -285,9 +236,7 @@ BEGIN
         v.rd_burst_en := '1';
       END IF;
 
-      IF rst = '1' THEN
-        v.state := RESET;
-      ELSIF q_reg.read_cnt >= c_max_read_cnt THEN
+      IF q_reg.read_cnt >= c_max_read_cnt THEN
         v.state := IDLE;
       ELSE
         v.state := READING;
@@ -297,9 +246,17 @@ BEGIN
 
     WHEN IDLE =>
       -- the statemachine goes to Idle when its finished or when its waiting on other components.
-      IF rst = '1' THEN
-        v.state := RESET;
-      ELSIF stop_in = '1' THEN
+
+
+    WHEN OTHERS =>
+      v := c_t_reg_init;
+
+
+    END CASE;
+
+
+    IF q_reg.state = RESET OR q_reg.state = WRITING OR q_reg.state = SET_STOP OR q_reg.state = IDLE THEN
+      IF stop_in = '1' THEN
         v.state := SET_STOP;
       ELSIF v.stop_adr = TO_UVEC(inp_adr, c_adr_w) AND v.stop_adr(c_bitshift_adr-1 DOWNTO 0) = c_zeros(c_bitshift_adr-1 DOWNTO 0) AND q_reg.stopped = '0' THEN
         v.state := STOP_WRITING;
@@ -308,30 +265,13 @@ BEGIN
       ELSE
         v.state := WRITING;
       END IF;
-
-
-    WHEN OTHERS =>
-      v := c_t_reg_init;
-
+    END IF;
 
 
     IF rst = '1' THEN
       v.state := RESET;
-    ELSIF stop_in = '1' THEN
-      v.state := SET_STOP;
-    ELSIF v.stop_adr = TO_UVEC(inp_adr, c_adr_w) AND v.stop_adr(c_bitshift_adr-1 DOWNTO 0) = c_zeros(c_bitshift_adr-1 DOWNTO 0) AND q_reg.stopped = '0' THEN
-      v.state := STOP_WRITING;
-    ELSIF v.stopped = '1' THEN
-      v.state := IDLE;
-    ELSE
-      v.state := WRITING;
     END IF;
 
-
-    END CASE;
-
-
-
     d_reg     <= v;
 
   END PROCESS;
diff --git a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_output_unpack.vhd b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_output_unpack.vhd
index 1f117a6c5f867ddbda6979fc6dfc18f017ff9e42..fb711ef3da9abacde5ab36cbff84d63468988e8f 100644
--- a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_output_unpack.vhd
+++ b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_output_unpack.vhd
@@ -108,9 +108,7 @@ BEGIN
       END IF;
 
 
-      IF rst = '1' THEN
-        v.state := RESET;
-      ELSIF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '1' THEN
+      IF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '1' THEN
         v.state := OVER_HALF;
       ELSIF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '0' THEN
         v.state := IDLE;
@@ -138,9 +136,7 @@ BEGIN
       END IF;
 
 
-      IF rst = '1' THEN
-        v.state := RESET;
-      ELSIF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '1' THEN
+      IF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '1' THEN
         v.state := OVER_HALF;
       ELSIF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '0' THEN
         v.state := IDLE;
@@ -166,9 +162,7 @@ BEGIN
       END IF;
 
 
-      IF rst = '1' THEN
-        v.state := RESET;
-      ELSIF v.dd_fresh = '1' THEN
+      IF v.dd_fresh = '1' THEN
         v.state := SECOND_READ;
       ELSE
         v.state := IDLE;
@@ -191,9 +185,7 @@ BEGIN
       END IF;
 
 
-      IF rst = '1' THEN
-        v.state := RESET;
-      ELSIF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '1' THEN
+      IF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '1' THEN
         v.state := OVER_HALF;
       ELSIF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '0' THEN
         v.state := IDLE;
@@ -209,14 +201,9 @@ BEGIN
         v.delay_data(g_in_data_w-1 DOWNTO 0) := in_sosi.data(g_in_data_w-1 DOWNTO 0);
         v.dd_fresh := '1';
       END IF;
+      v.state := OFF;
 
 
-      IF rst = '1' THEN
-        v.state := RESET;
-      ELSE
-        v.state := OFF;
-      END IF;
-
     WHEN IDLE =>
       -- the statemachine goes to Idle when its finished or when its waiting on other components.
       v.out_ready := '1';
@@ -228,9 +215,7 @@ BEGIN
       END IF;
 
 
-      IF rst = '1' THEN
-        v.state := RESET;
-      ELSIF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '1' AND q_reg.sr_done = '1' THEN
+      IF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '1' AND q_reg.sr_done = '1' THEN
         v.state := OVER_HALF;
       ELSIF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '1' AND q_reg.sr_done = '0' THEN
         v.state := SECOND_READ;
@@ -251,9 +236,7 @@ BEGIN
       END IF;
 
 
-      IF rst = '1' THEN
-        v.state := RESET;
-      ELSIF in_sosi.valid = '1' THEN
+      IF in_sosi.valid = '1' THEN
         v.state := FIRST_READ;
       ELSE
         v.state := OFF;
@@ -263,6 +246,9 @@ BEGIN
 
     END CASE;
 
+    IF rst = '1' THEN
+      v.state := RESET;
+    END IF;
     d_reg <= v;
   END PROCESS;