diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Changelog for collect-errors
 
+## v0.1.5
+
+* Make clearPotentialErrors generic, with instances for CN, pairs and lists
+
 ## v0.1.4
 
 * Add clearPotentialErrors for removing harmless errors
diff --git a/collect-errors.cabal b/collect-errors.cabal
--- a/collect-errors.cabal
+++ b/collect-errors.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 08277c279263dce2bad0694059098e8f02e2271dd9c718b7f76f9ab3bddbd18a
+-- hash: 8eba751f00934a634ce2f4c449b32d985bc3bc82cd2c36b0b83929848a47cb0a
 
 name:           collect-errors
-version:        0.1.4.1
+version:        0.1.5.0
 synopsis:       Error monad with a Float instance
 description:    Please see the README on GitHub at <https://github.com/michalkonecny/collect-errors#readme>
 category:       Math
diff --git a/src/Numeric/CollectErrors.hs b/src/Numeric/CollectErrors.hs
--- a/src/Numeric/CollectErrors.hs
+++ b/src/Numeric/CollectErrors.hs
@@ -6,7 +6,7 @@
 , noValueNumErrorCertain, noValueNumErrorPotential
 , removeValueErrorCertain, removeValueErrorPotential
 , prependErrorCertain, prependErrorPotential
-, clearPotentialErrors
+, CanClearPotentialErrors(..)
 , CanTakeCNErrors
   -- ** Applicable general collect-error utilities
 , noValue
diff --git a/src/Numeric/CollectErrors/Type.hs b/src/Numeric/CollectErrors/Type.hs
--- a/src/Numeric/CollectErrors/Type.hs
+++ b/src/Numeric/CollectErrors/Type.hs
@@ -80,16 +80,25 @@
 prependErrorPotential :: NumError -> CN t -> CN t
 prependErrorPotential e = prependErrors $ NumErrors $ Set.singleton (e, ErrorPotential)
 
-{-|
-  If there is a value, remove any potential errors that are associated with it.
--}
-clearPotentialErrors :: CN t -> CN t
-clearPotentialErrors (CollectErrors (Just v) (NumErrors es)) =
-  CollectErrors (Just v) (NumErrors $ Set.filter notPotential es)
-  where
-  notPotential (_, ErrorPotential) = False
-  notPotential _ = True
-clearPotentialErrors ce = ce
+class CanClearPotentialErrors cnt where
+  {-|
+    If there is a value, remove any potential errors that are associated with it.
+  -}
+  clearPotentialErrors :: cnt -> cnt
+
+instance CanClearPotentialErrors (CN t) where
+  clearPotentialErrors (CollectErrors (Just v) (NumErrors es)) =
+    CollectErrors (Just v) (NumErrors $ Set.filter notPotential es)
+    where
+    notPotential (_, ErrorPotential) = False
+    notPotential _ = True
+  clearPotentialErrors ce = ce
+
+instance (CanClearPotentialErrors t1, CanClearPotentialErrors t2) => CanClearPotentialErrors (t1,t2) where
+  clearPotentialErrors (v1,v2) = (clearPotentialErrors v1, clearPotentialErrors v2)
+
+instance (CanClearPotentialErrors t) => CanClearPotentialErrors [t] where
+  clearPotentialErrors = map clearPotentialErrors
 
 liftCN  :: (a -> (CN c)) -> (CN a) -> (CN c)
 liftCN = liftCE
