diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_one/tb_lofar2_unb2b_sdp_station_xsub_one_xst_offload.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_one/tb_lofar2_unb2b_sdp_station_xsub_one_xst_offload.vhd
index 7591f6531af916cf51ce06c973176e4b035a9744..79ddb76d29827419df36a485a4d9312be53887f8 100644
--- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_one/tb_lofar2_unb2b_sdp_station_xsub_one_xst_offload.vhd
+++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_one/tb_lofar2_unb2b_sdp_station_xsub_one_xst_offload.vhd
@@ -76,8 +76,9 @@ ARCHITECTURE tb OF tb_lofar2_unb2b_sdp_station_xsub_one_xst_offload IS
   CONSTANT c_wpfb_sim            : t_wpfb := func_wpfb_set_nof_block_per_sync(c_sdp_wpfb_subbands, c_nof_block_per_sync);
 
   -- MM  
-  CONSTANT c_mm_file_reg_bsn_source_v2     : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SOURCE_V2";
-  CONSTANT c_mm_file_reg_stat_enable_xst   : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_STAT_ENABLE_XST";
+  CONSTANT c_mm_file_reg_bsn_source_v2      : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SOURCE_V2";
+  CONSTANT c_mm_file_reg_stat_enable_xst    : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_STAT_ENABLE_XST";
+  CONSTANT c_mm_file_reg_bsn_scheduler_xsub : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SCHEDULER_XSUB";
 
   -- Tb
   SIGNAL tb_end              : STD_LOGIC := '0';
@@ -213,11 +214,17 @@ BEGIN
     mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 2,                    0, tb_clk);  -- Init BSN = 0
     mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 1,   c_nof_clk_per_sync, tb_clk);  -- nof_block_per_sync
     mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 0,         16#00000001#, tb_clk);  -- Enable BSN immediately 
+
+    ----------------------------------------------------------------------------
+    -- Enable xsub
+    ----------------------------------------------------------------------------
+    mmf_mm_bus_wr(c_mm_file_reg_bsn_scheduler_xsub, 0, 1, tb_clk);  -- first write low then high part
+    mmf_mm_bus_wr(c_mm_file_reg_bsn_scheduler_xsub, 1, 0, tb_clk);  -- assume v_bsn < 2**31-1
     
     ----------------------------------------------------------------------------
     -- Offload enable
     ----------------------------------------------------------------------------
-    mmf_mm_bus_wr(c_mm_file_reg_stat_enable_xst_0, 0, 1, tb_clk);
+    mmf_mm_bus_wr(c_mm_file_reg_stat_enable_xst, 0, 1, tb_clk);
 
     -- wait for udp offload is done
     proc_common_wait_until_high(ext_clk, eth_done);
diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/lofar2_unb2b_sdp_station.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/lofar2_unb2b_sdp_station.vhd
index 242ba7702d0f1fcbf9c818dadc65a3c2df4740b5..9f8ecfbddf90215cb723d7c0cb500d708250ddba 100644
--- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/lofar2_unb2b_sdp_station.vhd
+++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/lofar2_unb2b_sdp_station.vhd
@@ -876,7 +876,10 @@ BEGIN
       dp_rst                      => dp_rst, 
                                                        
       in_sosi_arr                 => fsub_sosi_arr,    
-                                                       
+
+      xst_udp_sosi                => udp_tx_sosi_arr(1),
+      xst_udp_siso                => udp_tx_siso_arr(1), 
+                                                      
       mm_rst                      => mm_rst, 
       mm_clk                      => mm_clk, 
                                               
@@ -892,7 +895,13 @@ BEGIN
       reg_stat_enable_mosi        => reg_stat_enable_xst_mosi,
       reg_stat_enable_miso        => reg_stat_enable_xst_miso,
       reg_stat_hdr_dat_mosi       => reg_stat_hdr_dat_xst_mosi,
-      reg_stat_hdr_dat_miso       => reg_stat_hdr_dat_xst_miso
+      reg_stat_hdr_dat_miso       => reg_stat_hdr_dat_xst_miso,
+  
+      sdp_info                    => sdp_info,
+      gn_id                       => gn_id,
+      stat_eth_src_mac            => stat_eth_src_mac,
+      stat_ip_src_addr            => stat_ip_src_addr,
+      stat_udp_src_port           => xst_udp_src_port
     );
   END GENERATE;
 
@@ -909,17 +918,17 @@ BEGIN
         g_scope_selected_beamlet => g_scope_selected_subband 
       )
       PORT MAP(
-        dp_clk       => dp_clk,  
-        dp_rst       => dp_rst,  
+        dp_clk                   => dp_clk,  
+        dp_rst                   => dp_rst,  
       
-        in_sosi_arr  => fsub_sosi_arr, 
-        bf_udp_sosi  => bf_udp_sosi_arr(beamset_id),
-        bf_udp_siso  => bf_udp_siso_arr(beamset_id),
-        bst_udp_sosi => udp_tx_sosi_arr(1+ beamset_id),  
-        bst_udp_siso => udp_tx_siso_arr(1+ beamset_id),  
+        in_sosi_arr              => fsub_sosi_arr, 
+        bf_udp_sosi              => bf_udp_sosi_arr(beamset_id),
+        bf_udp_siso              => bf_udp_siso_arr(beamset_id),
+        bst_udp_sosi             => udp_tx_sosi_arr(2+ beamset_id),  
+        bst_udp_siso             => udp_tx_siso_arr(2+ beamset_id),  
       
-        mm_rst       => mm_rst,  
-        mm_clk       => mm_clk,  
+        mm_rst                   => mm_rst,  
+        mm_clk                   => mm_clk,  
       
         ram_ss_ss_wide_mosi      => ram_ss_ss_wide_mosi_arr(beamset_id),  
         ram_ss_ss_wide_miso      => ram_ss_ss_wide_miso_arr(beamset_id), 
@@ -936,19 +945,18 @@ BEGIN
         reg_stat_enable_mosi     => reg_stat_enable_bst_mosi_arr(beamset_id),
         reg_stat_enable_miso     => reg_stat_enable_bst_miso_arr(beamset_id),
         reg_stat_hdr_dat_mosi    => reg_stat_hdr_dat_bst_mosi_arr(beamset_id),
-        reg_stat_hdr_dat_miso    => reg_stat_hdr_dat_bst_miso_arr(beamset_id),      
-        sdp_info => sdp_info,
-        gn_id    => gn_id,
-      
-        eth_src_mac  => cep_eth_src_mac, 
-        ip_src_addr  => cep_ip_src_addr, 
-        udp_src_port => cep_udp_src_port, 
-      
-        stat_eth_src_mac  => stat_eth_src_mac, 
-        stat_ip_src_addr  => stat_ip_src_addr, 
-        stat_udp_src_port => bst_udp_src_port, 
+        reg_stat_hdr_dat_miso    => reg_stat_hdr_dat_bst_miso_arr(beamset_id),     
+ 
+        sdp_info                 => sdp_info,
+        gn_id                    => gn_id,
+        eth_src_mac              => cep_eth_src_mac, 
+        ip_src_addr              => cep_ip_src_addr, 
+        udp_src_port             => cep_udp_src_port, 
+        stat_eth_src_mac         => stat_eth_src_mac, 
+        stat_ip_src_addr         => stat_ip_src_addr, 
+        stat_udp_src_port        => bst_udp_src_port, 
             
-        hdr_fields_out => bf_10GbE_hdr_fields_out_arr(beamset_id)
+        hdr_fields_out           => bf_10GbE_hdr_fields_out_arr(beamset_id)
       );
   
     END GENERATE;
diff --git a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd
index b092c86600935ac6382007d03fe8b3c7b1d3a269..191577e824056e530783ed46a88fcb65a9133d2b 100644
--- a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd
+++ b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd
@@ -71,8 +71,7 @@ ENTITY node_sdp_correlator IS
     gn_id    : IN STD_LOGIC_VECTOR(c_sdp_W_gn_id-1 DOWNTO 0);
     stat_eth_src_mac  : IN STD_LOGIC_VECTOR(c_network_eth_mac_addr_w-1 DOWNTO 0);
     stat_ip_src_addr  : IN STD_LOGIC_VECTOR(c_network_ip_addr_w-1 DOWNTO 0);
-    stat_udp_src_port : IN STD_LOGIC_VECTOR(c_network_udp_port_w-1 DOWNTO 0);
-
+    stat_udp_src_port : IN STD_LOGIC_VECTOR(c_network_udp_port_w-1 DOWNTO 0)
   );
 END node_sdp_correlator;
 
diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd
index a555228a82a5f992771144e1e013fc25b8d6dfa2..4b600fa39e7bf008d5eb54321e3ec511585141c0 100644
--- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd
+++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd
@@ -20,7 +20,7 @@
 
 -------------------------------------------------------------------------------
 --
--- Author: P. Donker
+-- Author: P. Donker, R van der Walle
 
 -- Purpose:
 -- . SDP statistics offload
@@ -91,15 +91,15 @@ ARCHITECTURE str OF sdp_statistics_offload IS
 
 
   CONSTANT c_nof_streams               : NATURAL := 1;
-  CONSTANT c_data_size                 : NATURAL := sel_a_b(g_statistics_type="XST", 4, 2); -- XST = 4, SST, BST = 2
-  CONSTANT c_nof_data_per_step         : NATURAL := sel_a_b(g_statistics_type="XST", 4, 2); -- XST = 4, SST, BST = 2;
+  CONSTANT c_data_size                 : NATURAL := 2; 
+  CONSTANT c_nof_data_per_step         : NATURAL := 2; 
 
   CONSTANT c_step_size                 : NATURAL := sel_a_b(g_statistics_type="BST",  c_data_size,
                                                     sel_a_b(g_statistics_type="XST",  c_data_size, 
                                                                                       c_data_size * c_nof_data_per_step));  -- SST
 
   CONSTANT c_nof_data                  : NATURAL := sel_a_b(g_statistics_type="BST",  c_sdp_N_pol * c_sdp_S_sub_bf,
-                                                    sel_a_b(g_statistics_type="XST", (c_sdp_S_pn * c_sdp_S_pn), 
+                                                    sel_a_b(g_statistics_type="XST",  c_sdp_S_pn * c_sdp_S_pn * c_nof_complex, 
                                                                                       c_sdp_N_sub));  -- SST
   CONSTANT c_block_size                : NATURAL := c_nof_data * c_step_size;
   
@@ -155,7 +155,7 @@ ARCHITECTURE str OF sdp_statistics_offload IS
 BEGIN
 
   bsn_at_sync <= RESIZE_UVEC(in_sosi.bsn, 64) WHEN rising_edge(dp_clk) AND in_sosi.sync = '1';
-  selected_crosslet <= crosslets_info(c_sdp_crosslets_index_w-1 DOWNTO 0)
+  selected_crosslet <= crosslets_info(c_sdp_crosslets_index_w-1 DOWNTO 0);
     
   -------------------------------------------------------------------------------
   -- Assemble offload header info
@@ -220,7 +220,7 @@ BEGIN
     ELSIF g_statistics_type = "BST" THEN
       v.data_id := x"0000" & TO_UVEC(c_beamlet_id, 16);
     ELSIF g_statistics_type = "XST" THEN
-      v.data_id := x"0" & "000" & RESIZE_UVEC(selected_crosslet, 9) & TO_UVEC(r.block_count * c_sdp_P_pn, 8) & TO_UVEC(r.block_count * c_sdp_P_pn, 8); -- RW TODO: define for P_sq > 1
+      v.data_id := x"0" & "000" & RESIZE_UVEC(selected_crosslet, 9) & TO_UVEC(r.block_count * c_sdp_S_pn, 8) & TO_UVEC(r.block_count * c_sdp_S_pn, 8); -- RW TODO: define for P_sq > 1
     ELSE
       v.data_id := x"00000000";
     END IF;
@@ -230,10 +230,10 @@ BEGIN
       -- Use trigger to start first packet
       v.start_pulse   := '1';
       v.start_address := 0;
-      v.block_count   := 1;
+      v.block_count   := 0;
     ELSIF done = '1' THEN
       -- Use done to start next packets
-      IF r.block_count < c_nof_packets THEN
+      IF r.block_count < c_nof_packets-1 THEN
         IF r.block_count MOD c_nof_data_per_step = 0 THEN
           v.start_address := r.block_count / c_nof_data_per_step * c_block_size;  -- jump to first packet in next block
         ELSE 
@@ -276,7 +276,7 @@ BEGIN
     g_data_size          => c_data_size,
     g_step_size          => c_step_size,
     g_nof_data           => c_nof_data,
-    g_reverse_word_order => TRUE -- default word order is MSB after LSB, we need to stream LSB after MSB.
+    g_reverse_word_order => FALSE -- default word order is MSB after LSB, we need to stream LSB after MSB.
   ) 
   PORT MAP(
     dp_rst        => dp_rst,
diff --git a/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_statistics_offload.vhd b/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_statistics_offload.vhd
index ad26814881b3aa41ff5e9114e3f3128ca294f5d8..4ef9345bff9b94039db3d69fa3c588b873bd1a8c 100644
--- a/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_statistics_offload.vhd
+++ b/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_statistics_offload.vhd
@@ -73,10 +73,15 @@ ARCHITECTURE tb OF tb_sdp_statistics_offload IS
   CONSTANT c_hdr_dat_mm_addr_udp_src_port : NATURAL := 15;
   
   -- Define SST RAM structure.
-  CONSTANT c_nof_data  : NATURAL := 512;
   CONSTANT c_data_size : NATURAL := 2;
-  CONSTANT c_step_size : NATURAL := 4;
-  
+  CONSTANT c_nof_data_per_step         : NATURAL := 2; 
+  CONSTANT c_step_size                 : NATURAL := sel_a_b(g_statistics_type="BST",  c_data_size,
+                                                    sel_a_b(g_statistics_type="XST",  c_data_size, 
+                                                                                      c_data_size * c_nof_data_per_step));  -- SST
+
+  CONSTANT c_nof_data                  : NATURAL := sel_a_b(g_statistics_type="BST",  c_sdp_N_pol * c_sdp_S_sub_bf,
+                                                    sel_a_b(g_statistics_type="XST",  c_sdp_S_pn * c_sdp_S_pn * c_nof_complex, 
+                                                                                      c_sdp_N_sub));  -- SST
   -- Define SST RAM size for g_nof_signal_inputs_per_pn.
   CONSTANT c_ram_size  : NATURAL := c_nof_data * c_data_size * g_nof_signal_inputs_per_pn;
   CONSTANT c_ram_w     : NATURAL := ceil_log2(c_ram_size);
@@ -84,7 +89,7 @@ ARCHITECTURE tb OF tb_sdp_statistics_offload IS
   CONSTANT c_ram_buf   : t_c_mem := (1, c_ram_w,  32, 2**c_ram_w, 'X');
 
   -- Define block timing.
-  CONSTANT c_nof_block_per_sync : NATURAL := 20;  -- Sufficient to fit more than g_nof_signal_inputs_per_pn offload packets per sync interval.
+  CONSTANT c_nof_block_per_sync : NATURAL := 80;  -- Sufficient to fit more than g_nof_signal_inputs_per_pn offload packets per sync interval.
   CONSTANT c_nof_clk_per_block  : NATURAL := c_nof_data * c_data_size;
 
   -- Based on g_statistics_type: 'S'=0x53="SST", 'B'=0x42="BST", 'X'=0x58="XST".
@@ -241,7 +246,7 @@ BEGIN
     IF test_offload_sosi.eop = '1' THEN
       -- bsn is not fully received (bit 0-15 is missing) because 32 bit allignment not working in dp_offload_rx.vhd.   
       -- Check fixed settings.
-      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "eth_dst_mac") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "eth_dst_mac")) = x"00074306C700"
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "eth_dst_mac") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "eth_dst_mac")) = x"001B217176B9"
         REPORT "wrong eth_dst_mac" SEVERITY ERROR;
       ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "eth_type") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "eth_type")) = x"0800"
         REPORT "wrong eth_type" SEVERITY ERROR;
@@ -251,7 +256,7 @@ BEGIN
         REPORT "wrong ip_header_length" SEVERITY ERROR;
       ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_services") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_services")) = TO_UVEC(0, 8)
         REPORT "wrong ip_services" SEVERITY ERROR;
-      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_total_length") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_total_length")) = TO_UVEC(7868, 16)
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_total_length") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_total_length")) = TO_UVEC(4156, 16)
         REPORT "wrong ip_total_length" SEVERITY ERROR;
       ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_identification") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_identification")) = TO_UVEC(0, 16)
         REPORT "wrong ip_identification" SEVERITY ERROR;
@@ -263,11 +268,11 @@ BEGIN
         REPORT "wrong ip_time_to_live" SEVERITY ERROR;
       ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_protocol") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_protocol")) = TO_UVEC(17, 8)
         REPORT "wrong ip_protocol" SEVERITY ERROR;  
-      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_dst_addr") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_dst_addr")) = x"C0A80001"
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_dst_addr") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_dst_addr")) = x"0A6300FE"
         REPORT "wrong ip_dst_addr" SEVERITY ERROR;
-      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_dst_port") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_dst_port")) = TO_UVEC(0, 16)
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_dst_port") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_dst_port")) = TO_UVEC(5001, 16)
         REPORT "wrong udp_dst_port" SEVERITY ERROR;  
-      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_total_length") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_total_length")) = TO_UVEC(7848, 16)
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_total_length") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_total_length")) = TO_UVEC(4136, 16)
         REPORT "wrong udp_total_length" SEVERITY ERROR; 
       ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_version_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_version_id")) = TO_UVEC(5, 8)
         REPORT "wrong sdp_version_id" SEVERITY ERROR;  
@@ -346,7 +351,7 @@ BEGIN
       IF init_ram_done = '1' THEN
         
         IF in_sosi.sync = '1' AND rx_block_cnt > 0 THEN
-          ASSERT rx_block_cnt = g_nof_signal_inputs_per_pn - 1 REPORT "wrong number of blocks between 2 sync" SEVERITY ERROR;
+          ASSERT rx_block_cnt = g_nof_signal_inputs_per_pn-1 REPORT "wrong number of blocks between 2 sync" SEVERITY ERROR;
         END IF;
         
         -- rx_prev_bsn > 0 is needed for the first time, when there is no previous BSN.
@@ -365,7 +370,7 @@ BEGIN
       IF test_offload_sosi.sop = '1' THEN
         rx_valid_clk_cnt <= 1;
       ELSIF test_offload_sosi.eop = '1' THEN
-        ASSERT rx_valid_clk_cnt = c_nof_valid_per_block REPORT "wrong number of clock counts while valid" SEVERITY ERROR;
+        ASSERT rx_valid_clk_cnt+1 = c_nof_valid_per_block REPORT "wrong number of clock counts while valid" SEVERITY ERROR;
       ELSE
         rx_valid_clk_cnt <= rx_valid_clk_cnt + 1;
       END IF;
@@ -409,8 +414,8 @@ BEGIN
     adr_a    => ram_wr_addr,
 
     -- DP read only port clock domain.
-    rst_b    => dp_rst,
-    clk_b    => dp_clk,
+    rst_b    => mm_rst,
+    clk_b    => mm_clk,
     adr_b    => master_mosi.address(c_ram_buf.adr_w-1 DOWNTO 0),
     rd_en_b  => master_mosi.rd,
     rd_dat_b => master_miso.rddata(c_ram_buf.dat_w-1 DOWNTO 0),
@@ -480,4 +485,4 @@ BEGIN
     ip_src_addr  => c_ip_src_addr
   );
 
-END tb;
\ No newline at end of file
+END tb;