diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,10 +1,16 @@
+3.11
+--------
+* Support for `comonad` 5
+* Support for GHC 8
+* Support for `transformers` 0.5
+
 3.10.2
 ------
-* Support for `semigroupoids` 5.
+* Support for `semigroupoids` 5
 
 3.10.1
 ------
-* Support for `transformers` 0.4.
+* Support for `transformers` 0.4
 
 3.10
 ----
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright 2011 Edward Kmett
+Copyright 2011-2016 Edward Kmett
 
 All rights reserved.
 
diff --git a/README.markdown b/README.markdown
--- a/README.markdown
+++ b/README.markdown
@@ -1,7 +1,7 @@
 keys
 ====
 
-[![Build Status](https://secure.travis-ci.org/ekmett/keys.png?branch=master)](http://travis-ci.org/ekmett/keys)
+[![Hackage](https://img.shields.io/hackage/v/keys.svg)](https://hackage.haskell.org/package/keys) [![Build Status](https://secure.travis-ci.org/ekmett/keys.png?branch=master)](http://travis-ci.org/ekmett/keys)
 
 This package provides a bunch of ad hoc classes for accessing parts of a container.
 
diff --git a/keys.cabal b/keys.cabal
--- a/keys.cabal
+++ b/keys.cabal
@@ -1,6 +1,6 @@
 name:          keys
 category:      Data Structures, Containers
-version:       3.10.2
+version:       3.11
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
@@ -9,7 +9,7 @@
 stability:     provisional
 homepage:      http://github.com/ekmett/keys/
 bug-reports:   http://github.com/ekmett/keys/issues
-copyright:     Copyright (C) 2011 Edward A. Kmett
+copyright:     Copyright (C) 2011-2016 Edward A. Kmett
 synopsis:      Keyed functors and containers
 description:   Keyed functors and containers
 build-type:    Simple
@@ -23,14 +23,15 @@
   build-depends:
     array                >= 0.3.0.2 && < 0.6,
     base                 >= 4       && < 5,
-    comonad              >= 4       && < 5,
+    comonad              >= 4       && < 6,
     containers           >= 0.3     && < 0.6,
     free                 >= 4       && < 5,
     hashable             >= 1.1.2.3 && < 1.3,
     semigroupoids        >= 4       && < 6,
     semigroups           >= 0.8.3.1 && < 1,
-    transformers         >= 0.2     && < 0.5,
-    unordered-containers >= 0.2     && < 0.3
+    transformers         >= 0.2     && < 0.6,
+    transformers-compat  >= 0.3     && < 1,
+    unordered-containers >= 0.2.4   && < 0.3
 
   exposed-modules:
     Data.Key
diff --git a/src/Data/Key.hs b/src/Data/Key.hs
--- a/src/Data/Key.hs
+++ b/src/Data/Key.hs
@@ -1,8 +1,5 @@
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE CPP #-}
-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
-{-# LANGUAGE Trustworthy #-}
-#endif
 module Data.Key (
   -- * Keys
     Key
@@ -76,7 +73,7 @@
 import Data.Functor.Bind
 import Data.Functor.Compose
 import Data.Functor.Product
-import Data.Functor.Coproduct
+import qualified Data.Functor.Sum as Functor
 import Data.Foldable
 import Data.Hashable
 import Data.HashMap.Lazy (HashMap)
@@ -100,7 +97,7 @@
 import qualified Data.List as List
 import Prelude hiding (lookup, zip, zipWith)
 
--- TODO: half of the functions manipulating Cofree and Free buil the keys in the wrong order
+-- TODO: half of the functions manipulating Cofree and Free build the keys in the wrong order
 
 type family Key (f :: * -> *)
 type instance Key (Cofree f) = Seq (Key f)
@@ -781,19 +778,19 @@
   adjust f i arr  = arr Array.// [(i, f (arr Array.! i))]
   replace i b arr = arr Array.// [(i, b)]
 
-type instance Key (Coproduct f g) = (Key f, Key g)
+type instance Key (Functor.Sum f g) = (Key f, Key g)
 
-instance (Indexable f, Indexable g) => Indexable (Coproduct f g) where
-  index (Coproduct (Left a)) (x,_) = index a x
-  index (Coproduct (Right b)) (_,y) = index b y
+instance (Indexable f, Indexable g) => Indexable (Functor.Sum f g) where
+  index (Functor.InL a) (x,_) = index a x
+  index (Functor.InR b) (_,y) = index b y
 
-instance (Lookup f, Lookup g) => Lookup (Coproduct f g) where
-  lookup (x, _) (Coproduct (Left a)) = lookup x a
-  lookup (_, y) (Coproduct (Right b)) = lookup y b
+instance (Lookup f, Lookup g) => Lookup (Functor.Sum f g) where
+  lookup (x, _) (Functor.InL a) = lookup x a
+  lookup (_, y) (Functor.InR b) = lookup y b
 
-instance (Adjustable f, Adjustable g) => Adjustable (Coproduct f g) where
-  adjust f (x,_) (Coproduct (Left a)) = Coproduct (Left (adjust f x a))
-  adjust f (_,y) (Coproduct (Right b)) = Coproduct (Right (adjust f y b))
+instance (Adjustable f, Adjustable g) => Adjustable (Functor.Sum f g) where
+  adjust f (x,_) (Functor.InL a) = Functor.InL (adjust f x a)
+  adjust f (_,y) (Functor.InR b) = Functor.InR (adjust f y b)
 
 type instance Key (Product f g) = Either (Key f) (Key g)
 
