diff --git a/hw-bits.cabal b/hw-bits.cabal
--- a/hw-bits.cabal
+++ b/hw-bits.cabal
@@ -1,5 +1,5 @@
 name:                   hw-bits
-version:                0.0.0.8
+version:                0.0.0.9
 synopsis:               Conduits for tokenizing streams.
 description:            Please see README.md
 homepage:               http://github.com/haskell-works/hw-bits#readme
@@ -29,6 +29,9 @@
 library
   hs-source-dirs:       src
   exposed-modules:      HaskellWorks.Data.Bits
+                      , HaskellWorks.Data.Bits.AllExcess
+                      , HaskellWorks.Data.Bits.AllExcess.AllExcess0
+                      , HaskellWorks.Data.Bits.AllExcess.AllExcess1
                       , HaskellWorks.Data.Bits.BitLength
                       , HaskellWorks.Data.Bits.BitParse
                       , HaskellWorks.Data.Bits.BitRead
diff --git a/src/HaskellWorks/Data/Bits/AllExcess.hs b/src/HaskellWorks/Data/Bits/AllExcess.hs
new file mode 100644
--- /dev/null
+++ b/src/HaskellWorks/Data/Bits/AllExcess.hs
@@ -0,0 +1,6 @@
+module HaskellWorks.Data.Bits.AllExcess
+  ( module X
+  ) where
+
+import HaskellWorks.Data.Bits.AllExcess.AllExcess0 as X
+import HaskellWorks.Data.Bits.AllExcess.AllExcess1 as X
diff --git a/src/HaskellWorks/Data/Bits/AllExcess/AllExcess0.hs b/src/HaskellWorks/Data/Bits/AllExcess/AllExcess0.hs
new file mode 100644
--- /dev/null
+++ b/src/HaskellWorks/Data/Bits/AllExcess/AllExcess0.hs
@@ -0,0 +1,44 @@
+{-# LANGUAGE FlexibleInstances #-}
+
+module HaskellWorks.Data.Bits.AllExcess.AllExcess0 where
+
+import           Data.Word
+import qualified Data.Vector.Storable             as DVS
+import           HaskellWorks.Data.Bits.PopCount.PopCount0
+import           HaskellWorks.Data.Bits.PopCount.PopCount1
+
+-- TODO Optimise these instances
+class AllExcess0 a where
+  allExcess0 :: a -> Int
+
+instance AllExcess0 Word8 where
+  allExcess0 w = fromIntegral (popCount0 w) - fromIntegral (popCount1 w)
+  {-# INLINE allExcess0 #-}
+
+instance AllExcess0 Word16 where
+  allExcess0 w = fromIntegral (popCount0 w) - fromIntegral (popCount1 w)
+  {-# INLINE allExcess0 #-}
+
+instance AllExcess0 Word32 where
+  allExcess0 w = fromIntegral (popCount0 w) - fromIntegral (popCount1 w)
+  {-# INLINE allExcess0 #-}
+
+instance AllExcess0 Word64 where
+  allExcess0 w = fromIntegral (popCount0 w) - fromIntegral (popCount1 w)
+  {-# INLINE allExcess0 #-}
+
+instance AllExcess0 (DVS.Vector Word8) where
+  allExcess0 w = fromIntegral (popCount0 w) - fromIntegral (popCount1 w)
+  {-# INLINE allExcess0 #-}
+
+instance AllExcess0 (DVS.Vector Word16) where
+  allExcess0 w = fromIntegral (popCount0 w) - fromIntegral (popCount1 w)
+  {-# INLINE allExcess0 #-}
+
+instance AllExcess0 (DVS.Vector Word32) where
+  allExcess0 w = fromIntegral (popCount0 w) - fromIntegral (popCount1 w)
+  {-# INLINE allExcess0 #-}
+
+instance AllExcess0 (DVS.Vector Word64) where
+  allExcess0 w = fromIntegral (popCount0 w) - fromIntegral (popCount1 w)
+  {-# INLINE allExcess0 #-}
diff --git a/src/HaskellWorks/Data/Bits/AllExcess/AllExcess1.hs b/src/HaskellWorks/Data/Bits/AllExcess/AllExcess1.hs
new file mode 100644
--- /dev/null
+++ b/src/HaskellWorks/Data/Bits/AllExcess/AllExcess1.hs
@@ -0,0 +1,44 @@
+{-# LANGUAGE FlexibleInstances #-}
+
+module HaskellWorks.Data.Bits.AllExcess.AllExcess1 where
+
+import           Data.Word
+import qualified Data.Vector.Storable             as DVS
+import           HaskellWorks.Data.Bits.PopCount.PopCount0
+import           HaskellWorks.Data.Bits.PopCount.PopCount1
+
+-- TODO Optimise these instances
+class AllExcess1 a where
+  allExcess1 :: a -> Int
+
+instance AllExcess1 Word8 where
+  allExcess1 w = fromIntegral (popCount1 w) - fromIntegral (popCount0 w)
+  {-# INLINE allExcess1 #-}
+
+instance AllExcess1 Word16 where
+  allExcess1 w = fromIntegral (popCount1 w) - fromIntegral (popCount0 w)
+  {-# INLINE allExcess1 #-}
+
+instance AllExcess1 Word32 where
+  allExcess1 w = fromIntegral (popCount1 w) - fromIntegral (popCount0 w)
+  {-# INLINE allExcess1 #-}
+
+instance AllExcess1 Word64 where
+  allExcess1 w = fromIntegral (popCount1 w) - fromIntegral (popCount0 w)
+  {-# INLINE allExcess1 #-}
+
+instance AllExcess1 (DVS.Vector Word8) where
+  allExcess1 w = fromIntegral (popCount1 w) - fromIntegral (popCount0 w)
+  {-# INLINE allExcess1 #-}
+
+instance AllExcess1 (DVS.Vector Word16) where
+  allExcess1 w = fromIntegral (popCount1 w) - fromIntegral (popCount0 w)
+  {-# INLINE allExcess1 #-}
+
+instance AllExcess1 (DVS.Vector Word32) where
+  allExcess1 w = fromIntegral (popCount1 w) - fromIntegral (popCount0 w)
+  {-# INLINE allExcess1 #-}
+
+instance AllExcess1 (DVS.Vector Word64) where
+  allExcess1 w = fromIntegral (popCount1 w) - fromIntegral (popCount0 w)
+  {-# INLINE allExcess1 #-}
diff --git a/src/HaskellWorks/Data/Bits/BitLength.hs b/src/HaskellWorks/Data/Bits/BitLength.hs
--- a/src/HaskellWorks/Data/Bits/BitLength.hs
+++ b/src/HaskellWorks/Data/Bits/BitLength.hs
@@ -27,6 +27,7 @@
 
   endPosition :: v -> Position
   endPosition = Position . fromIntegral . getCount . bitLength
+  {-# INLINE endPosition #-}
 
 --------------------------------------------------------------------------------
 -- Functions
