diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,4 +1,22 @@
-0.1.0.0
+# Change Log
 
+Notable changes to the project will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/) and the
+project adheres to the [Haskell Package Versioning
+Policy (PVP)](https://pvp.haskell.org)
+
+## [0.2.0.0] - 2018-04-03
+### Added
+  * `Field` instances for `Shape`s, where `_1` is the right-most component of
+    the shape (x-coordinate), `_2` is the next component (y-coordinate), etc.
+
+### Changed
+  * updates for accelerate-1.2
+
+## 0.1.0.0 - 2017-03-31
+
   * Initial release
+
+[0.2.0.0]:  https://github.com/tmcdonell/lens-accelerate/compare/0.1.0.0...0.2.0.0
 
diff --git a/README.markdown b/README.markdown
--- a/README.markdown
+++ b/README.markdown
@@ -2,6 +2,7 @@
 ===============
 
 [![Build Status](https://travis-ci.org/tmcdonell/lens-accelerate.svg?branch=master)](https://travis-ci.org/tmcdonell/lens-accelerate)
+[![Hackage](https://img.shields.io/hackage/v/lens-accelerate.svg)](https://hackage.haskell.org/package/lens-accelerate)
 
 Instances to mix [lens][lens] with [accelerate][accelerate].
 
diff --git a/lens-accelerate.cabal b/lens-accelerate.cabal
--- a/lens-accelerate.cabal
+++ b/lens-accelerate.cabal
@@ -1,5 +1,5 @@
 name:                   lens-accelerate
-version:                0.1.0.0
+version:                0.2.0.0
 synopsis:               Instances to mix lens with accelerate
 description:            Instances to mix lens with accelerate
 homepage:               https://github.com/tmcdonell/lens-accelerate
@@ -20,29 +20,34 @@
   exposed-modules:
     Data.Array.Accelerate.Control.Lens
     Data.Array.Accelerate.Control.Lens.Each
+    Data.Array.Accelerate.Control.Lens.Shape
     Data.Array.Accelerate.Control.Lens.Tuple
 
   other-modules:
     Data.Array.Accelerate.Control.Lens.Lift
 
   build-depends:
-      base                 >= 4.7 && < 4.10
-    , accelerate           >= 0.15
+      base                 >= 4.7 && < 4.12
+    , accelerate           >= 1.0
     , lens                 == 4.*
 
-  ghc-options:          -Wall
+  ghc-options:
+    -Wall
 
-  hs-source-dirs:       src
-  default-language:     Haskell2010
+  hs-source-dirs:
+    src
 
+  default-language:
+    Haskell2010
 
+
 source-repository head
   Type:                 git
   Location:             git://github.com/tmcdonell/lens-accelerate.git
 
 source-repository this
   Type:                 git
-  Tag:                  0.1.0.0
+  Tag:                  0.2.0.0
   Location:             git://github.com/tmcdonell/lens-accelerate.git
 
 -- vim: nospell
diff --git a/src/Data/Array/Accelerate/Control/Lens.hs b/src/Data/Array/Accelerate/Control/Lens.hs
--- a/src/Data/Array/Accelerate/Control/Lens.hs
+++ b/src/Data/Array/Accelerate/Control/Lens.hs
@@ -12,11 +12,15 @@
 
 module Data.Array.Accelerate.Control.Lens (
 
-  module Control.Lens
+  module Control.Lens,
+  liftLens,
 
 ) where
 
 import Control.Lens
-import Data.Array.Accelerate.Control.Lens.Tuple ()
+import Data.Array.Accelerate.Control.Lens.Lift
+
 import Data.Array.Accelerate.Control.Lens.Each ()
+import Data.Array.Accelerate.Control.Lens.Shape ()
+import Data.Array.Accelerate.Control.Lens.Tuple ()
 
diff --git a/src/Data/Array/Accelerate/Control/Lens/Each.hs b/src/Data/Array/Accelerate/Control/Lens/Each.hs
--- a/src/Data/Array/Accelerate/Control/Lens/Each.hs
+++ b/src/Data/Array/Accelerate/Control/Lens/Each.hs
@@ -1,4 +1,6 @@
+{-# LANGUAGE FlexibleContexts      #-}
 {-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE MonoLocalBinds        #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 -----------------------------------------------------------------------------
@@ -26,7 +28,7 @@
 import Data.Array.Accelerate.Control.Lens.Lift
 
 
-instance (Elt a, Elt b) => Each (Exp (Complex a)) (Exp (Complex b)) (Exp a) (Exp b) where
+instance (Elt a, Elt b, Elt (Complex a), Elt (Complex b)) => Each (Exp (Complex a)) (Exp (Complex b)) (Exp a) (Exp b) where
   each = liftLens (each :: Traversal (Complex (Exp a)) (Complex (Exp b)) (Exp a) (Exp b))
 
 instance (Elt a, Elt b) => Each (Exp (a,a)) (Exp (b,b)) (Exp a) (Exp b) where
diff --git a/src/Data/Array/Accelerate/Control/Lens/Lift.hs b/src/Data/Array/Accelerate/Control/Lens/Lift.hs
--- a/src/Data/Array/Accelerate/Control/Lens/Lift.hs
+++ b/src/Data/Array/Accelerate/Control/Lens/Lift.hs
@@ -30,7 +30,10 @@
 #endif
 
 
--- Lift a 'Lens' into Accelerate terms
+-- | Lift a 'Lens' into a lens on the equivalent Accelerate term.
+--
+-- The instances exported by this package are all defined in terms of this
+-- function, using the definitions from the base @lens@ package.
 --
 liftLens
     :: (Functor f, Unlift box s, Unlift box t, Unlift box b, Lift box a)
diff --git a/src/Data/Array/Accelerate/Control/Lens/Shape.hs b/src/Data/Array/Accelerate/Control/Lens/Shape.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Array/Accelerate/Control/Lens/Shape.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE FlexibleContexts      #-}
+{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE ScopedTypeVariables   #-}
+{-# LANGUAGE TypeOperators         #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+
+-----------------------------------------------------------------------------
+-- |
+-- Module      : Data.Array.Accelerate.Control.Lens.Shape
+-- Copyright   : 2015 Trevor L. McDonell
+-- License     : BSD-style (see the file LICENSE)
+--
+-- Maintainer  : Trevor L. McDonell <tmcdonell@cse.unsw.edu.au>
+-- Stability   : experimental
+-- Portability : non-portable
+--
+----------------------------------------------------------------------------
+
+module Data.Array.Accelerate.Control.Lens.Shape (
+
+  module Control.Lens.Tuple
+
+) where
+
+import Control.Lens
+import Control.Lens.Tuple
+import Data.Array.Accelerate
+
+
+instance (Slice sh, Elt a, Elt a')
+    => Field1 (Exp (sh :. a)) (Exp (sh :. a')) (Exp a) (Exp a') where
+  _1 = lens indexHead (\sh b -> lift (indexTail sh :. b))
+
+instance (Slice sh, Elt a, Elt b, Elt b', Slice (sh :. b), Slice (sh :. b'))
+    => Field2 (Exp (sh :. b :. a)) (Exp (sh :. b' :. a)) (Exp b) (Exp b') where
+  _2 = lens (\s   -> let _  :. b :. _ = unlift s :: Exp sh :. Exp b :. Exp a in b)
+            (\s b -> let sh :. _ :. a = unlift s :: Exp sh :. Exp b :. Exp a in lift (sh :. b :. a))
+
+instance ( Slice sh, Elt a, Elt b, Elt c, Elt c'
+         , Slice (sh :. c),  Slice (sh :. c  :. b)
+         , Slice (sh :. c'), Slice (sh :. c' :. b)
+         )
+    => Field3 (Exp (sh :. c :. b :. a)) (Exp (sh :. c' :. b :. a)) (Exp c) (Exp c') where
+  _3 = lens (\s   -> let _  :. c :. _ :. _ = unlift s :: Exp sh :. Exp c :. Exp b :. Exp a in c)
+            (\s c -> let sh :. _ :. b :. a = unlift s :: Exp sh :. Exp c :. Exp b :. Exp a in lift (sh :. c :. b :. a))
+
+instance ( Slice sh, Elt a, Elt b, Elt c, Elt d, Elt d'
+         , Slice (sh :. d),  Slice (sh :. d  :. c), Slice (sh :. d  :. c :. b)
+         , Slice (sh :. d'), Slice (sh :. d' :. c), Slice (sh :. d' :. c :. b)
+         )
+    => Field4 (Exp (sh :. d :. c :. b :. a)) (Exp (sh :. d' :. c :. b :. a)) (Exp d) (Exp d') where
+  _4 = lens (\s   -> let _  :. d :. _ :. _ :. _ = unlift s :: Exp sh :. Exp d :. Exp c :. Exp b :. Exp a in d)
+            (\s d -> let sh :. _ :. c :. b :. a = unlift s :: Exp sh :. Exp d :. Exp c :. Exp b :. Exp a in lift (sh :. d :. c :. b :. a))
+
+instance ( Slice sh, Elt a, Elt b, Elt c, Elt d, Elt e, Elt e'
+         , Slice (sh :. e),  Slice (sh :. e  :. d), Slice (sh :. e  :. d :. c), Slice (sh :. e  :. d :. c :. b)
+         , Slice (sh :. e'), Slice (sh :. e' :. d), Slice (sh :. e' :. d :. c), Slice (sh :. e' :. d :. c :. b)
+         )
+    => Field5 (Exp (sh :. e :. d :. c :. b :. a)) (Exp (sh :. e' :. d :. c :. b :. a)) (Exp e) (Exp e') where
+  _5 = lens (\s   -> let _  :. e :. _ :. _ :. _ :. _ = unlift s :: Exp sh :. Exp e :. Exp d :. Exp c :. Exp b :. Exp a in e)
+            (\s e -> let sh :. _ :. d :. c :. b :. a = unlift s :: Exp sh :. Exp e :. Exp d :. Exp c :. Exp b :. Exp a in lift (sh :. e :. d :. c :. b :. a))
+
+instance ( Slice sh, Elt a, Elt b, Elt c, Elt d, Elt e, Elt f, Elt f'
+         , Slice (sh :. f),  Slice (sh :. f  :. e), Slice (sh :. f  :. e :. d), Slice (sh :. f  :. e :. d :. c), Slice (sh :. f  :. e :. d :. c :. b)
+         , Slice (sh :. f'), Slice (sh :. f' :. e), Slice (sh :. f' :. e :. d), Slice (sh :. f' :. e :. d :. c), Slice (sh :. f' :. e :. d :. c :. b)
+         )
+    => Field6 (Exp (sh :. f :. e :. d :. c :. b :. a)) (Exp (sh :. f' :. e :. d :. c :. b :. a)) (Exp f) (Exp f') where
+  _6 = lens (\s   -> let _  :. f :. _ :. _ :. _ :. _ :. _ = unlift s :: Exp sh :. Exp f :. Exp e :. Exp d :. Exp c :. Exp b :. Exp a in f)
+            (\s f -> let sh :. _ :. e :. d :. c :. b :. a = unlift s :: Exp sh :. Exp f :. Exp e :. Exp d :. Exp c :. Exp b :. Exp a in lift (sh :. f :. e :. d :. c :. b :. a))
+
+instance ( Slice sh , Elt a, Elt b, Elt c, Elt d, Elt e, Elt f, Elt g, Elt g'
+         , Slice (sh :. g),  Slice (sh :. g  :. f), Slice (sh :. g  :. f :. e), Slice (sh :. g  :. f :. e :. d), Slice (sh :. g  :. f :. e :. d :. c), Slice (sh :. g  :. f :. e :. d :. c :. b)
+         , Slice (sh :. g'), Slice (sh :. g' :. f), Slice (sh :. g' :. f :. e), Slice (sh :. g' :. f :. e :. d), Slice (sh :. g' :. f :. e :. d :. c), Slice (sh :. g' :. f :. e :. d :. c :. b)
+         )
+    => Field7 (Exp (sh :. g :. f :. e :. d :. c :. b :. a)) (Exp (sh :. g' :. f :. e :. d :. c :. b :. a)) (Exp g) (Exp g') where
+  _7 = lens (\s   -> let _  :. g :. _ :. _ :. _ :. _ :. _ :. _ = unlift s :: Exp sh :. Exp g :. Exp f :. Exp e :. Exp d :. Exp c :. Exp b :. Exp a in g)
+            (\s g -> let sh :. _ :. f :. e :. d :. c :. b :. a = unlift s :: Exp sh :. Exp g :. Exp f :. Exp e :. Exp d :. Exp c :. Exp b :. Exp a in lift (sh :. g :. f :. e :. d :. c :. b :. a))
+
+instance ( Slice sh, Elt a, Elt b, Elt c, Elt d, Elt e, Elt f, Elt g, Elt h, Elt h'
+         , Slice (sh :. h),  Slice (sh :. h  :. g), Slice (sh :. h  :. g :. f), Slice (sh :. h  :. g :. f :. e), Slice (sh :. h  :. g :. f :. e :. d), Slice (sh :. h  :. g :. f :. e :. d :. c), Slice (sh :. h  :. g :. f :. e :. d :. c :. b)
+         , Slice (sh :. h'), Slice (sh :. h' :. g), Slice (sh :. h' :. g :. f), Slice (sh :. h' :. g :. f :. e), Slice (sh :. h' :. g :. f :. e :. d), Slice (sh :. h' :. g :. f :. e :. d :. c), Slice (sh :. h' :. g :. f :. e :. d :. c :. b)
+         )
+    => Field8 (Exp (sh :. h :. g :. f :. e :. d :. c :. b :. a)) (Exp (sh :. h' :. g :. f :. e :. d :. c :. b :. a)) (Exp h) (Exp h') where
+  _8 = lens (\s   -> let _  :. h :. _ :. _ :. _ :. _ :. _ :. _ :. _ = unlift s :: Exp sh :. Exp h :. Exp g :. Exp f :. Exp e :. Exp d :. Exp c :. Exp b :. Exp a in h)
+            (\s h -> let sh :. _ :. g :. f :. e :. d :. c :. b :. a = unlift s :: Exp sh :. Exp h :. Exp g :. Exp f :. Exp e :. Exp d :. Exp c :. Exp b :. Exp a in lift (sh :. h :. g :. f :. e :. d :. c :. b :. a))
+
+instance ( Slice sh, Elt a, Elt b, Elt c, Elt d, Elt e, Elt f, Elt g, Elt h, Elt i, Elt i'
+         , Slice (sh :. i),  Slice (sh :. i  :. h), Slice (sh :. i  :. h  :. g), Slice (sh :. i  :. h  :. g :. f), Slice (sh :. i  :. h  :. g :. f :. e), Slice (sh :. i  :. h  :. g :. f :. e :. d), Slice (sh :. i  :. h  :. g :. f :. e :. d :. c), Slice (sh :. i  :. h  :. g :. f :. e :. d :. c :. b)
+         , Slice (sh :. i'), Slice (sh :. i' :. h), Slice (sh :. i' :. h :. g), Slice (sh :. i' :. h :. g :. f), Slice (sh :. i' :. h :. g :. f :. e), Slice (sh :. i' :. h :. g :. f :. e :. d), Slice (sh :. i' :. h :. g :. f :. e :. d :. c), Slice (sh :. i' :. h :. g :. f :. e :. d :. c :. b)
+         )
+    => Field9 (Exp (sh :. i :. h :. g :. f :. e :. d :. c :. b :. a)) (Exp (sh :. i' :. h :. g :. f :. e :. d :. c :. b :. a)) (Exp i) (Exp i') where
+  _9 = lens (\s   -> let _  :. i :. _ :. _ :. _ :. _ :. _ :. _ :. _ :. _ = unlift s :: Exp sh :. Exp i :. Exp h :. Exp g :. Exp f :. Exp e :. Exp d :. Exp c :. Exp b :. Exp a in i)
+            (\s i -> let sh :. _ :. h :. g :. f :. e :. d :. c :. b :. a = unlift s :: Exp sh :. Exp i :. Exp h :. Exp g :. Exp f :. Exp e :. Exp d :. Exp c :. Exp b :. Exp a in lift (sh :. i :. h :. g :. f :. e :. d :. c :. b :. a))
+
