diff --git a/Codec/Picture/Repa.hs b/Codec/Picture/Repa.hs
--- a/Codec/Picture/Repa.hs
+++ b/Codec/Picture/Repa.hs
@@ -19,6 +19,7 @@
        , ToRGBAChannels(..)
        ) where
 import qualified Data.Array.Repa as R
+import qualified Data.Array.Repa.Repr.Unboxed as RU
 import Data.Array.Repa ((:.), Array, (:.)(..), Z(..), DIM3, backpermute, extent)
 import qualified Codec.Picture as P
 import Codec.Picture hiding (readImage, decodeImage)
@@ -54,7 +55,7 @@
 --
 -- All images are held in a three dimensional 'repa' array.  If the image
 -- format is only two dimensional (ex: R, G, or B) then the shape is @Z :. y :. x :. 1@.
-data Img a = Img { imgData :: Array DIM3 Word8 }
+data Img a = Img { imgData :: Array RU.U DIM3 Word8 }
 
 -- |By default, the color channel for 'RGBA' indexes 0 -> R, 1 -> G, 2
 -- -> B, 3 -> A.  This is the AGBR byte ordering in OpenGL.  For
@@ -62,7 +63,7 @@
 -- reverseColorChannel before converting to a Vector (or directly to
 -- bytestring via 'repa-bytestring').
 reverseColorChannel :: Img a -> Img a
-reverseColorChannel (Img r) = Img (R.backpermute e order r)
+reverseColorChannel (Img r) = Img (R.computeUnboxedS $ R.backpermute e order r)
   where
   e@(Z :. row :. col :. z)  = R.extent r
   order (Z :. r :. c :. z') = Z :. r :. c :. z - z' - 1
@@ -126,13 +127,13 @@
 
 -- | O(n)  returning (pointer, length, offset)
 toForeignPtr :: Img RGBA -> (ForeignPtr Word8, Int, Int)
-toForeignPtr = S.unsafeToForeignPtr . S.convert . R.toVector . imgData
+toForeignPtr = S.unsafeToForeignPtr . S.convert . RU.toUnboxed . imgData
 
 -- |Convert an 'Img' to a storable 'Vector', often useful for OpenGL
 -- and other C interfaces.  Notice the format of the data depends on
 -- the type of the 'Img a'. O(n)
 toVector :: Img a -> S.Vector Word8
-toVector (Img a) = S.convert (R.toVector a)
+toVector (Img a) = S.convert (RU.toUnboxed a)
 
 -- Helper functions --
 getChannel :: Int -> PixelRGBA8 -> Word8
@@ -168,6 +169,7 @@
 instance ToRGBAChannels Pixel8 where
   toRGBAChannels = promotePixel
 
+{-
 zeroCopyConvert :: Int -> Image a -> Img b
 zeroCopyConvert cc (Image w h dat) =
     let (ptr,off,len) = S.unsafeToForeignPtr dat
@@ -175,6 +177,7 @@
     in if off == 0
        then flipVertically . Img . R.unsafeFromForeignPtr sh   $  ptr
        else flipVertically . Img . R.fromVector sh $ VU.convert $ dat
+-}
 
 -- Now we start the instances needing exported
 
@@ -188,13 +191,13 @@
   convertImage (ImageY8 i) = convertImage i
   convertImage (ImageYA8 i) = convertImage i
   convertImage (ImageRGB8 i) = convertImage i
-  convertImage (ImageRGBA8 i) = zeroCopyConvert 4 i
+  convertImage (ImageRGBA8 i) = convertImage i -- zeroCopyConvert 4 i
   convertImage (ImageYCbCr8 i) = convertImage i
   
 instance ConvertImage DynamicImage RGB where
   convertImage (ImageY8 i) = convertImage i
   convertImage (ImageYA8 i) = convertImage i
-  convertImage (ImageRGB8 i) = zeroCopyConvert 3 i
+  convertImage (ImageRGB8 i) = convertImage i -- zeroCopyConvert 3 i
   convertImage (ImageRGBA8 i) = convertImage i
   convertImage (ImageYCbCr8 i) = convertImage i
   
@@ -222,41 +225,41 @@
 instance (ToRGBAChannels a, Pixel a) => ConvertImage (Image a) RGBA where
   convertImage p@(Image w h dat) =
     let z = 4
-    in Img $ R.fromFunction (Z :. h :. w :. z) 
+    in Img $ R.computeUnboxedS $ R.fromFunction (Z :. h :. w :. z) 
                                     (\(Z :. y :. x :. z') -> getPixel x y (z - z' - 1) p)
   
 instance (ToRGBAChannels a, Pixel a) => ConvertImage (Image a) RGB where
   convertImage p@(Image w h dat) =
     let z = 3
-    in Img $ R.fromFunction (Z :. h :. w :. z)
+    in Img $ R.computeUnboxedS $ R.fromFunction (Z :. h :. w :. z)
                             (\(Z :. y :. x :. z') -> getPixel x y (z' - z -1) p)
 
 instance (ToRGBAChannels a, Pixel a) => ConvertImage (Image a) R where
   convertImage p@(Image w h dat) =
     let z = 1
-    in Img $ R.fromFunction (Z :. h :. w :. z)
+    in Img $ R.computeUnboxedS $ R.fromFunction (Z :. h :. w :. z)
                             (\(Z :. y :. x :. z) -> getPixel x y 0 p)
        
 instance (ToRGBAChannels a, Pixel a) => ConvertImage (Image a) G where
   convertImage p@(Image w h dat) =
     let z = 1
-    in Img $ R.fromFunction (Z :. h :. w :. z)
+    in Img $ R.computeUnboxedS $ R.fromFunction (Z :. h :. w :. z)
                             (\(Z :. y :. x :. z) -> getPixel x y 1 p)
        
 instance (ToRGBAChannels a, Pixel a) => ConvertImage (Image a) B where
   convertImage p@(Image w h dat) =
     let z = 1
-    in Img $ R.fromFunction (Z :. h :. w :. z)
+    in Img $ R.computeUnboxedS $ R.fromFunction (Z :. h :. w :. z)
                             (\(Z :. y :. x :. z) -> getPixel x y 2 p)
 
 flipVertically :: Img a -> Img a
-flipVertically (Img rp) = Img (backpermute e order rp)
+flipVertically (Img rp) = Img (R.computeUnboxedS $ backpermute e order rp)
  where
  e@(Z :. row :. col :. z) = extent rp
  order (Z :. oldRow :. oldCol :. oldChan) = Z :. row - oldRow - 1 :. oldCol :. oldChan
 
 flipHorizontally :: Img a -> Img b
-flipHorizontally (Img rp) = Img (backpermute e order rp)
+flipHorizontally (Img rp) = Img (R.computeUnboxedS $ backpermute e order rp)
  where
  e@(Z :. row :. col :. z) = extent rp
  order (Z :. oldRow :. oldCol :. oldChan) = Z :. oldRow :. col - oldCol - 1 :. oldChan
diff --git a/JuicyPixels-repa.cabal b/JuicyPixels-repa.cabal
--- a/JuicyPixels-repa.cabal
+++ b/JuicyPixels-repa.cabal
@@ -1,5 +1,5 @@
 Name:                JuicyPixels-repa
-Version:             0.2
+Version:             0.3
 Synopsis:            Convenience functions to obtain array representations of images.
 Description:         This wraps the Juicy.Pixels library to convert into 'Repa' and 
                      'Data.Vector.Storable' formats.
@@ -18,7 +18,7 @@
 
 Library
   Exposed-modules:     Codec.Picture.Repa
-  Build-depends:       base >= 4.0 && < 5, repa >= 2.1 && < 2.3
+  Build-depends:       base >= 4.0 && < 5, repa >= 2.1 && < 3.1
                     , JuicyPixels >= 1.1 && < 1.3
                     , vector >= 0.9 && < 0.10
                     , bytestring >= 0.9 && < 0.10
