diff --git a/netlib-carray.cabal b/netlib-carray.cabal
--- a/netlib-carray.cabal
+++ b/netlib-carray.cabal
@@ -1,5 +1,5 @@
 Name:             netlib-carray
-Version:          0.0.1.1
+Version:          0.1
 License:          BSD3
 License-File:     LICENSE
 Author:           Henning Thielemann <haskell@henning-thielemann.de>
@@ -20,7 +20,7 @@
 Build-Type:       Simple
 
 Source-Repository this
-  Tag:         0.0.1.1
+  Tag:         0.1
   Type:        darcs
   Location:    http://hub.darcs.net/thielema/netlib-carray/
 
@@ -32,6 +32,7 @@
   Build-Depends:
     netlib-ffi >=0.0.1 && <0.2,
     carray >=0.1.5 && <0.2,
+    array >=0.4 && <0.6,
     transformers >=0.4 && <0.6,
     base >=4.5 && <5
 
diff --git a/src/Numeric/Netlib/CArray/Utility.hs b/src/Numeric/Netlib/CArray/Utility.hs
--- a/src/Numeric/Netlib/CArray/Utility.hs
+++ b/src/Numeric/Netlib/CArray/Utility.hs
@@ -23,6 +23,7 @@
    newArray1,
    newArray2,
    newArray3,
+   freezeArray,
    sizes1,
    sizes2,
    sizes3,
@@ -37,7 +38,9 @@
 import qualified Numeric.Netlib.Utility as Util
 import Numeric.Netlib.Utility (FortranIO)
 
+import qualified Data.Array.IOCArray as IOCArray
 import qualified Data.Array.CArray as CArray
+import qualified Data.Array.Unsafe as UnsafeArray
 import Data.Array.IOCArray (IOCArray, withIOCArray)
 import Data.Array.CArray (CArray, withCArray, Ix)
 
@@ -49,27 +52,22 @@
 import Control.Applicative ((<$>))
 
 
-_match :: (Show a, Eq a) => String -> String -> a -> [a] -> a
-_match func name a as =
-   case filter (a/=) as of
-      [] -> a
-      adiff:_ ->
-         error $
-            func ++ ": mismatching " ++ name ++ ": " ++
-            show a ++ " /= " ++ show adiff
 
-
-newArray :: (Ix i, Storable e) => (i, i) -> IO (CArray i e)
-newArray bnds = CArray.createCArray bnds (\_ -> return ())
+newArray :: (Ix i, Storable e) => (i, i) -> IO (IOCArray i e)
+newArray bnds = IOCArray.newArray_ bnds
 
-newArray1 :: (Storable e) => Int -> IO (CArray Int e)
+newArray1 :: (Storable e) => Int -> IO (IOCArray Int e)
 newArray1 m = newArray (0, m-1)
 
-newArray2 :: (Storable e) => Int -> Int -> IO (CArray (Int,Int) e)
+newArray2 :: (Storable e) => Int -> Int -> IO (IOCArray (Int,Int) e)
 newArray2 m n = newArray ((0,0), (m-1,n-1))
 
-newArray3 :: (Storable e) => Int -> Int -> Int -> IO (CArray (Int,Int,Int) e)
+newArray3 :: (Storable e) => Int -> Int -> Int -> IO (IOCArray (Int,Int,Int) e)
 newArray3 m n k = newArray ((0,0,0), (m-1,n-1,k-1))
+
+
+freezeArray :: (Ix i, Storable e) => IOCArray i e -> IO (CArray i e)
+freezeArray = UnsafeArray.unsafeFreeze
 
 
 sizes1 :: (Ix i) => (i,i) -> Int
