diff --git a/applications/lofar2/designs/lofar2_unb2c_ddrctrl/tb/vhdl/tb_lofar2_unb2c_ddrctrl.vhd b/applications/lofar2/designs/lofar2_unb2c_ddrctrl/tb/vhdl/tb_lofar2_unb2c_ddrctrl.vhd
index 5e2cfb3acbd2645d6c1b80f366df7b047cc79793..f700018f3ee9a5a8c590845627059bc1d66ee35e 100644
--- a/applications/lofar2/designs/lofar2_unb2c_ddrctrl/tb/vhdl/tb_lofar2_unb2c_ddrctrl.vhd
+++ b/applications/lofar2/designs/lofar2_unb2c_ddrctrl/tb/vhdl/tb_lofar2_unb2c_ddrctrl.vhd
@@ -115,12 +115,14 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_ddrctrl IS
   CONSTANT c_nof_block_per_sync   : NATURAL := 16;
   CONSTANT c_nof_clk_per_sync     : NATURAL := c_nof_block_per_sync * c_sdp_N_fft;
 
+  CONSTANT c_speed            : NATURAL   := 4;
+
   -- WG
   CONSTANT c_wg_phase         : REAL      := 0.0;   -- WG phase in degrees
   CONSTANT c_wg_freq          : REAL      := 160.0; -- WG freq
   CONSTANT c_wg_ampl          : NATURAL   := NATURAL(1.0*REAL(c_sdp_FS_adc));  -- in number of lsb
   CONSTANT c_bsn_start_wg     : NATURAL   := c_init_bsn + 2;  -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values
-  CONSTANT c_subband          : REAL      := 1.0;
+  CONSTANT c_subband          : REAL      := 1.0*(2**c_speed);
 
   -- DUT
   SIGNAL st_clk               : STD_LOGIC := '0';
@@ -273,20 +275,19 @@ BEGIN
     WAIT FOR c_mm_clk_period*50000;
 
 
+    assert false report "1. read whole memory!" severity note;
     FOR I IN 0 TO c_bim-1 LOOP
       FOR J IN 0 TO c_nof_streams-1 LOOP
-        FOR K IN 0 TO c_block_size-1 LOOP
+        FOR K IN c_block_size-(c_block_size/(2**c_speed)) TO c_block_size-1 LOOP
           mmf_mm_bus_rd(c_mm_file_ram_data_buf, (J*c_block_size)+K      ,     sosi_out_data(c_rd_data_w-1 DOWNTO 0), tb_clk);
           sosi_out_data_sin(c_data_w-1 DOWNTO 0) <= sosi_out_data(c_data_w-1 DOWNTO 0);
           mmf_mm_bus_rd( c_mm_file_ram_bsn_buf, ((J*c_block_size)+k)*2  ,      sosi_out_bsn(c_rd_data_w-1 DOWNTO 0), tb_clk);
           mmf_mm_bus_rd( c_mm_file_ram_bsn_buf, ((J*c_block_size)+k)*2+1,  sosi_out_not_bsn(c_rd_data_w-1 DOWNTO 0), tb_clk);
         END LOOP;
       END LOOP;
-      WAIT FOR c_st_clk_period*1024;
       WAIT FOR c_st_clk_period*5;
     END LOOP;
 
-    WAIT FOR c_mm_clk_period*3000;
 
     WAIT FOR c_mm_clk_period*2400;
     mmf_mm_bus_wr(c_mm_file_reg_stop_in, 0, 1, tb_clk);
@@ -295,20 +296,39 @@ BEGIN
     WAIT FOR c_mm_clk_period*55000;
 
 
+    assert false report "2. read whole memory!" severity note;
     FOR I IN 0 TO c_bim-1 LOOP
       FOR J IN 0 TO c_nof_streams-1 LOOP
-        FOR K IN 0 TO c_block_size-1 LOOP
+        FOR K IN c_block_size-(c_block_size/(2**c_speed)) TO c_block_size-1 LOOP
           mmf_mm_bus_rd(c_mm_file_ram_data_buf, (J*c_block_size)+K      ,     sosi_out_data(c_rd_data_w-1 DOWNTO 0), tb_clk);
           sosi_out_data_sin(c_data_w-1 DOWNTO 0) <= sosi_out_data(c_data_w-1 DOWNTO 0);
           mmf_mm_bus_rd( c_mm_file_ram_bsn_buf, ((J*c_block_size)+k)*2  ,      sosi_out_bsn(c_rd_data_w-1 DOWNTO 0), tb_clk);
           mmf_mm_bus_rd( c_mm_file_ram_bsn_buf, ((J*c_block_size)+k)*2+1,  sosi_out_not_bsn(c_rd_data_w-1 DOWNTO 0), tb_clk);
         END LOOP;
       END LOOP;
-      WAIT FOR c_st_clk_period*2024;
-      WAIT FOR c_st_clk_period*9;
+      WAIT FOR c_st_clk_period*2;
     END LOOP;
 
-    WAIT FOR c_mm_clk_period*3000;
+
+    WAIT FOR c_mm_clk_period*2200;
+    mmf_mm_bus_wr(c_mm_file_reg_stop_in, 0, 1, tb_clk);
+    WAIT FOR c_mm_clk_period*300;
+    mmf_mm_bus_wr(c_mm_file_reg_stop_in, 0, 0, tb_clk);
+    WAIT FOR c_mm_clk_period*5500;
+
+
+    assert false report "3. read whole memory!" severity note;
+    FOR I IN 0 TO c_bim-1 LOOP
+      FOR J IN 0 TO c_nof_streams-1 LOOP
+        FOR K IN c_block_size-(c_block_size/(2**c_speed)) TO c_block_size-1 LOOP
+          mmf_mm_bus_rd(c_mm_file_ram_data_buf, (J*c_block_size)+K      ,     sosi_out_data(c_rd_data_w-1 DOWNTO 0), tb_clk);
+          sosi_out_data_sin(c_data_w-1 DOWNTO 0) <= sosi_out_data(c_data_w-1 DOWNTO 0);
+          mmf_mm_bus_rd( c_mm_file_ram_bsn_buf, ((J*c_block_size)+k)*2  ,      sosi_out_bsn(c_rd_data_w-1 DOWNTO 0), tb_clk);
+          mmf_mm_bus_rd( c_mm_file_ram_bsn_buf, ((J*c_block_size)+k)*2+1,  sosi_out_not_bsn(c_rd_data_w-1 DOWNTO 0), tb_clk);
+        END LOOP;
+      END LOOP;
+      WAIT FOR c_st_clk_period*1;
+    END LOOP;
 
     tb_end <= '1';
     ASSERT FALSE  REPORT "Test: OK" SEVERITY FAILURE;
diff --git a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_controller.vhd b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_controller.vhd
index e11ca04a0ece82e967e53ea6639f7ce199318f7a..c203779dc90592cad0c92cedb4dd904cd8c7f4b8 100644
--- a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_controller.vhd
+++ b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_controller.vhd
@@ -234,9 +234,9 @@ BEGIN
     WHEN SET_STOP =>
       -- this state sets a stop address dependend on the g_stop_percentage.
       IF inp_adr-c_pof_ma >= 0 THEN
-        v.stop_adr(c_adr_w-1 DOWNTO 0) := TO_UVEC(inp_adr-c_pof_ma, c_adr_w)(c_adr_w-1 DOWNTO 0);
+        v.stop_adr(c_adr_w-1 DOWNTO 0) := TO_UVEC(inp_adr-c_pof_ma, c_adr_w);
       ELSE
-        v.stop_adr(c_adr_w-1 DOWNTO 0) := TO_UVEC(inp_adr+g_max_adr-c_pof_ma, c_adr_w)(c_adr_w-1 DOWNTO 0);
+        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';
       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);
diff --git a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_output.vhd b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_output.vhd
index 4992fcc141926bda32f9525f6887cc4951cb37aa..58872d4250b5cdbfda251c72b7aa484db09956d8 100644
--- a/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_output.vhd
+++ b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_output.vhd
@@ -145,28 +145,32 @@ BEGIN
 --    src_out        => fifo_src_out_sosi
 --  );
 
-  sosi.sop  <= sosi.valid AND sosi.sop;
-  sosi.eop  <= sosi.valid AND sosi.eop;
 
   p_out_siso_ready : PROCESS(out_siso, clk, out_sosi, q_out_siso)
 
+  VARIABLE sosi_valid : STD_LOGIC := '0';
+
   BEGIN
 
     IF out_siso.ready = '0' AND NOT (q_out_siso.ready = out_siso.ready) THEN
       sosi              <= out_sosi;
-      sosi.valid        <= '0';
+      sosi_valid        := '0';
       -- assert false report "sosi.valid = '0'" severity note;
     ELSIF q_out_siso.ready = '1' AND NOT (q_q_out_siso.ready = q_out_siso.ready) AND unpack_state_off = '0' THEN
       sosi              <= out_sosi;
-      sosi.valid        <= '1';
+      sosi_valid        := '1';
       -- assert false report "sosi.valid = '1'" severity note;
     ELSE
       sosi              <= out_sosi;
+      sosi_valid        := out_sosi.valid;
     END IF;
     IF rising_edge(clk) THEN
       q_q_out_siso        <= q_out_siso;
       q_out_siso          <= out_siso;
     END IF;
+    sosi.valid  <= sosi_valid;
+    sosi.sop    <= sosi_valid AND out_sosi.sop;
+    sosi.eop    <= sosi_valid AND out_sosi.eop;
   END PROCESS;
 
 END str;