diff --git a/accelerate-utility.cabal b/accelerate-utility.cabal
--- a/accelerate-utility.cabal
+++ b/accelerate-utility.cabal
@@ -1,10 +1,10 @@
 Name:             accelerate-utility
-Version:          1.0.0.1
+Version:          1.1
 License:          BSD3
 License-File:     LICENSE
 Author:           Henning Thielemann <haskell@henning-thielemann.de>
 Maintainer:       Henning Thielemann <haskell@henning-thielemann.de>
-Homepage:         http://hub.darcs.net/thielema/accelerate-utility/
+Homepage:         https://hub.darcs.net/thielema/accelerate-utility/
 Category:         Parallelism
 Synopsis:         Utility functions for the Accelerate framework
 Description:
@@ -15,17 +15,18 @@
 Build-Type:       Simple
 
 Source-Repository this
-  Tag:         1.0.0.1
+  Tag:         1.1
   Type:        darcs
-  Location:    http://hub.darcs.net/thielema/accelerate-utility/
+  Location:    https://hub.darcs.net/thielema/accelerate-utility/
 
 Source-Repository head
   Type:        darcs
-  Location:    http://hub.darcs.net/thielema/accelerate-utility/
+  Location:    https://hub.darcs.net/thielema/accelerate-utility/
 
 Library
   Build-Depends:
-    accelerate >=1.0 && <1.2,
+    accelerate >=1.3 && <1.5,
+    non-empty >=0.3.3 && <0.4,
     utility-ht >=0.0.8 && <0.1,
     base >=4.5 && <5
 
diff --git a/src/Data/Array/Accelerate/Utility/Arrange.hs b/src/Data/Array/Accelerate/Utility/Arrange.hs
--- a/src/Data/Array/Accelerate/Utility/Arrange.hs
+++ b/src/Data/Array/Accelerate/Utility/Arrange.hs
@@ -25,7 +25,7 @@
 scatter ::
    (A.Shape ix, A.Shape ix', A.Elt ix', A.Elt a) =>
    (Exp a -> Exp a -> Exp a) ->
-   Acc (Array ix ix') -> Acc (Array ix' a) ->
+   Acc (Array ix (Maybe ix')) -> Acc (Array ix' a) ->
    Acc (Array ix a) -> Acc (Array ix' a)
 scatter f indices deflt xs =
    A.permute f deflt (indices A.!) xs
diff --git a/src/Data/Array/Accelerate/Utility/Lift/Exp.hs b/src/Data/Array/Accelerate/Utility/Lift/Exp.hs
--- a/src/Data/Array/Accelerate/Utility/Lift/Exp.hs
+++ b/src/Data/Array/Accelerate/Utility/Lift/Exp.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE UndecidableInstances #-}
 module Data.Array.Accelerate.Utility.Lift.Exp (
    Unlift,
    Unlifted,
@@ -14,6 +15,8 @@
    unliftPair,
    unliftTriple,
    unliftQuadruple,
+   unliftQuintuple,
+   accessElement,
    asExp,
    mapFst,
    mapSnd,
@@ -28,6 +31,7 @@
 import Data.Complex (Complex((:+)))
 import Data.Array.Accelerate ((:.)((:.)))
 
+import qualified Data.NonEmpty as NonEmpty
 import qualified Data.Tuple.HT as Tuple
 import Data.Tuple.HT (mapTriple)
 
@@ -165,6 +169,24 @@
    (A.Elt a, A.Elt b, A.Elt c, A.Elt d) =>
    A.Exp (a,b,c,d) -> (A.Exp a, A.Exp b, A.Exp c, A.Exp d)
 unliftQuadruple = A.unlift
+
+unliftQuintuple ::
+   (A.Elt a, A.Elt b, A.Elt c, A.Elt d, A.Elt e) =>
+   A.Exp (a,b,c,d,e) -> (A.Exp a, A.Exp b, A.Exp c, A.Exp d, A.Exp e)
+unliftQuintuple = A.unlift
+
+{- |
+Intended to access elements of a tuple.
+
+> accessElement [x,y,z] k ==
+>    A.ifThenElse (k A.== 1) y $
+>    A.ifThenElse (k A.== 2) z $
+>    x
+-}
+accessElement :: (A.Elt a) => NonEmpty.T [] (A.Exp a) -> A.Exp Int -> A.Exp a
+accessElement (NonEmpty.Cons x xs) k =
+   foldr (\(j,y) -> A.ifThenElse (k A.== fromInteger j) y) x (zip [1..] xs)
+
 
 asExp :: A.Exp a -> A.Exp a
 asExp = id
diff --git a/src/Data/Array/Accelerate/Utility/Sliced.hs b/src/Data/Array/Accelerate/Utility/Sliced.hs
--- a/src/Data/Array/Accelerate/Utility/Sliced.hs
+++ b/src/Data/Array/Accelerate/Utility/Sliced.hs
@@ -6,13 +6,15 @@
 module Data.Array.Accelerate.Utility.Sliced where
 
 import qualified Data.Array.Accelerate.Utility.Lift.Exp as Exp
-import Data.Array.Accelerate.Utility.Lift.Exp (expr)
+import Data.Array.Accelerate.Utility.Lift.Exp (expr, accessElement)
 
 import qualified Data.Array.Accelerate as A
 import Data.Array.Accelerate
           (Exp, Acc, Array, Elt, Slice, Shape, DIM2, (:.)((:.)), (!), (?), )
 
+import Data.NonEmpty ((!:))
 
+
 length ::
    (Shape sh, Slice sh, Elt a) =>
    Acc (Array (sh:.Int) a) ->
@@ -87,11 +89,8 @@
          (A.shape x))
       (Exp.modify (expr :. expr :. expr) $
        \(globalIx :. k :. j) ->
-          let ix = A.lift $ globalIx :. j
-          in  flip (A.caseof k) (x ! ix) $
-                 ((A.== 1), (y ! ix)) :
-                 ((A.== 2), (z ! ix)) :
-                 [])
+         let ix = A.lift $ globalIx :. j
+         in accessElement (x!ix !: y!ix : z!ix : []) k)
 
 
 take, drop ::
diff --git a/src/Data/Array/Accelerate/Utility/Sliced1.hs b/src/Data/Array/Accelerate/Utility/Sliced1.hs
--- a/src/Data/Array/Accelerate/Utility/Sliced1.hs
+++ b/src/Data/Array/Accelerate/Utility/Sliced1.hs
@@ -6,13 +6,15 @@
 module Data.Array.Accelerate.Utility.Sliced1 where
 
 import qualified Data.Array.Accelerate.Utility.Lift.Exp as Exp
-import Data.Array.Accelerate.Utility.Lift.Exp (expr)
+import Data.Array.Accelerate.Utility.Lift.Exp (expr, accessElement)
 
 import qualified Data.Array.Accelerate as A
 import Data.Array.Accelerate
           (Exp, Acc, Array, Elt, (:.)((:.)), Slice, Shape, (!), (?), )
 
+import Data.NonEmpty ((!:))
 
+
 length ::
    (Shape sh, Slice sh, Elt a) =>
    Acc (Array (sh:.Int:.Int) a) ->
@@ -90,11 +92,8 @@
          (A.shape x))
       (Exp.modify (expr :. expr :. expr :. expr) $
        \(globalIx :. k :. j :. i) ->
-          let ix = A.lift $ globalIx :. j :. i
-          in  flip (A.caseof k) (x ! ix) $
-                 ((A.== 1), (y ! ix)) :
-                 ((A.== 2), (z ! ix)) :
-                 [])
+         let ix = A.lift $ globalIx :. j :. i
+         in accessElement (x!ix !: y!ix : z!ix : []) k)
 
 
 take, drop ::
