diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -1,2 +1,5 @@
 0.1.0.1:	
 		first version
+
+0.1.0.2:
+		updated to reflect hmatrix 0.9.3.0
diff --git a/configure.hs b/configure.hs
--- a/configure.hs
+++ b/configure.hs
@@ -18,6 +18,7 @@
 -}
 
 import System
+import System.Directory(createDirectoryIfMissing)
 import Data.List(isPrefixOf, intercalate)
 import Distribution.Simple.LocalBuildInfo
 import Distribution.Simple.Configure
@@ -37,13 +38,14 @@
        ]
 
 -- compile a simple program with symbols from GSL and LAPACK with the given libs
-testprog buildInfo libs fmks =
+testprog bInfo buildInfo libs fmks =
     "echo \"#include <gsl/gsl_sf_gamma.h>\nint main(){zgesvd_(); gsl_sf_gamma(5);}\""
-                     ++" > /tmp/dummy.c; gcc "
+                     ++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc "
                      ++ (join $ ccOptions buildInfo) ++ " "
                      ++ (join $ cppOptions buildInfo) ++ " "
-                     ++ (join $ map ("-I"++) $ includeDirs buildInfo)
-                     ++" /tmp/dummy.c -o /tmp/dummy "
+                     ++ (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"
@@ -51,26 +53,28 @@
 join = intercalate " "
 prepend x = unwords . map (x++) . words
 
-check buildInfo libs fmks = (ExitSuccess ==) `fmap` system (testprog buildInfo libs fmks)
+check bInfo buildInfo libs fmks = (ExitSuccess ==) `fmap` system (testprog bInfo buildInfo libs fmks)
 
 -- simple test for GSL
-gsl buildInfo = "echo \"#include <gsl/gsl_sf_gamma.h>\nint main(){gsl_sf_gamma(5);}\""
-           ++" > /tmp/dummy.c; gcc "
+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)
-           ++ " /tmp/dummy.c -o /tmp/dummy "
+           ++ (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 buildInfo =
+gsl112 bInfo buildInfo =
     "echo \"#include <gsl/gsl_sf_exp.h>\nint main(){gsl_sf_exprel_n_CF_e(1,1,0);}\""
-           ++" > /tmp/dummy.c; gcc /tmp/dummy.c "
+           ++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc " 
+           ++ (buildDir bInfo) ++ "/dummy.c "
            ++ (join $ ccOptions buildInfo) ++ " "
            ++ (join $ cppOptions buildInfo) ++ " "
            ++ (join $ map ("-I"++) $ includeDirs buildInfo)
-           ++" -o /tmp/dummy "
+           ++" -o " ++ (buildDir bInfo) ++ "/dummy "
            ++ (join $ map ("-L"++) $ extraLibDirs buildInfo) ++ " -lgsl -lgslcblas"
            ++ " > /dev/null 2> /dev/null"
 
@@ -78,11 +82,11 @@
 checkCommand c = (ExitSuccess ==) `fmap` system c
 
 -- test different configurations until the first one works
-try _ _ _ [] = return Nothing
-try i b f (opt:rest) = do
-    ok <- check i (b ++ " " ++ opt) f
+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 i b f rest
+          else try l i b f rest
 
 -- read --configure-option=link:lib1,lib2,lib3,etc
 linkop = "link:"
@@ -110,11 +114,14 @@
     let pref = if null (words (base ++ " " ++ auxpref)) then "gsl lapack" else auxpref
         fullOpts = map ((pref++" ")++) opts
 
-    r <- try buildInfo base fwks fullOpts
+    -- 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 buildInfo
+            g  <- checkCommand $ gsl bInfo buildInfo
             if g
                 then putStrLn " *** Sorry, I can't link LAPACK."
                 else putStrLn " *** Sorry, I can't link GSL."
@@ -124,7 +131,7 @@
             writeFile "hsignal.buildinfo" ("buildable: False\n")
         Just ops -> do
             putStrLn " OK"
-            g <- checkCommand $ gsl112 buildInfo
+            g <- checkCommand $ gsl112 bInfo buildInfo
             writeFile "hsignal.buildinfo" $ "extra-libraries: " ++
                 ops ++ "\n" ++
                 if g
diff --git a/hsignal.cabal b/hsignal.cabal
--- a/hsignal.cabal
+++ b/hsignal.cabal
@@ -1,5 +1,5 @@
 Name:               hsignal
-Version:            0.1.0.1
+Version:            0.1.0.2
 License:            GPL
 License-file:       LICENSE
 Author:             Alexander Vivian Hugh McPhail
@@ -22,7 +22,7 @@
 
     Build-Depends:      base >= 3 && < 5,
                         storable-complex, haskell98,
-                        hmatrix
+                        hmatrix >= 0.9.3
 
     Extensions:         ForeignFunctionInterface
 
diff --git a/lib/Numeric/Signal.hs b/lib/Numeric/Signal.hs
--- a/lib/Numeric/Signal.hs
+++ b/lib/Numeric/Signal.hs
@@ -34,9 +34,9 @@
 import Data.Packed(Container(..))
 
 import Numeric.GSL.Vector
-import Numeric.LinearAlgebra.Instances()
-import Numeric.LinearAlgebra.Linear(Linear(..))
 
+import Numeric.LinearAlgebra.Algorithms
+
 import qualified Numeric.GSL.Fourier as F
 
 import Prelude hiding(filter)
@@ -152,14 +152,14 @@
                              else ((interpolate' x y xp):(interpolate x y xs))
 
 interpolate' :: [Double] -> [Double] -> Double -> Double
-interpolate' x y xp = let Just i = L.findIndex (> xp) x
-                      in (interpolate'' i x y xp)
+interpolate' x y xp = let Just j = L.findIndex (> xp) x
+                      in (interpolate'' j x y xp)
 
 interpolate'' :: Int -> [Double] -> [Double] -> Double -> Double
-interpolate'' i x y xp = let x0 = x !! (i-1)
-                             y0 = y !! (i-1)
-                             x1 = x !! i
-                             y1 = y !! i
+interpolate'' j x y xp = let x0 = x !! (j-1)
+                             y0 = y !! (j-1)
+                             x1 = x !! j
+                             y1 = y !! j
                          in y0 + (xp - x0) * ((y1 - y0)/(x1-x0))
 
 -----------------------------------------------------------------------------
diff --git a/lib/Numeric/Signal/Internal.hs b/lib/Numeric/Signal/Internal.hs
--- a/lib/Numeric/Signal/Internal.hs
+++ b/lib/Numeric/Signal/Internal.hs
@@ -27,8 +27,7 @@
 import Data.Packed.Vector
 import Data.Packed(Container(..))
 
-import Numeric.LinearAlgebra.Instances()
-import Numeric.LinearAlgebra.Linear(Linear(..))
+import Numeric.LinearAlgebra.Algorithms
 
 import Foreign
 import Complex
