diff --git a/Numeric/AD/Classes.hs b/Numeric/AD/Classes.hs
--- a/Numeric/AD/Classes.hs
+++ b/Numeric/AD/Classes.hs
@@ -10,13 +10,7 @@
 -----------------------------------------------------------------------------
 
 module Numeric.AD.Classes
-    ( 
-    -- * AD Modes
-      Mode(..)
-    -- * Comonads
-    , Copointed(..)
-    , Comonad(..)
+    ( Mode(..)
     ) where
 
 import Numeric.AD.Internal.Classes
-import Numeric.AD.Internal.Comonad
diff --git a/Numeric/AD/Halley.hs b/Numeric/AD/Halley.hs
--- a/Numeric/AD/Halley.hs
+++ b/Numeric/AD/Halley.hs
@@ -52,7 +52,7 @@
 findZero :: Fractional a => UU a -> a -> [a]
 findZero f = go
     where
-        go x = x : go (x - 2*y*y'/(2*y'*y'-y*y''))
+        go x = x : if y == 0 then [] else go (x - 2*y*y'/(2*y'*y'-y*y''))
             where
                 (y:y':y'':_) = diffs0 f x
 {-# INLINE findZero #-}
diff --git a/Numeric/AD/Internal/Comonad.hs b/Numeric/AD/Internal/Comonad.hs
deleted file mode 100644
--- a/Numeric/AD/Internal/Comonad.hs
+++ /dev/null
@@ -1,29 +0,0 @@
-{-# LANGUAGE TypeOperators, TemplateHaskell, ScopedTypeVariables #-}
-{-# OPTIONS_HADDOCK hide #-}
------------------------------------------------------------------------------
--- |
--- Module      :  Numeric.AD.Internal.Comonad
--- Copyright   :  (c) Edward Kmett 2010
--- License     :  BSD3
--- Maintainer  :  ekmett@gmail.com
--- Stability   :  experimental
--- Portability :  GHC only
---
------------------------------------------------------------------------------
-
--- TODO: separate a \"comonads\" package from \"category-extras\"
-
-module Numeric.AD.Internal.Comonad
-    ( Copointed(..)
-    , Comonad(..)
-    ) where
-
-class Functor f => Copointed f where
-    extract :: f a -> a
-
-class Copointed f => Comonad f where
-    duplicate :: f a -> f (f a)
-    extend :: (f a -> b) -> f a -> f b
-
-    duplicate = extend id
-    extend f = fmap f . duplicate
diff --git a/Numeric/AD/Internal/Stream.hs b/Numeric/AD/Internal/Stream.hs
--- a/Numeric/AD/Internal/Stream.hs
+++ b/Numeric/AD/Internal/Stream.hs
@@ -19,12 +19,12 @@
     ) where
 
 import Control.Applicative
+import Control.Comonad
 import Data.Monoid
 import Data.Foldable
 import Data.Traversable
 import Data.Data (Data(..), mkDataType, DataType, mkConstr, Constr, constrIndex, Fixity(Infix))
 import Data.Typeable (Typeable1(..), TyCon, mkTyCon, mkTyConApp, gcast1)
-import Numeric.AD.Internal.Comonad
 
 infixl 3 :<
 
@@ -35,10 +35,8 @@
 instance Functor f => Functor (Stream f) where
     fmap f (a :< as) = f a :< fmap f <$> as
 
-instance Functor f => Copointed (Stream f) where
-    extract (a :< _) = a
-
 instance Functor f => Comonad (Stream f) where
+    extract (a :< _) = a
     duplicate aas@(_ :< as) = aas :< duplicate <$> as
     extend f aas@(_ :< as) = f aas :< extend f <$> as
 
diff --git a/Numeric/AD/Internal/Tensors.hs b/Numeric/AD/Internal/Tensors.hs
--- a/Numeric/AD/Internal/Tensors.hs
+++ b/Numeric/AD/Internal/Tensors.hs
@@ -23,7 +23,6 @@
 import Data.Traversable
 import Data.Monoid
 import Data.Typeable (Typeable1(..), TyCon, mkTyCon, mkTyConApp)
-import Numeric.AD.Internal.Comonad
 import Numeric.AD.Internal.Stream
 
 infixl 3 :-
@@ -41,12 +40,6 @@
 
 instance Traversable f => Traversable (Tensors f) where
     traverse f (a :- as) = (:-) <$> f a <*> traverse (traverse f) as
-
--- | While we can not be a 'Comonad' without a 'fzip'-like operation, you can use the
--- comonad for @'Stream' f a@ to manipulate a structure comonadically that you can turn 
--- into 'Tensors'.
-instance Functor f => Copointed (Tensors f) where
-    extract (a :- _) = a
 
 tailT :: Tensors f a -> Tensors f (f a)
 tailT (_ :- as) = as
diff --git a/Numeric/AD/Newton.hs b/Numeric/AD/Newton.hs
--- a/Numeric/AD/Newton.hs
+++ b/Numeric/AD/Newton.hs
@@ -49,7 +49,7 @@
 findZero :: Fractional a => UU a -> a -> [a]
 findZero f = go
     where
-        go x = x : go (x - y/y') 
+        go x = x : if y == 0 then [] else go (x - y/y') 
             where
                 (y,y') = diff' f x
 {-# INLINE findZero #-}
diff --git a/ad.cabal b/ad.cabal
--- a/ad.cabal
+++ b/ad.cabal
@@ -1,8 +1,8 @@
 name:         ad
-version:      0.45.0
+version:      0.46.0
 license:      BSD3
 license-File: LICENSE
-copyright:    (c) Edward Kmett 2010,
+copyright:    (c) Edward Kmett 2010-2011,
               (c) Barak Pearlmutter and Jeffrey Mark Siskind 2008-2009
 author:       Edward Kmett
 maintainer:   ekmett@gmail.com
@@ -56,6 +56,10 @@
     .
     * @0@ means that the resulting derivative list is padded with 0s at the end.
     .
+    Changes since 0.45.0
+    .
+    * Converted 'Stream' to use the external 'comonad' package
+    .
     Changes since 0.44.5
     .
     * Added Halley's method
@@ -82,7 +86,8 @@
     data-reify >= 0.5 && < 0.6, 
     containers >= 0.2 && < 0.4,
     template-haskell >= 2.4 && < 2.5,
-    array >= 0.2 && < 0.4
+    array >= 0.2 && < 0.4,
+    comonad >= 0.6 && < 0.7
 
 exposed-modules:
     Numeric.AD
@@ -110,7 +115,6 @@
 
 other-modules:
     Numeric.AD.Internal.Types
-    Numeric.AD.Internal.Comonad
     Numeric.AD.Internal.Stream
     Numeric.AD.Internal.Tensors
     Numeric.AD.Internal.Identity
