diff --git a/libraries/base/dp/src/vhdl/dp_fifo_fill_eop.vhd b/libraries/base/dp/src/vhdl/dp_fifo_fill_eop.vhd
index dcebc6288bd85298d199de6da70e72779bedf1ac..c8e3d4e667ff1a49202863cf048f982bb954f2f3 100644
--- a/libraries/base/dp/src/vhdl/dp_fifo_fill_eop.vhd
+++ b/libraries/base/dp/src/vhdl/dp_fifo_fill_eop.vhd
@@ -122,7 +122,7 @@ ARCHITECTURE rtl OF dp_fifo_fill_eop IS
  
   SIGNAL received_eop : BOOLEAN := FALSE;
   SIGNAL nxt_received_eop : BOOLEAN := FALSE;
-  
+  SIGNAL crossed_domain_snk_in_eop : STD_LOGIC := '0';
 BEGIN
 
   -- Output monitor FIFO filling
@@ -136,6 +136,7 @@ BEGIN
   rd_fill_ctrl <= rd_fill_32b(c_fifo_size_w-1 DOWNTO 0);
 
   gen_dp_fifo_sc : IF g_use_dual_clock=FALSE GENERATE
+    crossed_domain_snk_in_eop <= snk_in.eop;
     u_dp_fifo_sc : ENTITY work.dp_fifo_sc
     GENERIC MAP (
       g_technology     => g_technology,
@@ -173,7 +174,17 @@ BEGIN
     wr_fifo_usedw <= rd_fifo_usedw;
   END GENERATE;
   
-  gen_dp_fifo_dc : IF g_use_dual_clock=TRUE GENERATE
+  gen_dp_fifo_dc : IF g_use_dual_clock=TRUE GENERATE  
+    u_common_spulse : ENTITY common_lib.common_spulse
+    PORT MAP (
+      in_rst  => wr_rst,
+      in_clk  => wr_clk,
+      in_pulse  => snk_in.eop,
+      out_rst => rd_rst,
+      out_clk => rd_clk,
+      out_pulse => crossed_domain_snk_in_eop
+    );
+
     u_dp_fifo_dc : ENTITY work.dp_fifo_dc
     GENERIC MAP (
       g_technology     => g_technology,
@@ -218,7 +229,7 @@ BEGIN
   END GENERATE;  -- no_fill
   
   gen_fill : IF g_fifo_fill>0 GENERATE
-  
+ 
     src_out <= i_src_out;
     
     p_rd_clk: PROCESS(rd_clk, rd_rst)
@@ -232,7 +243,11 @@ BEGIN
         xon_reg   <= nxt_xon_reg;
         state     <= nxt_state;
         i_src_out <= nxt_src_out;
-        received_eop <= nxt_received_eop;
+        IF crossed_domain_snk_in_eop = '1' THEN
+          received_eop <= TRUE;
+        ELSE
+          received_eop <= nxt_received_eop;
+        END IF;
       END IF;
     END PROCESS;
     
@@ -242,7 +257,7 @@ BEGIN
       p_state : PROCESS(state, rd_sosi, src_in, xon_reg, rd_fifo_usedw, rd_fill_ctrl, received_eop)
       BEGIN
         nxt_state <= state;
-        
+        nxt_received_eop <= received_eop;
         rd_siso <= src_in;  -- default acknowledge (RL=1) this input when output is ready
         
         -- The output register stage increase RL=0 to 1, so it matches RL = 1 for src_in.ready
@@ -252,12 +267,6 @@ BEGIN
         nxt_src_out.eop   <= '0';
         nxt_src_out.sync  <= '0';
 
-        IF snk_in.eop = '1' THEN
-          nxt_received_eop <= TRUE;
-        ELSE
-          nxt_received_eop <= received_eop;
-        END IF;        
-
         CASE state IS
           WHEN s_idle =>
             IF xon_reg='0' THEN
@@ -302,7 +311,7 @@ BEGIN
               nxt_state <= s_idle;
             END IF;
         END CASE;
-        
+ 
         -- Pass on frame level flow control
         rd_siso.xon <= src_in.xon;
       END PROCESS;
@@ -329,7 +338,8 @@ BEGIN
       p_state : PROCESS(state, src_in, xon_reg, pend_src_out, rd_fifo_usedw, rd_fill_ctrl, received_eop)
       BEGIN
         nxt_state <= state;
-        
+        nxt_received_eop <= received_eop;
+
         hold_src_in <= src_in;  -- default request (RL=1) new input when output is ready
         
         -- The output register stage matches RL = 1 for src_in.ready
@@ -338,12 +348,6 @@ BEGIN
         nxt_src_out.sop   <= '0';
         nxt_src_out.eop   <= '0';
         nxt_src_out.sync  <= '0';
-       
-        IF snk_in.eop = '1' THEN
-          nxt_received_eop <= TRUE;
-        ELSE
-          nxt_received_eop <= received_eop;
-        END IF;
  
         CASE state IS
           WHEN s_idle =>
@@ -389,7 +393,7 @@ BEGIN
               nxt_state <= s_idle;
             END IF;
         END CASE;
-        
+
         -- Pass on frame level flow control
         hold_src_in.xon <= src_in.xon;
       END PROCESS;