diff --git a/libraries/base/dp/src/vhdl/dp_packet_merge.vhd b/libraries/base/dp/src/vhdl/dp_packet_merge.vhd
index 77a3a2dd6b0e5c090398d6099a6c720ca92a97e1..986bcb5c21ebdde4b60dd928b5de99bcfb4e6f90 100644
--- a/libraries/base/dp/src/vhdl/dp_packet_merge.vhd
+++ b/libraries/base/dp/src/vhdl/dp_packet_merge.vhd
@@ -201,6 +201,7 @@ ARCHITECTURE rtl OF dp_packet_merge IS
     pkt_cnt     : NATURAL RANGE 0 TO g_nof_pkt+1;
     align_cnt   : NATURAL RANGE 0 TO g_nof_pkt+1;
     busy        : STD_LOGIC;
+    sync        : STD_LOGIC;
     src_out     : t_dp_sosi;
   END RECORD;
 
@@ -324,9 +325,17 @@ BEGIN
     IF snk_in.sop = '1' THEN
       IF r.pkt_cnt = 0 THEN
         v.src_out.sop     := '1';
-        v.src_out.sync    := snk_in.sync;     -- only preserve sync when sync interval and nof_pkt interval are aligned, else sync gets lost but could still be recovered from BSN
+        v.src_out.sync    := r.sync;          -- use sync from previous merged packet if it occurred on pkt_cnt /= 0.
         v.src_out.bsn     := snk_in.bsn;      -- use BSN     of first packet for merged packet
         v.src_out.channel := snk_in.channel;  -- use channel of first packet for merged packet
+        v.sync            := '0';             -- reset captured sync.
+        IF snk_in.sync = '1' THEN
+          v.src_out.sync  := '1';     -- set out sync to '1' if this first block contains the sync.
+        END IF;
+      ELSE
+        IF snk_in.sync = '1' THEN
+          v.sync := '1'; -- Capture sync if it occurs on a pkt_cnt /= 0 so we can use it in the next merged packet
+        END IF;
       END IF;
     END IF;
     
@@ -359,6 +368,7 @@ BEGIN
       v.pkt_cnt     := 0;
       v.align_cnt   := 0;
       v.busy        := '0';
+      v.sync        := '0';
       v.src_out     := c_dp_sosi_rst;
     END IF;
  
diff --git a/libraries/base/dp/tb/vhdl/tb_dp_packet_merge.vhd b/libraries/base/dp/tb/vhdl/tb_dp_packet_merge.vhd
index f37dab7d34f6a13a485ea7a1fd91c31110fd13ed..d3821177509f80c9ee2e0d4134f6eda890c7907e 100644
--- a/libraries/base/dp/tb/vhdl/tb_dp_packet_merge.vhd
+++ b/libraries/base/dp/tb/vhdl/tb_dp_packet_merge.vhd
@@ -238,9 +238,6 @@ BEGIN
   proc_dp_verify_data("verify_snk_in.bsn",     c_rl, c_unsigned_0, TO_UNSIGNED(c_verify_data_gap,32), clk, verify_en_sop,   verify_snk_out.ready, verify_snk_in.sop,   verify_snk_in.bsn,     prev_verify_snk_in.bsn);
   proc_dp_verify_data("verify_snk_in.channel", c_rl, c_unsigned_0, TO_UNSIGNED(c_verify_data_gap,32), clk, verify_en_sop,   verify_snk_out.ready, verify_snk_in.sop,   verify_snk_in.channel, prev_verify_snk_in.channel);
   
-  -- Verify that the output sync occurs when expected
-  proc_dp_verify_sync(c_sync_period, c_sync_offset, clk, verify_en_sop, verify_snk_in.sync, verify_snk_in.sop, verify_snk_in.bsn);
-  
   -- Verify output packet ctrl
   proc_dp_verify_sop_and_eop(clk, verify_snk_in.valid, verify_snk_in.sop, verify_snk_in.eop, verify_hold_sop);