diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+0.3.2.2
+	* Enable package to link with integer-simple instead of
+	  integer-gmp using the -finteger-simple cabal flag.
+
 0.3.2.1
 
 	* Parameterize inclusion of the Data.ByteString.Builder.Scientific
diff --git a/scientific.cabal b/scientific.cabal
--- a/scientific.cabal
+++ b/scientific.cabal
@@ -1,5 +1,5 @@
 name:                scientific
-version:             0.3.2.1
+version:             0.3.2.2
 synopsis:            Numbers represented using scientific notation
 description:
   @Data.Scientific@ provides a space efficient and arbitrary precision
@@ -54,6 +54,10 @@
   default:     True
   manual:      True
 
+flag integer-simple
+  description: Use the integer-simple package instead of integer-gmp
+  default:     False
+
 library
   exposed-modules:     Data.Scientific
                        Data.Text.Lazy.Builder.Scientific
@@ -62,11 +66,17 @@
   ghc-options:         -Wall
   build-depends:       base        >= 4.3   && < 4.8
                      , ghc-prim
-                     , integer-gmp
                      , deepseq     >= 1.3   && < 1.4
                      , text        >= 0.8   && < 1.3
                      , hashable    >= 1.1.2 && < 1.3
                      , array       >= 0.1   && < 0.6
+
+  if flag(integer-simple)
+      build-depends: integer-simple
+      CPP-options: -DINTEGER_SIMPLE
+  else
+      build-depends: integer-gmp
+
   hs-source-dirs:      src
   default-language:    Haskell2010
 
@@ -101,9 +111,13 @@
   build-depends:    base       >= 4.3 && < 4.8
                   , criterion  >= 0.5 && < 0.12
                   , ghc-prim
-                  , integer-gmp
                   , deepseq     >= 1.3   && < 1.4
                   , text        >= 0.8   && < 1.3
                   , bytestring  >= 0.10  && < 0.11
                   , hashable    >= 1.1.2 && < 1.3
                   , array       >= 0.1   && < 0.6
+
+  if flag(integer-simple)
+      build-depends: integer-simple
+  else
+      build-depends: integer-gmp
diff --git a/src/Math/NumberTheory/Logarithms.hs b/src/Math/NumberTheory/Logarithms.hs
--- a/src/Math/NumberTheory/Logarithms.hs
+++ b/src/Math/NumberTheory/Logarithms.hs
@@ -3,15 +3,36 @@
 -- | Integer logarithm, copied from Daniel Fischer's @arithmoi@
 module Math.NumberTheory.Logarithms ( integerLog10' ) where
 
-import GHC.Base
+#if defined(INTEGER_SIMPLE) && __GLASGOW_HASKELL__ < 702
+import GHC.Integer.Logarithms (integerLogBase#)
+import GHC.Base (Int(I#))
 
+-- | Only defined for positive inputs!
+integerLog10' :: Integer -> Int
+integerLog10' m = I# (integerLogBase# 10 m)
+
+#else
+import GHC.Base ( Int(I#), Word#, Int#
+                , int2Word#, eqWord#, neWord#, (-#), and#, uncheckedShiftRL#
+
+#if __GLASGOW_HASKELL__ >= 707
+                , isTrue#
+#endif
+                )
+
 #if __GLASGOW_HASKELL__ >= 702
-import GHC.Integer.Logarithms
+import GHC.Integer.Logarithms (integerLog2#, wordLog2#)
 #else
 #include "MachDeps.h"
 
-import GHC.Integer.GMP.Internals
+import GHC.Integer.GMP.Internals (Integer(S#, J#))
 
+import GHC.Base ( indexWordArray#, uncheckedIShiftL#, indexInt8Array#
+                , word2Int#, ByteArray#, newByteArray#, writeInt8Array#
+                , (==#), (<#), (+#), (*#)
+                , unsafeFreezeByteArray#, realWorld#
+                )
+
 #if (WORD_SIZE_IN_BITS != 32) && (WORD_SIZE_IN_BITS != 64)
 #error Only word sizes 32 and 64 are supported.
 #endif
@@ -159,4 +180,5 @@
 #if __GLASGOW_HASKELL__ < 707
 isTrue# :: Bool -> Bool
 isTrue# = id
+#endif
 #endif
