diff --git a/applications/lofar2/designs/lofar2_unb2c_ddrctrl/quartus/qsys_lofar2_unb2c_ddrctrl.qsys b/applications/lofar2/designs/lofar2_unb2c_ddrctrl/quartus/qsys_lofar2_unb2c_ddrctrl.qsys
index bc518d1c9485136c38127f329be09e547e7bc423..edf07f8a975373d55e4f8dc2316d425ac15f2f80 100644
--- a/applications/lofar2/designs/lofar2_unb2c_ddrctrl/quartus/qsys_lofar2_unb2c_ddrctrl.qsys
+++ b/applications/lofar2/designs/lofar2_unb2c_ddrctrl/quartus/qsys_lofar2_unb2c_ddrctrl.qsys
@@ -4565,47 +4565,6 @@
 </componentDefinition>]]></parameter>
   <parameter name="defaultBoundary"><![CDATA[<boundaryDefinition>
     <interfaces>
-        <interface>
-            <name>clk</name>
-            <type>clock</type>
-            <isStart>true</isStart>
-            <ports>
-                <port>
-                    <name>clk_out</name>
-                    <role>clk</role>
-                    <direction>Output</direction>
-                    <width>1</width>
-                    <lowerBound>0</lowerBound>
-                    <vhdlType>STD_LOGIC</vhdlType>
-                </port>
-            </ports>
-            <assignments>
-                <assignmentValueMap/>
-            </assignments>
-            <parameters>
-                <parameterValueMap>
-                    <entry>
-                        <key>associatedDirectClock</key>
-                        <value>clk_in</value>
-                    </entry>
-                    <entry>
-                        <key>clockRate</key>
-                        <value>125000000</value>
-                    </entry>
-                    <entry>
-                        <key>clockRateKnown</key>
-                        <value>true</value>
-                    </entry>
-                    <entry>
-                        <key>externallyDriven</key>
-                        <value>true</value>
-                    </entry>
-                    <entry>
-                        <key>ptfSchematicName</key>
-                    </entry>
-                </parameterValueMap>
-            </parameters>
-        </interface>
         <interface>
             <name>clk_in</name>
             <type>clock</type>
@@ -4678,6 +4637,47 @@
                 </parameterValueMap>
             </parameters>
         </interface>
+        <interface>
+            <name>clk</name>
+            <type>clock</type>
+            <isStart>true</isStart>
+            <ports>
+                <port>
+                    <name>clk_out</name>
+                    <role>clk</role>
+                    <direction>Output</direction>
+                    <width>1</width>
+                    <lowerBound>0</lowerBound>
+                    <vhdlType>STD_LOGIC</vhdlType>
+                </port>
+            </ports>
+            <assignments>
+                <assignmentValueMap/>
+            </assignments>
+            <parameters>
+                <parameterValueMap>
+                    <entry>
+                        <key>associatedDirectClock</key>
+                        <value>clk_in</value>
+                    </entry>
+                    <entry>
+                        <key>clockRate</key>
+                        <value>125000000</value>
+                    </entry>
+                    <entry>
+                        <key>clockRateKnown</key>
+                        <value>true</value>
+                    </entry>
+                    <entry>
+                        <key>externallyDriven</key>
+                        <value>true</value>
+                    </entry>
+                    <entry>
+                        <key>ptfSchematicName</key>
+                    </entry>
+                </parameterValueMap>
+            </parameters>
+        </interface>
         <interface>
             <name>clk_reset</name>
             <type>reset</type>
diff --git a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl.vhd b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl.vhd
index 47c2d2c826d8e00239a2d7c17a9e3d17c3236620..4b791b7b87e332847c64fab8c9d1bebb97049c73 100644
--- a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl.vhd
+++ b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl.vhd
@@ -141,6 +141,7 @@ ARCHITECTURE str OF ddrctrl IS
 
   SIGNAL    state_vec             : STD_LOGIC_VECTOR(1 DOWNTO 0);
   SIGNAL    ddrctrl_ctrl_state_local  : STD_LOGIC_VECTOR(32-1 DOWNTO 0);
+  SIGNAL    ctlr_wr_flush_en      : STD_LOGIC;
 
 BEGIN
 
@@ -210,7 +211,8 @@ BEGIN
     reg_io_ddr_mosi           => reg_io_ddr_mosi,
     reg_io_ddr_miso           => reg_io_ddr_miso,
     state_vec                 => state_vec,
-    
+    ctlr_wr_flush_en_o        => ctlr_wr_flush_en,
+
     -- Driver clock domain
     dvr_clk                   => clk,
     dvr_rst                   => rst,
@@ -309,6 +311,7 @@ BEGIN
     wr_sosi                   => wr_sosi,
     wr_fifo_usedw             => wr_fifo_usedw,
     rd_fifo_usedw             => rd_fifo_usedw,
+    ctlr_wr_flush_en          => ctlr_wr_flush_en,
 
     -- ddrctrl_output
     outp_bsn                  => bsn_co,
diff --git a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_controller.vhd b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_controller.vhd
index 2ef30499d20dda8f4a1016aaad784968df3f1d4f..8e534df27a61bc407cc1fa313ed389f7df5d477f 100644
--- a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_controller.vhd
+++ b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_controller.vhd
@@ -72,6 +72,7 @@ ENTITY ddrctrl_controller IS
     wr_sosi                   : OUT t_dp_sosi;
     wr_fifo_usedw             : IN  STD_LOGIC_VECTOR(g_wr_fifo_uw_w-1 DOWNTO 0);
     rd_fifo_usedw             : IN  STD_LOGIC_VECTOR(g_rd_fifo_uw_w-1 DOWNTO 0);
+    ctlr_wr_flush_en          : IN  STD_LOGIC;
 
     -- ddrctrl_output
     outp_bsn                  : OUT STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0)  := (OTHERS => '0');
@@ -90,12 +91,12 @@ ARCHITECTURE rtl OF ddrctrl_controller IS
   CONSTANT  c_pof_ma          : NATURAL                                     := ((NATURAL((REAL(g_max_adr)*(100.0-REAL(g_stop_percentage)))/100.0)/g_adr_per_b)*g_adr_per_b);  --percentage of max address.
 
   CONSTANT  c_zeros           : STD_LOGIC_VECTOR(c_bitshift_w-1 DOWNTO 0)   := (OTHERS => '0');
+  CONSTANT  c_stop_adr_zeros  : STD_LOGIC_VECTOR(c_adr_w-1      DOWNTO 0)   := (OTHERS => '0');
 
   -- constant for reading
   
 
   CONSTANT  c_rd_data_w       : NATURAL                                     := g_nof_streams*g_out_data_w;                    -- 168
-  CONSTANT  c_rest            : NATURAL                                     := c_rd_data_w-(g_wr_data_w mod c_rd_data_w);     -- 96
   CONSTANT  c_io_ddr_data_w   : NATURAL                                     := func_tech_ddr_ctlr_data_w(g_tech_ddr);         -- 576
 
   -- constant for debugging
@@ -104,6 +105,10 @@ ARCHITECTURE rtl OF ddrctrl_controller IS
   CONSTANT  c_low_state_ndx   : NATURAL := 2;
   CONSTANT  c_high_state_ndx  : NATURAL := 5;
   CONSTANT  c_state_ndx_w     : NATURAL := c_high_state_ndx-c_low_state_ndx+1;
+  CONSTANT  c_low_bsn_ndx     : NATURAL := 8;
+  CONSTANT  c_high_bsn_ndx    : NATURAL := 32-1;
+  CONSTANT  c_bsn_ndx_w       : NATURAL := c_high_bsn_ndx-c_low_bsn_ndx+1;
+  CONSTANT  c_start_bsn       : NATURAL := 14;
 
   -- type for statemachine
   TYPE t_state IS (RESET, STOP_READING, WAIT_FOR_SOP, WRITING, SET_STOP, STOP_WRITING, LAST_WRITE_BURST, START_READING, READING);
@@ -158,6 +163,7 @@ BEGIN
 
     v         := q_reg;
     v.wr_sosi := inp_sosi;
+    v.ddrctrl_ctrl_state(c_high_bsn_ndx DOWNTO c_low_bsn_ndx)       := inp_sosi.bsn(c_start_bsn+c_bsn_ndx_w-1 DOWNTO c_start_bsn); 
 
 
     CASE q_reg.state IS
@@ -258,13 +264,13 @@ BEGIN
         v.stop_adr(c_adr_w-1 DOWNTO 0) := TO_UVEC(inp_adr+g_max_adr-c_pof_ma, c_adr_w);
       END IF;
       v.ready_for_set_stop                                        := '0';
-      IF TO_UINT(v.stop_adr(c_adr_w-1 DOWNTO 0)) = 0 THEN
-        v.last_adr_to_write_to(c_adr_w-1 DOWNTO 0)     := TO_UVEC(g_max_adr-g_last_burstsize, c_adr_w);
+      IF v.stop_adr(c_adr_w-1 DOWNTO 0) = c_stop_adr_zeros(c_adr_w-1 DOWNTO 0) THEN
+        v.last_adr_to_write_to(c_adr_w-1 DOWNTO 0)                := TO_UVEC(g_max_adr-g_last_burstsize, c_adr_w);
       ELSE
         v.last_adr_to_write_to(c_adr_w-1 DOWNTO c_bitshift_w)     := v.stop_adr(c_adr_w-1 DOWNTO c_bitshift_w);
       END IF;
       v.last_adr_to_write_to(c_bitshift_w-1 DOWNTO 0)             := (OTHERS => '0');
-      v.stop_burstsize                                            := TO_UINT(v.stop_adr(c_adr_w-1 DOWNTO 0))-TO_UINT(v.last_adr_to_write_to)+1;
+      v.stop_burstsize                                            := TO_UINT(INCR_UVEC(INCR_UVEC(v.stop_adr(c_adr_w-1 DOWNTO 0),-1*TO_UINT(v.last_adr_to_write_to)),1));
 
       -- still a write cyle
       -- if adr mod g_burstsize = 0
@@ -308,7 +314,7 @@ BEGIN
       v.stop_adr            := TO_UVEC(g_max_adr, c_adr_w);
 
       -- still receiving write data.
-      v.wr_bursts_ready         := TO_UINT(TO_UVEC(TO_UINT(wr_fifo_usedw)+2, g_wr_fifo_uw_w)(g_wr_fifo_uw_w-1 DOWNTO c_bitshift_w));
+      v.wr_bursts_ready         := TO_UINT(INCR_UVEC(wr_fifo_usedw, 2)(g_wr_fifo_uw_w-1 DOWNTO c_bitshift_w));
       IF NOT (q_reg.wr_bursts_ready = 0) AND q_reg.dvr_mosi.burstbegin = '0'THEN
         v.wr_burst_en            := '1';
       ELSIF q_reg.wr_bursts_ready = 0 THEN
@@ -372,7 +378,7 @@ BEGIN
           v.read_adr            := g_burstsize;
         ELSE
           v.dvr_mosi.burstsize(dvr_mosi.burstsize'length-1 DOWNTO 0) := TO_UVEC(g_burstsize-q_reg.stop_burstsize, dvr_mosi.burstsize'length);
-          v.dvr_mosi.address(c_adr_w-1 DOWNTO 0)  := TO_UVEC(TO_UINT(q_reg.last_adr_to_write_to(c_adr_w-1 DOWNTO 0))+q_reg.stop_burstsize, c_adr_w);
+          v.dvr_mosi.address(c_adr_w-1 DOWNTO 0)  := INCR_UVEC(q_reg.last_adr_to_write_to(c_adr_w-1 DOWNTO 0), q_reg.stop_burstsize);
           v.read_adr            := TO_UINT(q_reg.last_adr_to_write_to(c_adr_w-1 DOWNTO 0))+g_burstsize;
         END IF;
         v.dvr_mosi.burstbegin   := '1';
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 0c38238cf32190098ee91ee7f27916fb9c9e0245..53dc621af7f466d5718836938c8a1755144f5061 100644
--- a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_output_unpack.vhd
+++ b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_output_unpack.vhd
@@ -219,7 +219,7 @@ BEGIN
 
     IF rst = '1' THEN
       v.state     := RESET;
-    ELSIF q_reg.state = RESET OR (q_reg.valid_data = '0' AND q_reg.state = OFF) OR (((g_bim+TO_UINT(in_bsn)-1) = TO_UINT(q_reg.out_sosi.bsn)) AND v.out_sosi.eop = '1') THEN
+    ELSIF q_reg.state = RESET OR (q_reg.valid_data = '0' AND q_reg.state = OFF) OR ((INCR_UVEC(INCR_UVEC(in_bsn, g_bim), -1)(q_reg.out_sosi.bsn'length-1 DOWNTO 0) = q_reg.out_sosi.bsn(q_reg.out_sosi.bsn'length-1 DOWNTO 0)) AND v.out_sosi.eop = '1') THEN
       v.state     := OFF;
     ELSIF q_reg.state = OFF THEN
       v.state_off := '0';
diff --git a/libraries/io/ddr/src/vhdl/io_ddr.vhd b/libraries/io/ddr/src/vhdl/io_ddr.vhd
index 1c9f5effb8ebcd447806fc3e44b69113220974af..aee6a046f1ff815f50906b1f9a191255d4542aab 100644
--- a/libraries/io/ddr/src/vhdl/io_ddr.vhd
+++ b/libraries/io/ddr/src/vhdl/io_ddr.vhd
@@ -202,7 +202,8 @@ ENTITY io_ddr IS
     wr_fifo_usedw      : OUT   STD_LOGIC_VECTOR(ceil_log2(g_wr_fifo_depth * (func_tech_ddr_ctlr_data_w(g_tech_ddr)/g_wr_data_w) )-1 DOWNTO 0);  -- for monitoring purposes
     wr_sosi            : IN    t_dp_sosi;
     wr_siso            : OUT   t_dp_siso;
-  
+    ctlr_wr_flush_en_o : OUT   STD_LOGIC;
+ 
     -- Read FIFO clock domain
     rd_clk             : IN    STD_LOGIC;
     rd_rst             : IN    STD_LOGIC;
@@ -284,6 +285,8 @@ ARCHITECTURE str OF io_ddr IS
   
 BEGIN 
 
+  ctlr_wr_flush_en_o <= ctlr_wr_flush_en;
+
   u_io_ddr_cross_domain : ENTITY work.io_ddr_cross_domain
   GENERIC MAP (
     g_cross_domain => g_cross_domain_dvr_ctlr,