diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -46,7 +46,6 @@
 A sequence is allowed not to converge, but only if all its elements contain the same error.  
 Such a sequence can be thought of as converging to this error.
 
-
 ## 2. Usage with Prelude
 
 First, let us load the package with **Prelude** operations:
@@ -214,7 +213,7 @@
 ...> bad1 ? (prec 100)
 {{ERROR: out of domain: negative sqrt argument}}
 ```
- 
+
 and sometimes an error cannot be determined with certainty:
 
 ```Text
diff --git a/aern2-real.cabal b/aern2-real.cabal
--- a/aern2-real.cabal
+++ b/aern2-real.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 9e106106d0bd593449a861fdba5c8ce5eb3de6bab0d62934c6a6bbb41d51783a
+-- hash: a941e85f57a40b5cf3c43916267832d6e3d3d06355ebdf3245776b4d564ec0cf
 
 name:           aern2-real
-version:        0.2.4.3
+version:        0.2.5.0
 synopsis:       Real numbers as sequences of MPBalls
 description:    Please see the README on GitHub at <https://github.com/michalkonecny/aern2/#readme>
 category:       Math
@@ -61,7 +61,7 @@
   ghc-options: -Wall
   build-depends:
       QuickCheck
-    , aern2-mp >=0.2.4
+    , aern2-mp >=0.2.5
     , base ==4.*
     , collect-errors >=0.1.5
     , hspec
@@ -93,7 +93,7 @@
   ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall
   build-depends:
       QuickCheck
-    , aern2-mp >=0.2.4
+    , aern2-mp >=0.2.5
     , 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,7 @@
 # Change log for aern2-real
 
+* v 0.2.5 2021-05-27
+  * CanSelect moved to aern2-mp
 * v 0.2.4 2021-05-26
   * overhaul README and examples
   * stop "very inaccurate" errors breaking ? (bits n) queries
@@ -28,4 +30,3 @@
   * arrow-based networks of nodes communicating via query-answer protocols
   * networks executable with cached and parallel strategies
   * network execution can be visualised in browser using an Elm frontend
-
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
@@ -26,6 +26,8 @@
 
 import qualified Data.List as List
 
+import AERN2.Select
+
 import AERN2.MP
 
 import AERN2.Real.Type
@@ -51,16 +53,6 @@
   and2 = lift2 and2
   or2 = lift2 or2
 
--- select:
-
-class (IsBool (SelectType k)) => CanSelect k where
-  {-| Must be Bool or similar -}
-  type SelectType k 
-  {-|
-    Execute two lazy computations "in parallel" until one of them succeeds. 
-  -}
-  select :: k -> k -> (SelectType k) {-^ True means that the first computation succeeded. -}
-
 instance CanSelect CKleenean where
   type SelectType CKleenean = Bool
   select (CSequence s1) (CSequence s2) = aux s1 s2
@@ -72,25 +64,6 @@
         (Right CertainFalse, Right CertainFalse) -> error "select: Both branches failed!"
         _ -> aux rest1 rest2
     aux _ _ = error "select: internal error"
-
-instance CanSelect Kleenean where
-  type SelectType Kleenean = CN Bool
-  select CertainTrue _ = cn True
-  select _ CertainTrue = cn False
-  select CertainFalse CertainFalse =
-    CN.noValueNumErrorPotential $ 
-      CN.NumError "select (Kleenean): Both branches failed!"
-  select _ _ = 
-    CN.noValueNumErrorPotential $ 
-      CN.NumError "select (Kleenean): Insufficient information to determine selection."
-
-instance CanSelect (CN Kleenean) where
-  type SelectType (CN Kleenean) = CN Bool
-  select cnk1 cnk2 =
-    do
-    k1 <- cnk1
-    k2 <- cnk2
-    select k1 k2
 
 instance (CanUnionCNSameType t) =>
   HasIfThenElse CKleenean (CSequence t)
