diff --git a/amazonka-core.cabal b/amazonka-core.cabal
--- a/amazonka-core.cabal
+++ b/amazonka-core.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-core
-version:               1.3.6
+version:               1.3.7
 synopsis:              Core data types and functionality for Amazonka libraries.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -56,6 +56,7 @@
         , Network.AWS.Data.XML
         , Network.AWS.Endpoint
         , Network.AWS.Error
+        , Network.AWS.Lens
         , Network.AWS.Pager
         , Network.AWS.Prelude
         , Network.AWS.Request
@@ -136,7 +137,6 @@
         , bytestring
         , case-insensitive
         , http-types
-        , lens
         , tasty
         , tasty-hunit
         , tasty-quickcheck
diff --git a/src/Network/AWS/Data/Base64.hs b/src/Network/AWS/Data/Base64.hs
--- a/src/Network/AWS/Data/Base64.hs
+++ b/src/Network/AWS/Data/Base64.hs
@@ -15,7 +15,6 @@
     , _Base64
     ) where
 
-import           Control.Lens
 import           Data.Aeson.Types
 import qualified Data.Attoparsec.Text        as AText
 import qualified Data.ByteArray.Encoding     as BA
@@ -28,8 +27,7 @@
 import           Network.AWS.Data.Query
 import           Network.AWS.Data.Text
 import           Network.AWS.Data.XML
-
-import           Prelude
+import           Network.AWS.Lens            (Iso', iso)
 
 -- | Base64 encoded binary data.
 --
diff --git a/src/Network/AWS/Data/Body.hs b/src/Network/AWS/Data/Body.hs
--- a/src/Network/AWS/Data/Body.hs
+++ b/src/Network/AWS/Data/Body.hs
@@ -20,7 +20,6 @@
 --
 module Network.AWS.Data.Body where
 
-import           Control.Lens
 import           Control.Monad.Trans.Resource
 import           Data.Aeson
 import qualified Data.ByteString              as BS
@@ -41,10 +40,9 @@
 import           Network.AWS.Data.Log
 import           Network.AWS.Data.Query       (QueryString)
 import           Network.AWS.Data.XML         (encodeXML)
+import           Network.AWS.Lens             (AReview, Lens', lens, to, un)
 import           Network.HTTP.Conduit
 import           Text.XML                     (Element)
-
-import           Prelude
 
 default (Builder)
 
diff --git a/src/Network/AWS/Data/ByteString.hs b/src/Network/AWS/Data/ByteString.hs
--- a/src/Network/AWS/Data/ByteString.hs
+++ b/src/Network/AWS/Data/ByteString.hs
@@ -39,8 +39,6 @@
 import           Numeric
 import           Numeric.Natural
 
-import           Prelude
-
 type LazyByteString = LBS.ByteString
 
 showBS :: ToByteString a => a -> String
diff --git a/src/Network/AWS/Data/Headers.hs b/src/Network/AWS/Data/Headers.hs
--- a/src/Network/AWS/Data/Headers.hs
+++ b/src/Network/AWS/Data/Headers.hs
@@ -27,8 +27,6 @@
 import           Network.AWS.Data.Text
 import           Network.HTTP.Types
 
-import           Prelude
-
 infixl 7 .#, .#?
 
 -- FIXME: This whole toText/fromText shit is just stupid.
diff --git a/src/Network/AWS/Data/JSON.hs b/src/Network/AWS/Data/JSON.hs
--- a/src/Network/AWS/Data/JSON.hs
+++ b/src/Network/AWS/Data/JSON.hs
@@ -39,8 +39,6 @@
 import qualified Data.HashMap.Strict   as Map
 import           Network.AWS.Data.Text
 
-import           Prelude
-
 parseJSONText :: FromText a => String -> Value -> Parser a
 parseJSONText n = withText n (either fail return . fromText)
 
diff --git a/src/Network/AWS/Data/List1.hs b/src/Network/AWS/Data/List1.hs
--- a/src/Network/AWS/Data/List1.hs
+++ b/src/Network/AWS/Data/List1.hs
@@ -16,7 +16,6 @@
 module Network.AWS.Data.List1 where
 
 import           Control.Applicative
-import           Control.Lens         (Iso', iso)
 import           Control.Monad
 import           Data.Aeson
 import           Data.Coerce
@@ -31,9 +30,8 @@
 import           GHC.Exts
 import           GHC.Generics         (Generic)
 import           Network.AWS.Data.XML
+import           Network.AWS.Lens     (Iso', iso)
 import           Text.XML             (Node)
-
-import           Prelude
 
 newtype List1 a = List1 { toNonEmpty :: NonEmpty a }
     deriving
diff --git a/src/Network/AWS/Data/Log.hs b/src/Network/AWS/Data/Log.hs
--- a/src/Network/AWS/Data/Log.hs
+++ b/src/Network/AWS/Data/Log.hs
@@ -23,7 +23,6 @@
 import qualified Data.CaseInsensitive         as CI
 import           Data.Int
 import           Data.List                    (intersperse)
-import           Data.Maybe
 import           Data.Monoid
 import qualified Data.Text                    as Text
 import qualified Data.Text.Encoding           as Text
@@ -31,7 +30,6 @@
 import qualified Data.Text.Lazy.Encoding      as LText
 import           Data.Time                    (UTCTime)
 import           Data.Word
-import           GHC.Float
 import           Network.AWS.Data.ByteString
 import           Network.AWS.Data.Headers
 import           Network.AWS.Data.Path
@@ -40,8 +38,6 @@
 import           Network.HTTP.Conduit
 import           Network.HTTP.Types
 import           Numeric
-
-import           Prelude
 
 class ToLog a where
     -- | Convert a value to a loggable builder.
diff --git a/src/Network/AWS/Data/Map.hs b/src/Network/AWS/Data/Map.hs
--- a/src/Network/AWS/Data/Map.hs
+++ b/src/Network/AWS/Data/Map.hs
@@ -24,7 +24,6 @@
     ) where
 
 import           Control.Applicative
-import           Control.Lens                (Iso', iso)
 import           Data.Aeson
 import           Data.Bifunctor
 import qualified Data.ByteString             as BS
@@ -46,10 +45,9 @@
 import           Network.AWS.Data.Query
 import           Network.AWS.Data.Text
 import           Network.AWS.Data.XML
+import           Network.AWS.Lens            (Iso', iso)
 import           Network.HTTP.Types          (ResponseHeaders)
 import           Text.XML                    (Node)
-
-import           Prelude
 
 newtype Map k v = Map { toMap :: HashMap k v }
     deriving
diff --git a/src/Network/AWS/Data/Numeric.hs b/src/Network/AWS/Data/Numeric.hs
--- a/src/Network/AWS/Data/Numeric.hs
+++ b/src/Network/AWS/Data/Numeric.hs
@@ -13,7 +13,6 @@
 --
 module Network.AWS.Data.Numeric where
 
-import           Control.Lens
 import           Control.Monad
 import           Data.Aeson.Types
 import           Data.Data                   (Data, Typeable)
@@ -24,9 +23,8 @@
 import           Network.AWS.Data.Query
 import           Network.AWS.Data.Text
 import           Network.AWS.Data.XML
+import           Network.AWS.Lens            (Iso', iso)
 import           Numeric.Natural
-
-import           Prelude
 
 newtype Nat = Nat { unNat :: Natural }
     deriving
diff --git a/src/Network/AWS/Data/Path.hs b/src/Network/AWS/Data/Path.hs
--- a/src/Network/AWS/Data/Path.hs
+++ b/src/Network/AWS/Data/Path.hs
@@ -36,8 +36,6 @@
 import           Network.AWS.Data.Text
 import           Network.HTTP.Types.URI
 
-import           Prelude
-
 class ToPath a where
     toPath :: a -> ByteString
 
diff --git a/src/Network/AWS/Data/Query.hs b/src/Network/AWS/Data/Query.hs
--- a/src/Network/AWS/Data/Query.hs
+++ b/src/Network/AWS/Data/Query.hs
@@ -34,8 +34,6 @@
 import           Network.HTTP.Types.URI      (urlEncode)
 import           Numeric.Natural
 
-import           Prelude
-
 data QueryString
     = QList  [QueryString]
     | QPair  ByteString QueryString
diff --git a/src/Network/AWS/Data/Sensitive.hs b/src/Network/AWS/Data/Sensitive.hs
--- a/src/Network/AWS/Data/Sensitive.hs
+++ b/src/Network/AWS/Data/Sensitive.hs
@@ -12,7 +12,6 @@
 --
 module Network.AWS.Data.Sensitive where
 
-import           Control.Lens
 import           Data.Data                   (Data, Typeable)
 import           Data.Monoid
 import           Data.String
@@ -22,8 +21,7 @@
 import           Network.AWS.Data.Query
 import           Network.AWS.Data.Text
 import           Network.AWS.Data.XML
-
-import           Prelude
+import           Network.AWS.Lens            (Iso', iso)
 
 -- | /Note/: read . show /= isomorphic
 newtype Sensitive a = Sensitive { desensitise :: a }
diff --git a/src/Network/AWS/Data/Time.hs b/src/Network/AWS/Data/Time.hs
--- a/src/Network/AWS/Data/Time.hs
+++ b/src/Network/AWS/Data/Time.hs
@@ -35,7 +35,6 @@
     ) where
 
 import           Control.Applicative
-import           Control.Lens
 import           Data.Aeson
 import           Data.Attoparsec.Text        (Parser)
 import qualified Data.Attoparsec.Text        as AText
@@ -56,8 +55,7 @@
 import           Network.AWS.Data.Query
 import           Network.AWS.Data.Text
 import           Network.AWS.Data.XML
-
-import           Prelude
+import           Network.AWS.Lens            (Iso', iso)
 
 data Format
     = RFC822Format
diff --git a/src/Network/AWS/Data/XML.hs b/src/Network/AWS/Data/XML.hs
--- a/src/Network/AWS/Data/XML.hs
+++ b/src/Network/AWS/Data/XML.hs
@@ -35,8 +35,6 @@
 import qualified Text.XML.Stream.Render      as Stream
 import           Text.XML.Unresolved         (toEvents)
 
-import           Prelude
-
 infixl 7 .@, .@?
 
 (.@) :: FromXML a => [Node] -> Text -> Either String a
diff --git a/src/Network/AWS/Endpoint.hs b/src/Network/AWS/Endpoint.hs
--- a/src/Network/AWS/Endpoint.hs
+++ b/src/Network/AWS/Endpoint.hs
@@ -13,14 +13,12 @@
 --
 module Network.AWS.Endpoint where
 
-import           Control.Lens
 import qualified Data.CaseInsensitive        as CI
 import qualified Data.HashSet                as Set
 import           Data.Monoid
 import           Network.AWS.Data.ByteString
+import           Network.AWS.Lens            ((%~), (.~))
 import           Network.AWS.Types
-
-import           Prelude
 
 -- | A convenience function for overriding the 'Service' 'Endpoint'.
 --
diff --git a/src/Network/AWS/Error.hs b/src/Network/AWS/Error.hs
--- a/src/Network/AWS/Error.hs
+++ b/src/Network/AWS/Error.hs
@@ -13,7 +13,6 @@
 module Network.AWS.Error where
 
 import           Control.Applicative
-import           Control.Lens
 import           Control.Monad
 import           Data.Aeson
 import           Data.Aeson.Types            (parseEither)
@@ -24,6 +23,8 @@
 import           Network.AWS.Data.Headers
 import           Network.AWS.Data.Text
 import           Network.AWS.Data.XML
+import           Network.AWS.Lens            (Choice, Getting, Optic', filtered)
+import           Network.AWS.Lens            ((<&>))
 import           Network.AWS.Types
 import           Network.HTTP.Conduit
 import           Network.HTTP.Types.Status   (Status (..))
diff --git a/src/Network/AWS/Lens.hs b/src/Network/AWS/Lens.hs
new file mode 100644
--- /dev/null
+++ b/src/Network/AWS/Lens.hs
@@ -0,0 +1,27 @@
+-- |
+-- Module      : Network.AWS.Lens
+-- Copyright   : (c) 2013-2015 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : provisional
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.Lens
+    ( module Ex
+    , module Ty
+    , module Fn
+    , module Op
+    ) where
+
+import           Control.Exception.Lens as Ex (catching, catching_, exception,
+                                               throwingM, trying, _IOException)
+import           Control.Lens           as Ty (AReview, Choice, Fold, Getter,
+                                               Getting, IndexedTraversal', Iso',
+                                               Lens', Optic', Prism', Setter',
+                                               Traversal')
+import           Control.Lens           as Fn (allOf, anyOf, concatOf, filtered,
+                                               folding, has, iso, lens, mapping,
+                                               prism, sets, to, traversed, un,
+                                               view, _1, _2, _Just, _last)
+import           Control.Lens           as Op (( # ), (%~), (&), (.~), (<&>),
+                                               (<>~), (?~), (^.), (^?))
diff --git a/src/Network/AWS/Pager.hs b/src/Network/AWS/Pager.hs
--- a/src/Network/AWS/Pager.hs
+++ b/src/Network/AWS/Pager.hs
@@ -17,14 +17,12 @@
     ) where
 
 import           Control.Applicative
-import           Control.Lens          hiding (index)
 import           Data.HashMap.Strict   (HashMap)
 import qualified Data.HashMap.Strict   as Map
 import           Data.Text             (Text)
 import           Network.AWS.Data.Text (ToText (..))
+import           Network.AWS.Lens      (Getter, to)
 import           Network.AWS.Types
-
-import           Prelude
 
 -- | Specify how an 'AWSRequest' and it's associated 'Rs' response can
 -- generate a subsequent request, if available.
diff --git a/src/Network/AWS/Prelude.hs b/src/Network/AWS/Prelude.hs
--- a/src/Network/AWS/Prelude.hs
+++ b/src/Network/AWS/Prelude.hs
@@ -13,13 +13,6 @@
 
 import           Control.Applicative         as Export (Applicative, pure)
 import           Control.Applicative         as Export ((<$>), (<*>), (<|>))
-import           Control.Lens                as Export (Getting, Iso', Lens',
-                                                        Prism')
-import           Control.Lens                as Export (concatOf, folding, has,
-                                                        iso, lens, mapping,
-                                                        prism, to, _Just, _last)
-import           Control.Lens                as Export (( # ), (&), (.~), (<&>),
-                                                        (^.), (^?), (^?))
 import           Data.Data                   as Export (Data, Typeable)
 import           Data.Foldable               as Export (Foldable)
 import           Data.Hashable               as Export (Hashable)
diff --git a/src/Network/AWS/Request.hs b/src/Network/AWS/Request.hs
--- a/src/Network/AWS/Request.hs
+++ b/src/Network/AWS/Request.hs
@@ -45,7 +45,6 @@
     , requestURL
     ) where
 
-import           Control.Lens
 import           Data.Maybe
 import           Data.Monoid
 import           Network.AWS.Data.Body
@@ -55,6 +54,8 @@
 import           Network.AWS.Data.Path
 import           Network.AWS.Data.Query
 import           Network.AWS.Data.XML
+import           Network.AWS.Lens            (Lens')
+import           Network.AWS.Lens            ((%~), (&), (.~), (<&>))
 import           Network.AWS.Types
 import qualified Network.HTTP.Conduit        as Client
 import           Network.HTTP.Types          (StdMethod (..))
diff --git a/src/Network/AWS/Response.hs b/src/Network/AWS/Response.hs
--- a/src/Network/AWS/Response.hs
+++ b/src/Network/AWS/Response.hs
@@ -32,8 +32,6 @@
 import           Network.HTTP.Types
 import           Text.XML                     (Node)
 
-import           Prelude
-
 receiveNull :: MonadResource m
             => Rs a
             -> Logger
diff --git a/src/Network/AWS/Sign/V2.hs b/src/Network/AWS/Sign/V2.hs
--- a/src/Network/AWS/Sign/V2.hs
+++ b/src/Network/AWS/Sign/V2.hs
@@ -32,8 +32,6 @@
 import qualified Network.HTTP.Conduit        as Client
 import           Network.HTTP.Types          hiding (toQuery)
 
-import           Prelude
-
 data V2 = V2
     { metaTime      :: !UTCTime
     , metaEndpoint  :: !Endpoint
diff --git a/src/Network/AWS/Sign/V4.hs b/src/Network/AWS/Sign/V4.hs
--- a/src/Network/AWS/Sign/V4.hs
+++ b/src/Network/AWS/Sign/V4.hs
@@ -23,7 +23,6 @@
     ) where
 
 import           Control.Applicative
-import           Control.Lens
 import qualified Data.CaseInsensitive        as CI
 import           Data.Monoid
 import           Network.AWS.Data.Body
@@ -31,12 +30,11 @@
 import           Network.AWS.Data.Headers
 import           Network.AWS.Data.Query
 import           Network.AWS.Data.Time
+import           Network.AWS.Lens            ((.~), (<>~))
 import           Network.AWS.Request
 import           Network.AWS.Sign.V4.Base
 import           Network.AWS.Sign.V4.Chunked
 import           Network.AWS.Types
-
-import           Prelude
 
 default (ByteString)
 
diff --git a/src/Network/AWS/Sign/V4/Base.hs b/src/Network/AWS/Sign/V4/Base.hs
--- a/src/Network/AWS/Sign/V4/Base.hs
+++ b/src/Network/AWS/Sign/V4/Base.hs
@@ -20,7 +20,6 @@
 module Network.AWS.Sign.V4.Base where
 
 import           Control.Applicative
-import           Control.Lens
 import           Data.Bifunctor
 import qualified Data.ByteString             as BS
 import qualified Data.ByteString.Char8       as BS8
@@ -38,6 +37,7 @@
 import           Network.AWS.Data.Path
 import           Network.AWS.Data.Query
 import           Network.AWS.Data.Time
+import           Network.AWS.Lens            ((%~), (<>~))
 import           Network.AWS.Request
 import           Network.AWS.Types
 import qualified Network.HTTP.Conduit        as Client
diff --git a/src/Network/AWS/Sign/V4/Chunked.hs b/src/Network/AWS/Sign/V4/Chunked.hs
--- a/src/Network/AWS/Sign/V4/Chunked.hs
+++ b/src/Network/AWS/Sign/V4/Chunked.hs
@@ -25,7 +25,6 @@
     ) where
 
 import           Control.Applicative
-import           Control.Lens
 import qualified Data.ByteString             as BS
 import           Data.ByteString.Builder
 import qualified Data.ByteString.Char8       as BS8
@@ -37,11 +36,10 @@
 import           Network.AWS.Data.Crypto
 import           Network.AWS.Data.Headers
 import           Network.AWS.Data.Time
+import           Network.AWS.Lens            ((<>~))
 import           Network.AWS.Sign.V4.Base    hiding (algorithm)
 import           Network.AWS.Types
 import           Network.HTTP.Types.Header
-
-import           Prelude
 
 default (Builder, Integer)
 
diff --git a/src/Network/AWS/Types.hs b/src/Network/AWS/Types.hs
--- a/src/Network/AWS/Types.hs
+++ b/src/Network/AWS/Types.hs
@@ -89,7 +89,7 @@
     , serviceMessage
     , serviceRequestId
     -- ** Error Types
-    , ErrorCode
+    , ErrorCode      (..)
     , errorCode
     , ErrorMessage   (..)
     , RequestId      (..)
@@ -123,8 +123,6 @@
 import           Control.Applicative
 import           Control.Concurrent           (ThreadId)
 import           Control.Exception
-import           Control.Exception.Lens       (exception)
-import           Control.Lens                 hiding (coerce)
 import           Control.Monad.IO.Class
 import           Control.Monad.Trans.Resource
 import           Data.Aeson                   hiding (Error)
@@ -151,14 +149,15 @@
 import           Network.AWS.Data.Query
 import           Network.AWS.Data.Text
 import           Network.AWS.Data.XML
+import           Network.AWS.Lens             (Iso', Lens', Prism', Setter')
+import           Network.AWS.Lens             (exception, iso, lens, prism,
+                                               sets)
 import           Network.HTTP.Conduit         hiding (Proxy, Request, Response)
 import qualified Network.HTTP.Conduit         as Client
 import           Network.HTTP.Types.Header
 import           Network.HTTP.Types.Method
 import           Network.HTTP.Types.Status    (Status)
 import           Text.XML                     (def)
-
-import           Prelude
 
 -- | A convenience alias to avoid type ambiguity.
 type ClientRequest = Client.Request
diff --git a/src/Network/AWS/Waiter.hs b/src/Network/AWS/Waiter.hs
--- a/src/Network/AWS/Waiter.hs
+++ b/src/Network/AWS/Waiter.hs
@@ -32,16 +32,14 @@
     ) where
 
 import           Control.Applicative
-import           Control.Lens
 import           Data.Maybe
 import           Data.Text                   (Text)
 import qualified Data.Text                   as Text
 import           Network.AWS.Data.ByteString
 import           Network.AWS.Data.Log
 import           Network.AWS.Error
+import           Network.AWS.Lens            (Fold, allOf, anyOf, to, (^?))
 import           Network.AWS.Types
-
-import           Prelude
 
 type Acceptor a = Request a -> Either Error (Response a) -> Maybe Accept
 
diff --git a/test/Test/AWS/Error.hs b/test/Test/AWS/Error.hs
--- a/test/Test/AWS/Error.hs
+++ b/test/Test/AWS/Error.hs
@@ -11,7 +11,6 @@
 --
 module Test.AWS.Error (tests) where
 
-import           Control.Lens
 import qualified Data.ByteString.Char8    as BS8
 import qualified Data.Foldable            as Fold
 import           Data.List                (sort)
diff --git a/test/Test/AWS/Sign/V4.hs b/test/Test/AWS/Sign/V4.hs
--- a/test/Test/AWS/Sign/V4.hs
+++ b/test/Test/AWS/Sign/V4.hs
@@ -11,7 +11,6 @@
 --
 module Test.AWS.Sign.V4 (tests) where
 
-import           Control.Lens
 import qualified Data.ByteString.Char8    as BS8
 import qualified Data.Foldable            as Fold
 import           Data.List                (sort)
