diff --git a/aern2-mp.cabal b/aern2-mp.cabal
--- a/aern2-mp.cabal
+++ b/aern2-mp.cabal
@@ -1,11 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.34.4.
+-- This file has been generated from package.yaml by hpack version 0.35.0.
 --
 -- see: https://github.com/sol/hpack
 
 name:           aern2-mp
-version:        0.2.11.0
+version:        0.2.14.0
 synopsis:       Multi-precision ball (interval) arithmetic
 description:    Please see the README on GitHub at <https://github.com/michalkonecny/aern2/#readme>
 category:       Math
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,7 @@
 # Change log for aern2-mp
 
+* v 0.2.14 2023-04-10
+  * minor improvements supporting aern2-linear and aern2-real
 * v 0.2.11 2022-08-25
   * left-first Kleenean and/or
 * v 0.2.10 2022-08-20
diff --git a/src/AERN2/Kleenean.hs b/src/AERN2/Kleenean.hs
--- a/src/AERN2/Kleenean.hs
+++ b/src/AERN2/Kleenean.hs
@@ -20,6 +20,8 @@
 import Numeric.MixedTypes.PreludeHiding
 import qualified Prelude as P
 
+import qualified Control.CollectErrors as CE
+
 -- import Test.SmallCheck.Series
 import GHC.Generics
 
@@ -87,6 +89,25 @@
   type AndOrType Kleenean Bool = Kleenean
   and2 k b = and2 k (kleenean b)
   or2 k b = or2 k (kleenean b)
+
+instance
+  (CanAndOrAsymmetric t1 Kleenean, CE.CanBeErrors es)
+  =>
+  CanAndOrAsymmetric (CE.CollectErrors es t1) Kleenean
+  where
+  type AndOrType (CE.CollectErrors es t1) Kleenean = CE.CollectErrors es (AndOrType t1 Kleenean)
+  and2 = CE.lift1T and2
+  or2 = CE.lift1T or2
+
+instance
+  (CanAndOrAsymmetric Kleenean t2, CE.CanBeErrors es)
+  =>
+  CanAndOrAsymmetric Kleenean (CE.CollectErrors es t2)
+  where
+  type AndOrType Kleenean (CE.CollectErrors es t2) = CE.CollectErrors es (AndOrType Kleenean t2)
+  and2 = CE.liftT1 and2
+  or2 = CE.liftT1 or2
+
 
 _testAndOr1 :: Kleenean
 _testAndOr1 = TrueOrFalse && False
diff --git a/src/AERN2/MP/Enclosure.hs b/src/AERN2/MP/Enclosure.hs
--- a/src/AERN2/MP/Enclosure.hs
+++ b/src/AERN2/MP/Enclosure.hs
@@ -40,6 +40,7 @@
 
 import AERN2.Kleenean
 import AERN2.MP.ErrorBound
+import Control.CollectErrors (CollectErrors(getMaybeValue))
 -- import AERN2.MP.Accuracy
 
 {- ball-specific operations -}
@@ -67,6 +68,7 @@
 instance IsBall t => IsBall (CN t) where
     type CentreType (CN t) = CN (CentreType t)
     centre = fmap centre
+    centreAsBall = fmap centreAsBall
     updateRadius f = fmap (updateRadius f)
     centreAsBallAndRadius = error $ "centreAsBallAndRadius not defined for CN types"
 
@@ -177,6 +179,13 @@
 class CanTestContains dom e where
   {-| Test if @e@ is inside @dom@. -}
   contains :: dom {-^ @dom@ -} -> e  {-^ @e@ -} -> Bool
+
+instance (CanTestContains dom e) => CanTestContains (CN dom) (CN e) where
+  contains domCN aCN =
+
+    case (getMaybeValue domCN, getMaybeValue aCN) of
+      (Just dom, Just a) -> dom `contains` a
+      _ -> False
 
 class CanMapInside dom e where
   {-| Return some value contained in @dom@.
diff --git a/src/AERN2/MP/Float/Conversions.hs b/src/AERN2/MP/Float/Conversions.hs
--- a/src/AERN2/MP/Float/Conversions.hs
+++ b/src/AERN2/MP/Float/Conversions.hs
@@ -47,6 +47,10 @@
 mpFloat :: (CanBeMPFloat t) => t -> MPFloat
 mpFloat = convertExactly
 
+instance ConvertibleExactly MPFloat MPFloat where
+    safeConvertExactly =
+      Right . id
+
 instance ConvertibleExactly Integer MPFloat where
     safeConvertExactly =
       Right . MPFloat . P.fromInteger
