diff --git a/libraries/base/dp/src/vhdl/dp_repack_data.vhd b/libraries/base/dp/src/vhdl/dp_repack_data.vhd
index 85672c1c21ececa6214a16e854829a2556568506..9469c48397784de9b3371c14caaf3505425b334e 100644
--- a/libraries/base/dp/src/vhdl/dp_repack_data.vhd
+++ b/libraries/base/dp/src/vhdl/dp_repack_data.vhd
@@ -139,6 +139,11 @@
 --   The src_out.empty will be 2, because:
 --     (g_out_dat_w*g_out_nof_words-g_in_dat_w*g_in_nof_words)/g_out_symbol_w
 --      = (32*11 - 42*8*1)/ 8 = 2 octet symbols
+-- . Instead of using dp_sosi.data for intermediate results in dp_repack_data, 
+--   a seperate std_logic_vector is used to carry the sosi data as the required 
+--   vector width can become larger than c_dp_stream_data_w. Note that for the
+--   in/out sosi of dp_repack_data, the dp_sosi.data field is still used such 
+--   that there is no added complexity for the user of dp_repack_data.
 --       
 -- Design steps:
 -- * In total the development took 5 days. On day 3 I was in distress because
@@ -204,13 +209,13 @@ ARCHITECTURE rtl OF dp_repack_in IS
   TYPE t_dat_arr  IS ARRAY (INTEGER RANGE <>) OF STD_LOGIC_VECTOR(g_in_dat_w-1 DOWNTO 0);
 
   TYPE t_reg IS RECORD
-    dat_arr       : t_dat_arr(g_in_nof_words-1 DOWNTO 0);     -- internally use dat_arr[] to represent v.src_out.data
-    src_out       : t_dp_sosi;                                -- sosi output
-    src_out_data  : STD_LOGIC_VECTOR(c_in_buf_dat_w-1 DOWNTO 0);
-    hold_out      : t_dp_sosi;                                -- hold snk_in.sync/sop/eop until end of section and then hold valid src_out until src_in.ready
-    flush         : STD_LOGIC;                                -- shift when snk_in.valid or flush in case the last subsection has < g_in_nof_words
-    dat_bit_cnt   : NATURAL RANGE 0 TO c_bit_cnt_max;         -- actual nof bits in subsection
-    pack_bit_cnt  : NATURAL RANGE 0 TO c_bit_cnt_max;         -- count nof bits in subsection
+    dat_arr       : t_dat_arr(g_in_nof_words-1 DOWNTO 0);        -- internally use dat_arr[] to represent v.src_out.data
+    src_out       : t_dp_sosi;                                   -- sosi output
+    src_out_data  : STD_LOGIC_VECTOR(c_in_buf_dat_w-1 DOWNTO 0); -- Use seperate STD_LOGIC_VECTOR to carry the sosi data as c_in_buf_dat_w can be larger than c_dp_stream_data_w.
+    hold_out      : t_dp_sosi;                                   -- hold snk_in.sync/sop/eop until end of section and then hold valid src_out until src_in.ready
+    flush         : STD_LOGIC;                                   -- shift when snk_in.valid or flush in case the last subsection has < g_in_nof_words
+    dat_bit_cnt   : NATURAL RANGE 0 TO c_bit_cnt_max;            -- actual nof bits in subsection
+    pack_bit_cnt  : NATURAL RANGE 0 TO c_bit_cnt_max;            -- count nof bits in subsection
   END RECORD;
 
   SIGNAL data_vec   : STD_LOGIC_VECTOR(c_in_buf_dat_w-1 DOWNTO 0);
diff --git a/libraries/io/eth/src/vhdl/eth_tester_rx.vhd b/libraries/io/eth/src/vhdl/eth_tester_rx.vhd
index cf1ccec8b4c90cdad6a3cee9ef0a3e7fc5ba7e0a..acaf31d8d3eec327626ddee2fedd3bdedd3c5fe3 100644
--- a/libraries/io/eth/src/vhdl/eth_tester_rx.vhd
+++ b/libraries/io/eth/src/vhdl/eth_tester_rx.vhd
@@ -80,8 +80,8 @@ ARCHITECTURE str OF eth_tester_rx IS
   -- Rx FIFO size can be much less than rx_block_sz_max, because st_clk >
   -- eth_clk rate, but with st level tx-rx loopback the Rx FIFO does need
   -- rx_block_sz_max FIFO size.
-  CONSTANT rx_block_sz_max        : NATURAL := c_eth_tester_rx_block_len_max / g_nof_octet_input; 
-  CONSTANT c_fifo_size            : NATURAL := true_log_pow2(rx_block_sz_max);
+  CONSTANT rx_block_sz_max   : NATURAL := ceil_div(c_eth_tester_rx_block_len_max, g_nof_octet_input);
+  CONSTANT c_fifo_size       : NATURAL := true_log_pow2(rx_block_sz_max);
 
   SIGNAL rx_udp_data         : STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0);
   SIGNAL rx_offload_sosi     : t_dp_sosi;
diff --git a/libraries/io/eth/src/vhdl/eth_tester_tx.vhd b/libraries/io/eth/src/vhdl/eth_tester_tx.vhd
index e044f20cb25bee1101d0c62d2b494ec2cef8fb35..c63c25fccd12554350afdf08f252c76d6b436974 100644
--- a/libraries/io/eth/src/vhdl/eth_tester_tx.vhd
+++ b/libraries/io/eth/src/vhdl/eth_tester_tx.vhd
@@ -104,7 +104,7 @@ ARCHITECTURE str OF eth_tester_tx IS
 
   CONSTANT c_nof_total_counts     : NATURAL := 1;  -- one to count Tx packets
 
-  CONSTANT c_nof_repack_words     : NATURAL := g_nof_octet_output / g_nof_octet_generate;
+  CONSTANT c_nof_repack_words     : NATURAL := g_nof_octet_output / g_nof_octet_generate; -- yields integer as g_nof_octet_output is multiple of g_nof_octet_generate.
   CONSTANT c_generate_data_w      : NATURAL := g_nof_octet_generate * c_octet_w;
   CONSTANT c_out_data_w           : NATURAL := g_nof_octet_output * c_octet_w;
   CONSTANT c_nof_symbols_max      : NATURAL := c_network_eth_payload_jumbo_max;