diff --git a/Config.hs b/Config.hs
new file mode 100644
--- /dev/null
+++ b/Config.hs
@@ -0,0 +1,145 @@
+{-
+    GSL and LAPACK may require auxiliary libraries which depend on OS,
+    distribution, and implementation. This script tries to to find out
+    the correct link command for your system.
+    Suggestions and contributions are welcome.
+
+    By default we try to link -lgsl -llapack. This works in ubuntu/debian,
+    both with and without ATLAS.
+    If this fails we try different sets of additional libraries which are
+    known to work in some systems.
+
+    The desired libraries can also be explicitly given by the user using cabal
+    flags (e.g., -fmkl, -faccelerate) or --configure-option=link:lib1,lib2,lib3,...
+
+-}
+
+module Config(config) where
+
+import System.Process
+import System.Exit
+import System.Environment
+import System.Directory(createDirectoryIfMissing)
+import Data.List(isPrefixOf, intercalate)
+import Distribution.Simple.LocalBuildInfo
+import Distribution.Simple.Configure
+import Distribution.PackageDescription
+
+-- possible additional dependencies for the desired libs (by default gsl lapack)
+
+opts = [ ""                              -- Ubuntu/Debian
+       , "blas"
+       , "blas cblas"
+       , "cblas"
+       , "gslcblas"
+       , "blas gslcblas"
+       , "f77blas"
+       , "f77blas cblas atlas gcc_s"     -- Arch Linux (older version of atlas-lapack)
+       , "blas gslcblas gfortran"        -- Arch Linux with normal blas and lapack
+       ]
+
+-- compile a simple program with symbols from GSL and LAPACK with the given libs
+testprog bInfo buildInfo libs fmks =
+    "echo \"#include <gsl/gsl_sf_gamma.h>\nint main(){zgesvd_(); gsl_sf_gamma(5);}\""
+                     ++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc "
+                     ++ (join $ ccOptions buildInfo) ++ " "
+                     ++ (join $ cppOptions buildInfo) ++ " "
+                     ++ (join $ map ("-I"++) $ includeDirs buildInfo) ++ " " 
+                     ++ (buildDir bInfo) ++ "/dummy.c -o "
+                     ++ (buildDir bInfo) ++ "/dummy "
+                     ++ (join $ map ("-L"++) $ extraLibDirs buildInfo) ++ " "
+                     ++ (prepend "-l" $ libs) ++ " "
+                     ++ (prepend "-framework " fmks) ++ " > /dev/null 2> /dev/null"
+
+join = intercalate " "
+prepend x = unwords . map (x++) . words
+
+check bInfo buildInfo libs fmks = (ExitSuccess ==) `fmap` system (testprog bInfo buildInfo libs fmks)
+
+-- simple test for GSL
+gsl bInfo buildInfo = "echo \"#include <gsl/gsl_sf_gamma.h>\nint main(){gsl_sf_gamma(5);}\""
+           ++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc "
+           ++ (join $ ccOptions buildInfo) ++ " "
+           ++ (join $ cppOptions buildInfo) ++ " "
+           ++ (join $ map ("-I"++) $ includeDirs buildInfo) ++ " " 
+           ++ (buildDir bInfo) ++ "/dummy.c -o "
+           ++ (buildDir bInfo) ++ "/dummy "
+           ++ (join $ map ("-L"++) $ extraLibDirs buildInfo) ++ " -lgsl -lgslcblas"
+           ++ " > /dev/null 2> /dev/null"
+
+-- test for gsl >= 1.12
+gsl112 bInfo buildInfo =
+    "echo \"#include <gsl/gsl_sf_exp.h>\nint main(){gsl_sf_exprel_n_CF_e(1,1,0);}\""
+           ++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc " 
+           ++ (buildDir bInfo) ++ "/dummy.c "
+           ++ (join $ ccOptions buildInfo) ++ " "
+           ++ (join $ cppOptions buildInfo) ++ " "
+           ++ (join $ map ("-I"++) $ includeDirs buildInfo)
+           ++" -o " ++ (buildDir bInfo) ++ "/dummy "
+           ++ (join $ map ("-L"++) $ extraLibDirs buildInfo) ++ " -lgsl -lgslcblas"
+           ++ " > /dev/null 2> /dev/null"
+
+
+checkCommand c = (ExitSuccess ==) `fmap` system c
+
+-- test different configurations until the first one works
+try _ _ _ _ [] = return Nothing
+try l i b f (opt:rest) = do
+    ok <- check l i (b ++ " " ++ opt) f
+    if ok then return (Just opt)
+          else try l i b f rest
+
+-- read --configure-option=link:lib1,lib2,lib3,etc
+linkop = "link:"
+getUserLink = concatMap (g . drop (length linkop)) . filter (isPrefixOf linkop)
+    where g = map cs
+          cs ',' = ' '
+          cs x   = x
+
+config = do
+    info <- maybeGetPersistBuildConfig "dist"
+    case info of
+        Nothing -> putStrLn "Please run \"cabal clean\" first." >> exitFailure
+        Just bInfo -> mainOk bInfo
+        
+mainOk bInfo = do
+    putStr "Checking foreign libraries..."
+    args <- getArgs
+
+    let Just lib = library . localPkgDescr $ bInfo
+        buildInfo = libBuildInfo lib
+        base = unwords . extraLibs $ buildInfo
+        fwks = unwords . frameworks $ buildInfo
+        auxpref = getUserLink args
+
+    -- We extract the desired libs from hmatrix.cabal (using a cabal flags)
+    -- and from a posible --configure-option=link:lib1,lib2,lib3
+    -- by default the desired libs are gsl lapack.
+
+    let pref = if null (words (base ++ " " ++ auxpref)) then "gsl lapack" else auxpref
+        fullOpts = map ((pref++" ")++) opts
+
+    -- create the build directory (used for tmp files) if necessary
+    createDirectoryIfMissing True $ buildDir bInfo
+    
+    r <- try bInfo buildInfo base fwks fullOpts
+    case r of
+        Nothing -> do
+            putStrLn " FAIL"
+            g  <- checkCommand $ gsl bInfo buildInfo
+            if g
+                then putStrLn " *** Sorry, I can't link LAPACK."
+                else putStrLn " *** Sorry, I can't link GSL."
+            putStrLn " *** Please make sure that the appropriate -dev packages are installed."
+            putStrLn " *** You can also specify the required libraries using"
+            putStrLn " *** cabal install hmatrix --configure-option=link:lib1,lib2,lib3,etc."
+            writeFile "hmatrix.buildinfo" ("buildable: False\n")
+        Just ops -> do
+            putStrLn " OK"
+            g <- checkCommand $ gsl112 bInfo buildInfo
+            writeFile "hmatrix.buildinfo" $ "extra-libraries: " ++
+                ops ++ "\n" ++
+                if g
+                    then ""
+                    else "cc-options: -DGSL110\n"
+
diff --git a/Setup.lhs b/Setup.lhs
--- a/Setup.lhs
+++ b/Setup.lhs
@@ -2,7 +2,42 @@
 
 > import Distribution.Simple
 > import System.Process(system)
+>
+> import Config(config)
+>
+> import Distribution.Simple.Setup
+> import Distribution.PackageDescription
+> import Distribution.Simple.LocalBuildInfo
+> import Distribution.Simple.Command
+> import Distribution.PackageDescription.Parse
+> import Distribution.Simple.Utils(info)
+> import Distribution.Verbosity
 
-> main = defaultMainWithHooks autoconfUserHooks {runTests = t}
+> main = do
+>    defaultMainWithHooks autoconfUserHooks {
+>        runTests = t, 
+>        postConf = modifiedPostConf }
+>   where modifiedPostConf :: Args -> ConfigFlags -> PackageDescription -> LocalBuildInfo -> IO ()
+>         modifiedPostConf args flags pkg_descr lbi
+>              = do let verbosity = fromFlag (configVerbosity flags)
+>                   noExtraFlags args
+>
+>                   config
+>
+>                   pbi <- getHookedBuildInfo verbosity
+>                   let pkg_descr' = updatePackageDescription pbi pkg_descr
+>                   postConf simpleUserHooks args flags pkg_descr' lbi
 
+
+> getHookedBuildInfo :: Verbosity -> IO HookedBuildInfo
+> getHookedBuildInfo verbosity = do
+>   maybe_infoFile <- defaultHookedPackageDesc
+>   case maybe_infoFile of
+>     Nothing       -> return emptyHookedBuildInfo
+>     Just infoFile -> do
+>       info verbosity $ "Reading parameters from " ++ infoFile
+>       readHookedBuildInfo verbosity infoFile
+
+
 > t _ _ _ _ = system ( "runhaskell examples/tests.hs") >> return()
+
diff --git a/THANKS b/THANKS
--- a/THANKS
+++ b/THANKS
@@ -85,3 +85,12 @@
 
 - Stefan Kersten fixed hmatrix.cabal for 64-bit ghc-7 in OS/X
 
+- Sacha Sokoloski reported an installation problem on Arch Linux and
+  helped with the configuration.
+
+- Carter Schonwald helped with the configuration for Homebrew OS X and
+  found a tolerance problem in test "1E5 rots".
+
+- Duncan Coutts reported a problem with configure.hs and contributed
+  a solution.
+
diff --git a/configure b/configure
deleted file mode 100644
--- a/configure
+++ /dev/null
@@ -1,3 +0,0 @@
-#! /bin/sh
-
-runhaskell configure.hs $*
diff --git a/configure.hs b/configure.hs
deleted file mode 100644
--- a/configure.hs
+++ /dev/null
@@ -1,145 +0,0 @@
-#! /usr/bin/env runhaskell
-{- configure.hs for hmatrix
-   ------------------------
-
-    GSL and LAPACK may require auxiliary libraries which depend on OS,
-    distribution, and implementation. This script tries to to find out
-    the correct link command for your system.
-    Suggestions and contributions are welcome.
-
-    By default we try to link -lgsl -llapack. This works in ubuntu/debian,
-    both with and without ATLAS.
-    If this fails we try different sets of additional libraries which are
-    known to work in some systems.
-
-    The desired libraries can also be explicitly given by the user using cabal
-    flags (e.g., -fmkl, -faccelerate) or --configure-option=link:lib1,lib2,lib3,...
-
--}
-
-import System.Process
-import System.Exit
-import System.Environment
-import System.Directory(createDirectoryIfMissing)
-import Data.List(isPrefixOf, intercalate)
-import Distribution.Simple.LocalBuildInfo
-import Distribution.Simple.Configure
-import Distribution.PackageDescription
-
--- possible additional dependencies for the desired libs (by default gsl lapack)
-
-opts = [ ""                              -- Ubuntu/Debian
-       , "blas"
-       , "blas cblas"
-       , "cblas"
-       , "gslcblas"
-       , "blas gslcblas"
-       , "f77blas"
-       , "f77blas cblas atlas gcc_s"     -- Arch Linux (older version of atlas-lapack)
-       , "blas gslcblas gfortran"        -- Arch Linux with normal blas and lapack
-       ]
-
--- compile a simple program with symbols from GSL and LAPACK with the given libs
-testprog bInfo buildInfo libs fmks =
-    "echo \"#include <gsl/gsl_sf_gamma.h>\nint main(){zgesvd_(); gsl_sf_gamma(5);}\""
-                     ++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc "
-                     ++ (join $ ccOptions buildInfo) ++ " "
-                     ++ (join $ cppOptions buildInfo) ++ " "
-                     ++ (join $ map ("-I"++) $ includeDirs buildInfo) ++ " " 
-                     ++ (buildDir bInfo) ++ "/dummy.c -o "
-                     ++ (buildDir bInfo) ++ "/dummy "
-                     ++ (join $ map ("-L"++) $ extraLibDirs buildInfo) ++ " "
-                     ++ (prepend "-l" $ libs) ++ " "
-                     ++ (prepend "-framework " fmks) ++ " > /dev/null 2> /dev/null"
-
-join = intercalate " "
-prepend x = unwords . map (x++) . words
-
-check bInfo buildInfo libs fmks = (ExitSuccess ==) `fmap` system (testprog bInfo buildInfo libs fmks)
-
--- simple test for GSL
-gsl bInfo buildInfo = "echo \"#include <gsl/gsl_sf_gamma.h>\nint main(){gsl_sf_gamma(5);}\""
-           ++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc "
-           ++ (join $ ccOptions buildInfo) ++ " "
-           ++ (join $ cppOptions buildInfo) ++ " "
-           ++ (join $ map ("-I"++) $ includeDirs buildInfo) ++ " " 
-           ++ (buildDir bInfo) ++ "/dummy.c -o "
-           ++ (buildDir bInfo) ++ "/dummy "
-           ++ (join $ map ("-L"++) $ extraLibDirs buildInfo) ++ " -lgsl -lgslcblas"
-           ++ " > /dev/null 2> /dev/null"
-
--- test for gsl >= 1.12
-gsl112 bInfo buildInfo =
-    "echo \"#include <gsl/gsl_sf_exp.h>\nint main(){gsl_sf_exprel_n_CF_e(1,1,0);}\""
-           ++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc " 
-           ++ (buildDir bInfo) ++ "/dummy.c "
-           ++ (join $ ccOptions buildInfo) ++ " "
-           ++ (join $ cppOptions buildInfo) ++ " "
-           ++ (join $ map ("-I"++) $ includeDirs buildInfo)
-           ++" -o " ++ (buildDir bInfo) ++ "/dummy "
-           ++ (join $ map ("-L"++) $ extraLibDirs buildInfo) ++ " -lgsl -lgslcblas"
-           ++ " > /dev/null 2> /dev/null"
-
-
-checkCommand c = (ExitSuccess ==) `fmap` system c
-
--- test different configurations until the first one works
-try _ _ _ _ [] = return Nothing
-try l i b f (opt:rest) = do
-    ok <- check l i (b ++ " " ++ opt) f
-    if ok then return (Just opt)
-          else try l i b f rest
-
--- read --configure-option=link:lib1,lib2,lib3,etc
-linkop = "link:"
-getUserLink = concatMap (g . drop (length linkop)) . filter (isPrefixOf linkop)
-    where g = map cs
-          cs ',' = ' '
-          cs x   = x
-
-main = do
-    info <- maybeGetPersistBuildConfig "dist"
-    case info of
-        Nothing -> putStrLn "Please run \"cabal clean\" first." >> exitFailure
-        Just bInfo -> mainOk bInfo
-        
-mainOk bInfo = do
-    putStr "Checking foreign libraries..."
-    args <- getArgs
-
-    let Just lib = library . localPkgDescr $ bInfo
-        buildInfo = libBuildInfo lib
-        base = unwords . extraLibs $ buildInfo
-        fwks = unwords . frameworks $ buildInfo
-        auxpref = getUserLink args
-
-    -- We extract the desired libs from hmatrix.cabal (using a cabal flags)
-    -- and from a posible --configure-option=link:lib1,lib2,lib3
-    -- by default the desired libs are gsl lapack.
-
-    let pref = if null (words (base ++ " " ++ auxpref)) then "gsl lapack" else auxpref
-        fullOpts = map ((pref++" ")++) opts
-
-    -- create the build directory (used for tmp files) if necessary
-    createDirectoryIfMissing True $ buildDir bInfo
-    
-    r <- try bInfo buildInfo base fwks fullOpts
-    case r of
-        Nothing -> do
-            putStrLn " FAIL"
-            g  <- checkCommand $ gsl bInfo buildInfo
-            if g
-                then putStrLn " *** Sorry, I can't link LAPACK."
-                else putStrLn " *** Sorry, I can't link GSL."
-            putStrLn " *** Please make sure that the appropriate -dev packages are installed."
-            putStrLn " *** You can also specify the required libraries using"
-            putStrLn " *** cabal install hmatrix --configure-option=link:lib1,lib2,lib3,etc."
-            writeFile "hmatrix.buildinfo" ("buildable: False\n")
-        Just ops -> do
-            putStrLn " OK"
-            g <- checkCommand $ gsl112 bInfo buildInfo
-            writeFile "hmatrix.buildinfo" $ "extra-libraries: " ++
-                ops ++ "\n" ++
-                if g
-                    then ""
-                    else "cc-options: -DGSL110\n"
diff --git a/hmatrix.cabal b/hmatrix.cabal
--- a/hmatrix.cabal
+++ b/hmatrix.cabal
@@ -1,5 +1,5 @@
 Name:               hmatrix
-Version:            0.11.0.1
+Version:            0.11.0.3
 License:            GPL
 License-file:       LICENSE
 Author:             Alberto Ruiz
@@ -21,14 +21,14 @@
                     .
                     - "Numeric.LinearAlgebra": everything + instances of standard Haskell numeric classes
 Category:           Math
-tested-with:        GHC ==6.10.4, GHC ==6.12.1, GHC ==6.12.3
+tested-with:        GHC ==6.10.4, GHC ==6.12.1, GHC ==6.12.3, GHC ==7.0.1, GHC==7.0.2
 
 cabal-version:      >=1.6
 
 build-type:         Custom
 
 extra-source-files: lib/Numeric/LinearAlgebra/Tests/quickCheckCompat.h
-                    configure configure.hs THANKS INSTALL CHANGES
+                    Config.hs THANKS INSTALL CHANGES
 extra-tmp-files:    hmatrix.buildinfo
 
 extra-source-files: examples/tests.hs
@@ -164,12 +164,14 @@
     if impl(ghc < 6.10.2)
         cpp-options: -DFINIT
 
+    if impl(ghc >= 7.0.1)
+        cpp-options: -DFINIT
+
     if flag(finit)
         cpp-options: -DFINIT
 
     if impl(ghc == 7.0.1)
         cpp-options: -DNONORMVTEST
-        cpp-options: -DFINIT
 
     if flag(mkl)
       if arch(x86_64)
@@ -179,7 +181,9 @@
 
     if os(OSX)
         extra-lib-dirs: /opt/local/lib/
-        include-dirs: /opt/local/include
+        include-dirs: /opt/local/include/
+        extra-lib-dirs: /usr/local/lib/
+        include-dirs: /usr/local/include/
         extra-libraries: gsl
         if arch(i386)
             cc-options: -arch i386
diff --git a/lib/Data/Packed/Internal/Vector.hs b/lib/Data/Packed/Internal/Vector.hs
--- a/lib/Data/Packed/Internal/Vector.hs
+++ b/lib/Data/Packed/Internal/Vector.hs
@@ -201,12 +201,21 @@
 
 subVector = Vector.slice
 
+{-
+subVector k l v
+    | k<0 || k >= n || k+l > n || l < 0 = error "subVector out of range"
+    | otherwise = unsafeFromForeignPtr fp (i+k) l
+  where
+    (fp, i, n) = unsafeToForeignPtr v
+-}
+
 #else
 
 subVector k l v@V{idim = n, ioff = i}
     | k<0 || k >= n || k+l > n || l < 0 = error "subVector out of range"
     | otherwise = v {idim = l, ioff = i+k}
 
+{-
 subVectorCopy k l (v@V {idim=n})
     | k<0 || k >= n || k+l > n || l < 0 = error "subVector out of range"
     | otherwise = unsafePerformIO $ do
@@ -214,6 +223,7 @@
         let f _ s _ d = copyArray d (advancePtr s k) l >> return 0
         app2 f vec v vec r "subVector"
         return r
+-}
 
 #endif
 
diff --git a/lib/Numeric/LinearAlgebra/Tests.hs b/lib/Numeric/LinearAlgebra/Tests.hs
--- a/lib/Numeric/LinearAlgebra/Tests.hs
+++ b/lib/Numeric/LinearAlgebra/Tests.hs
@@ -213,7 +213,7 @@
     where c = cos a
           s = sin a
 
-rotTest = fun (10^5) :~12~: rot 5E4
+rotTest = fun (10^5) :~11~: rot 5E4
     where fun n = foldl1' (<>) (map rot angles)
               where angles = toList $ linspace n (0,1)
 
