diff --git a/examples/Test.hs b/examples/Test.hs
new file mode 100644
--- /dev/null
+++ b/examples/Test.hs
@@ -0,0 +1,19 @@
+module Main where
+
+import Base
+import Simple
+import Infeasible
+import Clustering
+import Stupid
+
+
+main :: IO ()
+main
+ = do   putStrLn "Simple"
+        simple
+        putStrLn "Infeasible"
+        infeasible
+        putStrLn "Clustering"
+        clustering
+        putStrLn "Stupid"
+        stupid
diff --git a/limp-cbc.cabal b/limp-cbc.cabal
--- a/limp-cbc.cabal
+++ b/limp-cbc.cabal
@@ -1,8 +1,9 @@
 name:                limp-cbc
-version:             0.2.8.6
+version:             0.3.0.0
 synopsis:            bindings for integer linear programming solver Coin/CBC
 description:         very simple binding to external solver, CBC.
                      CBC is somewhat faster than GLPK, and also has a more permissive licence.
+                     relies on coin/cbc version 2.8.6.
 
 license:             MIT
 license-file:        LICENSE
@@ -23,6 +24,7 @@
   exposed-modules:
         Numeric.Limp.Solvers.Cbc
         Numeric.Limp.Solvers.Cbc.Solve
+        Numeric.Limp.Solvers.Cbc.Error
         Numeric.Limp.Solvers.Cbc.MatrixRepr
 
   other-modules:       
@@ -32,7 +34,7 @@
         base        < 5,
         containers  == 0.5.*,
         vector      == 0.10.*,
-        limp
+        limp        == 0.3.*
 
   ghc-options: -Wall -fno-warn-orphans
   default-language: Haskell2010
@@ -44,3 +46,12 @@
   Include-dirs:     cbits
   includes:         Cbc.h coin/Cbc_C_Interface.h
   C-sources:        cbits/Cbc.cpp
+
+test-suite test
+  type:     exitcode-stdio-1.0
+  hs-source-dirs: examples
+  main-is: Test.hs
+  build-depends: base, limp, limp-cbc
+  default-language: Haskell2010
+  default-extensions:       TemplateHaskell TypeFamilies FlexibleContexts GeneralizedNewtypeDeriving DataKinds GADTs RankNTypes StandaloneDeriving
+
diff --git a/src/Numeric/Limp/Solvers/Cbc.hs b/src/Numeric/Limp/Solvers/Cbc.hs
--- a/src/Numeric/Limp/Solvers/Cbc.hs
+++ b/src/Numeric/Limp/Solvers/Cbc.hs
@@ -1,11 +1,15 @@
-module Numeric.Limp.Solvers.Cbc where
+module Numeric.Limp.Solvers.Cbc
+    ( Error(..)
+    , solve
+    ) where
 import qualified Numeric.Limp.Canon as C
 import Numeric.Limp.Program
 import Numeric.Limp.Rep
 
 import qualified Numeric.Limp.Solvers.Cbc.Solve as S
+import Numeric.Limp.Solvers.Cbc.Error
 
-solve :: (Ord z, Ord r) => Program z r IntDouble -> Either S.Error (Assignment z r IntDouble)
+solve :: (Ord z, Ord r) => Program z r IntDouble -> Either Error (Assignment z r IntDouble)
 solve p
  = let pc = C.program p
    in  S.solve pc
diff --git a/src/Numeric/Limp/Solvers/Cbc/Error.hs b/src/Numeric/Limp/Solvers/Cbc/Error.hs
new file mode 100644
--- /dev/null
+++ b/src/Numeric/Limp/Solvers/Cbc/Error.hs
@@ -0,0 +1,6 @@
+module Numeric.Limp.Solvers.Cbc.Error where
+
+data Error
+ = Infeasible
+ deriving Show
+
diff --git a/src/Numeric/Limp/Solvers/Cbc/Solve.hs b/src/Numeric/Limp/Solvers/Cbc/Solve.hs
--- a/src/Numeric/Limp/Solvers/Cbc/Solve.hs
+++ b/src/Numeric/Limp/Solvers/Cbc/Solve.hs
@@ -2,16 +2,13 @@
 import Numeric.Limp.Canon
 import Numeric.Limp.Rep
 
+import Numeric.Limp.Solvers.Cbc.Error
 import Numeric.Limp.Solvers.Cbc.MatrixRepr
 
 import qualified Data.Vector.Storable as V
 import Numeric.Limp.Solvers.Cbc.Internal.Wrapper
 
 import System.IO.Unsafe
-
-data Error
- = Infeasible
- deriving Show
 
 solve :: (Ord z, Ord r) => Program z r IntDouble -> Either Error (Assignment z r IntDouble)
 solve p
