diff --git a/EnumMap.cabal b/EnumMap.cabal
--- a/EnumMap.cabal
+++ b/EnumMap.cabal
@@ -1,5 +1,5 @@
 name: EnumMap
-version: 0.0.1
+version: 0.0.2
 author: John Van Enk
 maintainer: vanenkj@gmail.com
 license: BSD3
@@ -20,4 +20,4 @@
                    containers >= 0.2.0.1 && < 0.3
     exposed-modules: Data.EnumMap
     hs-source-dirs: src/
-    ghc-options: -Wall
+    ghc-options: -O2 -Wall
diff --git a/src/Data/EnumMap.hs b/src/Data/EnumMap.hs
--- a/src/Data/EnumMap.hs
+++ b/src/Data/EnumMap.hs
@@ -200,9 +200,11 @@
 -- A "Nat" is a natural machine word (an unsigned Int)
 type Nat = Word
 
+{-# INLINE natFromInt #-}
 natFromInt :: (Enum k) => k -> Nat
 natFromInt i = fromIntegral . fromEnum $ i
 
+{-# INLINE intFromNat #-}
 intFromNat :: (Enum k) => Nat -> k
 intFromNat w = toEnum . fromIntegral $ w
 
@@ -389,7 +391,7 @@
 -- > insert 5 'x' (fromList [(5,'a'), (3,'b')]) == fromList [(3, 'b'), (5, 'x')]
 -- > insert 7 'x' (fromList [(5,'a'), (3,'b')]) == fromList [(3, 'b'), (5, 'a'), (7, 'x')]
 -- > insert 5 'x' empty                         == singleton 5 'x'
-
+{-# SPECIALIZE insert :: Int -> a -> EnumMap Int a -> EnumMap Int a #-}
 insert :: (Enum k) => k -> a -> EnumMap k a -> EnumMap k a
 insert k x t
   = case t of
@@ -1674,6 +1676,7 @@
 {--------------------------------------------------------------------
   Join
 --------------------------------------------------------------------}
+{-# SPECIALIZE join :: Prefix -> EnumMap Int a -> Prefix -> EnumMap Int a -> EnumMap Int a #-}
 join :: Prefix -> EnumMap k a -> Prefix -> EnumMap k a -> EnumMap k a
 join p1 t1 p2 t2
   | zero p1 m = Bin p m t1 t2
