diff --git a/libraries/base/dp/tb/vhdl/dp_statistics.vhd b/libraries/base/dp/tb/vhdl/dp_statistics.vhd
index 3237ff7d75095d3f933779cb2ad009e0c4c27cc3..92530ed6a100cbe031cf102bd4c24a1539abe80a 100644
--- a/libraries/base/dp/tb/vhdl/dp_statistics.vhd
+++ b/libraries/base/dp/tb/vhdl/dp_statistics.vhd
@@ -35,14 +35,15 @@ USE technology_lib.technology_select_pkg.ALL;
 
 ENTITY dp_statistics IS
   GENERIC (
+    g_disable_failures         : BOOLEAN := FALSE; --TRUE: report warnings instead of failures - does not stop sim.
     g_runtime_nof_packets      : NATURAL; -- Run the test bench for nof_packets before asserting tb_end
     g_runtime_timeout          : TIME;    -- Report Failure if g_runtime_nof_packets is not reached before this time
-    g_check_nof_valid          : BOOLEAN := FALSE; -- True enables valid count checking at tb_end. Reports Failure in case of mismatch.
-    g_check_nof_valid_ref      : NATURAL := 0;     -- . Specify reference valid count here
-    g_check_data_rate_mbps     : BOOLEAN := FALSE; -- True enables checking of calculated data rate in Mbps
-    g_check_data_rate_mbps_ref : NATURAL := 0;     -- . Specify reference data rate in Mbps here
-    c_dp_clk_freq_mhz          : NATURAL := 200;   -- Used to calculate data rate
-    c_dp_word_w                : NATURAL := 32     -- Used to calculate data rate
+    g_check_nof_valid          : BOOLEAN := FALSE;  -- True enables valid count checking at tb_end. Reports Failure in case of mismatch.
+    g_check_nof_valid_ref      : NATURAL := 0;      -- . Specify reference valid count here
+    g_check_data_rate_mbps     : BOOLEAN := FALSE;  -- True enables checking of calculated data rate in Mbps
+    g_check_data_rate_mbps_ref : NATURAL := 0;      -- . Specify reference data rate in Mbps here
+    g_dp_clk_freq_khz          : NATURAL := 200000; -- Used to calculate data rate
+    g_dp_word_w                : NATURAL := 32      -- Used to calculate data rate
    );
   PORT (
 
@@ -57,6 +58,8 @@ END dp_statistics;
 
 ARCHITECTURE str OF dp_statistics IS
 
+  CONSTANT c_severity_level   : SEVERITY_LEVEL := sel_a_b(g_disable_failures, WARNING, FAILURE);
+
   SIGNAL packet_count         : NATURAL := 0;
   SIGNAL valid_count          : NATURAL := 0;
   SIGNAL cycle_count          : NATURAL := 0;
@@ -99,7 +102,7 @@ BEGIN
   p_tb_end_calc: PROCESS(nxt_tb_end, timeout)
   BEGIN
     IF nxt_tb_end='1' AND timeout='0' THEN --Don't calc anything if a timeout occured
-      data_rate_mbps <= c_dp_clk_freq_mhz * c_dp_word_w * valid_count / cycle_count;
+      data_rate_mbps <= g_dp_clk_freq_khz * g_dp_word_w / 1000 * valid_count / cycle_count;
     END IF;
   END PROCESS;
 
@@ -112,8 +115,8 @@ BEGIN
       REPORT "[dp_statistics] Timeout occured!" SEVERITY FAILURE;
     ELSIF nxt_tb_end='1' THEN
       IF falling_edge(dp_clk) THEN
-        IF (g_check_nof_valid     =TRUE AND valid_count   /=g_check_nof_valid_ref     ) THEN REPORT "[dp_statistics] Valid count does not match reference" SEVERITY FAILURE; END IF;
-        IF (g_check_data_rate_mbps=TRUE AND data_rate_mbps/=g_check_data_rate_mbps_ref) THEN REPORT "[dp_statistics] data rate does not match reference" SEVERITY FAILURE; END IF;
+        IF (g_check_nof_valid     =TRUE AND valid_count   /=g_check_nof_valid_ref     ) THEN REPORT "[dp_statistics] Valid count does not match reference" SEVERITY c_severity_level; END IF;
+        IF (g_check_data_rate_mbps=TRUE AND data_rate_mbps/=g_check_data_rate_mbps_ref) THEN REPORT "[dp_statistics] data rate does not match reference"   SEVERITY c_severity_level; END IF;
       END IF;
     END IF;
   END PROCESS;
diff --git a/libraries/io/eth/src/vhdl/eth_statistics.vhd b/libraries/io/eth/src/vhdl/eth_statistics.vhd
index d3f16a0ccb3cc3cbaaf0f11cdc41e1384e956fa3..89ac030b35afd6b94737cdd9d8f50cfc4d156e37 100644
--- a/libraries/io/eth/src/vhdl/eth_statistics.vhd
+++ b/libraries/io/eth/src/vhdl/eth_statistics.vhd
@@ -22,7 +22,7 @@
 -- Author:
 -- . Daniel van der Schuur
 -- Purpose:
--- . Provide a generic Ethernet output checking stage for simulation.
+-- . 1GbE wrapper for dp_statistics
 
 LIBRARY IEEE, common_lib, work, technology_lib, dp_lib, tech_tse_lib;
 USE IEEE.STD_LOGIC_1164.ALL;
@@ -36,12 +36,14 @@ USE technology_lib.technology_select_pkg.ALL;
 
 ENTITY eth_statistics IS
   GENERIC (
-    g_disable_failures    : BOOLEAN := FALSE; --TRUE: report warnings instead of failures - does not stop sim.
-    g_runtime_nof_packets : NATURAL; -- Run the test bench for nof_packets before asserting tb_end
-    g_runtime_timeout     : TIME;    -- Report Failure if g_runtime_nof_packets is not reached before this time
-    g_check_nof_valid     : BOOLEAN := FALSE; -- True enables valid count checking at tb_end. Reports Failure in case of mismatch.
-    g_check_nof_valid_ref : NATURAL := 0      -- . Specify reference valid count here
-   );
+    g_disable_failures         : BOOLEAN := FALSE; --TRUE: report warnings instead of failures - does not stop sim.
+    g_runtime_nof_packets      : NATURAL; -- Run the test bench for nof_packets before asserting tb_end
+    g_runtime_timeout          : TIME;    -- Report Failure if g_runtime_nof_packets is not reached before this time
+    g_check_nof_valid          : BOOLEAN := FALSE; -- True enables valid count checking at tb_end. Reports Failure in case of mismatch.
+    g_check_nof_valid_ref      : NATURAL := 0;     -- . Specify reference valid count here
+    g_check_data_rate_mbps     : BOOLEAN := FALSE; -- True enables checking of calculated data rate in Mbps
+    g_check_data_rate_mbps_ref : NATURAL := 0     -- . Specify reference data rate in Mbps here
+  );
   PORT (
     eth_serial_in : IN  STD_LOGIC;
     tb_end        : OUT STD_LOGIC -- To be used to stop test-bench generated clocks
@@ -51,9 +53,7 @@ END eth_statistics;
 
 ARCHITECTURE str OF eth_statistics IS
 
-  CONSTANT c_severity_level   : SEVERITY_LEVEL := sel_a_b(g_disable_failures, WARNING, FAILURE);
-
-  CONSTANT c_eth_clk_freq_mhz : NATURAL := 125;
+  CONSTANT c_eth_clk_freq_khz : NATURAL := 125000;
   CONSTANT c_eth_word_w       : NATURAL := 32;
   CONSTANT c_eth_clk_period   : TIME := 8 ns;
 
@@ -62,21 +62,15 @@ ARCHITECTURE str OF eth_statistics IS
  
   SIGNAL tech_tse_rx_src_out  : t_dp_sosi;
 
-  SIGNAL packet_count         : NATURAL := 0;
-  SIGNAL valid_count          : NATURAL := 0;
-  SIGNAL cycle_count          : NATURAL := 0;
   SIGNAL i_tb_end             : STD_LOGIC;
-  SIGNAL timeout              : STD_LOGIC;
-
-  SIGNAL nxt_packet_count     : NATURAL := 0;
-  SIGNAL nxt_valid_count      : NATURAL := 0;
-  SIGNAL nxt_cycle_count      : NATURAL := 0;
-  SIGNAL nxt_tb_end           : STD_LOGIC;
-
-  SIGNAL data_rate_mbps       : NATURAL; -- Data rate in Mbps (natural is only 32b so bps is not possible).
 
 BEGIN
 
+  ------------------------------------------------------------------------------
+  -- We're using the tb_end output locally 
+  ------------------------------------------------------------------------------
+  tb_end <= i_tb_end;
+
   ------------------------------------------------------------------------------
   -- We're generating a clock locally; it happens to be in sync with the 125Mz
   -- transmitter clock that is generated from 25MHz by a PLL.
@@ -117,68 +111,27 @@ BEGIN
   );
 
   ------------------------------------------------------------------------------
-  -- Counters
-  ------------------------------------------------------------------------------
-  nxt_packet_count <= packet_count+1 WHEN tech_tse_rx_src_out.sop='1'  ELSE packet_count;
-  nxt_valid_count  <= valid_count+1  WHEN tech_tse_rx_src_out.valid='1'ELSE valid_count;
-  nxt_cycle_count  <= cycle_count+1  WHEN packet_count>0 OR (packet_count=0 AND tech_tse_rx_src_out.sop='1') ELSE cycle_count;
-
-  ------------------------------------------------------------------------------
-  -- Assert timeout after user specified time
-  -- . Note: Using AFTER [time] results in the simulation actually running up to
-  --         the runtime. This is okay as tb_end='1' makes sure no signals are
-  --         changing anymore so this does not take extra sim time.
-  ------------------------------------------------------------------------------ 
-  timeout  <= '0', '1' AFTER g_runtime_timeout;
-
+  -- dp_statistics
   ------------------------------------------------------------------------------
-  -- Assert tb_end if we've seen g_runtime_nof_packets packets
-  ------------------------------------------------------------------------------ 
-  nxt_tb_end <= '1' WHEN packet_count>g_runtime_nof_packets OR (packet_count=g_runtime_nof_packets AND tech_tse_rx_src_out.sop='1') ELSE '0';
-  tb_end     <= i_tb_end;
-
-  ------------------------------------------------------------------------------
-  -- Derive some interesting statistics
-  ------------------------------------------------------------------------------
-  p_tb_end_calc: PROCESS(nxt_tb_end, timeout)
-  BEGIN
-    IF nxt_tb_end='1' AND timeout='0' THEN --Don't calc anything if a timeout occured
-      IF falling_edge(eth_clk) THEN
-        data_rate_mbps <= c_eth_clk_freq_mhz * c_eth_word_w * valid_count / cycle_count;
-      END IF;
-    END IF;
-  END PROCESS;
-
-  ------------------------------------------------------------------------------
-  -- On tb_end; do the checks defined in the generics
-  ------------------------------------------------------------------------------
-  p_tb_end_check: PROCESS(eth_clk)
-  BEGIN
-    IF timeout='1' AND nxt_tb_end='0' THEN
-      REPORT "[eth_statistics] Timeout occured!" SEVERITY FAILURE;
-    ELSIF nxt_tb_end='1' THEN
-      IF falling_edge(eth_clk) THEN
-        IF (g_check_nof_valid=TRUE AND valid_count/=g_check_nof_valid_ref) THEN REPORT "[eth_statistics] Valid count does not match reference" SEVERITY c_severity_level; END IF;
-      END IF;
-    END IF;
-  END PROCESS;
-
-  ------------------------------------------------------------------------------
-  -- Registers
-  ------------------------------------------------------------------------------
-  p_eth_clk: PROCESS(eth_clk, eth_rst)
-  BEGIN
-    IF eth_rst='1' THEN
-      packet_count <= 0;
-      valid_count  <= 0;
-      cycle_count  <= 0;
-      i_tb_end     <= '0';
-    ELSIF(rising_edge(eth_clk)) THEN
-      packet_count <= nxt_packet_count;
-      valid_count  <= nxt_valid_count; 
-      cycle_count  <= nxt_cycle_count; 
-      i_tb_end     <= nxt_tb_end;      
-    END IF;  
-  END PROCESS;
+  u_dp_statistics : ENTITY dp_lib.dp_statistics
+    GENERIC MAP (
+      g_disable_failures         => g_disable_failures,
+      g_runtime_nof_packets      => g_runtime_nof_packets,
+      g_runtime_timeout          => g_runtime_timeout,
+      g_check_nof_valid          => g_check_nof_valid,
+      g_check_nof_valid_ref      => g_check_nof_valid_ref,
+      g_check_data_rate_mbps     => g_check_data_rate_mbps,
+      g_check_data_rate_mbps_ref => g_check_data_rate_mbps_ref,
+      g_dp_clk_freq_khz          => c_eth_clk_freq_khz,
+      g_dp_word_w                => c_eth_word_w
+    )
+  PORT MAP (  
+    dp_clk => eth_clk,
+    dp_rst => eth_rst,    
+
+    snk_in => tech_tse_rx_src_out,
+
+    tb_end => i_tb_end
+  );
 
 END str;