diff --git a/libraries/base/dp/src/vhdl/dp_block_gen.vhd b/libraries/base/dp/src/vhdl/dp_block_gen.vhd
index bf55935b897d14c867dbaf2d73f1299389956287..ec320d72635d98fa0c24fb3604a257fc6a70ff35 100644
--- a/libraries/base/dp/src/vhdl/dp_block_gen.vhd
+++ b/libraries/base/dp/src/vhdl/dp_block_gen.vhd
@@ -57,7 +57,9 @@ ENTITY dp_block_gen IS
     g_nof_blk_per_sync   : NATURAL := 8;
     g_empty              : NATURAL := 0;
     g_channel            : NATURAL := 0;
-    g_error              : NATURAL := 0
+    g_error              : NATURAL := 0;
+    g_preserve_sync      : BOOLEAN := FALSE;
+    g_preserve_bsn       : BOOLEAN := FALSE
   );             
   PORT (         
     rst        : IN  STD_LOGIC;
@@ -116,10 +118,17 @@ BEGIN
       nxt_r.src_out.re    <= snk_in.re;
       nxt_r.src_out.im    <= snk_in.im;
     END IF;
-    nxt_r.src_out.sync  <= '0';
+
+    IF g_preserve_sync = FALSE THEN
+      nxt_r.src_out.sync  <= '0';
+    ELSE
+      nxt_r.src_out.sync  <= snk_in.sync;
+    END IF;
+
     nxt_r.src_out.valid <= '0';
     nxt_r.src_out.sop   <= '0';
     nxt_r.src_out.eop   <= '0';
+    nxt_r.src_out.bsn   <= snk_in.bsn;
     
     CASE r.state IS
       WHEN s_sop =>
@@ -129,19 +138,23 @@ BEGIN
           nxt_r.bsn     <= (OTHERS=>'0');
         ELSE                            -- enabled block generator
           IF ready='1' THEN      -- once enabled the complete block will be output
-            IF r.blk_cnt=0 THEN
-              nxt_r.src_out.sync  <= '1';
-            END IF;
-            IF r.blk_cnt>=g_nof_blk_per_sync-1 THEN
-              nxt_r.blk_cnt <= 0;
-            ELSE
-              nxt_r.blk_cnt <= r.blk_cnt+1;
+            IF g_preserve_sync = FALSE THEN
+              IF r.blk_cnt=0 THEN
+                nxt_r.src_out.sync  <= '1';
+              END IF;
+              IF r.blk_cnt>=g_nof_blk_per_sync-1 THEN
+                nxt_r.blk_cnt <= 0;
+              ELSE
+                nxt_r.blk_cnt <= r.blk_cnt+1;
+              END IF;
             END IF;
             nxt_r.src_out.valid   <= '1';
             nxt_r.src_out.sop     <= '1';
-            nxt_r.bsn             <= INCR_UVEC(r.bsn, 1);
-            nxt_r.src_out.bsn     <= r.bsn;
-            nxt_r.src_out.channel <= TO_DP_CHANNEL(g_channel);
+            IF g_preserve_bsn=FALSE THEN
+              nxt_r.bsn             <= INCR_UVEC(r.bsn, 1);
+              nxt_r.src_out.bsn     <= r.bsn;
+              nxt_r.src_out.channel <= TO_DP_CHANNEL(g_channel);
+            END IF;
             IF g_nof_data=1 THEN
               nxt_r.src_out.eop   <= '1';  -- single word block
               nxt_r.src_out.empty <= TO_DP_EMPTY(g_empty);