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.10.0
+version:        0.2.11.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,12 +60,12 @@
   ghc-options: -Wall
   build-depends:
       QuickCheck
-    , aern2-mp >=0.2.10.0
+    , aern2-mp >=0.2.11.0
     , base ==4.*
     , collect-errors >=0.1.5
     , hspec
     , integer-logarithms
-    , mixed-types-num >=0.5.10
+    , mixed-types-num >=0.5.11
   default-language: Haskell2010
 
 test-suite aern2-real-test
@@ -92,11 +92,11 @@
   ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall
   build-depends:
       QuickCheck
-    , aern2-mp >=0.2.10.0
+    , aern2-mp >=0.2.11.0
     , aern2-real
     , base ==4.*
     , collect-errors >=0.1.5
     , hspec
     , integer-logarithms
-    , mixed-types-num >=0.5.10
+    , mixed-types-num >=0.5.11
   default-language: Haskell2010
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,7 @@
 # Change log for aern2-real
 
+* v 0.2.11 2022-08-25
+  * left-first and/or for CKleeneans
 * v 0.2.10 2022-08-20
   * add to RealNumber: HasLimitsSameType, CanSelectCNBool, same compare types
   * SelectType CKleenean = CN Bool
diff --git a/src/AERN2/Real.hs b/src/AERN2/Real.hs
--- a/src/AERN2/Real.hs
+++ b/src/AERN2/Real.hs
@@ -59,19 +59,20 @@
     , 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)
+    , EqCompareType Integer r ~ OrderCompareType r r
+    , EqCompareType r Integer ~ OrderCompareType r r
+    , EqCompareType Int r ~ OrderCompareType r r
+    , EqCompareType r Int ~ OrderCompareType r r
+    , EqCompareType Rational r ~ OrderCompareType r r
+    , EqCompareType r Rational ~ 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 ~ OrderCompareType r r
+    -- , HasIfThenElseSameType (OrderCompareType r r) r
+    )
     => 
     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
@@ -47,10 +47,12 @@
   type NegType (CSequence t) = CSequence (NegType t)
   negate = lift1 negate
 
-instance (CanAndOrAsymmetric t1 t2) => CanAndOrAsymmetric (CSequence t1) (CSequence t2) where
+instance (CanAndOrAsymmetric t1 t2, CanTestCertainly t1, HasBools t2) => 
+  CanAndOrAsymmetric (CSequence t1) (CSequence t2) 
+  where
   type AndOrType (CSequence t1)  (CSequence t2) = CSequence (AndOrType t1 t2)
-  and2 = lift2 and2
-  or2 = lift2 or2
+  and2 = lift2LeftFirst and2
+  or2 = lift2LeftFirst or2
 
 instance CanSelect CKleenean where
   type SelectType CKleenean = CN Bool
diff --git a/src/AERN2/Real/Comparisons.hs b/src/AERN2/Real/Comparisons.hs
--- a/src/AERN2/Real/Comparisons.hs
+++ b/src/AERN2/Real/Comparisons.hs
@@ -30,7 +30,7 @@
 -- equality:
 
 instance
-  (HasEqAsymmetric t1 t2, IsBool (CSequence (EqCompareType t1 t2)))
+  (HasEqAsymmetric t1 t2, IsBool (CSequence (EqCompareType t1 t2)), CanTestCertainly (EqCompareType t1 t2))
   => 
   HasEqAsymmetric (CSequence t1) (CSequence t2) 
   where
@@ -40,7 +40,7 @@
 -- order:
 
 instance 
-  (HasOrderAsymmetric t1 t2, IsBool (CSequence (OrderCompareType t1 t2)))
+  (HasOrderAsymmetric t1 t2, IsBool (CSequence (OrderCompareType t1 t2)), CanTestCertainly (OrderCompareType t1 t2))
   => 
   HasOrderAsymmetric (CSequence t1) (CSequence t2) 
   where
@@ -111,7 +111,7 @@
 
 
 instance
-  (HasEqAsymmetric a MPBall)
+  (HasEqAsymmetric a MPBall, CanTestCertainly (EqCompareType a MPBall))
   => 
   HasEqAsymmetric (CSequence a) MPBall
   where
@@ -120,7 +120,7 @@
   notEqualTo s a = notEqualTo (s ? (getPrecision a)) (cn a)
 
 instance
-  (HasEqAsymmetric a MPBall)
+  (HasEqAsymmetric a MPBall, CanTestCertainly (EqCompareType a MPBall))
   => 
   HasEqAsymmetric (CSequence a) (CN MPBall)
   where
@@ -129,7 +129,7 @@
   notEqualTo s a = notEqualTo (s ? (getPrecision a)) a
 
 instance
-  (HasEqAsymmetric MPBall b)
+  (HasEqAsymmetric MPBall b, CanTestCertainly (EqCompareType MPBall b))
   => 
   HasEqAsymmetric MPBall (CSequence b)
   where
@@ -138,7 +138,7 @@
   notEqualTo a s = notEqualTo (cn a) (s ? (getPrecision a))
 
 instance
-  (HasEqAsymmetric MPBall b)
+  (HasEqAsymmetric MPBall b, CanTestCertainly (EqCompareType MPBall b))
   => 
   HasEqAsymmetric (CN MPBall) (CSequence b)
   where
@@ -147,7 +147,7 @@
   notEqualTo a s = notEqualTo a (s ? (getPrecision a))
 
 instance
-  (HasOrderAsymmetric a MPBall)
+  (HasOrderAsymmetric a MPBall, CanTestCertainly (OrderCompareType a MPBall))
   => 
   HasOrderAsymmetric (CSequence a) MPBall
   where
@@ -158,7 +158,7 @@
   geq s a = geq (s ? (getPrecision a)) (cn a)
 
 instance
-  (HasOrderAsymmetric a MPBall)
+  (HasOrderAsymmetric a MPBall, CanTestCertainly (OrderCompareType a MPBall))
   => 
   HasOrderAsymmetric (CSequence a) (CN MPBall)
   where
@@ -169,7 +169,7 @@
   geq s a = geq (s ? (getPrecision a)) a
 
 instance
-  (HasOrderAsymmetric MPBall b)
+  (HasOrderAsymmetric MPBall b, CanTestCertainly (OrderCompareType MPBall b))
   => 
   HasOrderAsymmetric MPBall (CSequence b)
   where
@@ -180,7 +180,7 @@
   geq a s = geq (cn a) (s ? (getPrecision a))
 
 instance
-  (HasOrderAsymmetric MPBall b)
+  (HasOrderAsymmetric MPBall b, CanTestCertainly (OrderCompareType MPBall b))
   => 
   HasOrderAsymmetric (CN MPBall) (CSequence b)
   where
@@ -231,7 +231,7 @@
       max = liftT1 max
 
     instance
-      (HasEqAsymmetric a $t, IsBool (CSequence (EqCompareType a $t)))
+      (HasEqAsymmetric a $t, IsBool (CSequence (EqCompareType a $t)), CanTestCertainly (EqCompareType a $t))
       => 
       HasEqAsymmetric (CSequence a) $t
       where
@@ -240,7 +240,7 @@
       notEqualTo = lift1T (/=)
 
     instance
-      (HasEqAsymmetric a $t, IsBool (CSequence (EqCompareType a $t)))
+      (HasEqAsymmetric a $t, IsBool (CSequence (EqCompareType a $t)), CanTestCertainly (EqCompareType a $t))
       => 
       HasEqAsymmetric (CSequence a) (CN $t)
       where
@@ -249,7 +249,7 @@
       notEqualTo = lift1T (/=)
 
     instance
-      (HasEqAsymmetric $t a, IsBool (CSequence (EqCompareType $t a)))
+      (HasEqAsymmetric $t a, IsBool (CSequence (EqCompareType $t a)), CanTestCertainly (EqCompareType $t a))
       =>
       HasEqAsymmetric $t (CSequence a)
       where
@@ -258,7 +258,7 @@
       notEqualTo = liftT1 (/=)
 
     instance
-      (HasEqAsymmetric $t a, IsBool (CSequence (EqCompareType $t a)))
+      (HasEqAsymmetric $t a, IsBool (CSequence (EqCompareType $t a)), CanTestCertainly (EqCompareType $t a))
       =>
       HasEqAsymmetric (CN $t) (CSequence a)
       where
@@ -267,7 +267,7 @@
       notEqualTo = liftT1 (/=)
 
     instance
-      (HasOrderAsymmetric a $t, IsBool (CSequence (OrderCompareType a $t)))
+      (HasOrderAsymmetric a $t, IsBool (CSequence (OrderCompareType a $t)), CanTestCertainly (OrderCompareType a $t))
       => 
       HasOrderAsymmetric (CSequence a) $t
       where
@@ -278,7 +278,7 @@
       geq = lift1T geq
 
     instance
-      (HasOrderAsymmetric a $t, IsBool (CSequence (OrderCompareType a $t)))
+      (HasOrderAsymmetric a $t, IsBool (CSequence (OrderCompareType a $t)), CanTestCertainly (OrderCompareType a $t))
       => 
       HasOrderAsymmetric (CSequence a) (CN $t)
       where
@@ -289,7 +289,7 @@
       geq = lift1T geq
 
     instance
-      (HasOrderAsymmetric $t a, IsBool (CSequence (OrderCompareType $t a)))
+      (HasOrderAsymmetric $t a, IsBool (CSequence (OrderCompareType $t a)), CanTestCertainly (OrderCompareType $t a))
       =>
       HasOrderAsymmetric $t (CSequence a)
       where
@@ -300,7 +300,7 @@
       geq = liftT1 geq
 
     instance
-      (HasOrderAsymmetric $t a, IsBool (CSequence (OrderCompareType $t a)))
+      (HasOrderAsymmetric $t a, IsBool (CSequence (OrderCompareType $t a)), CanTestCertainly (OrderCompareType $t a))
       =>
       HasOrderAsymmetric (CN $t) (CSequence a)
       where
diff --git a/src/AERN2/Real/Type.hs b/src/AERN2/Real/Type.hs
--- a/src/AERN2/Real/Type.hs
+++ b/src/AERN2/Real/Type.hs
@@ -33,7 +33,7 @@
 
 {- Convergent partial sequences -}
 
-newtype CSequence t = CSequence [CN t]
+newtype CSequence t = CSequence { unCSequence :: [CN t] }
 
 instance Show t => Show (CSequence t) where
   show (CSequence s) = 
@@ -53,6 +53,11 @@
 
 lift2 :: (CN t1 -> CN t2 -> CN t3) -> CSequence t1 -> CSequence t2 -> CSequence t3
 lift2 f (CSequence a1) (CSequence a2) = CSequence (zipWith f a1 a2)
+
+lift2LeftFirst :: (CN t1 -> CN t2 -> CN t3) -> CSequence t1 -> CSequence t2 -> CSequence t3
+lift2LeftFirst f (CSequence a1) s2 = CSequence (map f' $ zip a1 [0..])
+  where
+  f' (b1, i) = f b1 (unCSequence s2 !! i)
 
 lift1T :: (CN t1 -> t2 -> CN t3) -> CSequence t1 -> t2 -> CSequence t3
 lift1T f (CSequence a1) a2 = CSequence (map (flip f a2) a1)
