diff --git a/hdl/ccn_pack.vhd b/hdl/ccn_pack.vhd
index 8bd963954dfd6f6823847cc87a06232bdbc92a43..58ce0576771d3705809be2f5035bae3d7e8f8360 100644
--- a/hdl/ccn_pack.vhd
+++ b/hdl/ccn_pack.vhd
@@ -112,6 +112,7 @@ architecture rtl of ccn_pack is
     signal fifo_tlast               : std_logic;
     signal fifo_tuser               : std_logic_vector(0 downto 0);
     signal fifo_tuser_slv           : std_logic_vector(7 downto 0);
+    signal fifo_err_rst             : std_logic;
 
     -- Some constant for mapping
     constant C_TKEEP_S00            : std_logic_vector(23 downto 0)              := (others => '1');
@@ -244,12 +245,13 @@ begin
     header_tdata(103 downto 96)  <= mac_length(15 downto 8);
     header_tdata(111 downto 104) <= mac_length(7 downto 0);
     header_tdata(119 downto 112) <= G_PROTOCOL_ID;
-    header_tdata(127 downto 120) <= (others => '0');
+    header_tdata(127 downto 120) <= pkt_reg_tuser(7 downto 0);
     header_tdata(191 downto 128) <= timeref;
 
     sup_arb_res_s1 <= not header_tready;
 
-    pkt_ix_tdata       <= pkt_reg_tdata;
+    pkt_ix_tdata       <= pkt_reg_tdata when frame_error = '0' else
+                          (others => '0');
     pkt_ix_tvalid      <= frame_error or reg_tvalid;
     pkt_ix_tlast       <= frame_error or pkt_cnt_zero;
     pkt_ix_tuser       <= (others => frame_error);
@@ -290,10 +292,11 @@ begin
     -- FIFO --
     ----------
     fifo_tuser(0) <= or_reduce(fifo_tuser_slv);
+    fifo_err_rst  <= (not fifo_tuser(0)) and aresetn;
 
     inst_fifo: entity work.ccn_axis_fifo_pframe
     port map(
-        s_axis_aresetn => aresetn,
+        s_axis_aresetn => fifo_err_rst,
         s_axis_aclk    => aclk,
         m_axis_aclk    => m_axis_clk,
         s_axis_tvalid  => fifo_tvalid,
diff --git a/hdl/ccn_unpack.vhd b/hdl/ccn_unpack.vhd
index b71f0591e6e41d3cd020cd23378716b76da6a86c..c8d22b44408833196c7c8d083e0386395dcdc31e 100644
--- a/hdl/ccn_unpack.vhd
+++ b/hdl/ccn_unpack.vhd
@@ -28,6 +28,7 @@ entity ccn_unpack is
         err_mac_dst           : out std_logic;
         err_mac_src           : out std_logic;
         pkt_mcts              : out std_logic_vector(63 downto 0);
+        frame_counter         : out std_logic_vector(31 downto 0);
 
         -- AXIS Frame input
         s_axis_clk            : in std_logic; -- Only S_AXIS signals on this clk domain
@@ -82,12 +83,15 @@ architecture rtl of ccn_unpack is
     signal header_mac_len   : std_logic_vector(15 downto 0);
     signal header_pkt_id    : std_logic_vector(7 downto 0);
     signal header_pkt_mcts  : std_logic_vector(63 downto 0);
+    signal header_framenum  : std_logic_vector(7 downto 0);
 
     -- Status and stats
     signal frame_cnt        : unsigned(31 downto 0);
 
 begin
 
+    frame_counter   <= std_logic_vector(frame_cnt);
+
     ----------------
     -- INPUT FIFO --
     ----------------
@@ -129,9 +133,9 @@ begin
         m_axis_tkeep        => m_axis_tkeep,
         m_axis_tlast        => open
     );
-    m_axis_tvalid <= wconv_out_tvalid;
-    m_axis_tlast <= wconv_out_tvalid;
-    m_axis_tuser <= std_logic_vector(frame_cnt(m_axis_tuser'range));
+    m_axis_tvalid   <= wconv_out_tvalid;
+    m_axis_tlast    <= wconv_out_tvalid;
+    m_axis_tuser    <= std_logic_vector(header_framenum(m_axis_tuser'range));
 
     wconv_in_tvalid <= (not fsm_dump) and fifo_tvalid;
 
@@ -218,6 +222,7 @@ begin
             header_mac_len   <= (others => '0');
             header_pkt_id    <= (others => '0');
             frame_cnt        <= (others => '0');
+            header_framenum  <= (others => '0');
             err_pid          <= '0';
             err_mac_dst      <= '0';
             err_mac_src      <= '0';
@@ -241,11 +246,12 @@ begin
                 if fsm_state = G_TWO then
                     header_mac_src(31 downto 24)    <= fifo_tdata(7 downto 0);
                     header_mac_src(23 downto 16)    <= fifo_tdata(15 downto 8);
-                    header_mac_src(15 downto 8)    <= fifo_tdata(23 downto 16);
-                    header_mac_src(7 downto 0)    <= fifo_tdata(31 downto 24);
-                    header_mac_len(15 downto 8)    <= fifo_tdata(39 downto 32);
-                    header_mac_len(7 downto 0)    <= fifo_tdata(47 downto 40);
-                    header_pkt_id(7 downto 0)    <= fifo_tdata(55 downto 48);
+                    header_mac_src(15 downto 8)     <= fifo_tdata(23 downto 16);
+                    header_mac_src(7 downto 0)      <= fifo_tdata(31 downto 24);
+                    header_mac_len(15 downto 8)     <= fifo_tdata(39 downto 32);
+                    header_mac_len(7 downto 0)      <= fifo_tdata(47 downto 40);
+                    header_pkt_id                   <= fifo_tdata(55 downto 48);
+                    header_framenum                 <= fifo_tdata(63 downto 56);
                 end if;
 
                 if fsm_state = G_THREE then
diff --git a/hdl/top_ccn_packeter.vhd b/hdl/top_ccn_packeter.vhd
index 6803b9801a6ea7f182e26535c00d43533e619698..936b966863d5a647c4979c950a89c79eae738a7b 100644
--- a/hdl/top_ccn_packeter.vhd
+++ b/hdl/top_ccn_packeter.vhd
@@ -69,6 +69,12 @@ architecture rtl of top_ccn_packeter is
 
     signal areset              : std_logic;
 
+    -- Flags
+    signal s_err_timeout        : std_logic;
+    signal f_err_timeout        : std_logic;
+    signal s_err_seq            : std_logic;
+    signal f_err_seq            : std_logic;
+
 begin
 
     areset  <= not aresetn;
@@ -107,18 +113,18 @@ begin
         aresetn              => aresetn,
 
         -- Control
-        packeter_run         => addrmap_o.packeter_bpm_frame.run.data(0),
+        packeter_run         => addrmap_o.control.enable.data(0),
         mac_dst              => mac_dst,
         mac_src              => mac_src,
-        mac_length           => addrmap_o.mac_length.length.data,
-        packet_timeout       => addrmap_o.packeter_bpm_frame.timeout.data,
-        expect_pkt_cnt       => addrmap_o.packeter_bpm_frame.count.data,
+        mac_length           => addrmap_o.mac_length.data.data,
+        packet_timeout       => addrmap_o.timeout.data.data,
+        expect_pkt_cnt       => addrmap_o.npacket.data.data,
         timeref              => timeref,
 
         -- Status
-        status_err_seq       => addrmap_i.packeter_error.seq.data(0),
-        status_err_timeout   => addrmap_i.packeter_error.timeout.data(0),
-        status_frame_count   => addrmap_i.packeter_count.count.data,
+        status_err_seq       => s_err_seq,
+        status_err_timeout   => s_err_timeout,
+        status_frame_count   => addrmap_i.packeter_count.data.data,
 
         -- AXIS Packet input
         s_axis_tdata         => s_axis_tdata,
@@ -137,5 +143,35 @@ begin
 
     );
 
+    ------------------
+    -- STICKY FLAGS --
+    ------------------
+    addrmap_i.packeter_error.timeout.data(0)    <= f_err_timeout;
+    addrmap_i.packeter_error.seq.data(0)        <= f_err_seq;
+
+    p_flags:process(aclk, aresetn)
+    begin
+        if aresetn = '0' then
+            f_err_timeout   <= '0';
+            f_err_seq       <= '0';
+        elsif rising_edge(aclk) then
+
+            if addrmap_o.reset_error.reset.data(0) = '1' then
+                f_err_timeout  <= '0';
+                f_err_seq      <= '0';
+            else
+
+                if s_err_timeout = '1' then
+                    f_err_timeout   <= '1';
+                end if;
+
+                if s_err_seq = '1' then
+                    f_err_seq       <= '1';
+                end if;
+
+            end if;
+
+        end if;
+    end process;
 
 end architecture;
diff --git a/hdl/top_ccn_unpacketer.vhd b/hdl/top_ccn_unpacketer.vhd
index b43e6870b5e84cc96f1e949245cda6063a7a1a13..c2ab3fe2a9ae7cf8968a8a5a84fee64965ca4345 100644
--- a/hdl/top_ccn_unpacketer.vhd
+++ b/hdl/top_ccn_unpacketer.vhd
@@ -70,6 +70,17 @@ architecture struct of top_ccn_unpacketer is
 
     signal areset              : std_logic;
 
+
+    -- Error flags
+    signal f_err_pid           : std_logic;
+    signal f_err_mac_len       : std_logic;
+    signal f_err_mac_dst       : std_logic;
+    signal f_err_mac_src       : std_logic;
+    signal s_err_pid           : std_logic;
+    signal s_err_mac_len       : std_logic;
+    signal s_err_mac_dst       : std_logic;
+    signal s_err_mac_src       : std_logic;
+
 begin
 
     areset  <= not aresetn;
@@ -117,11 +128,12 @@ begin
         mac_src               => mac_src,
 
         -- Status
-        err_pid               => addrmap_i.unpack_error.err_pid.data(0),
-        err_mac_len           => addrmap_i.unpack_error.err_mac_len.data(0),
-        err_mac_dst           => addrmap_i.unpack_error.err_mac_dst.data(0),
-        err_mac_src           => addrmap_i.unpack_error.err_mac_src.data(0),
+        err_pid               => s_err_pid,
+        err_mac_len           => s_err_mac_len,
+        err_mac_dst           => s_err_mac_dst,
+        err_mac_src           => s_err_mac_src,
         pkt_mcts              => open,
+        frame_counter         => addrmap_i.frame_cnt.data.data,
 
         -- AXIS Frame input
         s_axis_clk            => s_axis_clk,
@@ -142,4 +154,49 @@ begin
 
     );
 
+    ------------------
+    -- STICKY FLAGS --
+    ------------------
+    addrmap_i.unpack_error.err_pid.data(0)      <= f_err_pid;
+    addrmap_i.unpack_error.err_mac_len.data(0)  <= f_err_mac_len;
+    addrmap_i.unpack_error.err_mac_dst.data(0)  <= f_err_mac_dst;
+    addrmap_i.unpack_error.err_mac_src.data(0)  <= f_err_mac_src;
+
+    p_flags:process(aclk, aresetn)
+    begin
+        if aresetn = '0' then
+            f_err_pid           <= '0';
+            f_err_mac_len       <= '0';
+            f_err_mac_dst       <= '0';
+            f_err_mac_src       <= '0';
+        elsif rising_edge(aclk) then
+
+            if addrmap_o.reset_error.reset.data(0) = '1' then
+                f_err_pid           <= '0';
+                f_err_mac_len       <= '0';
+                f_err_mac_dst       <= '0';
+                f_err_mac_src       <= '0';
+            else
+
+                if s_err_pid = '1' then
+                    f_err_pid   <= '1';
+                end if;
+
+                if s_err_mac_len = '1' then
+                    f_err_mac_len   <= '1';
+                end if;
+
+                if s_err_mac_dst = '1' then
+                    f_err_mac_dst   <= '1';
+                end if;
+
+                if s_err_mac_src = '1' then
+                    f_err_mac_src   <= '1';
+                end if;
+            end if;
+
+        end if;
+    end process;
+
+
 end architecture struct;
diff --git a/rdl/ccn_packeter.rdl b/rdl/ccn_packeter.rdl
index b3526817a36d00032d14e0a16576f46e4d40ec61..64ee0dbe24a46bb92d1e297d1ea68eae49e09266 100644
--- a/rdl/ccn_packeter.rdl
+++ b/rdl/ccn_packeter.rdl
@@ -40,31 +40,43 @@ addrmap ccn_packeter {
     } MAC_SRC_MSB;
 
     reg {
-        desc="Ethernet MAC frame length. Should be PACKETER_BPM_FRAME.COUNT+8";
-        field {hw=r; sw=rw;} LENGTH[16];
+        desc="Ethernet MAC frame length. Should be (NPACKET+1)*PACKETSIZE+10";
+        field {hw=r; sw=rw;} data[16];
     } MAC_LENGTH;
 
     reg {
         desc="Packeter control.";
-        field {hw=r; sw=rw; desc="Timeout limit. One unit is 4 ns.";
-        } TIMEOUT[16];
-        field {hw=r; sw=rw; desc="Number of BPM packet to aggregate.";
-        } COUNT[8];
-        field {hw=r; sw=rw; desc="Start the BPM packeter.";
-        } RUN;
-    } PACKETER_BPM_FRAME;
+        default hw=r; default sw=rw;
+        field {desc="Enable the BPM packeter.";} ENABLE;
+    } CONTROL;
+
+    reg {
+        default hw=r; default sw=rw;
+        field {desc="Timeout limit. One unit is 4 ns.";} data[16];
+    } TIMEOUT;
+
+    reg {
+        default hw=r; default sw=rw;
+        field {desc="Number of BPM packet to aggregate -1 .";} data[8];
+    } NPACKET;
 
     reg {
         desc="Number of output Position Packets counted";
-        field {hw=w; sw=r;} COUNT[32];
+        field {hw=w; sw=r;} data[32];
     } PACKETER_COUNT;
 
     reg {
         desc="Error detected by the packeter. Cleared on read.";
-        field {hw=w; sw=r; rclr; sticky; desc="New FA sequence received before reaching expected number of BPM packets.";
+        field {hw=w; sw=r; desc="New FA sequence received before reaching expected number of BPM packets.";
         } SEQ;
-        field {hw=w; sw=r; rclr; sticky; desc="Timeout waiting for a new BPM packet.";
+        field {hw=w; sw=r; desc="Timeout waiting for a new BPM packet.";
         } TIMEOUT;
     } PACKETER_ERROR;
 
+    reg {
+        desc="Reset error flags";
+        default hw=r; default sw=rw;
+        field {desc="Start the BPM packeter.";} RESET;
+    } RESET_ERROR;
+
 };
diff --git a/rdl/ccn_unpacketer.rdl b/rdl/ccn_unpacketer.rdl
index d95ef325a68447827608c136e303dfddabf6838e..745429371d9881a46a4c25580b09eeed63465777 100644
--- a/rdl/ccn_unpacketer.rdl
+++ b/rdl/ccn_unpacketer.rdl
@@ -40,27 +40,37 @@ addrmap ccn_unpacketer {
     } MAC_SRC_MSB;
 
     reg {
-        desc="Ethernet MAC frame length. Should be PACKETER_BPM_FRAME.COUNT+8";
+        desc="Ethernet MAC frame length. Should be (CONFIGURE.NPACKET+1)*PACKETSIZE+10";
         field {hw=r; sw=rw;} LENGTH[16];
     } MAC_LENGTH;
 
     reg {
         desc="Unpacketer control.";
-        field {hw=r; sw=rw; desc="Start the BPM packeter.";
-        } enable;
-    } control;
+        default hw=r; default sw=rw;
+        field {desc="Start the BPM packeter.";} ENABLE;
+    } CONTROL;
 
     reg {
         desc="Error detected by the packeter. Cleared on read.";
-        field {hw=w; sw=r; rclr; sticky; desc="Protocol ID mismatch.";
+        field {hw=w; sw=r; desc="Protocol ID mismatch.";
         } ERR_PID;
-        field {hw=w; sw=r; rclr; sticky; desc="Incomming MAC frame length not expected.";
+        field {hw=w; sw=r; desc="Incomming MAC frame length not expected.";
         } ERR_MAC_LEN;
-        field {hw=w; sw=r; rclr; sticky; desc="Incomming MAC source address not expected.";
+        field {hw=w; sw=r; desc="Incomming MAC source address not expected.";
         } ERR_MAC_SRC;
-        field {hw=w; sw=r; rclr; sticky; desc="Incomming MAC destination address not expected.";
+        field {hw=w; sw=r; desc="Incomming MAC destination address not expected.";
         } ERR_MAC_DST;
-
     } UNPACK_ERROR;
 
+    reg {
+        desc="Reset error flags";
+        default hw=r; default sw=rw;
+        field {desc="Start the BPM packeter.";} RESET;
+    } RESET_ERROR;
+
+    reg {
+        desc="Unpacked frames counter.";
+        field {hw=rw; sw=r;} data[32];
+    } FRAME_CNT;
+
 };