diff --git a/optimization.cabal b/optimization.cabal
--- a/optimization.cabal
+++ b/optimization.cabal
@@ -1,6 +1,6 @@
 name:          optimization
 category:      Math
-version:       0.1.5
+version:       0.1.6
 license:       BSD3
 cabal-version: >= 1.10
 license-file:  LICENSE
@@ -52,7 +52,7 @@
     base                >= 4.4          && < 5,
     vector              >= 0.10         && < 1.0,
     ad                  >= 3.4          && < 4.3,
-    linear              >= 1.0          && < 2.0,
+    linear              >= 1.16         && < 2.0,
     semigroupoids       >= 3.0          && < 5.0,
     distributive        >= 0.3          && < 0.5
 
diff --git a/src/Optimization/LineSearch.hs b/src/Optimization/LineSearch.hs
--- a/src/Optimization/LineSearch.hs
+++ b/src/Optimization/LineSearch.hs
@@ -36,7 +36,6 @@
 
 import Prelude hiding (pred)
 import Linear
-import Debug.Trace
 
 -- | A line search method @search df p x@ determines a step size
 -- in direction @p@ from point @x@ for function @f@ with gradient @df@
@@ -64,7 +63,7 @@
 {-# INLINE armijo #-}
 
 -- | Curvature condition
-curvature :: (Num a, Ord a, Additive f, Metric f, Show a, Show (f a))
+curvature :: (Num a, Ord a, Additive f, Metric f)
           => a             -- ^ curvature condition strength c2
           -> (f a -> f a)  -- ^ gradient of function
           -> f a           -- ^ point to evaluate at
@@ -72,7 +71,6 @@
           -> a             -- ^ search step size
           -> Bool          -- ^ is curvature condition satisfied
 curvature c2 df x p a =
-    traceShow (df (x ^+^ a *^ p) `dot` p, c2 * (df x `dot` p), p) $
     df (x ^+^ a *^ p) `dot` p >= c2 * (df x `dot` p)
 {-# INLINE curvature #-}
 
@@ -117,7 +115,7 @@
 -- @wolfeSearch gamma alpha c1@ starts with the given step size @alpha@
 -- and reduces it by a factor of @gamma@ until both the Armijo and
 -- curvature conditions is satisfied.
-wolfeSearch :: (Show a, Num a, Ord a, Metric f, Show (f a))
+wolfeSearch :: (Num a, Ord a, Metric f)
              => a                   -- ^ step size reduction factor gamma
              -> a                   -- ^ initial step size alpha
              -> a                   -- ^ Armijo condition strength c1
@@ -126,8 +124,7 @@
              -> LineSearch f a
 wolfeSearch gamma alpha c1 c2 f df p x =
     backtrackingSearch gamma alpha wolfe df p x
-  where wolfe a = traceShow (a, armijo c1 f df p x a, curvature c2 df x p a)
-                $ armijo c1 f df p x a && curvature c2 df x p a
+  where wolfe a = armijo c1 f df p x a && curvature c2 df x p a
 {-# INLINEABLE wolfeSearch #-}
 
 -- | Line search by Newton's method
diff --git a/src/Optimization/LineSearch/BFGS.hs b/src/Optimization/LineSearch/BFGS.hs
--- a/src/Optimization/LineSearch/BFGS.hs
+++ b/src/Optimization/LineSearch/BFGS.hs
@@ -32,7 +32,7 @@
                          -- Sherman-Morrison update of inverse Hessian
                          sy = s `dot` y
                          rho = if nearZero sy then 1000 else 1 / sy
-                         i = kronecker (pure 1)
+                         i = scaled (pure 1)
                          u = i !-! rho *!! outer y s
                          v = i !-! rho *!! outer s y
                          b1 = u !*! b0 !*! v !+! rho *!! outer s s
