diff --git a/Graphics/Gloss/DevIL.hs b/Graphics/Gloss/DevIL.hs
--- a/Graphics/Gloss/DevIL.hs
+++ b/Graphics/Gloss/DevIL.hs
@@ -1,30 +1,52 @@
 module Graphics.Gloss.DevIL
   ( loadDevILPicture
-  , repaToPicture
+  , imageToPicture
   , readRepaImage
   ) where
 
 import Data.Array.Repa as R
 import Graphics.Gloss
-import qualified Data.Array.Repa.ByteString as RB
+import qualified Data.Array.Repa.Repr.ByteString as RB
+import qualified Data.Array.Repa.Repr.ForeignPtr as RF
 import qualified Data.Array.Repa.IO.DevIL as RD
 import qualified Data.ByteString as B
 import Data.Word
 import Control.Monad
+import Data.ByteString.Internal as BI
 
 -- |Load  picture using 'Codec-Image-DevIL' and convert it a bitmap for display by 'Gloss'
 loadDevILPicture :: FilePath -> IO (Int, Int, Picture)
-loadDevILPicture = liftM (repaToPicture False) . readRepaImage
+loadDevILPicture = liftM (imageToPicture False) . readRepaImage
 
--- |@repaToPicture cacheMeFlag array@ will convert a 'Repa' RGBA array to a tuple of
--- the number of columns, rows and a bitmap for use with 'Gloss'.
-repaToPicture :: Bool -> Array DIM3 Word8 -> (Int, Int, Picture)
-repaToPicture b arr = (col, row, bitmapOfByteString row col (toBS arr) b)
+-- |@repaToPicture cacheMeFlag array@ will convert a 'Repa' RGBA array to a
+-- tuple of the number of columns, rows and a bitmap for use with 'Gloss'.
+imageToPicture :: Bool -> RD.Image -> (Int, Int, Picture)
+imageToPicture b (RD.Grey arr) = img2d b arr
+imageToPicture b (RD.RGBA arr) = img3d b arr
+imageToPicture b (RD.RGB arr)  = img3d b arr
+
+img2d :: Bool -> Array RF.F DIM2 Word8 -> (Int, Int, Picture)
+img2d b arr0 = (oldCol, oldRow, bitmapOfByteString oldRow oldCol (toBS arr0) b)
   where
-  e@(Z :. col :. row :. chan) = extent arr
-  order (Z :. oldCol :. oldRow :. oldChan) = Z :. oldCol :. oldRow :. chan - oldChan - 1
-  toBS = RB.toByteString . backpermute e order
+  e@(Z :. oldCol :. oldRow) = extent arr0
+  toBS arr =
+    let arr2 = backpermute e order arr
+        order (Z :. col :. row) =
+                   Z :. col :. row
+        fp = RF.toForeignPtr (R.computeS arr2)
+    in BI.fromForeignPtr fp 0 (oldCol * oldRow)
 
+img3d :: Bool -> Array RF.F DIM3 Word8 -> (Int, Int, Picture)
+img3d b arr0 = (oldCol, oldRow, bitmapOfByteString oldRow oldCol (toBS arr0) b)
+  where
+  e@(Z :. oldCol :. oldRow :. oldChan) = extent arr0
+  toBS arr =
+    let arr2 = backpermute e order arr
+        order (Z :. col :. row :. chan) =
+                   Z :. col :. row :. oldChan - chan - 1
+        fp = RF.toForeignPtr (R.computeS arr2)
+    in BI.fromForeignPtr fp 0 (oldCol * oldRow * oldChan)
+
 -- |Read in a file into a repa array (using the 'repa-devil' package)
-readRepaImage :: FilePath -> IO (Array DIM3 Word8)
+readRepaImage :: FilePath -> IO RD.Image
 readRepaImage = RD.runIL . RD.readImage
diff --git a/gloss-devil.cabal b/gloss-devil.cabal
--- a/gloss-devil.cabal
+++ b/gloss-devil.cabal
@@ -1,59 +1,21 @@
--- gloss-png.cabal auto-generated by cabal init. For additional
--- options, see
--- http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/authors.html#pkg-descr.
--- The name of the package.
 Name:                gloss-devil
-
--- The package version. See the Haskell package versioning policy
--- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for
--- standards guiding when and how versions should be incremented.
-Version:             0.1
-
--- A short (one-line) description of the package.
+Version:             0.2
 Synopsis:            Display images in Gloss using libdevil for decoding
-
--- A longer description of the package.
 -- Description:         
-
--- The license under which the package is released.
 License:             BSD3
-
--- The file containing the license text.
 License-file:        LICENSE
-
--- The package author(s).
 Author:              Thomas M. DuBuisson
-
--- An email address to which users can send suggestions, bug reports,
--- and patches.
 Maintainer:          Thomas.DuBuisson@gmail.com
-
--- A copyright notice.
 -- Copyright:           
-
 Category:            Graphics
-
 Build-type:          Simple
-
--- Extra files to be distributed with the package, such as examples or
--- a README.
 -- Extra-source-files:  
-
--- Constraint on the version of Cabal needed to build this package.
 Cabal-version:       >=1.6
 
-
 Library
-  -- Modules exported by the library.
   Exposed-modules:     Graphics.Gloss.DevIL
-  
-  -- Packages needed in order to build this package.
-  Build-depends:       base >= 4 && < 5, gloss >= 1.6, repa == 2.2.*
-                     , repa-bytestring, repa-devil, bytestring
-  
-  -- Modules not exported by this package.
+  Build-depends:       base >= 4 && < 5, gloss >= 1.6, repa >= 3.0
+                     , repa-devil, bytestring
   -- Other-modules:       
-  
-  -- Extra tools (e.g. alex, hsc2hs, ...) needed to build the source.
   -- Build-tools:         
   
