diff --git a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_adc_input_and_timing.vhd b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_adc_input_and_timing.vhd
index d77c55d4e5833d2bb638e62cc1da3c5ee73f34cc..ef826f539e50d7f7c2ae6b706e98751697e9bb72 100644
--- a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_adc_input_and_timing.vhd
+++ b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_adc_input_and_timing.vhd
@@ -103,8 +103,9 @@ ENTITY node_sdp_adc_input_and_timing IS
 
     -- Streaming data output
     out_sosi_arr                   : OUT t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0);        
-    dp_bsn_source_restart          : OUT STD_LOGIC;
-    dp_bsn_source_new_interval     : OUT STD_LOGIC
+    dp_bsn_source_restart          : OUT STD_LOGIC;  -- for dp_sync_recover in WPFB
+    dp_bsn_source_new_interval     : OUT STD_LOGIC;  -- for SST and BST statistics offload, XST uses new_interval based on xst_processing_enable
+    dp_bsn_source_nof_clk_per_sync : OUT STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0)  -- for RSN source in transient buffer
   );
 END node_sdp_adc_input_and_timing;
 
@@ -131,6 +132,7 @@ ARCHITECTURE str OF node_sdp_adc_input_and_timing IS
 
   SIGNAL rx_bsn_source_restart      : STD_LOGIC;
   SIGNAL rx_bsn_source_new_interval : STD_LOGIC;
+  SIGNAL rx_bsn_source_nof_clk_per_sync : STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0);
   SIGNAL rx_aux                     : STD_LOGIC_VECTOR(c_bs_aux_w-1 DOWNTO 0);
   SIGNAL dp_aux                     : STD_LOGIC_VECTOR(c_bs_aux_w-1 DOWNTO 0);
 
@@ -288,7 +290,8 @@ BEGIN
     bs_sosi           => bs_sosi,
 
     bs_restart        => rx_bsn_source_restart,
-    bs_new_interval   => rx_bsn_source_new_interval
+    bs_new_interval   => rx_bsn_source_new_interval,
+    bs_nof_clk_per_sync => rx_bsn_source_nof_clk_per_sync
   );
 
   u_bsn_trigger_wg : ENTITY dp_lib.mms_dp_bsn_scheduler
@@ -533,7 +536,20 @@ BEGIN
       out_aux          => dp_aux
     );
 
-  
+  -- MM write of rx_bsn_source_nof_clk_per_sync occurs with sufficient margin before it
+  -- is used. Still use common_reg_cross_domain nonetheless to get from mm_clk to rx_clk
+  -- in mms_dp_bsn_monitor, and from rx_clk to dp_clk here. No need to go via
+  -- u_dp_fifo_dc_arr, use common_reg_cross_domain instead to save logic and/or RAM.
+  u_dp_nof_block_per_sync : ENTITY common_lib.common_reg_cross_domain
+  PORT MAP (
+    in_rst      => rx_rst,
+    in_clk      => rx_clk,
+    in_dat      => rx_bsn_source_nof_clk_per_sync,
+    out_rst     => dp_rst,
+    out_clk     => dp_clk,
+    out_dat     => dp_bsn_source_nof_clk_per_sync
+  );
+
   -----------------------------------------------------------------------------
   -- JESD Control register
   -----------------------------------------------------------------------------
diff --git a/libraries/base/dp/src/vhdl/mms_dp_bsn_source_v2.vhd b/libraries/base/dp/src/vhdl/mms_dp_bsn_source_v2.vhd
index f4db0b10fd99d351882615f1b2c79db13f73b24c..f853a951e6dc4683c924991fc52c1b595b6f776f 100644
--- a/libraries/base/dp/src/vhdl/mms_dp_bsn_source_v2.vhd
+++ b/libraries/base/dp/src/vhdl/mms_dp_bsn_source_v2.vhd
@@ -53,7 +53,8 @@ ENTITY mms_dp_bsn_source_v2 IS
     bs_sosi           : OUT t_dp_sosi;
 
     bs_restart        : OUT STD_LOGIC;  -- pulse to indicate if the bsn_source has restarted
-    bs_new_interval   : OUT STD_LOGIC   -- level to indicate first sync interval if the bsn_source has restarted
+    bs_new_interval   : OUT STD_LOGIC;  -- level to indicate first sync interval if the bsn_source has restarted
+    bs_nof_clk_per_sync : OUT STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0)
   );
 END mms_dp_bsn_source_v2;
 
@@ -75,6 +76,7 @@ ARCHITECTURE str OF mms_dp_bsn_source_v2 IS
 BEGIN
 
   bs_sosi <= i_bs_sosi;
+  bs_nof_clk_per_sync <= nof_clk_per_sync;
 
   u_mm_reg : ENTITY work.dp_bsn_source_reg_v2
   GENERIC MAP (