diff --git a/hdl/eb_slave_core/WB_bus_adapter_streaming_sg.vhd b/hdl/eb_slave_core/WB_bus_adapter_streaming_sg.vhd
index 6a0a5fb39ef0b0d09d47999f352ba5e7f03b0879..aa76fffba90b7e8cee0ff1ffc8d3384adcb55441 100644
--- a/hdl/eb_slave_core/WB_bus_adapter_streaming_sg.vhd
+++ b/hdl/eb_slave_core/WB_bus_adapter_streaming_sg.vhd
@@ -192,8 +192,7 @@ A_LESSER_B:		if(c_dat_w_min = g_dat_width_A) GENERATE
 			sipo_sh_in <= '1' when (NOT(sipo_full = '1' AND B_STALL_i = '1') AND A_CYC_i = '1' AND A_STB_i = '1')
 			else '0';  
 			
-			B_CYC_o <= '1' when (A_CYC_i = '1' OR sipo_full= '1')
-			else '0';
+			B_CYC_o <= A_CYC_i OR (sipo_full and not ALLRDY_STROBED);
 			
 			
 			sipo_clr <= '0';
diff --git a/hdl/eb_slave_core/eb_reg_fifo.vhd b/hdl/eb_slave_core/eb_reg_fifo.vhd
deleted file mode 100644
index 1fe5d4c86cbbf0a8c18d3faeae8b86769c033754..0000000000000000000000000000000000000000
--- a/hdl/eb_slave_core/eb_reg_fifo.vhd
+++ /dev/null
@@ -1,142 +0,0 @@
-------------------------------------------------------------------------------
--- Title      : Etherbone Register FIFO
--- Project    : Etherbone Core
-------------------------------------------------------------------------------
--- File       : eb_fifo.vhd
--- Author     : Wesley W. Terpstra
--- Company    : GSI
--- Created    : 2013-04-08
--- Last update: 2013-04-08
--- Platform   : FPGA-generic
--- Standard   : VHDL'93
--------------------------------------------------------------------------------
--- Description: Converts streams of different widths
--------------------------------------------------------------------------------
--- Copyright (c) 2013 GSI
--------------------------------------------------------------------------------
--- Revisions  :
--- Date        Version  Author          Description
--- 2013-04-08  1.0      terpstra        Created
--------------------------------------------------------------------------------
-
-library ieee;
-use ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-library work;
-use work.wishbone_pkg.all;
-use work.eb_internals_pkg.all;
-use work.genram_pkg.all;
-
--- r_dat_o is valid when r_empty_o=0
--- w_dat_i is valid when w_push_i =1
--- r_pop_i  affects r_empty_o on the next cycle
--- w_push_i affects w_full_o  on the next cycle
-entity eb_fifo is
-  generic(
-    g_width_w : natural;
-    g_width_r : natural);
-  port(
-    clk_i     : in  std_logic;
-    rstn_i    : in  std_logic;
-    w_full_o  : out std_logic;
-    w_push_i  : in  std_logic;
-    w_dat_i   : in  std_logic_vector(g_width_w-1 downto 0);
-    r_empty_o : out std_logic;
-    r_pop_i   : in  std_logic;
-    r_dat_o   : out std_logic_vector(g_width_r-1 downto 0));
-end eb_fifo;
-
-architecture rtl of eb_fifo is
-  function gcd(a, b : natural) return natural is
-  begin
-    if a > b then
-      return gcd(b,a);
-    elsif a = 0 then
-      return b;
-    else
-      return gcd(b mod a, a);
-    end if;
-  end gcd;
-  function max(a, b : natural) return natural is
-  begin
-    if b > a then
-      return b;
-    else
-      return a;
-    end if;
-  end max;
-  
-  constant c_width   : natural := gcd(g_width_w, g_width_r);
-  constant c_width_w : natural := g_width_w/c_width;
-  constant c_width_r : natural := g_width_r/c_width;
-  
-  -- Must be large enough to fit two of the largest element to enable streaming
-  constant c_depth : natural := f_ceil_log2(max(c_width_w, c_width_r) * 2);
-  constant c_size  : natural := 2**c_depth;
-  
-  signal r_idx  : unsigned(c_depth downto 0);
-  signal w_idx  : unsigned(c_depth downto 0);
-  signal buf    : std_logic_vector(c_size*c_width-1 downto 0);
-  
-begin
-
-  main : process(rstn_i, clk_i) is
-    variable r_idx_next : unsigned(c_depth downto 0);
-    variable w_idx_next : unsigned(c_depth downto 0);
-  begin
-    if rstn_i = '0' then
-      r_idx     <= (others => '0');
-      w_idx     <= (others => '0');
-      w_full_o  <= '0';
-      r_empty_o <= '1';
-    elsif rising_edge(clk_i) then
-    
-      -- High bits go in first => lowest address in FIFO
-      if w_push_i = '1' then
-        for i in 0 to c_width_w-1 loop
-          buf((((to_integer(w_idx)+i) mod c_size)+1)*c_width-1 downto 
-              (((to_integer(w_idx)+i) mod c_size)+0)*c_width-0) <=
-            w_dat_i((c_width_w-i)*c_width-1 downto (c_width_w-i-1)*c_width);
-        end loop;
-      end if;
-      
-      for i in 0 to c_width_r-1 loop
-        r_dat_o((c_width_r-i)*c_width-1 downto (c_width_r-i)*c_width) <=
-          buf((((to_integer(r_idx)+i) mod c_size)+1)*c_width-1 downto 
-              (((to_integer(r_idx)+i) mod c_size)+0)*c_width-0);
-      end loop;
-      
-      -- Compute next pointer state
-      if r_pop_i = '1' then
-        r_idx_next := r_idx + c_width_r;
-      else
-        r_idx_next := r_idx;
-      end if;
-      
-      if w_push_i = '1' then
-        w_idx_next := w_idx + c_width_w;
-      else
-        w_idx_next := w_idx;
-      end if;
-    
-      -- Compare the newest pointers
-      if w_idx_next - r_idx_next < c_width_r then
-        w_empty_o <= '1';
-      else
-        w_empty_o <= '0';
-      end if;
-      
-      if r_idx_next + c_size - w_idx_next < c_width_w then
-        w_full_o <= '1';
-      else
-        w_full_o <= '0';
-      end if;
-      
-      r_idx <= r_idx_next;
-      w_idx <= w_idx_next;
-      
-    end if;
-  end process;
-
-end rtl;