diff --git a/gearbox.py b/gearbox.py
index a48036c7ea9f6c71e1d37a162fcf185195b3b723..17c711bc1559adcd33adf2d2238069fa168047c6 100755
--- a/gearbox.py
+++ b/gearbox.py
@@ -40,7 +40,7 @@ class ArbitraryGearbox(Elaboratable):
             #storage   = Signal(len_storage, reset= 0b111_110_101_100_011_010_001)
 
 
-            storage   = Signal(len_storage, reset= 0b100_000_000_000_000_000_000)
+            storage   = Signal(len_storage, reset= 0b1_100_011_00)
 
             write_ptr = Signal(range(len_storage))
             read_ptr  = Signal(range(len_storage), reset=2)
@@ -48,7 +48,6 @@ class ArbitraryGearbox(Elaboratable):
             # read index logic here
             with m.If(read_ptr + self.out_width >= len_storage):
                 m.d.sync += read_ptr.eq(read_ptr + self.out_width - len_storage)
-                m.d.comb += loop.eq(1)
             with m.Else():
                 m.d.sync += read_ptr.eq(read_ptr + self.out_width)
 
@@ -57,7 +56,16 @@ class ArbitraryGearbox(Elaboratable):
             with m.If(read_ptr + self.out_width <= len_storage):
                 m.d.comb += self.bus.data_out.eq(storage.bit_select(read_ptr, self.out_width))
             with m.Else():
-                m.d.comb += self.bus.data_out.eq(storage.bit_select(read_ptr, len_storage - self.out_width))
+                with m.Switch(read_ptr):
+                    for cand_rptr in range(len_storage - self.out_width + 1, len_storage):
+                        with m.Case(cand_rptr):
+                            m.d.comb += loop.eq(1)
+                            non_wrapping_bitwidth = len_storage - cand_rptr
+                            wrapping_bitwidth     = self.out_width + cand_rptr - len_storage
+                            m.d.comb += self.bus.data_out.eq(Cat(
+                                storage.bit_select(cand_rptr, non_wrapping_bitwidth), # the non-wrapping bits are less-significant
+                                storage.bit_select(0,         wrapping_bitwidth)      # ...than the wrapping bit
+                                ))
 
 
 
@@ -76,7 +84,7 @@ class DummyPlug(Elaboratable):
     def elaborate(self, platform):
         m = Module()
 
-        m.submodules.table = table = ArbitraryGearbox(in_width=(21-3), out_width=3)
+        m.submodules.table = table = ArbitraryGearbox(in_width=(9-3), out_width=3)
         counter = Signal(8)
         m.d.sync += counter.eq(counter+1)