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:          0.1
+Version:          0.1.1
 License:          BSD3
 License-File:     LICENSE
 Author:           Henning Thielemann <haskell@henning-thielemann.de>
 Maintainer:       Henning Thielemann <haskell@henning-thielemann.de>
-Homepage:         http://code.haskell.org/~thielema/accelerate-utility/
+Homepage:         http://hub.darcs.net/thielema/accelerate-utility/
 Category:         Parallelism
 Synopsis:         Utility functions for the Accelerate framework
 Description:
@@ -15,19 +15,19 @@
 Build-Type:       Simple
 
 Source-Repository this
-  Tag:         0.1
+  Tag:         0.1.1
   Type:        darcs
-  Location:    http://code.haskell.org/~thielema/accelerate-utility/
+  Location:    http://hub.darcs.net/thielema/accelerate-utility/
 
 Source-Repository head
   Type:        darcs
-  Location:    http://code.haskell.org/~thielema/accelerate-utility/
+  Location:    http://hub.darcs.net/thielema/accelerate-utility/
 
 Library
   Build-Depends:
     accelerate >=0.15 && <0.16,
     utility-ht >=0.0.8 && <0.1,
-    base >=4.5 && <4.8
+    base >=4.5 && <4.10
 
   GHC-Options:      -Wall -fwarn-missing-import-lists
   Hs-Source-Dirs:   src
@@ -41,3 +41,4 @@
     Data.Array.Accelerate.Utility.Sliced
     Data.Array.Accelerate.Utility.Sliced1
     Data.Array.Accelerate.Utility.Ord
+    Data.Array.Accelerate.Utility.Shape
diff --git a/src/Data/Array/Accelerate/Utility/Shape.hs b/src/Data/Array/Accelerate/Utility/Shape.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Array/Accelerate/Utility/Shape.hs
@@ -0,0 +1,32 @@
+{-# LANGUAGE Rank2Types #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE FlexibleContexts #-}
+{- |
+An alternative Shape class that allows to add new \"methods\",
+but forbids to add new instances.
+You can provide new \"methods\" by calling 'switch'
+with a newtype around your function type.
+
+For the general concept, see:
+<https://www.haskell.org/haskellwiki/Closed_world_instances>
+-}
+module Data.Array.Accelerate.Utility.Shape (
+   C(..),
+   ) where
+
+import qualified Data.Array.Accelerate as A
+import Data.Array.Accelerate (Exp, Z, (:.))
+
+
+class
+   (A.Shape sh, A.Slice sh, A.Elt sh, Eq sh,
+    A.Plain sh ~ sh, A.Lift Exp sh) =>
+      C sh where
+   switch :: f Z -> (forall sh0. C sh0 => f (sh0 :. Int)) -> f sh
+
+instance C Z where
+   switch f _ = f
+
+instance (C sh, i ~ Int) => C (sh:.i) where
+   switch _ f = f
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
@@ -11,7 +11,7 @@
 import qualified Data.Array.Accelerate as A
 import Data.Array.Accelerate
           (Exp, Acc, Array, Elt, Slice, Shape, DIM2, (:.)((:.)),
-           (!), (?), (==*), (<*), )
+           (!), (?), (>*), (==*), )
 
 
 length ::
@@ -120,7 +120,7 @@
    let sh:.m = Exp.unlift (expr:.expr) $ A.shape arr
    in  A.generate
           (A.lift $ sh:.n)
-          (\ix -> A.indexHead ix <* m ? (arr!ix, x))
+          (\ix -> m >* A.indexHead ix ? (arr!ix, x))
 
 
 {- |
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
@@ -11,7 +11,7 @@
 import qualified Data.Array.Accelerate as A
 import Data.Array.Accelerate
           (Exp, Acc, Array, Elt, (:.)((:.)), Slice, Shape,
-           (!), (?), (<*), (==*), )
+           (!), (?), (>*), (==*), )
 
 
 length ::
@@ -66,7 +66,7 @@
        (_shy:.ny:.leny) = Exp.unlift (expr:.expr:.expr) $ A.shape y
    in  A.generate (A.lift $ shx :. nx+ny :. max lenx leny) $
        Exp.modify (expr:.expr:.expr) $ \(ix:.k:.j) ->
-          k<*nx ? (x ! A.lift (ix:.k:.j), y ! A.lift (ix:.k-nx:.j))
+          nx >* k ? (x ! A.lift (ix:.k:.j), y ! A.lift (ix:.k-nx:.j))
 
 append3 ::
    (Shape sh, Slice sh, Elt a) =>
