diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_bf/tb_lofar2_unb2b_sdp_station_bf.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_bf/tb_lofar2_unb2b_sdp_station_bf.vhd
index 68a0d39356e85a8b6bc91bbb5c3f9f75b41bb340..05ec67b6c8576091105eaecb67bdb58ff53018ab 100644
--- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_bf/tb_lofar2_unb2b_sdp_station_bf.vhd
+++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_bf/tb_lofar2_unb2b_sdp_station_bf.vhd
@@ -110,6 +110,7 @@ ARCHITECTURE tb OF tb_lofar2_unb2b_sdp_station_bf IS
 
   CONSTANT c_eth_clk_period      : TIME := 8 ns;  -- 125 MHz XO on UniBoard
   CONSTANT c_ext_clk_period      : TIME := 5 ns;
+  CONSTANT c_mm_clk_period       : TIME := 10 ns;  -- 100 MHz internal mm_clk
   CONSTANT c_bck_ref_clk_period  : TIME := 5 ns;
   CONSTANT c_sa_clk_period       : TIME := tech_pll_clk_644_period; -- 644MHz
 
@@ -572,8 +573,7 @@ BEGIN
       -- . write
       v_offset := bset * c_mm_span_reg_bf_scale;
       mmf_mm_bus_wr(c_mm_file_reg_bf_scale, v_offset + 0, c_exp_beamlet_scale, tb_clk);
-      proc_common_wait_some_cycles(tb_clk, c_cross_clock_domain_latency);
-      proc_common_wait_some_cycles(ext_clk, c_cross_clock_domain_latency);
+      proc_common_wait_cross_clock_domain_latency(c_mm_clk_period, c_ext_clk_period);
 
       -- . readback
       mmf_mm_bus_rd(c_mm_file_reg_bf_scale, v_offset + 0, rd_data, tb_clk);
diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd
index c7cca711f2f77c247415e164bbe5e6f86734710a..1526b134c410682e23adef74492b4f2295c05efb 100644
--- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd
+++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd
@@ -110,11 +110,11 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_bf IS
 
   CONSTANT c_eth_clk_period      : TIME := 8 ns;  -- 125 MHz XO on UniBoard
   CONSTANT c_ext_clk_period      : TIME := 5 ns;
+  CONSTANT c_mm_clk_period       : TIME := 10 ns;  -- 100 MHz internal mm_clk
   CONSTANT c_bck_ref_clk_period  : TIME := 5 ns;
   CONSTANT c_sa_clk_period       : TIME := tech_pll_clk_644_period; -- 644MHz
 
   CONSTANT c_tb_clk_period       : TIME := 100 ps; -- use fast tb_clk to speed up M&C
-  CONSTANT c_cross_clock_domain_latency : NATURAL := 20;
 
   CONSTANT c_nof_block_per_sync  : NATURAL := 16;
   CONSTANT c_nof_clk_per_sync    : NATURAL := c_nof_block_per_sync*c_sdp_N_fft; 
@@ -554,8 +554,7 @@ BEGIN
       -- . write
       v_offset := bset * c_mm_span_reg_bf_scale;
       mmf_mm_bus_wr(c_mm_file_reg_bf_scale, v_offset + 0, c_exp_beamlet_scale, tb_clk);
-      proc_common_wait_some_cycles(tb_clk, c_cross_clock_domain_latency);
-      proc_common_wait_some_cycles(ext_clk, c_cross_clock_domain_latency);
+      proc_common_wait_cross_clock_domain_latency(c_mm_clk_period, c_ext_clk_period);
 
       -- . readback
       mmf_mm_bus_rd(c_mm_file_reg_bf_scale, v_offset + 0, rd_data, tb_clk);
diff --git a/libraries/base/common/tb/vhdl/tb_common_pkg.vhd b/libraries/base/common/tb/vhdl/tb_common_pkg.vhd
index 505bdf3885dfaca54168fb75366cd85742ff30fb..b17b13aef8437a9152c22b11f74974f0626eb186 100644
--- a/libraries/base/common/tb/vhdl/tb_common_pkg.vhd
+++ b/libraries/base/common/tb/vhdl/tb_common_pkg.vhd
@@ -39,6 +39,11 @@ USE work.common_pkg.ALL;
 
 PACKAGE tb_common_pkg IS
 
+  -- Constants
+  CONSTANT c_common_cross_clock_domain_latency : NATURAL := 20;
+
+
+  -- Wait for some time or until
   PROCEDURE proc_common_wait_some_cycles(SIGNAL clk          : IN  STD_LOGIC;
                                                 c_nof_cycles : IN  NATURAL);
                                                 
@@ -135,6 +140,21 @@ PACKAGE tb_common_pkg IS
                                       SIGNAL   out_valid : OUT STD_LOGIC);
                                       
                                   
+  -- Wait for clock domain crossing latency, e.g. for MM readback after MM write
+  PROCEDURE proc_common_wait_cross_clock_domain_latency(SIGNAL mm_clk : IN  STD_LOGIC;
+                                                        SIGNAL st_clk : IN  STD_LOGIC;
+                                                        CONSTANT c_nof_cycles : IN  NATURAL);
+
+  PROCEDURE proc_common_wait_cross_clock_domain_latency(SIGNAL mm_clk : IN  STD_LOGIC;
+                                                        SIGNAL st_clk : IN  STD_LOGIC);
+
+  PROCEDURE proc_common_wait_cross_clock_domain_latency(CONSTANT c_mm_clk_period : IN TIME;
+                                                        CONSTANT c_st_clk_period : IN TIME;
+                                                        CONSTANT c_nof_cycles : IN  NATURAL);
+
+  PROCEDURE proc_common_wait_cross_clock_domain_latency(CONSTANT c_mm_clk_period : IN TIME;
+                                                        CONSTANT c_st_clk_period : IN TIME);
+
   -- Generate a single active, inactive pulse
   PROCEDURE proc_common_gen_pulse(CONSTANT c_active : IN  NATURAL;    -- pulse active for nof clk
                                   CONSTANT c_period : IN  NATURAL;    -- pulse period for nof clk
@@ -623,6 +643,40 @@ PACKAGE BODY tb_common_pkg IS
     END IF;
   END proc_common_ready_latency;
   
+  ------------------------------------------------------------------------------
+  -- PROCEDURE: Wait for clock domain crossing latency, e.g. for MM readback after MM write
+  ------------------------------------------------------------------------------
+
+  PROCEDURE proc_common_wait_cross_clock_domain_latency(SIGNAL mm_clk : IN  STD_LOGIC;
+                                                        SIGNAL st_clk : IN  STD_LOGIC;
+                                                        CONSTANT c_nof_cycles : IN  NATURAL) IS
+  BEGIN
+    proc_common_wait_some_cycles(mm_clk, c_nof_cycles);
+    proc_common_wait_some_cycles(st_clk, c_nof_cycles);
+  END proc_common_wait_cross_clock_domain_latency;
+
+  PROCEDURE proc_common_wait_cross_clock_domain_latency(SIGNAL mm_clk : IN  STD_LOGIC;
+                                                        SIGNAL st_clk : IN  STD_LOGIC) IS
+  BEGIN
+    proc_common_wait_some_cycles(mm_clk, c_common_cross_clock_domain_latency);
+    proc_common_wait_some_cycles(st_clk, c_common_cross_clock_domain_latency);
+  END proc_common_wait_cross_clock_domain_latency;
+
+  PROCEDURE proc_common_wait_cross_clock_domain_latency(CONSTANT c_mm_clk_period : IN TIME;
+                                                        CONSTANT c_st_clk_period : IN TIME;
+                                                        CONSTANT c_nof_cycles : IN  NATURAL) IS
+  BEGIN
+    WAIT FOR c_nof_cycles * c_mm_clk_period;
+    WAIT FOR c_nof_cycles * c_st_clk_period;
+  END proc_common_wait_cross_clock_domain_latency;
+
+  PROCEDURE proc_common_wait_cross_clock_domain_latency(CONSTANT c_mm_clk_period : IN TIME;
+                                                        CONSTANT c_st_clk_period : IN TIME) IS
+  BEGIN
+    WAIT FOR c_common_cross_clock_domain_latency * c_mm_clk_period;
+    WAIT FOR c_common_cross_clock_domain_latency * c_st_clk_period;
+  END proc_common_wait_cross_clock_domain_latency;
+
   ------------------------------------------------------------------------------
   -- PROCEDURE: Generate a single active, inactive pulse
   ------------------------------------------------------------------------------