diff --git a/Text/Show/ByteString.hs b/Text/Show/ByteString.hs
--- a/Text/Show/ByteString.hs
+++ b/Text/Show/ByteString.hs
@@ -22,6 +22,8 @@
                               -- * Putting digits
                             , unsafePutDigit
                             , putDigit
+                              -- * Putting integers
+                            , showpIntAtBase
                               -- * Putting floats
                             , showpGFloat
                             , showpFFloat
diff --git a/Text/Show/ByteString/Int.hs b/Text/Show/ByteString/Int.hs
--- a/Text/Show/ByteString/Int.hs
+++ b/Text/Show/ByteString/Int.hs
@@ -27,7 +27,11 @@
 
 putI :: Int# -> Put
 putI i#
+#if __GLASGOW_HASKELL__ && __GLASGOW_HASKELL__ >= 611
+  | i# <# 0#  = let !(I# minInt#) = minInt
+#else
   | i# <# 0#  = let I# minInt# = minInt
+#endif
                 in if i# ==# minInt#
                    then putWord8 45 >> putW (int2Word# (negateInt# (i# `quotInt#` 10#)))
                                     >> putW (int2Word# (negateInt# (i# `remInt#` 10#)))
diff --git a/Text/Show/ByteString/Integer.hs b/Text/Show/ByteString/Integer.hs
--- a/Text/Show/ByteString/Integer.hs
+++ b/Text/Show/ByteString/Integer.hs
@@ -16,8 +16,11 @@
 
 import GHC.Base
 
-#ifdef INTEGER_GMP
+
+#if  __GLASGOW_HASKELL__ && __GLASGOW_HASKELL__ < 611
 import GHC.Integer.Internals
+#elif __GLASGOW_HASKELL__ && __GLASGOW_HASKELL__ >= 611
+import GHC.Integer.GMP.Internals
 #endif
 
 import GHC.Num
@@ -108,3 +111,15 @@
   | d == 1    = unsafePutDigit n
   | otherwise = pblock' (d-1) q >> unsafePutDigit r
  where (q, r) = n `quotRemInt` 10
+
+-- | Shows an Integral number using the base specified by the first
+-- argument and the chracter representation specified by the second.
+showpIntAtBase :: Integral a => a -> (Int -> Char) -> a -> Put
+showpIntAtBase b f n | n < 0     = putAscii '-' >> showpIntAtBase b f (-n)
+                     | n == 0    = putAscii (f 0)
+                     | otherwise = let
+  go n | n == 0    = return ()
+       | otherwise = go d >> putAscii (f $ fromIntegral m)
+   where
+   (d, m) = n `divMod` b
+  in go n
diff --git a/bytestring-show.cabal b/bytestring-show.cabal
--- a/bytestring-show.cabal
+++ b/bytestring-show.cabal
@@ -1,5 +1,5 @@
 name:              bytestring-show
-version:           0.3.2
+version:           0.3.3
 license:           BSD3
 license-file:      LICENSE
 author:            Dan Doel
@@ -12,7 +12,7 @@
 cabal-version:     >= 1.2.3
 
 library
-    build-depends: base, binary, bytestring >= 0.9, array, containers
+    build-depends: base < 5, binary < 0.6, bytestring >= 0.9 && <= 1, array < 0.4, containers < 0.4
 
     exposed-modules:
         Text.Show.ByteString
@@ -30,6 +30,11 @@
     ghc-options:
         -O2 -Wall
 
-    if impl(ghc >= 6.9)
-        build-depends: integer
+    if impl(ghc >= 6.11)
         cpp-options: -DINTEGER_GMP
+        build-depends: integer-gmp >= 0.2 && < 0.3
+
+    if impl(ghc >= 6.9) && impl(ghc < 6.11)
+        cpp-options: -DINTEGER_GMP
+        build-depends: integer >= 0.1 && < 0.2
+
