diff --git a/aern2-real.cabal b/aern2-real.cabal
--- a/aern2-real.cabal
+++ b/aern2-real.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           aern2-real
-version:        0.2.9.2
+version:        0.2.10.0
 synopsis:       Real numbers as convergent sequences of intervals
 description:    Please see the README on GitHub at <https://github.com/michalkonecny/aern2/#readme>
 category:       Math
@@ -60,7 +60,7 @@
   ghc-options: -Wall
   build-depends:
       QuickCheck
-    , aern2-mp >=0.2.9.1
+    , aern2-mp >=0.2.10.0
     , base ==4.*
     , collect-errors >=0.1.5
     , hspec
@@ -92,7 +92,7 @@
   ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall
   build-depends:
       QuickCheck
-    , aern2-mp >=0.2.9.1
+    , aern2-mp >=0.2.10.0
     , aern2-real
     , base ==4.*
     , collect-errors >=0.1.5
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,8 @@
 # Change log for aern2-real
 
+* v 0.2.10 2022-08-20
+  * add to RealNumber: HasLimitsSameType, CanSelectCNBool, same compare types
+  * SelectType CKleenean = CN Bool
 * v 0.2.9.2 2022-08-19
   * add to RealNumber: HasIfThenElse for its SelectType
 * v 0.2.9 2022-07-13 (update in aern2-mp)
diff --git a/src/AERN2/Real.hs b/src/AERN2/Real.hs
--- a/src/AERN2/Real.hs
+++ b/src/AERN2/Real.hs
@@ -23,7 +23,8 @@
    -- * limits
    HasLimits(..),
    -- * lazy Kleeneans
-   CKleenean, CanBeCKleenean, ckleenean, CanSelect(..),
+   CKleenean, CanBeCKleenean, ckleenean, 
+   CanSelect(..), CanSelectBool, CanSelectCNBool,
    -- * extracting approximations
    CanExtractApproximation(..), (?), bits, prec,
    -- * abstract real numbers
@@ -45,19 +46,32 @@
 
 import MixedTypesNumPrelude
 -- import qualified Prelude as P
-import GHC.TypeLits
+import GHC.TypeLits ( KnownNat )
+import Numeric.CollectErrors (CanTakeCNErrors)
 
 -- import Text.Printf
 -- -- import AERN2.MP.Dyadic
 
 class
     (OrderedField r
-    , HasLimits Int r
-    , HasLimits Integer r
-    , HasLimits Rational r
-    , CanSelect (OrderCompareType r r)
-    , HasIfThenElseSameType (SelectType (OrderCompareType r r)) r
-    , (CanTestCertainly (SelectType (OrderCompareType r r))))
+    , HasLimitsSameType Int r
+    , HasLimitsSameType Integer r
+    , HasLimitsSameType Rational r
+    , CanTakeCNErrors r
+    , CanSelectCNBool (OrderCompareType r r)
+    , OrderCompareType r r ~ OrderCompareType Integer r
+    , OrderCompareType r r ~ OrderCompareType r Integer
+    , OrderCompareType r r ~ OrderCompareType Int r
+    , OrderCompareType r r ~ OrderCompareType r Int
+    , OrderCompareType r r ~ OrderCompareType Rational r
+    , OrderCompareType r r ~ OrderCompareType r Rational
+    , EqCompareType r r ~ OrderCompareType r r
+    , EqCompareType r r ~ EqCompareType Integer r
+    , EqCompareType r r ~ EqCompareType r Integer
+    , EqCompareType r r ~ EqCompareType Int r
+    , EqCompareType r r ~ EqCompareType r Int
+    , EqCompareType r r ~ EqCompareType Rational r
+    , EqCompareType r r ~ EqCompareType r Rational)
     => 
     RealNumber r
 
diff --git a/src/AERN2/Real/CKleenean.hs b/src/AERN2/Real/CKleenean.hs
--- a/src/AERN2/Real/CKleenean.hs
+++ b/src/AERN2/Real/CKleenean.hs
@@ -53,16 +53,17 @@
   or2 = lift2 or2
 
 instance CanSelect CKleenean where
-  type SelectType CKleenean = Bool
+  type SelectType CKleenean = CN Bool
   select (CSequence s1) (CSequence s2) = aux s1 s2
     where
     aux (k1 : rest1) (k2 : rest2) =
       case (CN.toEither k1, CN.toEither k2) of
-        (Right CertainTrue, _) -> True 
-        (_, Right CertainTrue) -> False
-        (Right CertainFalse, Right CertainFalse) -> error "select: Both branches failed!"
+        (Right CertainTrue, _) -> cn True 
+        (_, Right CertainTrue) -> cn False
+        (Right CertainFalse, Right CertainFalse) -> 
+          CN.noValueNumErrorCertain $ CN.NumError "select: Both branches failed!"
         _ -> aux rest1 rest2
-    aux _ _ = error "select: internal error"
+    aux _ _ = CN.noValueNumErrorCertain $ CN.NumError "select: internal error"
 
 instance (CanUnionCNSameType t) =>
   HasIfThenElse CKleenean (CSequence t)
