diff --git a/Utils.hs b/Utils.hs
--- a/Utils.hs
+++ b/Utils.hs
@@ -23,7 +23,7 @@
 import Foreign.Storable      ( Storable,  )
 import Foreign.Marshal.Array ( peekArray )
 import Data.Bool             ( Bool, otherwise )
-import Data.Ord              ( Ord, (<) )
+import Data.Ord              ( Ord, (>) )
 import Data.Bits             ( Bits, shiftL, shiftR, bitSize, (.&.) )
 import Data.Int              ( Int )
 import System.IO             ( IO )
@@ -70,10 +70,10 @@
 <http://en.wikipedia.org/wiki/Binary-coded_decimal>
 -}
 decodeBCD ∷ Bits α ⇒ Int → α → [α]
-decodeBCD bitsInDigit abcd = go shftR []
+decodeBCD bitsInDigit abcd = go 0
     where
       shftR = bitSize abcd - bitsInDigit
 
-      go shftL ds | shftL < 0 = ds
-                  | otherwise = let !d = (abcd `shiftL` shftL) `shiftR` shftR
-                                in go (shftL - bitsInDigit) (d : ds)
+      go !shftL | shftL > shftR = []
+                | otherwise     = let !d = (abcd `shiftL` shftL) `shiftR` shftR
+                                  in d : go (shftL + bitsInDigit)
diff --git a/usb.cabal b/usb.cabal
--- a/usb.cabal
+++ b/usb.cabal
@@ -1,5 +1,5 @@
 name:          usb
-version:       1.1.0.1
+version:       1.1.0.2
 cabal-version: >=1.6
 build-type:    Custom
 license:       BSD3
@@ -98,4 +98,4 @@
   if impl(ghc>7) && !os(windows)
     cpp-options: -DHAS_EVENT_MANAGER
     other-modules: Poll, Event, SystemEventManager, Timeval
-    build-depends: containers >= 0.1 && < 0.5
+    build-depends: containers >= 0.1 && < 0.6
