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 27239f05789ef3f0a5317ba0408a1dc738ff2609..03f715308242a93f66576406a97ecc7148d20e3d 100644
--- a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd
+++ b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd
@@ -89,9 +89,19 @@ END node_sdp_correlator;
 
 ARCHITECTURE str OF node_sdp_correlator IS
    
-  CONSTANT c_nof_controllers : POSITIVE := 2;
-  CONSTANT c_block_size      : NATURAL  := c_sdp_N_crosslets_max * c_sdp_S_pn;
-  CONSTANT c_data_w          : NATURAL  := c_sdp_W_crosslet * c_nof_complex;
+  CONSTANT c_nof_controllers      : POSITIVE := 2;
+  CONSTANT c_block_size           : NATURAL  := c_sdp_N_crosslets_max * c_sdp_S_pn;
+  CONSTANT c_block_size_longwords : NATURAL  := ceil_div(c_block_size, 2); -- 32b -> 64b
+  CONSTANT c_data_w               : NATURAL  := c_sdp_W_crosslet * c_nof_complex;
+
+-- The size for 1 block is probably already enough as the number of blocks received
+-- on the remote input of the mux probably have enough gap time in between. Just
+-- to be sure to not run into issues in the future, the fifo size is increased to 
+-- buffer the maximum nof blocks per block period.
+  CONSTANT c_mux_fifo_size   : NATURAL  := 2**ceil_log2(g_P_sq * c_block_size_longwords); 
+-- c_fifo_fill_size should be at least 2 * c_block_size_longwords as dp_repack_data
+-- repacks from 64bit to 32bit. Chosing 3x to have some room.
+  CONSTANT c_fifo_fill_size  : NATURAL  := 2**ceil_log2(3 * c_block_size_longwords); 
 
 -- crosslet statistics offload
   SIGNAL ram_st_offload_copi           : t_mem_copi := c_mem_copi_rst;
@@ -110,6 +120,8 @@ ARCHITECTURE str OF node_sdp_correlator IS
 
   SIGNAL ring_mux_sosi                 : t_dp_sosi := c_dp_sosi_rst;
   SIGNAL ring_mux_siso                 : t_dp_siso := c_dp_siso_rdy;
+  SIGNAL dp_fifo_fill_sosi             : t_dp_sosi := c_dp_sosi_rst;
+  SIGNAL dp_fifo_fill_siso             : t_dp_siso := c_dp_siso_rdy;
   SIGNAL rx_sosi                       : t_dp_sosi := c_dp_sosi_rst;
   SIGNAL dispatch_invert_sosi_arr      : t_dp_sosi_arr(0 TO g_P_sq-1) := (OTHERS => c_dp_sosi_rst);
   SIGNAL dispatch_sosi_arr             : t_dp_sosi_arr(g_P_sq-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst);
@@ -215,7 +227,7 @@ BEGIN
     g_data_w       => c_longword_w,
     g_channel_w    => c_word_w,
     g_use_error    => FALSE,
-    g_fifo_size    => array_init(c_block_size, 2)
+    g_fifo_size    => array_init(c_mux_fifo_size, 2)
   )
   PORT MAP (
     dp_clk => dp_clk,
@@ -229,6 +241,35 @@ BEGIN
 
   to_ri_sosi <= ring_mux_sosi;
 
+  -- fill fifo to remove gaps
+  u_dp_fifo_fill_eop : ENTITY dp_lib.dp_fifo_fill_eop
+  GENERIC MAP (
+    g_data_w         => c_longword_w,
+    g_bsn_w          => c_dp_stream_bsn_w, 
+    g_empty_w        => c_dp_stream_empty_w, 
+    g_channel_w      => c_dp_stream_channel_w,
+    g_error_w        => c_dp_stream_error_w, 
+    g_use_bsn        => TRUE, 
+    g_use_empty      => TRUE, 
+    g_use_channel    => TRUE, 
+    g_use_error      => TRUE, 
+    g_use_sync       => TRUE, 
+    g_fifo_fill      => c_block_size_longwords,
+    g_fifo_size      => c_fifo_fill_size
+  )
+  PORT MAP (
+    wr_rst      => dp_rst,
+    wr_clk      => dp_clk,
+    rd_rst      => dp_rst,
+    rd_clk      => dp_clk,
+
+    snk_out     => ring_mux_siso,
+    snk_in      => ring_mux_sosi,
+
+    src_in      => dp_fifo_fill_siso,
+    src_out     => dp_fifo_fill_sosi
+  );
+
   ---------------------------------------------------------------
   -- Repack 64b to 32b
   ---------------------------------------------------------------
@@ -244,8 +285,8 @@ BEGIN
     rst => dp_rst,
     clk => dp_clk,
 
-    snk_in  => ring_mux_sosi,
-    snk_out => ring_mux_siso,
+    snk_in  => dp_fifo_fill_sosi,
+    snk_out => dp_fifo_fill_siso,
     src_out => rx_sosi
   );
 
@@ -266,7 +307,9 @@ BEGIN
     snk_in      => rx_sosi,
     src_out_arr => dispatch_invert_sosi_arr
   );
+
   dispatch_sosi_arr <= func_dp_stream_arr_reverse_range(dispatch_invert_sosi_arr);
+    
 
   ---------------------------------------------------------------
   -- dp_bsn_aligner_v2 
diff --git a/libraries/base/dp/dp.peripheral.yaml b/libraries/base/dp/dp.peripheral.yaml
index a86b46f92569d9c4223533d3bec2c8fcd3688568..64e18fe4e39c713ae535859a07f67f936db76315 100644
--- a/libraries/base/dp/dp.peripheral.yaml
+++ b/libraries/base/dp/dp.peripheral.yaml
@@ -127,7 +127,7 @@ peripherals:
           - - field_name: replaced_pkt_cnt
               field_description: "Count of packets that contain replacement data per sync interval."
               address_offset: 1 * MM_BUS_SIZE
-              access_mode: R0
+              access_mode: RO
 
 
   - peripheral_name: dp_bsn_source    # pi_dp_bsn_source.py