diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_one/hdllib.cfg b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_one/hdllib.cfg
index d91b50b60553e8fcb6630b1763cd2e314a833f78..70256dad57cccbec5d8635333ac67a2ce2363ed0 100644
--- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_one/hdllib.cfg
+++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_one/hdllib.cfg
@@ -9,9 +9,11 @@ hdl_lib_technology = ip_arria10_e1sg
 
 test_bench_files = 
     tb_lofar2_unb2b_sdp_station_xsub_one.vhd
+    tb_lofar2_unb2b_sdp_station_xsub_one_xst_offload.vhd
 
 regression_test_vhdl =
     tb_lofar2_unb2b_sdp_station_xsub_one.vhd
+    tb_lofar2_unb2b_sdp_station_xsub_one_xst_offload.vhd
 
 
 [modelsim_project_file]
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
new file mode 100644
index 0000000000000000000000000000000000000000..a3a44d2dc0893d3abfd2d7b6f3c4b426ca1fb190
--- /dev/null
+++ 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
@@ -0,0 +1,256 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright 2020
+-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
+-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+-------------------------------------------------------------------------------
+
+-------------------------------------------------------------------------------
+--
+-- Author: R. van der Walle
+-- Purpose: Self-checking testbench for simulating lofar2_unb2b_sdp_station_xsub_one capturing BST UDP offload packets.
+--
+-- Description:
+--   MM control actions:
+--
+--   1) Enable BSN source and enable BST offload
+--   
+--   2) Verify ethernet statistics using eth_statistics, it checks the number of 
+--      received packets and the total number of valid data. The content of the packets is not verified.   
+--
+-- Usage:
+--   > as 7    # default
+--   > as 12   # for detailed debugging
+--   > run -a  
+--
+-------------------------------------------------------------------------------
+LIBRARY IEEE, common_lib, unb2b_board_lib, i2c_lib, mm_lib, dp_lib, diag_lib, lofar2_sdp_lib, wpfb_lib, lofar2_unb2b_sdp_station_lib, eth_lib;
+USE IEEE.std_logic_1164.ALL;
+USE IEEE.numeric_std.ALL;
+USE IEEE.MATH_REAL.ALL;
+USE common_lib.common_pkg.ALL;
+USE unb2b_board_lib.unb2b_board_pkg.ALL;
+USE common_lib.tb_common_pkg.ALL;
+USE common_lib.common_str_pkg.ALL;
+USE mm_lib.mm_file_pkg.ALL;
+USE dp_lib.dp_stream_pkg.ALL;
+USE mm_lib.mm_file_unb_pkg.ALL;
+USE diag_lib.diag_pkg.ALL;
+USE wpfb_lib.wpfb_pkg.ALL;
+USE lofar2_sdp_lib.sdp_pkg.ALL;
+
+ENTITY tb_lofar2_unb2b_sdp_station_xsub_one_xst_offload IS
+END tb_lofar2_unb2b_sdp_station_xsub_one_xst_offload;
+
+ARCHITECTURE tb OF tb_lofar2_unb2b_sdp_station_xsub_one_xst_offload IS
+
+  CONSTANT c_sim             : BOOLEAN := TRUE;
+  CONSTANT c_unb_nr          : NATURAL := 0; -- UniBoard 0
+  CONSTANT c_node_nr         : NATURAL := 0; 
+  CONSTANT c_id              : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";
+  CONSTANT c_version         : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00";
+  CONSTANT c_fw_version      : t_unb2b_board_fw_version := (1, 0);
+
+  CONSTANT c_eth_clk_period      : TIME := 8 ns;  -- 125 MHz XO on UniBoard
+  CONSTANT c_ext_clk_period      : TIME := 5 ns;
+  CONSTANT c_bck_ref_clk_period  : TIME := 5 ns;
+
+  CONSTANT c_tb_clk_period       : TIME := 100 ps; -- use fast tb_clk to speed up M&C
+
+  CONSTANT c_nof_block_per_sync  : NATURAL := 16; -- long enough to stream out udp data
+  CONSTANT c_nof_clk_per_sync    : NATURAL := c_nof_block_per_sync*c_sdp_N_fft; 
+  CONSTANT c_pps_period          : NATURAL := c_nof_clk_per_sync;
+  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_scheduler_xsub : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SCHEDULER_XSUB";
+
+  -- Tb
+  SIGNAL tb_end              : STD_LOGIC := '0';
+  SIGNAL sim_done            : STD_LOGIC := '0';
+  SIGNAL tb_clk              : STD_LOGIC := '0';  
+  SIGNAL rd_data             : STD_LOGIC_VECTOR(c_32-1 DOWNTO 0) := (OTHERS => '0');
+  SIGNAL eth_done            : STD_LOGIC := '0';
+
+  -- . 1GbE output
+  CONSTANT c_eth_check_nof_packets        : NATURAL := 1; -- received packets in 1 sync period
+  CONSTANT c_eth_header_size              : NATURAL := 19; -- words
+  CONSTANT c_eth_crc_size                 : NATURAL := 1; -- word
+  CONSTANT c_eth_packet_size              : NATURAL := c_eth_header_size + c_eth_crc_size + (c_sdp_W_statistic / c_word_w) * c_sdp_S_pn * c_sdp_S_pn * c_nof_complex; -- 20 + 2 * 12 * 12 * 2 = 596 
+  CONSTANT c_eth_check_nof_valid          : NATURAL := c_eth_check_nof_packets * c_eth_packet_size;  
+  CONSTANT c_eth_runtime_timeout          : TIME := 2 * c_nof_clk_per_sync * c_ext_clk_period;  -- eth statistics should be done at the second sync interval
+  
+  -- DUT
+  SIGNAL ext_clk             : STD_LOGIC := '0';
+  SIGNAL pps                 : STD_LOGIC := '0';
+  SIGNAL ext_pps             : STD_LOGIC := '0'; 
+  SIGNAL pps_rst             : STD_LOGIC := '0';
+
+  SIGNAL WDI                 : STD_LOGIC;
+  SIGNAL INTA                : STD_LOGIC;
+  SIGNAL INTB                : STD_LOGIC;
+
+  SIGNAL eth_clk             : STD_LOGIC := '0';
+  SIGNAL eth_txp             : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0');
+  SIGNAL eth_rxp             : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0');
+
+  SIGNAL sens_scl            : STD_LOGIC;
+  SIGNAL sens_sda            : STD_LOGIC;
+  SIGNAL pmbus_scl           : STD_LOGIC;
+  SIGNAL pmbus_sda           : STD_LOGIC;
+
+  -- back transceivers
+  SIGNAL JESD204B_SERIAL_DATA : STD_LOGIC_VECTOR((c_unb2b_board_tr_jesd204b.bus_w * c_unb2b_board_tr_jesd204b.nof_bus)-1 downto 0);
+  SIGNAL JESD204B_REFCLK      : STD_LOGIC := '1';
+
+  -- jesd204b syncronization signals
+  SIGNAL jesd204b_sysref     : STD_LOGIC;
+  SIGNAL jesd204b_sync_n     : STD_LOGIC_VECTOR((c_unb2b_board_tr_jesd204b.nof_bus * c_unb2b_board_tr_jesd204b.bus_w)-1 DOWNTO 0);
+
+BEGIN
+
+  ----------------------------------------------------------------------------
+  -- System setup
+  ----------------------------------------------------------------------------
+  ext_clk <= NOT ext_clk AFTER c_ext_clk_period/2;  -- External clock (200 MHz)
+  eth_clk <= NOT eth_clk AFTER c_eth_clk_period/2;  -- Ethernet ref clock (125 MHz)
+  JESD204B_REFCLK <= NOT JESD204B_REFCLK AFTER c_bck_ref_clk_period/2;  -- JESD sample clock (200MHz) 
+
+  INTA <= 'H';  -- pull up
+  INTB <= 'H';  -- pull up
+
+  sens_scl <= 'H';  -- pull up
+  sens_sda <= 'H';  -- pull up
+  pmbus_scl <= 'H';  -- pull up
+  pmbus_sda <= 'H';  -- pull up
+
+  ------------------------------------------------------------------------------
+  -- External PPS
+  ------------------------------------------------------------------------------  
+  proc_common_gen_pulse(5, c_pps_period, '1', pps_rst, ext_clk, pps);
+  jesd204b_sysref <= pps;
+  ext_pps <= pps;
+
+  ------------------------------------------------------------------------------
+  -- DUT
+  ------------------------------------------------------------------------------
+  u_lofar_unb2b_sdp_station_xsub_one : ENTITY lofar2_unb2b_sdp_station_lib.lofar2_unb2b_sdp_station
+  GENERIC MAP (
+    g_design_name            => "lofar2_unb2b_sdp_station_xsub_one",
+    g_design_note            => "",
+    g_sim                    => c_sim,
+    g_sim_unb_nr             => c_unb_nr,
+    g_sim_node_nr            => c_node_nr,
+    g_wpfb                   => c_wpfb_sim,
+    g_bsn_nof_clk_per_sync   => c_nof_clk_per_sync
+  )
+  PORT MAP (
+    -- GENERAL
+    CLK          => ext_clk,
+    PPS          => pps,
+    WDI          => WDI,
+    INTA         => INTA,
+    INTB         => INTB,
+
+    -- Others
+    VERSION      => c_version,
+    ID           => c_id,
+    TESTIO       => open,
+
+    -- I2C Interface to Sensors
+    SENS_SC      => sens_scl,
+    SENS_SD      => sens_sda,
+
+    PMBUS_SC     => pmbus_scl,
+    PMBUS_SD     => pmbus_sda,
+    PMBUS_ALERT  => open,
+
+    -- 1GbE Control Interface
+    ETH_CLK      => eth_clk,
+    ETH_SGIN     => eth_rxp,
+    ETH_SGOUT    => eth_txp,
+
+    -- LEDs
+    QSFP_LED     => open,
+
+    -- back transceivers
+    JESD204B_SERIAL_DATA => JESD204B_SERIAL_DATA,
+    JESD204B_REFCLK      => JESD204B_REFCLK,
+  
+    -- jesd204b syncronization signals
+    JESD204B_SYSREF => jesd204b_sysref,
+    JESD204B_SYNC_N => jesd204b_sync_n
+  );
+
+  ------------------------------------------------------------------------------
+  -- MM slave accesses via file IO
+  ------------------------------------------------------------------------------
+  tb_clk  <= NOT tb_clk AFTER c_tb_clk_period/2;    -- Testbench MM clock
+  
+  p_mm_stimuli : PROCESS
+  BEGIN
+    -- Wait for DUT power up after reset
+    WAIT FOR 1 us;
+ 
+    ----------------------------------------------------------------------------
+    -- Enable BSN
+    ----------------------------------------------------------------------------
+    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 3,                    0, tb_clk);
+    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, 1, tb_clk);
+
+    -- wait for udp offload is done
+    proc_common_wait_until_high(ext_clk, eth_done);
+
+    ---------------------------------------------------------------------------
+    -- End Simulation 
+    ---------------------------------------------------------------------------  
+    sim_done <= '1';
+    proc_common_wait_some_cycles(ext_clk, 100);
+    proc_common_stop_simulation(TRUE, ext_clk, sim_done, tb_end);
+    WAIT;
+  END PROCESS;
+
+  -------------------------------------------------------------------------
+  -- Verify proper DUT 1GbE offload output using Ethernet packet statistics 
+  -------------------------------------------------------------------------
+  u_eth_statistics : ENTITY eth_lib.eth_statistics
+    GENERIC MAP (
+      g_runtime_nof_packets => c_eth_check_nof_packets,
+      g_runtime_timeout     => c_eth_runtime_timeout,
+      g_check_nof_valid     => TRUE,
+      g_check_nof_valid_ref => c_eth_check_nof_valid
+   )
+  PORT MAP (  
+    eth_serial_in => eth_txp(0),
+    tb_end        => eth_done
+  );
+
+END tb;
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 d79ab32df21746a83d0753413e441f987c16aec1..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
@@ -362,6 +362,18 @@ ARCHITECTURE str OF lofar2_unb2b_sdp_station IS
   -- Statistics header info  
   SIGNAL reg_stat_hdr_dat_sst_mosi      : t_mem_mosi;
   SIGNAL reg_stat_hdr_dat_sst_miso      : t_mem_miso;
+
+  ----------------------------------------------
+  -- XST 
+  ----------------------------------------------
+  -- Statistics Enable
+  SIGNAL reg_stat_enable_xst_mosi       : t_mem_mosi;
+  SIGNAL reg_stat_enable_xst_miso       : t_mem_miso;
+  
+  -- Statistics header info  
+  SIGNAL reg_stat_hdr_dat_xst_mosi      : t_mem_mosi;
+  SIGNAL reg_stat_hdr_dat_xst_miso      : t_mem_miso;
+
   ----------------------------------------------
   -- BST 
   ----------------------------------------------
@@ -404,8 +416,6 @@ ARCHITECTURE str OF lofar2_unb2b_sdp_station IS
   SIGNAL bf_udp_siso_arr                   : t_dp_siso_arr(c_sdp_N_beamsets-1 DOWNTO 0);    
   SIGNAL bf_10GbE_hdr_fields_out_arr       : t_slv_1024_arr(c_sdp_N_beamsets-1 DOWNTO 0);
 
-  SIGNAL out_crosslets_info                : STD_LOGIC_VECTOR(c_sdp_crosslets_info_reg_w-1 DOWNTO 0);
-
   -- 10GbE
   SIGNAL tr_ref_clk_312                    : STD_LOGIC;
   SIGNAL tr_ref_clk_156                    : STD_LOGIC;
@@ -695,6 +705,10 @@ BEGIN
     reg_stat_enable_sst_miso    => reg_stat_enable_sst_miso,
     reg_stat_hdr_dat_sst_mosi   => reg_stat_hdr_dat_sst_mosi,
     reg_stat_hdr_dat_sst_miso   => reg_stat_hdr_dat_sst_miso,
+    reg_stat_enable_xst_mosi    => reg_stat_enable_xst_mosi,
+    reg_stat_enable_xst_miso    => reg_stat_enable_xst_miso,
+    reg_stat_hdr_dat_xst_mosi   => reg_stat_hdr_dat_xst_mosi,
+    reg_stat_hdr_dat_xst_miso   => reg_stat_hdr_dat_xst_miso,
     reg_stat_enable_bst_mosi    => reg_stat_enable_bst_mosi,
     reg_stat_enable_bst_miso    => reg_stat_enable_bst_miso,
     reg_stat_hdr_dat_bst_mosi   => reg_stat_hdr_dat_bst_mosi,
@@ -862,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, 
                                               
@@ -875,8 +892,16 @@ BEGIN
       ram_st_xsq_mosi             => ram_st_xsq_mosi,             
       ram_st_xsq_miso             => ram_st_xsq_miso,
 
-      out_crosslets_info          => out_crosslets_info             
-
+      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,
+  
+      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;
 
@@ -893,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), 
@@ -920,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/designs/lofar2_unb2b_sdp_station/src/vhdl/mmm_lofar2_unb2b_sdp_station.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/mmm_lofar2_unb2b_sdp_station.vhd
index 7e1bbd362023e50017798aeb2dc505e072bf2977..01eded088e51e68dc9d9440f268f0ca389260c00 100644
--- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/mmm_lofar2_unb2b_sdp_station.vhd
+++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/mmm_lofar2_unb2b_sdp_station.vhd
@@ -190,6 +190,14 @@ ENTITY mmm_lofar2_unb2b_sdp_station IS
    reg_stat_hdr_dat_sst_mosi      : OUT t_mem_mosi;
    reg_stat_hdr_dat_sst_miso      : IN  t_mem_miso;
 
+   -- Crosslet Statistics offload
+   reg_stat_enable_xst_mosi       : OUT t_mem_mosi;
+   reg_stat_enable_xst_miso       : IN  t_mem_miso;
+
+   -- Crosslet Statistics header info
+   reg_stat_hdr_dat_xst_mosi      : OUT t_mem_mosi;
+   reg_stat_hdr_dat_xst_miso      : IN  t_mem_miso;
+
    -- Beamlet Statistics offload 
    reg_stat_enable_bst_mosi       : OUT t_mem_mosi;
    reg_stat_enable_bst_miso       : IN  t_mem_miso;
@@ -344,6 +352,12 @@ BEGIN
 
     u_mm_file_reg_stat_hdr_info_sst   : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_HDR_DAT_SST")
                                                 PORT MAP(mm_rst, mm_clk, reg_stat_hdr_dat_sst_mosi, reg_stat_hdr_dat_sst_miso);
+    
+    u_mm_file_reg_stat_enable_xst     : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_ENABLE_XST")
+                                                PORT MAP(mm_rst, mm_clk, reg_stat_enable_xst_mosi, reg_stat_enable_xst_miso );
+
+    u_mm_file_reg_stat_hdr_info_xst   : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_HDR_DAT_XST")
+                                                PORT MAP(mm_rst, mm_clk, reg_stat_hdr_dat_xst_mosi, reg_stat_hdr_dat_xst_miso);
 
     u_mm_file_reg_stat_enable_bst     : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_STAT_ENABLE_BST")
                                                 PORT MAP(mm_rst, mm_clk, reg_stat_enable_bst_mosi, reg_stat_enable_bst_miso );
@@ -731,6 +745,22 @@ BEGIN
       reg_stat_hdr_dat_sst_read_export          => reg_stat_hdr_dat_sst_mosi.rd,
       reg_stat_hdr_dat_sst_readdata_export      => reg_stat_hdr_dat_sst_miso.rddata(c_word_w-1 DOWNTO 0),
 
+      reg_stat_enable_xst_clk_export            => OPEN,
+      reg_stat_enable_xst_reset_export          => OPEN,
+      reg_stat_enable_xst_address_export        => reg_stat_enable_xst_mosi.address(c_sdp_reg_stat_enable_addr_w-1 DOWNTO 0),
+      reg_stat_enable_xst_write_export          => reg_stat_enable_xst_mosi.wr,
+      reg_stat_enable_xst_writedata_export      => reg_stat_enable_xst_mosi.wrdata(c_word_w-1 DOWNTO 0), 
+      reg_stat_enable_xst_read_export           => reg_stat_enable_xst_mosi.rd,
+      reg_stat_enable_xst_readdata_export       => reg_stat_enable_xst_miso.rddata(c_word_w-1 DOWNTO 0),
+
+      reg_stat_hdr_dat_xst_clk_export           => OPEN,
+      reg_stat_hdr_dat_xst_reset_export         => OPEN,
+      reg_stat_hdr_dat_xst_address_export       => reg_stat_hdr_dat_xst_mosi.address(c_sdp_reg_stat_hdr_dat_addr_w-1 DOWNTO 0),
+      reg_stat_hdr_dat_xst_write_export         => reg_stat_hdr_dat_xst_mosi.wr,
+      reg_stat_hdr_dat_xst_writedata_export     => reg_stat_hdr_dat_xst_mosi.wrdata(c_word_w-1 DOWNTO 0), 
+      reg_stat_hdr_dat_xst_read_export          => reg_stat_hdr_dat_xst_mosi.rd,
+      reg_stat_hdr_dat_xst_readdata_export      => reg_stat_hdr_dat_xst_miso.rddata(c_word_w-1 DOWNTO 0),
+
       reg_stat_enable_bst_clk_export            => OPEN,
       reg_stat_enable_bst_reset_export          => OPEN,
       reg_stat_enable_bst_address_export        => reg_stat_enable_bst_mosi.address(c_sdp_reg_stat_enable_bst_addr_w-1 DOWNTO 0),
diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/qsys_lofar2_unb2b_sdp_station_pkg.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/qsys_lofar2_unb2b_sdp_station_pkg.vhd
index dfdc3433e9f2452a9452cb3a8c66e1189076159c..461075358e25bed8e93cef89b6783e17d3a64ca5 100644
--- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/qsys_lofar2_unb2b_sdp_station_pkg.vhd
+++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/qsys_lofar2_unb2b_sdp_station_pkg.vhd
@@ -301,6 +301,20 @@ PACKAGE qsys_lofar2_unb2b_sdp_station_pkg IS
             reg_stat_hdr_dat_sst_reset_export         : out std_logic;                                        -- export
             reg_stat_hdr_dat_sst_write_export         : out std_logic;                                        -- export
             reg_stat_hdr_dat_sst_writedata_export     : out std_logic_vector(31 downto 0);                    -- export
+            reg_stat_enable_xst_address_export        : out std_logic_vector(0 downto 0);                     -- export
+            reg_stat_enable_xst_clk_export            : out std_logic;                                        -- export
+            reg_stat_enable_xst_read_export           : out std_logic;                                        -- export
+            reg_stat_enable_xst_readdata_export       : in  std_logic_vector(31 downto 0) := (others => 'X'); -- export
+            reg_stat_enable_xst_reset_export          : out std_logic;                                        -- export
+            reg_stat_enable_xst_write_export          : out std_logic;                                        -- export
+            reg_stat_enable_xst_writedata_export      : out std_logic_vector(31 downto 0);                    -- export
+            reg_stat_hdr_dat_xst_address_export       : out std_logic_vector(5 downto 0);                     -- export
+            reg_stat_hdr_dat_xst_clk_export           : out std_logic;                                        -- export
+            reg_stat_hdr_dat_xst_read_export          : out std_logic;                                        -- export
+            reg_stat_hdr_dat_xst_readdata_export      : in  std_logic_vector(31 downto 0) := (others => 'X'); -- export
+            reg_stat_hdr_dat_xst_reset_export         : out std_logic;                                        -- export
+            reg_stat_hdr_dat_xst_write_export         : out std_logic;                                        -- export
+            reg_stat_hdr_dat_xst_writedata_export     : out std_logic_vector(31 downto 0);                    -- export
             reg_stat_enable_bst_address_export        : out std_logic_vector(1 downto 0);                     -- export
             reg_stat_enable_bst_clk_export            : out std_logic;                                        -- export
             reg_stat_enable_bst_read_export           : out std_logic;                                        -- export
diff --git a/applications/lofar2/libraries/sdp/hdllib.cfg b/applications/lofar2/libraries/sdp/hdllib.cfg
index 7068a9f4104a54a404540a09e830491c0ded6074..c4922d48959a7f833f7a037362781c0d9727b380 100644
--- a/applications/lofar2/libraries/sdp/hdllib.cfg
+++ b/applications/lofar2/libraries/sdp/hdllib.cfg
@@ -23,11 +23,13 @@ synth_files =
 test_bench_files =
     tb/vhdl/tb_sdp_info.vhd 
     tb/vhdl/tb_sdp_statistics_offload.vhd
+    tb/vhdl/tb_tb_sdp_statistics_offload.vhd
     tb/vhdl/tb_sdp_crosslets_subband_select.vhd 
 
 regression_test_vhdl = 
     tb/vhdl/tb_sdp_info.vhd
     tb/vhdl/tb_sdp_statistics_offload.vhd 
+    tb/vhdl/tb_tb_sdp_statistics_offload.vhd
     tb/vhdl/tb_sdp_crosslets_subband_select.vhd 
 
 [modelsim_project_file]
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 47b5fe4db662beeb34011a709bb341c35c57a558..191577e824056e530783ed46a88fcb65a9133d2b 100644
--- a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd
+++ b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd
@@ -40,16 +40,16 @@ USE work.sdp_pkg.ALL;
 ENTITY node_sdp_correlator IS
   GENERIC (
     g_sim            : BOOLEAN := FALSE;
-    g_P_sq           : NATURAL := c_sdp_P_sq
-    --g_offload_time   : NATURAL := c_sdp_offload_time
+    g_P_sq           : NATURAL := c_sdp_P_sq;
+    g_offload_time   : NATURAL := c_sdp_offload_time
   );
   PORT (
     dp_clk        : IN  STD_LOGIC;
     dp_rst        : IN  STD_LOGIC;
 
     in_sosi_arr   : IN  t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0);
-    --xst_udp_sosi  : OUT t_dp_sosi;
-    --xst_udp_siso  : IN  t_dp_siso;
+    xst_udp_sosi  : OUT t_dp_sosi;
+    xst_udp_siso  : IN  t_dp_siso;
 
     mm_rst        : IN  STD_LOGIC;
     mm_clk        : IN  STD_LOGIC;
@@ -62,15 +62,16 @@ ENTITY node_sdp_correlator IS
     reg_bsn_scheduler_xsub_miso : OUT t_mem_miso;
     ram_st_xsq_mosi             : IN  t_mem_mosi := c_mem_mosi_rst;
     ram_st_xsq_miso             : OUT t_mem_miso;
-
-    --sdp_info : IN t_sdp_info;
-    --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)
-
-    out_crosslets_info : OUT STD_LOGIC_VECTOR(c_sdp_crosslets_info_reg_w-1 DOWNTO 0)
-
+    reg_stat_enable_mosi        : IN  t_mem_mosi := c_mem_mosi_rst;
+    reg_stat_enable_miso        : OUT t_mem_miso;    
+    reg_stat_hdr_dat_mosi       : IN  t_mem_mosi := c_mem_mosi_rst;
+    reg_stat_hdr_dat_miso       : OUT t_mem_miso;
+
+    sdp_info : IN t_sdp_info;
+    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)
   );
 END node_sdp_correlator;
 
@@ -79,16 +80,16 @@ ARCHITECTURE str OF node_sdp_correlator IS
   CONSTANT c_nof_blk_per_sync_max : NATURAL := c_sdp_xst_nof_blk_per_sync_max;
   CONSTANT c_nof_blk_per_sync_min : NATURAL := c_sdp_xst_nof_blk_per_sync_min;
 
---  CONSTANT c_nof_masters : POSITIVE := 2;
+  CONSTANT c_nof_masters : POSITIVE := 2;
 
-  -- crosslet statistics offload
---  SIGNAL ram_st_offload_mosi     : t_mem_mosi := c_mem_mosi_rst;
---  SIGNAL ram_st_offload_miso     : t_mem_miso := c_mem_miso_rst;
-  
---  SIGNAL master_mem_mux_mosi     : t_mem_mosi := c_mem_mosi_rst;
---  SIGNAL master_mem_mux_miso     : t_mem_miso := c_mem_miso_rst;
---  SIGNAL master_mosi_arr         : t_mem_mosi_arr(0 TO c_nof_masters-1) := (OTHERS=>c_mem_mosi_rst);
---  SIGNAL master_miso_arr         : t_mem_miso_arr(0 TO c_nof_masters-1) := (OTHERS=>c_mem_miso_rst);
+-- crosslet statistics offload
+  SIGNAL ram_st_offload_mosi     : t_mem_mosi := c_mem_mosi_rst;
+  SIGNAL ram_st_offload_miso     : t_mem_miso := c_mem_miso_rst;
+
+  SIGNAL master_mem_mux_mosi     : t_mem_mosi := c_mem_mosi_rst;
+  SIGNAL master_mem_mux_miso     : t_mem_miso := c_mem_miso_rst;
+  SIGNAL master_mosi_arr         : t_mem_mosi_arr(0 TO c_nof_masters-1) := (OTHERS=>c_mem_mosi_rst);
+  SIGNAL master_miso_arr         : t_mem_miso_arr(0 TO c_nof_masters-1) := (OTHERS=>c_mem_miso_rst);
 
   SIGNAL quant_sosi_arr          : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst);
   SIGNAL xin_sosi_arr            : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst);
@@ -97,6 +98,7 @@ ARCHITECTURE str OF node_sdp_correlator IS
   SIGNAL crosslets_mosi_arr      : t_mem_mosi_arr(g_P_sq-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst); 
   SIGNAL crosslets_miso_arr      : t_mem_miso_arr(g_P_sq-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst); 
 
+  SIGNAL crosslets_info          : STD_LOGIC_VECTOR(c_sdp_crosslets_info_reg_w-1 DOWNTO 0);
 BEGIN
   ---------------------------------------------------------------
   -- Requantize 18b to 16b 
@@ -168,7 +170,7 @@ BEGIN
     reg_bsn_scheduler_xsub_mosi => reg_bsn_scheduler_xsub_mosi, 
     reg_bsn_scheduler_xsub_miso => reg_bsn_scheduler_xsub_miso, 
 
-    out_crosslets_info => out_crosslets_info
+    out_crosslets_info => crosslets_info
   );
 
   ---------------------------------------------------------------
@@ -234,69 +236,70 @@ BEGIN
     mm_mosi_arr     => crosslets_mosi_arr,
     mm_miso_arr     => crosslets_miso_arr,
 
-    ram_st_xsq_mosi => ram_st_xsq_mosi, --master_mem_mux_mosi,
-    ram_st_xsq_miso => ram_st_xsq_miso  --master_mem_mux_miso
+    ram_st_xsq_mosi => master_mem_mux_mosi,
+    ram_st_xsq_miso => master_mem_mux_miso
   );
 
---  ---------------------------------------------------------------
---  -- MM master multiplexer 
---  ---------------------------------------------------------------
---  -- Connect 2 mm_masters to the common_mem_mux output
---  master_mosi_arr(0)  <= ram_st_bst_mosi;    -- MM access via QSYS MM bus
---  ram_st_bst_miso     <= master_miso_arr(0);
---  master_mosi_arr(1)  <= ram_st_offload_mosi;   -- MM access by SST offload
---  ram_st_offload_miso <= master_miso_arr(1);
---
---  u_mem_master_mux : ENTITY mm_lib.mm_master_mux
---  GENERIC MAP (
---    g_nof_masters    => c_nof_masters,
---    g_rd_latency_min => 1  -- read latency of statistics RAM is 1
---  )
---  PORT MAP (
---    mm_clk => mm_clk,
---
---    master_mosi_arr => master_mosi_arr,
---    master_miso_arr => master_miso_arr,
---    mux_mosi        => master_mem_mux_mosi,
---    mux_miso        => master_mem_mux_miso
---  );
---
---  ---------------------------------------------------------------
---  -- XST UDP offload 
---  ---------------------------------------------------------------
---  u_sdp_bst_udp_offload: ENTITY work.sdp_statistics_offload
---  GENERIC MAP (
---    g_statistics_type => "XST",
---    g_offload_time    => g_offload_time,
---    g_beamset_id      => g_beamset_id
---  )
---  PORT MAP (
---    mm_clk    => mm_clk,
---    mm_rst    => mm_rst,
---
---    dp_clk    => dp_clk,
---    dp_rst    => dp_rst,
---
---    master_mosi => ram_st_offload_mosi,
---    master_miso => ram_st_offload_miso,
---
---    reg_enable_mosi  => reg_stat_enable_mosi,
---    reg_enable_miso  => reg_stat_enable_miso,
---
---    reg_hdr_dat_mosi  => reg_stat_hdr_dat_mosi,
---    reg_hdr_dat_miso  => reg_stat_hdr_dat_miso,
---
---    sdp_info  => sdp_info,
---    gn_index  => TO_UINT(gn_id),
---
---    in_sosi   => bf_sum_sosi,
---    out_sosi  => bst_udp_sosi,
---    out_siso  => bst_udp_siso,
---
---    eth_src_mac  => stat_eth_src_mac,
---    udp_src_port => stat_udp_src_port,
---    ip_src_addr  => stat_ip_src_addr
---  );
+  ---------------------------------------------------------------
+  -- MM master multiplexer 
+  ---------------------------------------------------------------
+  -- Connect 2 mm_masters to the common_mem_mux output
+  master_mosi_arr(0)  <= ram_st_xsq_mosi;    -- MM access via QSYS MM bus
+  ram_st_xsq_miso     <= master_miso_arr(0);
+  master_mosi_arr(1)  <= ram_st_offload_mosi;   -- MM access by UDP offload
+  ram_st_offload_miso <= master_miso_arr(1);
+
+  u_mem_master_mux : ENTITY mm_lib.mm_master_mux
+  GENERIC MAP (
+    g_nof_masters    => c_nof_masters,
+    g_rd_latency_min => 1  -- read latency of statistics RAM is 1
+  )
+  PORT MAP (
+    mm_clk => mm_clk,
+
+    master_mosi_arr => master_mosi_arr,
+    master_miso_arr => master_miso_arr,
+    mux_mosi        => master_mem_mux_mosi,
+    mux_miso        => master_mem_mux_miso
+  );
+
+  ---------------------------------------------------------------
+  -- XST UDP offload 
+  ---------------------------------------------------------------
+  u_sdp_xst_udp_offload: ENTITY work.sdp_statistics_offload
+  GENERIC MAP (
+    g_statistics_type => "XST",
+    g_offload_time    => g_offload_time,
+    g_P_sq            => g_P_sq
+  )
+  PORT MAP (
+    mm_clk    => mm_clk,
+    mm_rst    => mm_rst,
+
+    dp_clk    => dp_clk,
+    dp_rst    => dp_rst,
+
+    master_mosi => ram_st_offload_mosi,
+    master_miso => ram_st_offload_miso,
+
+    reg_enable_mosi  => reg_stat_enable_mosi,
+    reg_enable_miso  => reg_stat_enable_miso,
+
+    reg_hdr_dat_mosi  => reg_stat_hdr_dat_mosi,
+    reg_hdr_dat_miso  => reg_stat_hdr_dat_miso,
+
+    sdp_info  => sdp_info,
+    gn_index  => TO_UINT(gn_id),
+
+    in_sosi   => crosslets_sosi_arr(0),
+    out_sosi  => xst_udp_sosi,
+    out_siso  => xst_udp_siso,
+
+    eth_src_mac    => stat_eth_src_mac,
+    udp_src_port   => stat_udp_src_port,
+    ip_src_addr    => stat_ip_src_addr,
+    crosslets_info => crosslets_info
+  );
 
 
 END str;
diff --git a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_filterbank.vhd b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_filterbank.vhd
index a30bf342f7766974952a2bc51bdb9824b95d587d..1ecebdc0cb4714579b70843a8b0a4df13be7749b 100644
--- a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_filterbank.vhd
+++ b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_filterbank.vhd
@@ -299,7 +299,7 @@ BEGIN
   u_mem_master_mux : ENTITY mm_lib.mm_master_mux
   GENERIC MAP (
     g_nof_masters    => c_nof_masters,
-    g_rd_latency_min => 1  -- TODO, make constant and check if value is right
+    g_rd_latency_min => 1  -- read latency of statistics RAM is 1
   )
   PORT MAP (
     mm_clk => mm_clk,
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 7752b969126231d28336e4ee30ca848437197f9c..287331749627f658af4d5ffdb785c249e7f54fb2 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
@@ -45,7 +45,8 @@ ENTITY sdp_statistics_offload IS
   GENERIC (
     g_statistics_type : STRING  := "SST";
     g_offload_time    : NATURAL := c_sdp_offload_time;
-    g_beamset_id      : NATURAL := 0
+    g_beamset_id      : NATURAL := 0;
+    g_P_sq            : NATURAL := c_sdp_P_sq
   );
   PORT (
     -- Clocks and reset
@@ -79,6 +80,7 @@ ENTITY sdp_statistics_offload IS
     ip_src_addr             : IN STD_LOGIC_VECTOR(c_network_ip_addr_w-1 DOWNTO 0);
     sdp_info                : IN t_sdp_info;
     subband_calibrated_flag : IN STD_LOGIC := '0';
+    crosslets_info          : IN STD_LOGIC_VECTOR(c_sdp_crosslets_info_reg_w-1 DOWNTO 0) := (OTHERS => '0');
 
     gn_index     : IN NATURAL
   );
@@ -89,20 +91,20 @@ ARCHITECTURE str OF sdp_statistics_offload IS
 
 
   CONSTANT c_nof_streams               : NATURAL := 1;
-  CONSTANT c_data_size                 : NATURAL := 2;
-  CONSTANT c_nof_data_per_step         : NATURAL := 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 * c_nof_complex), 
+                                                    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;
   
   CONSTANT c_nof_packets               : NATURAL := sel_a_b(g_statistics_type="BST", 1,
-                                                    sel_a_b(g_statistics_type="XST", c_sdp_S_pn,
+                                                    sel_a_b(g_statistics_type="XST", g_P_sq,
                                                                                      c_sdp_S_pn));  -- SST
   
   CONSTANT c_marker                    : NATURAL := sel_a_b(g_statistics_type="BST", c_sdp_marker_bst,
@@ -147,12 +149,13 @@ ARCHITECTURE str OF sdp_statistics_offload IS
   SIGNAL dp_header_info           : STD_LOGIC_VECTOR(1023 DOWNTO 0):= (OTHERS => '0');
   SIGNAL bsn_at_sync              : STD_LOGIC_VECTOR(63 DOWNTO 0) := (OTHERS => '0');
 
+  SIGNAL selected_crosslet        : STD_LOGIC_VECTOR(c_sdp_crosslets_index_w-1 DOWNTO 0);
   --SIGNAL sdp_data_id : STD_LOGIC_VECTOR(31 DOWNTO 0);
   
 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);
     
   -------------------------------------------------------------------------------
   -- Assemble offload header info
@@ -217,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"00" & TO_UVEC(0, 8) & TO_UVEC(0, 8) & TO_UVEC(0, 8);  -- TODO: fill in right values for XST.
+      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;
@@ -227,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 
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..42f947700310ff1af936a0e5aa16a945c31765b9 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
@@ -49,8 +49,9 @@ USE work.sdp_pkg.ALL;
 ENTITY tb_sdp_statistics_offload IS
   GENERIC (
     g_statistics_type          : STRING := "SST";
-    g_nof_signal_inputs_per_pn : NATURAL := 12;
-    g_offload_time             : NATURAL := 500
+    g_offload_time             : NATURAL := 500;
+    g_beamset_id               : NATURAL := 0;
+    g_P_sq                     : NATURAL := c_sdp_P_sq
   );
 END tb_sdp_statistics_offload;
 
@@ -73,18 +74,29 @@ 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;
-  
-  -- 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_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
+
+  CONSTANT c_nof_packets               : NATURAL := sel_a_b(g_statistics_type="BST", 1,
+                                                    sel_a_b(g_statistics_type="XST", g_P_sq,
+                                                                                     c_sdp_S_pn));  -- SST
+
+
+  -- Define SST RAM size for c_nof_packets.
+  CONSTANT c_ram_size  : NATURAL := c_nof_data * c_data_size * c_nof_packets;
   CONSTANT c_ram_w     : NATURAL := ceil_log2(c_ram_size);
   --CONSTANT c_ram_buf   : t_c_mem := (c_mem_ram_rd_latency, c_ram_w,  32, 2**c_ram_w, 'X');
   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 c_nof_packets 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".
@@ -96,10 +108,12 @@ ARCHITECTURE tb OF tb_sdp_statistics_offload IS
                                                     sel_a_b(g_statistics_type="XST", c_sdp_S_pn,
                                                                                      1));  -- SST
 
-  CONSTANT c_nof_statistics_per_packet : NATURAL := sel_a_b(g_statistics_type="BST",  c_sdp_S_sub_bf,
+  CONSTANT c_nof_statistics_per_packet : 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
 
+  CONSTANT c_beamlet_id                : NATURAL := g_beamset_id * c_sdp_S_sub_bf;
+
   CONSTANT c_nof_valid_per_block : NATURAL := c_nof_data * c_data_size;
   CONSTANT c_nof_sync            : NATURAL := 5;
   CONSTANT c_nof_clk_per_sync    : NATURAL := c_nof_block_per_sync * c_nof_clk_per_block;
@@ -241,7 +255,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 +265,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 +277,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;  
@@ -309,8 +323,14 @@ BEGIN
         REPORT "wrong sdp_block_period" SEVERITY ERROR;
       
       -- Check variable header info.
-      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_data_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_data_id")) = TO_UVEC(rx_block_cnt + c_sdp_S_pn * gn_index, 32)
-        REPORT "wrong block count number, received data_id not same as counted blocks" SEVERITY ERROR;
+      IF g_statistics_type = "SST" THEN
+        ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_data_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_data_id")) = TO_UVEC(rx_block_cnt + c_sdp_S_pn * gn_index, 32)
+                REPORT "wront SST sdp_data_id" SEVERITY ERROR;
+      ELSIF g_statistics_type = "BST" THEN
+        ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_data_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_data_id")) = TO_UVEC(c_beamlet_id, 32)
+                REPORT "wront BST sdp_data_id" SEVERITY ERROR;
+      --ELSIF g_statistics_type = "XST" THEN --TODO: RW define check
+      END IF;
     END IF;
   END PROCESS;
 
@@ -346,7 +366,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 = c_nof_packets-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 +385,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 +429,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),
@@ -448,9 +468,10 @@ BEGIN
   -- SDP info
   u_dut: ENTITY work.sdp_statistics_offload
   GENERIC MAP (
-    g_statistics_type => "SST",
+    g_statistics_type => g_statistics_type,
     g_offload_time    => g_offload_time,
-    g_beamset_id      => 0
+    g_beamset_id      => g_beamset_id,
+    g_P_sq            => g_P_sq
   )
   PORT MAP (
     mm_clk    => mm_clk,
@@ -480,4 +501,4 @@ BEGIN
     ip_src_addr  => c_ip_src_addr
   );
 
-END tb;
\ No newline at end of file
+END tb;
diff --git a/applications/lofar2/libraries/sdp/tb/vhdl/tb_tb_sdp_statistics_offload.vhd b/applications/lofar2/libraries/sdp/tb/vhdl/tb_tb_sdp_statistics_offload.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..e0506591d517a9df01f03904a3c1bec1c98a1c28
--- /dev/null
+++ b/applications/lofar2/libraries/sdp/tb/vhdl/tb_tb_sdp_statistics_offload.vhd
@@ -0,0 +1,51 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright 2021
+-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
+-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+-------------------------------------------------------------------------------
+
+-------------------------------------------------------------------------------
+-- Author : R vd Walle
+-- Purpose: Verify multiple variations of tb_sdp_statistics_offload
+-- Description:
+-- Usage:
+-- > as 3
+-- > run -all
+-------------------------------------------------------------------------------
+
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+
+ENTITY tb_tb_sdp_statistics_offload IS
+END tb_tb_sdp_statistics_offload;
+
+ARCHITECTURE tb OF tb_tb_sdp_statistics_offload IS
+  SIGNAL tb_end : STD_LOGIC := '0';  -- declare tb_end to avoid 'No objects found' error on 'when -label tb_end'
+BEGIN
+
+--    g_statistics_type          : STRING := "SST";
+--    g_offload_time             : NATURAL := 500;
+--    g_beamset_id               : NATURAL := 0;
+--    g_P_sq                     : NATURAL := c_sdp_P_sq
+
+  u_sst      : ENTITY work.tb_sdp_statistics_offload GENERIC MAP("SST");
+  u_bst_0    : ENTITY work.tb_sdp_statistics_offload GENERIC MAP("BST");
+  u_bst_1    : ENTITY work.tb_sdp_statistics_offload GENERIC MAP("BST", 500, 1);
+  u_xst_1    : ENTITY work.tb_sdp_statistics_offload GENERIC MAP("XST", 500, 0, 1);
+  u_xst_P_sq : ENTITY work.tb_sdp_statistics_offload GENERIC MAP("XST");
+  
+END tb;
diff --git a/libraries/dsp/st/src/vhdl/st_xsq.vhd b/libraries/dsp/st/src/vhdl/st_xsq.vhd
index 997e13c1b253434c103dca1bc505447b0bfa37ab..4378a4c7507b12ec38b0467b1f2ac923b9c2f998 100644
--- a/libraries/dsp/st/src/vhdl/st_xsq.vhd
+++ b/libraries/dsp/st/src/vhdl/st_xsq.vhd
@@ -185,9 +185,11 @@ BEGIN
   u_mem_mux_select : entity common_lib.common_mem_mux
   generic map (    
     g_nof_mosi    => c_nof_complex,
-    g_mult_addr_w => c_nof_word_w
+    g_mult_addr_w => c_nof_word_w,
+    g_rd_latency  => 1
   )
   port map (
+    clk      => mm_clk,
     mosi     => remapped_ram_st_xsq_mosi,
     miso     => ram_st_xsq_miso,
     mosi_arr => ram_st_xsq_mosi_arr,