diff --git a/applications/lofar2/libraries/ddrctrl/src/vhdl/address_counter.vhd b/applications/lofar2/libraries/ddrctrl/src/vhdl/address_counter.vhd
index e82a0b25c6a28cfbdf58df1ab8e9f03a2dadae1a..617497902e442566ec7cbb1b07abd5d77062fe39 100644
--- a/applications/lofar2/libraries/ddrctrl/src/vhdl/address_counter.vhd
+++ b/applications/lofar2/libraries/ddrctrl/src/vhdl/address_counter.vhd
@@ -1,9 +1,11 @@
-LIBRARY IEEE, technology_lib, tech_ddr_lib, common_lib;
+LIBRARY IEEE, technology_lib, tech_ddr_lib, common_lib, dp_lib;
 USE IEEE.std_logic_1164.ALL;
 USE IEEE.numeric_std.ALL;
 USE technology_lib.technology_pkg.ALL;
 USE tech_ddr_lib.tech_ddr_pkg.ALL;
 USE common_lib.common_pkg.ALL;
+USE common_lib.common_mem_pkg.ALL;
+USE dp_lib.dp_stream_pkg.ALL;
 
 ENTITY address_counter IS
   GENERIC (
@@ -13,11 +15,8 @@ ENTITY address_counter IS
   PORT (
     clk	     		      : IN  STD_LOGIC;
     rst               : IN  STD_LOGIC;
-    in_data  		      : IN  STD_LOGIC_VECTOR(func_tech_ddr_ctlr_data_w( g_tech_ddr )-1 DOWNTO 0);
-    in_data_enable	  : IN  STD_LOGIC;
-    out_data 		      : OUT STD_LOGIC_VECTOR(func_tech_ddr_ctlr_data_w( g_tech_ddr )-1 DOWNTO 0);
-    out_data_enable	  : OUT STD_LOGIC;
-    adr			          : OUT NATURAL range 0 to 2**(sel_a_b(g_sim_model, 4, func_tech_ddr_ctlr_address_w( g_tech_ddr )))-1
+    in_sosi           : IN  t_dp_sosi;
+    out_mosi          : OUT t_mem_ctlr_mosi
   );
 END address_counter;
 
@@ -26,20 +25,20 @@ ARCHITECTURE rtl OF address_counter IS
   CONSTANT c_data_w	: NATURAL := func_tech_ddr_ctlr_data_w( g_tech_ddr ); --576
   CONSTANT c_adr_w	: NATURAL := sel_a_b(g_sim_model, 4, func_tech_ddr_ctlr_address_w( g_tech_ddr )); --27;
 
-  SIGNAL   s_adr    : NATURAL range 0 to 2**(c_adr_w)-1;
+  SIGNAL   s_adr    : NATURAL range 0 to 2**(c_adr_w)-1 := 0;
 
 BEGIN
 
-  out_data(c_data_w - 1 DOWNTO 0) <= in_data(c_data_w - 1 DOWNTO 0);
-  out_data_enable <= in_data_enable;
-  adr <= s_adr;
+  out_mosi.wrdata(c_data_w - 1 DOWNTO 0) <= in_sosi.data(c_data_w - 1 DOWNTO 0);
+  out_mosi.wr                            <= in_sosi.valid;
+  out_mosi.address(c_adr_w -1 DOWNTO 0)  <= TO_UVEC(s_adr, c_adr_w);
 
   p_clk : PROCESS(clk)
   BEGIN
     IF rising_edge(clk) THEN
       IF rst = '1' THEN
         s_adr <= 0;                                                            -- https://stackoverflow.com/questions/9989913/vhdl-how-to-use-clk-and-reset-in-process
-      ELSIF in_data_enable = '1' THEN
+      ELSIF in_sosi.valid = '1' THEN
         IF (s_adr = 2**(c_adr_w) - 1) THEN
           s_adr <= 0;
         ELSE
diff --git a/applications/lofar2/libraries/ddrctrl/tb/vhdl/tb_address_counter.vhd b/applications/lofar2/libraries/ddrctrl/tb/vhdl/tb_address_counter.vhd
index a5582ae65187f94a3af6ecd75914b0da6a281c10..f83b8d7793aafd9ab4f128cd2e3d0492128ec5c3 100644
--- a/applications/lofar2/libraries/ddrctrl/tb/vhdl/tb_address_counter.vhd
+++ b/applications/lofar2/libraries/ddrctrl/tb/vhdl/tb_address_counter.vhd
@@ -20,44 +20,57 @@
 --
 --------------------------------------------------------------------------------
 
-LIBRARY IEEE, common_lib, technology_lib, tech_ddr_lib;
+LIBRARY IEEE, common_lib, technology_lib, tech_ddr_lib, dp_lib;
 USE IEEE.STD_LOGIC_1164.ALL;
 USE IEEE.NUMERIC_STD.ALL;
 USE IEEE.MATH_REAL.ALL;
 USE technology_lib.technology_pkg.ALL;
 USE tech_ddr_lib.tech_ddr_pkg.ALL;
+USE dp_lib.dp_stream_pkg.ALL;
+USE common_lib.common_mem_pkg.ALL;
+USE common_lib.common_pkg.ALL;
 
 ENTITY tb_address_counter IS
   GENERIC (
     
-    g_tech_ddr                : t_c_tech_ddr := c_tech_ddr4_8g_1600m;
-    g_sim_model               : BOOLEAN      := TRUE
+    g_tech_ddr                : t_c_tech_ddr    := c_tech_ddr4_8g_1600m;
+    g_sim_model               : BOOLEAN         := TRUE
 
   );
 END tb_address_counter;
 
 ARCHITECTURE tb OF tb_address_counter IS
 
-  CONSTANT  c_clk_freq        : NATURAL := 200;     -- MHz
-  CONSTANT  c_clk_period      : TIME    := (10**6 / c_clk_freq) * 1 ps;
+  CONSTANT  c_clk_freq        : NATURAL         := 200;     -- MHz
+  CONSTANT  c_clk_period      : TIME            := (10**6 / c_clk_freq) * 1 ps;
 
-  CONSTANT  c_data_w          : NATURAL := func_tech_ddr_ctlr_data_w( g_tech_ddr ); -- 576
-  CONSTANT  c_adr_w           : NATURAL := 4;
+  CONSTANT  c_data_w          : NATURAL         := func_tech_ddr_ctlr_data_w( g_tech_ddr ); -- 576
+  CONSTANT  c_adr_w           : NATURAL         := 4;
 
-  SIGNAL    tb_end            : STD_LOGIC := '0';
+  SIGNAL    tb_end            : STD_LOGIC       := '0';
 
-  SIGNAL    clk               : STD_LOGIC := '1';
+  SIGNAL    clk               : STD_LOGIC       := '1';
   SIGNAL    rst               : STD_LOGIC;
 
   SIGNAL    in_data           : STD_LOGIC_VECTOR(c_data_w-1 DOWNTO 0);
   SIGNAL    in_data_enable    : STD_LOGIC;
+  SIGNAL    in_sosi           : t_dp_sosi       := c_dp_sosi_init;
 
   SIGNAL    out_data          : STD_LOGIC_VECTOR(c_data_w-1 DOWNTO 0);
   SIGNAL    out_data_enable   : STD_LOGIC;
-  SIGNAL    adr               : NATURAL range 0 to 2**(c_adr_w)-1;
+  SIGNAL    adr               : NATURAL RANGE 0 TO 2**(c_adr_w)-1 := 0;
+  SIGNAL    out_mosi          : t_mem_ctlr_mosi := c_mem_ctlr_mosi_rst;
 
 BEGIN
 
+  in_sosi.data(c_data_w - 1 DOWNTO 0)    <= in_data(c_data_w - 1 DOWNTO 0);
+  in_sosi.valid                          <= in_data_enable;
+
+  out_data(c_data_w - 1 DOWNTO 0)        <= out_mosi.wrdata(c_data_w - 1 DOWNTO 0);
+  out_data_enable                        <= out_mosi.wr;
+  adr                                    <= TO_UINT(out_mosi.address);
+
+
   clk               <= NOT clk OR tb_end AFTER c_clk_period/2;
 
   p_mm : PROCESS
@@ -152,12 +165,10 @@ BEGIN
   PORT MAP (
     clk               => clk,
     rst               => rst,
-    in_data           => in_data,
-    in_data_enable    => in_data_enable,
+    in_sosi           => in_sosi,
+
+    out_mosi          => out_mosi
 
-    out_data          => out_data,
-    out_data_enable   => out_data_enable,
-    adr               => adr
   );
 
 END tb;