diff --git a/README.markdown b/README.markdown
--- a/README.markdown
+++ b/README.markdown
@@ -1,7 +1,7 @@
 approximate
 ===========
 
-[![Build Status](https://secure.travis-ci.org/ekmett/approximate.png?branch=master)](http://travis-ci.org/ekmett/approximate)
+[![Hackage](https://img.shields.io/hackage/v/approximate.svg)](https://hackage.haskell.org/package/approximate) [![Build Status](https://secure.travis-ci.org/ekmett/approximate.png?branch=master)](http://travis-ci.org/ekmett/approximate)
 
 This package provides approximate numbers and discrete values with lower bounds on their probability of correctness.
 
diff --git a/approximate.cabal b/approximate.cabal
--- a/approximate.cabal
+++ b/approximate.cabal
@@ -1,6 +1,6 @@
 name:          approximate
 category:      Numeric
-version:       0.2.2.1
+version:       0.2.2.2
 license:       BSD3
 cabal-version: >= 1.8
 license-file:  LICENSE
@@ -40,6 +40,10 @@
   default: False
   manual: True
 
+flag herbie
+  default: False
+  manual: True
+
 library
   build-depends:
     base                      >= 4.3      && < 5,
@@ -57,7 +61,12 @@
     semigroupoids             >= 3.0.2    && < 6,
     semigroups                >= 0.8.4    && < 1,
     safecopy                  >= 0.8.1    && < 0.9,
-    vector                    >= 0.9      && < 0.11
+    vector                    >= 0.9      && < 0.12
+
+  if flag(herbie)
+    build-depends: HerbiePlugin >= 0.1 && < 0.2
+    cpp-options: -DHERBIE
+    ghc-options: -fplugin=Herbie
 
   exposed-modules:
     Data.Approximate
diff --git a/src/Data/Approximate/Mass.hs b/src/Data/Approximate/Mass.hs
--- a/src/Data/Approximate/Mass.hs
+++ b/src/Data/Approximate/Mass.hs
@@ -123,6 +123,10 @@
   {-# INLINE basicUnsafeMove #-}
   basicUnsafeGrow (MV_Mass v) n = MV_Mass `liftM` M.basicUnsafeGrow v n
   {-# INLINE basicUnsafeGrow #-}
+#if MIN_VERSION_vector(0,11,0)
+  basicInitialize (MV_Mass v) = M.basicInitialize v
+  {-# INLINE basicInitialize #-}
+#endif
 
 instance Unbox a => G.Vector U.Vector (Mass a) where
   basicUnsafeFreeze (MV_Mass v) = V_Mass `liftM` G.basicUnsafeFreeze v
diff --git a/src/Data/Approximate/Numerics.hs b/src/Data/Approximate/Numerics.hs
--- a/src/Data/Approximate/Numerics.hs
+++ b/src/Data/Approximate/Numerics.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE ForeignFunctionInterface #-}
 --------------------------------------------------------------------
 -- |
@@ -62,7 +63,11 @@
 --
 -- 'flog' had better outperform it! It is provided merely for comparison.
 blog :: Floating a => a -> a
-blog x = 6 * (x - 1) / (x + 1 + 4 * sqrt x);
+blog x = 6 * (x - 1) / (x + 1 + 4 * sqrt x)
+      -- 6 / (x + 1 + 4 * sqrt x) / (x-1) -- herbie's suggested replacement.
+#ifdef HERBIE
+{-# ANN blog "NoHerbie" #-}
+#endif
 
 foreign import ccall unsafe pow_fast_lb       :: Double -> Double -> Double
 foreign import ccall unsafe pow_fast_ub       :: Double -> Double -> Double
diff --git a/src/Data/Approximate/Type.hs b/src/Data/Approximate/Type.hs
--- a/src/Data/Approximate/Type.hs
+++ b/src/Data/Approximate/Type.hs
@@ -110,6 +110,10 @@
   {-# INLINE basicUnsafeMove #-}
   basicUnsafeGrow (MV_Approximate v) n = MV_Approximate `liftM` M.basicUnsafeGrow v n
   {-# INLINE basicUnsafeGrow #-}
+#if MIN_VERSION_vector(0,11,0)
+  basicInitialize (MV_Approximate v) = M.basicInitialize v
+  {-# INLINE basicInitialize #-}
+#endif
 
 instance Unbox a => G.Vector U.Vector (Approximate a) where
   basicUnsafeFreeze (MV_Approximate v) = V_Approximate `liftM` G.basicUnsafeFreeze v
