diff --git a/.travis.yml b/.travis.yml
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,3 +1,41 @@
-language: haskell
+env:
+  - CABALVER=1.18 GHCVER=7.6.3
+  - CABALVER=1.18 GHCVER=7.8.3
+  - CABALVER=1.22 GHCVER=7.10.1
+
+before_install:
+  - travis_retry sudo add-apt-repository -y ppa:hvr/ghc
+  - travis_retry sudo apt-get update
+  - travis_retry sudo apt-get -qq -y install cabal-install-$CABALVER ghc-$GHCVER
+  - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH
+
 install:
-  - cabal install --enable-tests --force-reinstalls
+  - cabal --version
+  - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"
+  - travis_retry cabal update
+  - |
+    if [ $GHCVER = "head" ] || [ ${GHCVER%.*} = "7.8" ]  || [ ${GHCVER%.*} = "7.10" ]; then
+      travis_retry sudo apt-get install happy-1.19.4 alex-3.1.3
+      export PATH=/opt/alex/3.1.3/bin:/opt/happy/1.19.4/bin:$PATH
+    else
+      travis_retry sudo apt-get install happy alex
+    fi
+  
+  - cabal install --dependencies-only --enable-tests
+
+script:
+  - cabal configure --enable-tests
+  - cabal build
+  - cabal test
+  - cabal check || true
+  - cabal sdist
+
+# The following scriptlet checks that the resulting source distribution can be built & installed
+  - export SRC_TGZ=$(cabal info . | awk '{print $2 ".tar.gz";exit}') ;
+    cd dist/;
+    if [ -f "$SRC_TGZ" ]; then
+       cabal install --force-reinstalls "$SRC_TGZ";
+    else
+       echo "expected '$SRC_TGZ' not found";
+       exit 1;
+    fi
diff --git a/RANSAC.cabal b/RANSAC.cabal
--- a/RANSAC.cabal
+++ b/RANSAC.cabal
@@ -1,5 +1,5 @@
 name:                RANSAC
-version:             0.1.0.1
+version:             0.1.0.2
 synopsis:            The RANSAC algorithm for parameter estimation.
 description:         The RANdom SAmple Consensus (RANSAC) algorithm for
                      estimating the parameters of a mathematical model
diff --git a/src/Numeric/Ransac.hs b/src/Numeric/Ransac.hs
--- a/src/Numeric/Ransac.hs
+++ b/src/Numeric/Ransac.hs
@@ -54,9 +54,10 @@
         genModel = do model <- untilJust (fit <$> sample)
                       let !errors = V.map (residual model) pts
                           !inliers = V.ifilter (const . goodFit . (errors !)) pts
-                          Just model' = fit inliers
-                          err = V.sum $ V.map (residual model') pts
-                      return (model', err, inliers)
+                      case fit inliers of
+                        Nothing -> genModel
+                        Just model' -> let err = V.sum $ V.map (residual model') pts
+                                       in return (model', err, inliers)
         n = V.length pts
         ratioInliers n' = fromIntegral n' / fromIntegral n
 {-# INLINE ransac #-}
diff --git a/tests/SmokeTest.hs b/tests/SmokeTest.hs
--- a/tests/SmokeTest.hs
+++ b/tests/SmokeTest.hs
@@ -19,13 +19,15 @@
 
 -- | Fit a 2D line to a collection of 'Point's.
 fitLine :: Vector Point -> Maybe (V2 Float)
-fitLine pts = (!* b) <$> inv22 a
+fitLine pts = (!* b) <$> inv22' a
   where sx = V.sum $ V.map (view _x) pts
         a = V2 (V2 (V.sum (V.map (sq . view _x) pts)) sx)
                (V2 sx (fromIntegral (V.length pts)))
         b = V2 (V.sum (V.map F.product pts))
                (V.sum (V.map (view _y) pts))
-
+        inv22' m = let m' = inv22 m 
+                   in if F.any (F.any isNaN) m' then Nothing else Just m'
+                            
 -- | Compute the error of a 'Point' with respect to a hypothesized
 -- linear model.
 ptError :: V2 Float -> Point -> Float
