diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,24 +1,37 @@
 # Amazon Simple Storage Service SDK
 
-> _Warning:_ This is an experimental preview release which is still under heavy development and not intended for public consumption, _caveat emptor_!
-
+* [Version](#version)
 * [Description](#description)
 * [Contribute](#contribute)
 * [Licence](#licence)
 
+
+## Version
+
+`1.0.0`
+
+
 ## Description
 
-Amazon Simple Storage Service is storage for the Internet. Amazon S3 has a
-simple web services interface that you can use to store and retrieve any
-amount of data, at any time, from anywhere on the web. It gives any developer
-access to the same highly scalable, reliable, fast, inexpensive data storage
-infrastructure that Amazon uses to run its own global network of web sites.
-The service aims to maximize benefits of scale and to pass those benefits on
-to developers.
+Amazon Simple Storage Service is storage for the Internet. Amazon S3 has
+a simple web services interface that you can use to store and retrieve
+any amount of data, at any time, from anywhere on the web. It gives any
+developer access to the same highly scalable, reliable, fast,
+inexpensive data storage infrastructure that Amazon uses to run its own
+global network of web sites. The service aims to maximize benefits of
+scale and to pass those benefits on to developers.
 
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-s3)
 and the [AWS API Reference](http://docs.aws.amazon.com/AmazonS3/latest/API/Welcome.html).
 
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information and sending requests.
+
+Use of lenses is required for constructing and manipulating types.
+This is due to the amount of nesting of AWS types and transparency regarding
+de/serialisation into more palatable Haskell values.
+The provided lenses should be compatible with any of the major lens libraries
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
 
 ## Contribute
 
diff --git a/amazonka-s3.cabal b/amazonka-s3.cabal
--- a/amazonka-s3.cabal
+++ b/amazonka-s3.cabal
@@ -1,31 +1,39 @@
 name:                  amazonka-s3
-version:               0.3.6
+version:               1.0.0
 synopsis:              Amazon Simple Storage Service SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
 license-file:          LICENSE
 author:                Brendan Hay
 maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2013-2014 Brendan Hay
+copyright:             Copyright (c) 2013-2015 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 extra-source-files:    README.md
 cabal-version:         >= 1.10
 
 description:
-    Amazon Simple Storage Service is storage for the Internet. Amazon S3 has a
-    simple web services interface that you can use to store and retrieve any
-    amount of data, at any time, from anywhere on the web. It gives any developer
-    access to the same highly scalable, reliable, fast, inexpensive data storage
-    infrastructure that Amazon uses to run its own global network of web sites.
-    The service aims to maximize benefits of scale and to pass those benefits on
-    to developers.
-
+    Amazon Simple Storage Service is storage for the Internet. Amazon S3 has
+    a simple web services interface that you can use to store and retrieve
+    any amount of data, at any time, from anywhere on the web. It gives any
+    developer access to the same highly scalable, reliable, fast,
+    inexpensive data storage infrastructure that Amazon uses to run its own
+    global network of web sites. The service aims to maximize benefits of
+    scale and to pass those benefits on to developers.
     .
-    /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/Welcome.html AWS API Reference>
+    The types from this library are intended to be used with
+    <http://hackage.haskell.org/package/amazonka amazonka>, which provides
+    mechanisms for specifying AuthN/AuthZ information and sending requests.
     .
-    /Warning:/ This is an experimental preview release which is still under
-    heavy development and not intended for public consumption, caveat emptor!
+    Use of lenses is required for constructing and manipulating types.
+    This is due to the amount of nesting of AWS types and transparency regarding
+    de/serialisation into more palatable Haskell values.
+    The provided lenses should be compatible with any of the major lens libraries
+    such as <http://hackage.haskell.org/package/lens lens> or
+    <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+    .
+    See "Network.AWS.S3" and the <http://docs.aws.amazon.com/AmazonS3/latest/API/Welcome.html AWS API Reference>
+    to get started.
 
 source-repository head
     type:     git
@@ -45,7 +53,7 @@
         , Network.AWS.S3.CreateBucket
         , Network.AWS.S3.CreateMultipartUpload
         , Network.AWS.S3.DeleteBucket
-        , Network.AWS.S3.DeleteBucketCors
+        , Network.AWS.S3.DeleteBucketCORS
         , Network.AWS.S3.DeleteBucketLifecycle
         , Network.AWS.S3.DeleteBucketPolicy
         , Network.AWS.S3.DeleteBucketReplication
@@ -53,12 +61,11 @@
         , Network.AWS.S3.DeleteBucketWebsite
         , Network.AWS.S3.DeleteObject
         , Network.AWS.S3.DeleteObjects
-        , Network.AWS.S3.GetBucketAcl
-        , Network.AWS.S3.GetBucketCors
+        , Network.AWS.S3.GetBucketACL
+        , Network.AWS.S3.GetBucketCORS
         , Network.AWS.S3.GetBucketLifecycle
         , Network.AWS.S3.GetBucketLocation
         , Network.AWS.S3.GetBucketLogging
-        , Network.AWS.S3.GetBucketNotification
         , Network.AWS.S3.GetBucketNotificationConfiguration
         , Network.AWS.S3.GetBucketPolicy
         , Network.AWS.S3.GetBucketReplication
@@ -67,7 +74,7 @@
         , Network.AWS.S3.GetBucketVersioning
         , Network.AWS.S3.GetBucketWebsite
         , Network.AWS.S3.GetObject
-        , Network.AWS.S3.GetObjectAcl
+        , Network.AWS.S3.GetObjectACL
         , Network.AWS.S3.GetObjectTorrent
         , Network.AWS.S3.HeadBucket
         , Network.AWS.S3.HeadObject
@@ -76,11 +83,10 @@
         , Network.AWS.S3.ListObjectVersions
         , Network.AWS.S3.ListObjects
         , Network.AWS.S3.ListParts
-        , Network.AWS.S3.PutBucketAcl
-        , Network.AWS.S3.PutBucketCors
+        , Network.AWS.S3.PutBucketACL
+        , Network.AWS.S3.PutBucketCORS
         , Network.AWS.S3.PutBucketLifecycle
         , Network.AWS.S3.PutBucketLogging
-        , Network.AWS.S3.PutBucketNotification
         , Network.AWS.S3.PutBucketNotificationConfiguration
         , Network.AWS.S3.PutBucketPolicy
         , Network.AWS.S3.PutBucketReplication
@@ -89,7 +95,7 @@
         , Network.AWS.S3.PutBucketVersioning
         , Network.AWS.S3.PutBucketWebsite
         , Network.AWS.S3.PutObject
-        , Network.AWS.S3.PutObjectAcl
+        , Network.AWS.S3.PutObjectACL
         , Network.AWS.S3.RestoreObject
         , Network.AWS.S3.Types
         , Network.AWS.S3.UploadPart
@@ -98,7 +104,39 @@
 
     other-modules:
           Network.AWS.S3.Internal
+        , Network.AWS.S3.Types.Product
+        , Network.AWS.S3.Types.Sum
 
     build-depends:
-          amazonka-core == 0.3.6.*
+          amazonka-core == 1.0.0.*
         , base          >= 4.7     && < 5
+        , lens >= 4.4
+        , text >= 1.1
+
+test-suite amazonka-s3-test
+    type:              exitcode-stdio-1.0
+    default-language:  Haskell2010
+    hs-source-dirs:    test
+    main-is:           Main.hs
+
+    ghc-options:       -Wall -threaded
+
+    -- This is not comprehensive if modules have manually been added.
+    -- It exists to ensure cabal 'somewhat' detects test module changes.
+    other-modules:
+          Test.AWS.S3
+        , Test.AWS.Gen.S3
+        , Test.AWS.S3.Internal
+
+    build-depends:
+          amazonka-core == 1.0.0
+        , amazonka-test == 1.0.0
+        , amazonka-s3 == 1.0.0
+        , base
+        , bytestring
+        , lens
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/gen/Network/AWS/S3.hs b/gen/Network/AWS/S3.hs
--- a/gen/Network/AWS/S3.hs
+++ b/gen/Network/AWS/S3.hs
@@ -1,134 +1,722 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Amazon Simple Storage Service is storage for the Internet. Amazon S3 has a
--- simple web services interface that you can use to store and retrieve any
--- amount of data, at any time, from anywhere on the web. It gives any developer
--- access to the same highly scalable, reliable, fast, inexpensive data storage
--- infrastructure that Amazon uses to run its own global network of web sites.
--- The service aims to maximize benefits of scale and to pass those benefits on
--- to developers.
+-- Amazon Simple Storage Service is storage for the Internet. Amazon S3 has
+-- a simple web services interface that you can use to store and retrieve
+-- any amount of data, at any time, from anywhere on the web. It gives any
+-- developer access to the same highly scalable, reliable, fast,
+-- inexpensive data storage infrastructure that Amazon uses to run its own
+-- global network of web sites. The service aims to maximize benefits of
+-- scale and to pass those benefits on to developers.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/Welcome.html AWS API Reference>
 module Network.AWS.S3
-    ( module Network.AWS.S3.AbortMultipartUpload
-    , module Network.AWS.S3.CompleteMultipartUpload
-    , module Network.AWS.S3.CopyObject
-    , module Network.AWS.S3.CreateBucket
-    , module Network.AWS.S3.CreateMultipartUpload
+    (
+    -- * Service
+      S3
+
+    -- * Errors
+    -- $errors
+
+    -- ** ObjectAlreadyInActiveTierError
+    , _ObjectAlreadyInActiveTierError
+
+    -- ** BucketAlreadyExists
+    , _BucketAlreadyExists
+
+    -- ** ObjectNotInActiveTierError
+    , _ObjectNotInActiveTierError
+
+    -- ** NoSuchUpload
+    , _NoSuchUpload
+
+    -- ** NoSuchBucket
+    , _NoSuchBucket
+
+    -- ** NoSuchKey
+    , _NoSuchKey
+
+    -- * Waiters
+    -- $waiters
+
+    -- ** ObjectNotExists
+    , objectNotExists
+
+    -- ** BucketExists
+    , bucketExists
+
+    -- ** ObjectExists
+    , objectExists
+
+    -- ** BucketNotExists
+    , bucketNotExists
+
+    -- * Operations
+    -- $operations
+
+    -- ** PutBucketRequestPayment
+    , module Network.AWS.S3.PutBucketRequestPayment
+
+    -- ** PutObject
+    , module Network.AWS.S3.PutObject
+
+    -- ** PutBucketLogging
+    , module Network.AWS.S3.PutBucketLogging
+
+    -- ** DeleteObject
+    , module Network.AWS.S3.DeleteObject
+
+    -- ** DeleteBucket
     , module Network.AWS.S3.DeleteBucket
-    , module Network.AWS.S3.DeleteBucketCors
-    , module Network.AWS.S3.DeleteBucketLifecycle
-    , module Network.AWS.S3.DeleteBucketPolicy
-    , module Network.AWS.S3.DeleteBucketReplication
+
+    -- ** ListBuckets
+    , module Network.AWS.S3.ListBuckets
+
+    -- ** CreateBucket
+    , module Network.AWS.S3.CreateBucket
+
+    -- ** PutBucketTagging
+    , module Network.AWS.S3.PutBucketTagging
+
+    -- ** DeleteBucketTagging
     , module Network.AWS.S3.DeleteBucketTagging
-    , module Network.AWS.S3.DeleteBucketWebsite
-    , module Network.AWS.S3.DeleteObject
-    , module Network.AWS.S3.DeleteObjects
-    , module Network.AWS.S3.GetBucketAcl
-    , module Network.AWS.S3.GetBucketCors
-    , module Network.AWS.S3.GetBucketLifecycle
-    , module Network.AWS.S3.GetBucketLocation
-    , module Network.AWS.S3.GetBucketLogging
-    , module Network.AWS.S3.GetBucketNotification
+
+    -- ** PutObjectACL
+    , module Network.AWS.S3.PutObjectACL
+
+    -- ** GetBucketNotificationConfiguration
     , module Network.AWS.S3.GetBucketNotificationConfiguration
-    , module Network.AWS.S3.GetBucketPolicy
-    , module Network.AWS.S3.GetBucketReplication
-    , module Network.AWS.S3.GetBucketRequestPayment
-    , module Network.AWS.S3.GetBucketTagging
-    , module Network.AWS.S3.GetBucketVersioning
+
+    -- ** GetBucketLocation
+    , module Network.AWS.S3.GetBucketLocation
+
+    -- ** PutBucketReplication
+    , module Network.AWS.S3.PutBucketReplication
+
+    -- ** GetBucketWebsite
     , module Network.AWS.S3.GetBucketWebsite
+
+    -- ** GetObject
     , module Network.AWS.S3.GetObject
-    , module Network.AWS.S3.GetObjectAcl
-    , module Network.AWS.S3.GetObjectTorrent
+
+    -- ** DeleteBucketReplication
+    , module Network.AWS.S3.DeleteBucketReplication
+
+    -- ** GetBucketRequestPayment
+    , module Network.AWS.S3.GetBucketRequestPayment
+
+    -- ** ListObjectVersions (Paginated)
+    , module Network.AWS.S3.ListObjectVersions
+
+    -- ** GetBucketLifecycle
+    , module Network.AWS.S3.GetBucketLifecycle
+
+    -- ** HeadBucket
     , module Network.AWS.S3.HeadBucket
-    , module Network.AWS.S3.HeadObject
-    , module Network.AWS.S3.ListBuckets
+
+    -- ** PutBucketLifecycle
+    , module Network.AWS.S3.PutBucketLifecycle
+
+    -- ** CreateMultipartUpload
+    , module Network.AWS.S3.CreateMultipartUpload
+
+    -- ** DeleteBucketLifecycle
+    , module Network.AWS.S3.DeleteBucketLifecycle
+
+    -- ** GetBucketReplication
+    , module Network.AWS.S3.GetBucketReplication
+
+    -- ** PutBucketWebsite
+    , module Network.AWS.S3.PutBucketWebsite
+
+    -- ** CompleteMultipartUpload
+    , module Network.AWS.S3.CompleteMultipartUpload
+
+    -- ** UploadPart
+    , module Network.AWS.S3.UploadPart
+
+    -- ** ListMultipartUploads (Paginated)
     , module Network.AWS.S3.ListMultipartUploads
-    , module Network.AWS.S3.ListObjectVersions
+
+    -- ** DeleteBucketWebsite
+    , module Network.AWS.S3.DeleteBucketWebsite
+
+    -- ** ListObjects (Paginated)
     , module Network.AWS.S3.ListObjects
-    , module Network.AWS.S3.ListParts
-    , module Network.AWS.S3.PutBucketAcl
-    , module Network.AWS.S3.PutBucketCors
-    , module Network.AWS.S3.PutBucketLifecycle
-    , module Network.AWS.S3.PutBucketLogging
-    , module Network.AWS.S3.PutBucketNotification
-    , module Network.AWS.S3.PutBucketNotificationConfiguration
+
+    -- ** DeleteObjects
+    , module Network.AWS.S3.DeleteObjects
+
+    -- ** PutBucketPolicy
     , module Network.AWS.S3.PutBucketPolicy
-    , module Network.AWS.S3.PutBucketReplication
-    , module Network.AWS.S3.PutBucketRequestPayment
-    , module Network.AWS.S3.PutBucketTagging
+
+    -- ** DeleteBucketPolicy
+    , module Network.AWS.S3.DeleteBucketPolicy
+
+    -- ** AbortMultipartUpload
+    , module Network.AWS.S3.AbortMultipartUpload
+
+    -- ** GetObjectTorrent
+    , module Network.AWS.S3.GetObjectTorrent
+
+    -- ** PutBucketCORS
+    , module Network.AWS.S3.PutBucketCORS
+
+    -- ** DeleteBucketCORS
+    , module Network.AWS.S3.DeleteBucketCORS
+
+    -- ** GetBucketVersioning
+    , module Network.AWS.S3.GetBucketVersioning
+
+    -- ** PutBucketNotificationConfiguration
+    , module Network.AWS.S3.PutBucketNotificationConfiguration
+
+    -- ** GetBucketTagging
+    , module Network.AWS.S3.GetBucketTagging
+
+    -- ** HeadObject
+    , module Network.AWS.S3.HeadObject
+
+    -- ** PutBucketVersioning
     , module Network.AWS.S3.PutBucketVersioning
-    , module Network.AWS.S3.PutBucketWebsite
-    , module Network.AWS.S3.PutObject
-    , module Network.AWS.S3.PutObjectAcl
+
+    -- ** GetObjectACL
+    , module Network.AWS.S3.GetObjectACL
+
+    -- ** RestoreObject
     , module Network.AWS.S3.RestoreObject
-    , module Network.AWS.S3.Types
-    , module Network.AWS.S3.UploadPart
+
+    -- ** GetBucketCORS
+    , module Network.AWS.S3.GetBucketCORS
+
+    -- ** CopyObject
+    , module Network.AWS.S3.CopyObject
+
+    -- ** GetBucketPolicy
+    , module Network.AWS.S3.GetBucketPolicy
+
+    -- ** GetBucketLogging
+    , module Network.AWS.S3.GetBucketLogging
+
+    -- ** ListParts (Paginated)
+    , module Network.AWS.S3.ListParts
+
+    -- ** GetBucketACL
+    , module Network.AWS.S3.GetBucketACL
+
+    -- ** PutBucketACL
+    , module Network.AWS.S3.PutBucketACL
+
+    -- ** UploadPartCopy
     , module Network.AWS.S3.UploadPartCopy
-    , module Network.AWS.S3.Waiters
+
+    -- * Types
+
+    -- ** Re-exported Types
+    , module Network.AWS.S3.Internal
+
+    -- ** BucketCannedACL
+    , BucketCannedACL (..)
+
+    -- ** BucketLogsPermission
+    , BucketLogsPermission (..)
+
+    -- ** BucketVersioningStatus
+    , BucketVersioningStatus (..)
+
+    -- ** EncodingType
+    , EncodingType (..)
+
+    -- ** Event
+    , Event (..)
+
+    -- ** ExpirationStatus
+    , ExpirationStatus (..)
+
+    -- ** MFADelete
+    , MFADelete (..)
+
+    -- ** MFADeleteStatus
+    , MFADeleteStatus (..)
+
+    -- ** MetadataDirective
+    , MetadataDirective (..)
+
+    -- ** ObjectCannedACL
+    , ObjectCannedACL (..)
+
+    -- ** ObjectStorageClass
+    , ObjectStorageClass (..)
+
+    -- ** ObjectVersionStorageClass
+    , ObjectVersionStorageClass (..)
+
+    -- ** Payer
+    , Payer (..)
+
+    -- ** Permission
+    , Permission (..)
+
+    -- ** Protocol
+    , Protocol (..)
+
+    -- ** ReplicationRuleStatus
+    , ReplicationRuleStatus (..)
+
+    -- ** ReplicationStatus
+    , ReplicationStatus (..)
+
+    -- ** RequestCharged
+    , RequestCharged (..)
+
+    -- ** RequestPayer
+    , RequestPayer (..)
+
+    -- ** ServerSideEncryption
+    , ServerSideEncryption (..)
+
+    -- ** StorageClass
+    , StorageClass (..)
+
+    -- ** TransitionStorageClass
+    , TransitionStorageClass (..)
+
+    -- ** Type
+    , Type (..)
+
+    -- ** AccessControlPolicy
+    , AccessControlPolicy
+    , accessControlPolicy
+    , acpGrants
+    , acpOwner
+
+    -- ** Bucket
+    , Bucket
+    , bucket
+    , bCreationDate
+    , bName
+
+    -- ** BucketLoggingStatus
+    , BucketLoggingStatus
+    , bucketLoggingStatus
+    , blsLoggingEnabled
+
+    -- ** CORSConfiguration
+    , CORSConfiguration
+    , corsConfiguration
+    , ccCORSRules
+
+    -- ** CORSRule
+    , CORSRule
+    , corsRule
+    , crAllowedMethods
+    , crMaxAgeSeconds
+    , crAllowedHeaders
+    , crAllowedOrigins
+    , crExposeHeaders
+
+    -- ** CommonPrefix
+    , CommonPrefix
+    , commonPrefix
+    , cpPrefix
+
+    -- ** CompletedMultipartUpload
+    , CompletedMultipartUpload
+    , completedMultipartUpload
+    , cmuParts
+
+    -- ** CompletedPart
+    , CompletedPart
+    , completedPart
+    , cpPartNumber
+    , cpETag
+
+    -- ** Condition
+    , Condition
+    , condition
+    , cKeyPrefixEquals
+    , cHTTPErrorCodeReturnedEquals
+
+    -- ** CopyObjectResult
+    , CopyObjectResult
+    , copyObjectResult
+    , corETag
+    , corLastModified
+
+    -- ** CopyPartResult
+    , CopyPartResult
+    , copyPartResult
+    , cprETag
+    , cprLastModified
+
+    -- ** CreateBucketConfiguration
+    , CreateBucketConfiguration
+    , createBucketConfiguration
+    , cbcLocationConstraint
+
+    -- ** Delete
+    , Delete
+    , delete'
+    , dQuiet
+    , dObjects
+
+    -- ** DeleteMarkerEntry
+    , DeleteMarkerEntry
+    , deleteMarkerEntry
+    , dmeVersionId
+    , dmeIsLatest
+    , dmeOwner
+    , dmeKey
+    , dmeLastModified
+
+    -- ** DeletedObject
+    , DeletedObject
+    , deletedObject
+    , dVersionId
+    , dDeleteMarker
+    , dDeleteMarkerVersionId
+    , dKey
+
+    -- ** Destination
+    , Destination
+    , destination
+    , dBucket
+
+    -- ** ErrorDocument
+    , ErrorDocument
+    , errorDocument
+    , edKey
+
+    -- ** Grant
+    , Grant
+    , grant
+    , gPermission
+    , gGrantee
+
+    -- ** Grantee
+    , Grantee
+    , grantee
+    , gURI
+    , gEmailAddress
+    , gId
+    , gDisplayName
+    , gType
+
+    -- ** IndexDocument
+    , IndexDocument
+    , indexDocument
+    , idSuffix
+
+    -- ** Initiator
+    , Initiator
+    , initiator
+    , iId
+    , iDisplayName
+
+    -- ** LambdaFunctionConfiguration
+    , LambdaFunctionConfiguration
+    , lambdaFunctionConfiguration
+    , lfcId
+    , lfcLambdaFunctionARN
+    , lfcEvents
+
+    -- ** LifecycleConfiguration
+    , LifecycleConfiguration
+    , lifecycleConfiguration
+    , lcRules
+
+    -- ** LifecycleExpiration
+    , LifecycleExpiration
+    , lifecycleExpiration
+    , leDays
+    , leDate
+
+    -- ** LoggingEnabled
+    , LoggingEnabled
+    , loggingEnabled
+    , leTargetBucket
+    , leTargetGrants
+    , leTargetPrefix
+
+    -- ** MultipartUpload
+    , MultipartUpload
+    , multipartUpload
+    , muInitiated
+    , muInitiator
+    , muOwner
+    , muKey
+    , muStorageClass
+    , muUploadId
+
+    -- ** NoncurrentVersionExpiration
+    , NoncurrentVersionExpiration
+    , noncurrentVersionExpiration
+    , nveNoncurrentDays
+
+    -- ** NoncurrentVersionTransition
+    , NoncurrentVersionTransition
+    , noncurrentVersionTransition
+    , nvtNoncurrentDays
+    , nvtStorageClass
+
+    -- ** NotificationConfiguration
+    , NotificationConfiguration
+    , notificationConfiguration
+    , ncQueueConfigurations
+    , ncTopicConfigurations
+    , ncLambdaFunctionConfigurations
+
+    -- ** Object
+    , Object
+    , object'
+    , oOwner
+    , oETag
+    , oSize
+    , oKey
+    , oStorageClass
+    , oLastModified
+
+    -- ** ObjectIdentifier
+    , ObjectIdentifier
+    , objectIdentifier
+    , oiVersionId
+    , oiKey
+
+    -- ** ObjectVersion
+    , ObjectVersion
+    , objectVersion
+    , ovVersionId
+    , ovETag
+    , ovSize
+    , ovIsLatest
+    , ovOwner
+    , ovKey
+    , ovStorageClass
+    , ovLastModified
+
+    -- ** Owner
+    , Owner
+    , owner
+    , oId
+    , oDisplayName
+
+    -- ** Part
+    , Part
+    , part
+    , pETag
+    , pSize
+    , pPartNumber
+    , pLastModified
+
+    -- ** QueueConfiguration
+    , QueueConfiguration
+    , queueConfiguration
+    , qcId
+    , qcQueueARN
+    , qcEvents
+
+    -- ** Redirect
+    , Redirect
+    , redirect
+    , rHostName
+    , rProtocol
+    , rHTTPRedirectCode
+    , rReplaceKeyWith
+    , rReplaceKeyPrefixWith
+
+    -- ** RedirectAllRequestsTo
+    , RedirectAllRequestsTo
+    , redirectAllRequestsTo
+    , rartProtocol
+    , rartHostName
+
+    -- ** ReplicationConfiguration
+    , ReplicationConfiguration
+    , replicationConfiguration
+    , rcRole
+    , rcRules
+
+    -- ** ReplicationRule
+    , ReplicationRule
+    , replicationRule
+    , rrId
+    , rrPrefix
+    , rrStatus
+    , rrDestination
+
+    -- ** RequestPaymentConfiguration
+    , RequestPaymentConfiguration
+    , requestPaymentConfiguration
+    , rpcPayer
+
+    -- ** RestoreRequest
+    , RestoreRequest
+    , restoreRequest
+    , rrDays
+
+    -- ** RoutingRule
+    , RoutingRule
+    , routingRule
+    , rrCondition
+    , rrRedirect
+
+    -- ** Rule
+    , Rule
+    , rule
+    , rNoncurrentVersionExpiration
+    , rTransition
+    , rExpiration
+    , rNoncurrentVersionTransition
+    , rId
+    , rPrefix
+    , rStatus
+
+    -- ** S3ServiceError
+    , S3ServiceError
+    , s3ServiceError
+    , sseVersionId
+    , sseKey
+    , sseCode
+    , sseMessage
+
+    -- ** Tag
+    , Tag
+    , tag
+    , tagKey
+    , tagValue
+
+    -- ** Tagging
+    , Tagging
+    , tagging
+    , tTagSet
+
+    -- ** TargetGrant
+    , TargetGrant
+    , targetGrant
+    , tgPermission
+    , tgGrantee
+
+    -- ** TopicConfiguration
+    , TopicConfiguration
+    , topicConfiguration
+    , tcId
+    , tcTopicARN
+    , tcEvents
+
+    -- ** Transition
+    , Transition
+    , transition
+    , tDays
+    , tDate
+    , tStorageClass
+
+    -- ** VersioningConfiguration
+    , VersioningConfiguration
+    , versioningConfiguration
+    , vcStatus
+    , vcMFADelete
+
+    -- ** WebsiteConfiguration
+    , WebsiteConfiguration
+    , websiteConfiguration
+    , wcRedirectAllRequestsTo
+    , wcErrorDocument
+    , wcRoutingRules
+    , wcIndexDocument
     ) where
 
-import Network.AWS.S3.AbortMultipartUpload
-import Network.AWS.S3.CompleteMultipartUpload
-import Network.AWS.S3.CopyObject
-import Network.AWS.S3.CreateBucket
-import Network.AWS.S3.CreateMultipartUpload
-import Network.AWS.S3.DeleteBucket
-import Network.AWS.S3.DeleteBucketCors
-import Network.AWS.S3.DeleteBucketLifecycle
-import Network.AWS.S3.DeleteBucketPolicy
-import Network.AWS.S3.DeleteBucketReplication
-import Network.AWS.S3.DeleteBucketTagging
-import Network.AWS.S3.DeleteBucketWebsite
-import Network.AWS.S3.DeleteObject
-import Network.AWS.S3.DeleteObjects
-import Network.AWS.S3.GetBucketAcl
-import Network.AWS.S3.GetBucketCors
-import Network.AWS.S3.GetBucketLifecycle
-import Network.AWS.S3.GetBucketLocation
-import Network.AWS.S3.GetBucketLogging
-import Network.AWS.S3.GetBucketNotification
-import Network.AWS.S3.GetBucketNotificationConfiguration
-import Network.AWS.S3.GetBucketPolicy
-import Network.AWS.S3.GetBucketReplication
-import Network.AWS.S3.GetBucketRequestPayment
-import Network.AWS.S3.GetBucketTagging
-import Network.AWS.S3.GetBucketVersioning
-import Network.AWS.S3.GetBucketWebsite
-import Network.AWS.S3.GetObject
-import Network.AWS.S3.GetObjectAcl
-import Network.AWS.S3.GetObjectTorrent
-import Network.AWS.S3.HeadBucket
-import Network.AWS.S3.HeadObject
-import Network.AWS.S3.ListBuckets
-import Network.AWS.S3.ListMultipartUploads
-import Network.AWS.S3.ListObjectVersions
-import Network.AWS.S3.ListObjects
-import Network.AWS.S3.ListParts
-import Network.AWS.S3.PutBucketAcl
-import Network.AWS.S3.PutBucketCors
-import Network.AWS.S3.PutBucketLifecycle
-import Network.AWS.S3.PutBucketLogging
-import Network.AWS.S3.PutBucketNotification
-import Network.AWS.S3.PutBucketNotificationConfiguration
-import Network.AWS.S3.PutBucketPolicy
-import Network.AWS.S3.PutBucketReplication
-import Network.AWS.S3.PutBucketRequestPayment
-import Network.AWS.S3.PutBucketTagging
-import Network.AWS.S3.PutBucketVersioning
-import Network.AWS.S3.PutBucketWebsite
-import Network.AWS.S3.PutObject
-import Network.AWS.S3.PutObjectAcl
-import Network.AWS.S3.RestoreObject
-import Network.AWS.S3.Types
-import Network.AWS.S3.UploadPart
-import Network.AWS.S3.UploadPartCopy
-import Network.AWS.S3.Waiters
+import           Network.AWS.S3.AbortMultipartUpload
+import           Network.AWS.S3.CompleteMultipartUpload
+import           Network.AWS.S3.CopyObject
+import           Network.AWS.S3.CreateBucket
+import           Network.AWS.S3.CreateMultipartUpload
+import           Network.AWS.S3.DeleteBucket
+import           Network.AWS.S3.DeleteBucketCORS
+import           Network.AWS.S3.DeleteBucketLifecycle
+import           Network.AWS.S3.DeleteBucketPolicy
+import           Network.AWS.S3.DeleteBucketReplication
+import           Network.AWS.S3.DeleteBucketTagging
+import           Network.AWS.S3.DeleteBucketWebsite
+import           Network.AWS.S3.DeleteObject
+import           Network.AWS.S3.DeleteObjects
+import           Network.AWS.S3.GetBucketACL
+import           Network.AWS.S3.GetBucketCORS
+import           Network.AWS.S3.GetBucketLifecycle
+import           Network.AWS.S3.GetBucketLocation
+import           Network.AWS.S3.GetBucketLogging
+import           Network.AWS.S3.GetBucketNotificationConfiguration
+import           Network.AWS.S3.GetBucketPolicy
+import           Network.AWS.S3.GetBucketReplication
+import           Network.AWS.S3.GetBucketRequestPayment
+import           Network.AWS.S3.GetBucketTagging
+import           Network.AWS.S3.GetBucketVersioning
+import           Network.AWS.S3.GetBucketWebsite
+import           Network.AWS.S3.GetObject
+import           Network.AWS.S3.GetObjectACL
+import           Network.AWS.S3.GetObjectTorrent
+import           Network.AWS.S3.HeadBucket
+import           Network.AWS.S3.HeadObject
+import           Network.AWS.S3.Internal
+import           Network.AWS.S3.ListBuckets
+import           Network.AWS.S3.ListMultipartUploads
+import           Network.AWS.S3.ListObjects
+import           Network.AWS.S3.ListObjectVersions
+import           Network.AWS.S3.ListParts
+import           Network.AWS.S3.PutBucketACL
+import           Network.AWS.S3.PutBucketCORS
+import           Network.AWS.S3.PutBucketLifecycle
+import           Network.AWS.S3.PutBucketLogging
+import           Network.AWS.S3.PutBucketNotificationConfiguration
+import           Network.AWS.S3.PutBucketPolicy
+import           Network.AWS.S3.PutBucketReplication
+import           Network.AWS.S3.PutBucketRequestPayment
+import           Network.AWS.S3.PutBucketTagging
+import           Network.AWS.S3.PutBucketVersioning
+import           Network.AWS.S3.PutBucketWebsite
+import           Network.AWS.S3.PutObject
+import           Network.AWS.S3.PutObjectACL
+import           Network.AWS.S3.RestoreObject
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.UploadPart
+import           Network.AWS.S3.UploadPartCopy
+import           Network.AWS.S3.Waiters
+
+{- $errors
+Error matchers are designed for use with the functions provided by
+<http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+This allows catching (and rethrowing) service specific errors returned
+by 'S3'.
+-}
+
+{- $operations
+Some AWS operations return results that are incomplete and require subsequent
+requests in order to obtain the entire result set. The process of sending
+subsequent requests to continue where a previous request left off is called
+pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+1000 objects at a time, and you must send subsequent requests with the
+appropriate Marker in order to retrieve the next page of results.
+
+Operations that have an 'AWSPager' instance can transparently perform subsequent
+requests, correctly setting Markers and other request facets to iterate through
+the entire result set of a truncated API operation. Operations which support
+this have an additional note in the documentation.
+
+Many operations have the ability to filter results on the server side. See the
+individual operation parameters for details.
+-}
+
+{- $waiters
+Waiters poll by repeatedly sending a request until some remote success condition
+configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+determines how many attempts should be made, in addition to delay and retry strategies.
+-}
diff --git a/gen/Network/AWS/S3/AbortMultipartUpload.hs b/gen/Network/AWS/S3/AbortMultipartUpload.hs
--- a/gen/Network/AWS/S3/AbortMultipartUpload.hs
+++ b/gen/Network/AWS/S3/AbortMultipartUpload.hs
@@ -1,145 +1,153 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.AbortMultipartUpload
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Aborts a multipart upload.
+-- Aborts a multipart upload.
 --
--- To verify that all parts have been removed, so you don't get charged for the
--- part storage, you should call the List Parts operation and ensure the parts
--- list is empty.
+-- To verify that all parts have been removed, so you don\'t get charged
+-- for the part storage, you should call the List Parts operation and
+-- ensure the parts list is empty.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/AbortMultipartUpload.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/AbortMultipartUpload.html AWS API Reference> for AbortMultipartUpload.
 module Network.AWS.S3.AbortMultipartUpload
     (
-    -- * Request
-      AbortMultipartUpload
-    -- ** Request constructor
-    , abortMultipartUpload
-    -- ** Request lenses
+    -- * Creating a Request
+      abortMultipartUpload
+    , AbortMultipartUpload
+    -- * Request Lenses
+    , amuRequestPayer
     , amuBucket
     , amuKey
-    , amuRequestPayer
     , amuUploadId
 
-    -- * Response
-    , AbortMultipartUploadResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , abortMultipartUploadResponse
-    -- ** Response lenses
-    , amurRequestCharged
+    , AbortMultipartUploadResponse
+    -- * Response Lenses
+    , amursRequestCharged
+    , amursStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data AbortMultipartUpload = AbortMultipartUpload
-    { _amuBucket       :: Text
-    , _amuKey          :: Text
-    , _amuRequestPayer :: Maybe RequestPayer
-    , _amuUploadId     :: Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'abortMultipartUpload' smart constructor.
+data AbortMultipartUpload = AbortMultipartUpload'
+    { _amuRequestPayer :: !(Maybe RequestPayer)
+    , _amuBucket       :: !BucketName
+    , _amuKey          :: !ObjectKey
+    , _amuUploadId     :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'AbortMultipartUpload' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'AbortMultipartUpload' with the minimum fields required to make a request.
 --
--- * 'amuBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'amuKey' @::@ 'Text'
+-- * 'amuRequestPayer'
 --
--- * 'amuRequestPayer' @::@ 'Maybe' 'RequestPayer'
+-- * 'amuBucket'
 --
--- * 'amuUploadId' @::@ 'Text'
+-- * 'amuKey'
 --
-abortMultipartUpload :: Text -- ^ 'amuBucket'
-                     -> Text -- ^ 'amuKey'
-                     -> Text -- ^ 'amuUploadId'
-                     -> AbortMultipartUpload
-abortMultipartUpload p1 p2 p3 = AbortMultipartUpload
-    { _amuBucket       = p1
-    , _amuKey          = p2
-    , _amuUploadId     = p3
-    , _amuRequestPayer = Nothing
+-- * 'amuUploadId'
+abortMultipartUpload
+    :: BucketName -- ^ 'amuBucket'
+    -> ObjectKey -- ^ 'amuKey'
+    -> Text -- ^ 'amuUploadId'
+    -> AbortMultipartUpload
+abortMultipartUpload pBucket_ pKey_ pUploadId_ =
+    AbortMultipartUpload'
+    { _amuRequestPayer = Nothing
+    , _amuBucket = pBucket_
+    , _amuKey = pKey_
+    , _amuUploadId = pUploadId_
     }
 
-amuBucket :: Lens' AbortMultipartUpload Text
-amuBucket = lens _amuBucket (\s a -> s { _amuBucket = a })
+-- | Undocumented member.
+amuRequestPayer :: Lens' AbortMultipartUpload (Maybe RequestPayer)
+amuRequestPayer = lens _amuRequestPayer (\ s a -> s{_amuRequestPayer = a});
 
-amuKey :: Lens' AbortMultipartUpload Text
-amuKey = lens _amuKey (\s a -> s { _amuKey = a })
+-- | Undocumented member.
+amuBucket :: Lens' AbortMultipartUpload BucketName
+amuBucket = lens _amuBucket (\ s a -> s{_amuBucket = a});
 
-amuRequestPayer :: Lens' AbortMultipartUpload (Maybe RequestPayer)
-amuRequestPayer = lens _amuRequestPayer (\s a -> s { _amuRequestPayer = a })
+-- | Undocumented member.
+amuKey :: Lens' AbortMultipartUpload ObjectKey
+amuKey = lens _amuKey (\ s a -> s{_amuKey = a});
 
+-- | Undocumented member.
 amuUploadId :: Lens' AbortMultipartUpload Text
-amuUploadId = lens _amuUploadId (\s a -> s { _amuUploadId = a })
-
-newtype AbortMultipartUploadResponse = AbortMultipartUploadResponse
-    { _amurRequestCharged :: Maybe RequestCharged
-    } deriving (Eq, Read, Show)
+amuUploadId = lens _amuUploadId (\ s a -> s{_amuUploadId = a});
 
--- | 'AbortMultipartUploadResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'amurRequestCharged' @::@ 'Maybe' 'RequestCharged'
---
-abortMultipartUploadResponse :: AbortMultipartUploadResponse
-abortMultipartUploadResponse = AbortMultipartUploadResponse
-    { _amurRequestCharged = Nothing
-    }
+instance AWSRequest AbortMultipartUpload where
+        type Sv AbortMultipartUpload = S3
+        type Rs AbortMultipartUpload =
+             AbortMultipartUploadResponse
+        request = delete
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 AbortMultipartUploadResponse' <$>
+                   (h .#? "x-amz-request-charged") <*>
+                     (pure (fromEnum s)))
 
-amurRequestCharged :: Lens' AbortMultipartUploadResponse (Maybe RequestCharged)
-amurRequestCharged =
-    lens _amurRequestCharged (\s a -> s { _amurRequestCharged = a })
+instance ToHeaders AbortMultipartUpload where
+        toHeaders AbortMultipartUpload'{..}
+          = mconcat ["x-amz-request-payer" =# _amuRequestPayer]
 
 instance ToPath AbortMultipartUpload where
-    toPath AbortMultipartUpload{..} = mconcat
-        [ "/"
-        , toText _amuBucket
-        , "/"
-        , toText _amuKey
-        ]
+        toPath AbortMultipartUpload'{..}
+          = mconcat ["/", toBS _amuBucket, "/", toBS _amuKey]
 
 instance ToQuery AbortMultipartUpload where
-    toQuery rq = "uploadId" =? _amuUploadId rq
-
-instance ToHeaders AbortMultipartUpload where
-    toHeaders AbortMultipartUpload{..} = mconcat
-        [ "x-amz-request-payer" =: _amuRequestPayer
-        ]
+        toQuery AbortMultipartUpload'{..}
+          = mconcat ["uploadId" =: _amuUploadId]
 
-instance ToXMLRoot AbortMultipartUpload where
-    toXMLRoot = const (namespaced ns "AbortMultipartUpload" [])
+-- | /See:/ 'abortMultipartUploadResponse' smart constructor.
+data AbortMultipartUploadResponse = AbortMultipartUploadResponse'
+    { _amursRequestCharged :: !(Maybe RequestCharged)
+    , _amursStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToXML AbortMultipartUpload
+-- | Creates a value of 'AbortMultipartUploadResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'amursRequestCharged'
+--
+-- * 'amursStatus'
+abortMultipartUploadResponse
+    :: Int -- ^ 'amursStatus'
+    -> AbortMultipartUploadResponse
+abortMultipartUploadResponse pStatus_ =
+    AbortMultipartUploadResponse'
+    { _amursRequestCharged = Nothing
+    , _amursStatus = pStatus_
+    }
 
-instance AWSRequest AbortMultipartUpload where
-    type Sv AbortMultipartUpload = S3
-    type Rs AbortMultipartUpload = AbortMultipartUploadResponse
+-- | Undocumented member.
+amursRequestCharged :: Lens' AbortMultipartUploadResponse (Maybe RequestCharged)
+amursRequestCharged = lens _amursRequestCharged (\ s a -> s{_amursRequestCharged = a});
 
-    request  = delete
-    response = headerResponse $ \h -> AbortMultipartUploadResponse
-        <$> h ~:? "x-amz-request-charged"
+-- | The response status code.
+amursStatus :: Lens' AbortMultipartUploadResponse Int
+amursStatus = lens _amursStatus (\ s a -> s{_amursStatus = a});
diff --git a/gen/Network/AWS/S3/CompleteMultipartUpload.hs b/gen/Network/AWS/S3/CompleteMultipartUpload.hs
--- a/gen/Network/AWS/S3/CompleteMultipartUpload.hs
+++ b/gen/Network/AWS/S3/CompleteMultipartUpload.hs
@@ -1,232 +1,249 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.CompleteMultipartUpload
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Completes a multipart upload by assembling previously uploaded parts.
+-- Completes a multipart upload by assembling previously uploaded parts.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/CompleteMultipartUpload.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/CompleteMultipartUpload.html AWS API Reference> for CompleteMultipartUpload.
 module Network.AWS.S3.CompleteMultipartUpload
     (
-    -- * Request
-      CompleteMultipartUpload
-    -- ** Request constructor
-    , completeMultipartUpload
-    -- ** Request lenses
-    , cmu1Bucket
-    , cmu1Key
-    , cmu1MultipartUpload
-    , cmu1RequestPayer
-    , cmu1UploadId
+    -- * Creating a Request
+      completeMultipartUpload
+    , CompleteMultipartUpload
+    -- * Request Lenses
+    , cRequestPayer
+    , cMultipartUpload
+    , cBucket
+    , cKey
+    , cUploadId
 
-    -- * Response
-    , CompleteMultipartUploadResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , completeMultipartUploadResponse
-    -- ** Response lenses
-    , cmur1Bucket
-    , cmur1ETag
-    , cmur1Expiration
-    , cmur1Key
-    , cmur1Location
-    , cmur1RequestCharged
-    , cmur1SSEKMSKeyId
-    , cmur1ServerSideEncryption
-    , cmur1VersionId
+    , CompleteMultipartUploadResponse
+    -- * Response Lenses
+    , crsVersionId
+    , crsETag
+    , crsRequestCharged
+    , crsLocation
+    , crsExpiration
+    , crsBucket
+    , crsKey
+    , crsSSEKMSKeyId
+    , crsServerSideEncryption
+    , crsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data CompleteMultipartUpload = CompleteMultipartUpload
-    { _cmu1Bucket          :: Text
-    , _cmu1Key             :: Text
-    , _cmu1MultipartUpload :: Maybe CompletedMultipartUpload
-    , _cmu1RequestPayer    :: Maybe RequestPayer
-    , _cmu1UploadId        :: Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'completeMultipartUpload' smart constructor.
+data CompleteMultipartUpload = CompleteMultipartUpload'
+    { _cRequestPayer    :: !(Maybe RequestPayer)
+    , _cMultipartUpload :: !(Maybe CompletedMultipartUpload)
+    , _cBucket          :: !BucketName
+    , _cKey             :: !ObjectKey
+    , _cUploadId        :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CompleteMultipartUpload' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CompleteMultipartUpload' with the minimum fields required to make a request.
 --
--- * 'cmu1Bucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cmu1Key' @::@ 'Text'
+-- * 'cRequestPayer'
 --
--- * 'cmu1MultipartUpload' @::@ 'Maybe' 'CompletedMultipartUpload'
+-- * 'cMultipartUpload'
 --
--- * 'cmu1RequestPayer' @::@ 'Maybe' 'RequestPayer'
+-- * 'cBucket'
 --
--- * 'cmu1UploadId' @::@ 'Text'
+-- * 'cKey'
 --
-completeMultipartUpload :: Text -- ^ 'cmu1Bucket'
-                        -> Text -- ^ 'cmu1Key'
-                        -> Text -- ^ 'cmu1UploadId'
-                        -> CompleteMultipartUpload
-completeMultipartUpload p1 p2 p3 = CompleteMultipartUpload
-    { _cmu1Bucket          = p1
-    , _cmu1Key             = p2
-    , _cmu1UploadId        = p3
-    , _cmu1MultipartUpload = Nothing
-    , _cmu1RequestPayer    = Nothing
+-- * 'cUploadId'
+completeMultipartUpload
+    :: BucketName -- ^ 'cBucket'
+    -> ObjectKey -- ^ 'cKey'
+    -> Text -- ^ 'cUploadId'
+    -> CompleteMultipartUpload
+completeMultipartUpload pBucket_ pKey_ pUploadId_ =
+    CompleteMultipartUpload'
+    { _cRequestPayer = Nothing
+    , _cMultipartUpload = Nothing
+    , _cBucket = pBucket_
+    , _cKey = pKey_
+    , _cUploadId = pUploadId_
     }
 
-cmu1Bucket :: Lens' CompleteMultipartUpload Text
-cmu1Bucket = lens _cmu1Bucket (\s a -> s { _cmu1Bucket = a })
+-- | Undocumented member.
+cRequestPayer :: Lens' CompleteMultipartUpload (Maybe RequestPayer)
+cRequestPayer = lens _cRequestPayer (\ s a -> s{_cRequestPayer = a});
 
-cmu1Key :: Lens' CompleteMultipartUpload Text
-cmu1Key = lens _cmu1Key (\s a -> s { _cmu1Key = a })
+-- | Undocumented member.
+cMultipartUpload :: Lens' CompleteMultipartUpload (Maybe CompletedMultipartUpload)
+cMultipartUpload = lens _cMultipartUpload (\ s a -> s{_cMultipartUpload = a});
 
-cmu1MultipartUpload :: Lens' CompleteMultipartUpload (Maybe CompletedMultipartUpload)
-cmu1MultipartUpload =
-    lens _cmu1MultipartUpload (\s a -> s { _cmu1MultipartUpload = a })
+-- | Undocumented member.
+cBucket :: Lens' CompleteMultipartUpload BucketName
+cBucket = lens _cBucket (\ s a -> s{_cBucket = a});
 
-cmu1RequestPayer :: Lens' CompleteMultipartUpload (Maybe RequestPayer)
-cmu1RequestPayer = lens _cmu1RequestPayer (\s a -> s { _cmu1RequestPayer = a })
+-- | Undocumented member.
+cKey :: Lens' CompleteMultipartUpload ObjectKey
+cKey = lens _cKey (\ s a -> s{_cKey = a});
 
-cmu1UploadId :: Lens' CompleteMultipartUpload Text
-cmu1UploadId = lens _cmu1UploadId (\s a -> s { _cmu1UploadId = a })
+-- | Undocumented member.
+cUploadId :: Lens' CompleteMultipartUpload Text
+cUploadId = lens _cUploadId (\ s a -> s{_cUploadId = a});
 
-data CompleteMultipartUploadResponse = CompleteMultipartUploadResponse
-    { _cmur1Bucket               :: Maybe Text
-    , _cmur1ETag                 :: Maybe Text
-    , _cmur1Expiration           :: Maybe Text
-    , _cmur1Key                  :: Maybe Text
-    , _cmur1Location             :: Maybe Text
-    , _cmur1RequestCharged       :: Maybe RequestCharged
-    , _cmur1SSEKMSKeyId          :: Maybe (Sensitive Text)
-    , _cmur1ServerSideEncryption :: Maybe ServerSideEncryption
-    , _cmur1VersionId            :: Maybe Text
-    } deriving (Eq, Read, Show)
+instance AWSRequest CompleteMultipartUpload where
+        type Sv CompleteMultipartUpload = S3
+        type Rs CompleteMultipartUpload =
+             CompleteMultipartUploadResponse
+        request = postXML
+        response
+          = receiveXML
+              (\ s h x ->
+                 CompleteMultipartUploadResponse' <$>
+                   (h .#? "x-amz-version-id") <*> (x .@? "ETag") <*>
+                     (h .#? "x-amz-request-charged")
+                     <*> (x .@? "Location")
+                     <*> (h .#? "x-amz-expiration")
+                     <*> (x .@? "Bucket")
+                     <*> (x .@? "Key")
+                     <*>
+                     (h .#? "x-amz-server-side-encryption-aws-kms-key-id")
+                     <*> (h .#? "x-amz-server-side-encryption")
+                     <*> (pure (fromEnum s)))
 
--- | 'CompleteMultipartUploadResponse' constructor.
+instance ToElement CompleteMultipartUpload where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}CompleteMultipartUpload"
+              .
+              _cMultipartUpload
+
+instance ToHeaders CompleteMultipartUpload where
+        toHeaders CompleteMultipartUpload'{..}
+          = mconcat ["x-amz-request-payer" =# _cRequestPayer]
+
+instance ToPath CompleteMultipartUpload where
+        toPath CompleteMultipartUpload'{..}
+          = mconcat ["/", toBS _cBucket, "/", toBS _cKey]
+
+instance ToQuery CompleteMultipartUpload where
+        toQuery CompleteMultipartUpload'{..}
+          = mconcat ["uploadId" =: _cUploadId]
+
+-- | /See:/ 'completeMultipartUploadResponse' smart constructor.
+data CompleteMultipartUploadResponse = CompleteMultipartUploadResponse'
+    { _crsVersionId            :: !(Maybe ObjectVersionId)
+    , _crsETag                 :: !(Maybe ETag)
+    , _crsRequestCharged       :: !(Maybe RequestCharged)
+    , _crsLocation             :: !(Maybe Text)
+    , _crsExpiration           :: !(Maybe Text)
+    , _crsBucket               :: !(Maybe BucketName)
+    , _crsKey                  :: !(Maybe ObjectKey)
+    , _crsSSEKMSKeyId          :: !(Maybe (Sensitive Text))
+    , _crsServerSideEncryption :: !(Maybe ServerSideEncryption)
+    , _crsStatus               :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CompleteMultipartUploadResponse' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cmur1Bucket' @::@ 'Maybe' 'Text'
+-- * 'crsVersionId'
 --
--- * 'cmur1ETag' @::@ 'Maybe' 'Text'
+-- * 'crsETag'
 --
--- * 'cmur1Expiration' @::@ 'Maybe' 'Text'
+-- * 'crsRequestCharged'
 --
--- * 'cmur1Key' @::@ 'Maybe' 'Text'
+-- * 'crsLocation'
 --
--- * 'cmur1Location' @::@ 'Maybe' 'Text'
+-- * 'crsExpiration'
 --
--- * 'cmur1RequestCharged' @::@ 'Maybe' 'RequestCharged'
+-- * 'crsBucket'
 --
--- * 'cmur1SSEKMSKeyId' @::@ 'Maybe' 'Text'
+-- * 'crsKey'
 --
--- * 'cmur1ServerSideEncryption' @::@ 'Maybe' 'ServerSideEncryption'
+-- * 'crsSSEKMSKeyId'
 --
--- * 'cmur1VersionId' @::@ 'Maybe' 'Text'
+-- * 'crsServerSideEncryption'
 --
-completeMultipartUploadResponse :: CompleteMultipartUploadResponse
-completeMultipartUploadResponse = CompleteMultipartUploadResponse
-    { _cmur1Location             = Nothing
-    , _cmur1Bucket               = Nothing
-    , _cmur1Key                  = Nothing
-    , _cmur1Expiration           = Nothing
-    , _cmur1ETag                 = Nothing
-    , _cmur1ServerSideEncryption = Nothing
-    , _cmur1VersionId            = Nothing
-    , _cmur1SSEKMSKeyId          = Nothing
-    , _cmur1RequestCharged       = Nothing
+-- * 'crsStatus'
+completeMultipartUploadResponse
+    :: Int -- ^ 'crsStatus'
+    -> CompleteMultipartUploadResponse
+completeMultipartUploadResponse pStatus_ =
+    CompleteMultipartUploadResponse'
+    { _crsVersionId = Nothing
+    , _crsETag = Nothing
+    , _crsRequestCharged = Nothing
+    , _crsLocation = Nothing
+    , _crsExpiration = Nothing
+    , _crsBucket = Nothing
+    , _crsKey = Nothing
+    , _crsSSEKMSKeyId = Nothing
+    , _crsServerSideEncryption = Nothing
+    , _crsStatus = pStatus_
     }
 
-cmur1Bucket :: Lens' CompleteMultipartUploadResponse (Maybe Text)
-cmur1Bucket = lens _cmur1Bucket (\s a -> s { _cmur1Bucket = a })
+-- | Version of the object.
+crsVersionId :: Lens' CompleteMultipartUploadResponse (Maybe ObjectVersionId)
+crsVersionId = lens _crsVersionId (\ s a -> s{_crsVersionId = a});
 
 -- | Entity tag of the object.
-cmur1ETag :: Lens' CompleteMultipartUploadResponse (Maybe Text)
-cmur1ETag = lens _cmur1ETag (\s a -> s { _cmur1ETag = a })
+crsETag :: Lens' CompleteMultipartUploadResponse (Maybe ETag)
+crsETag = lens _crsETag (\ s a -> s{_crsETag = a});
 
--- | If the object expiration is configured, this will contain the expiration date
--- (expiry-date) and rule ID (rule-id). The value of rule-id is URL encoded.
-cmur1Expiration :: Lens' CompleteMultipartUploadResponse (Maybe Text)
-cmur1Expiration = lens _cmur1Expiration (\s a -> s { _cmur1Expiration = a })
+-- | Undocumented member.
+crsRequestCharged :: Lens' CompleteMultipartUploadResponse (Maybe RequestCharged)
+crsRequestCharged = lens _crsRequestCharged (\ s a -> s{_crsRequestCharged = a});
 
-cmur1Key :: Lens' CompleteMultipartUploadResponse (Maybe Text)
-cmur1Key = lens _cmur1Key (\s a -> s { _cmur1Key = a })
+-- | Undocumented member.
+crsLocation :: Lens' CompleteMultipartUploadResponse (Maybe Text)
+crsLocation = lens _crsLocation (\ s a -> s{_crsLocation = a});
 
-cmur1Location :: Lens' CompleteMultipartUploadResponse (Maybe Text)
-cmur1Location = lens _cmur1Location (\s a -> s { _cmur1Location = a })
+-- | If the object expiration is configured, this will contain the expiration
+-- date (expiry-date) and rule ID (rule-id). The value of rule-id is URL
+-- encoded.
+crsExpiration :: Lens' CompleteMultipartUploadResponse (Maybe Text)
+crsExpiration = lens _crsExpiration (\ s a -> s{_crsExpiration = a});
 
-cmur1RequestCharged :: Lens' CompleteMultipartUploadResponse (Maybe RequestCharged)
-cmur1RequestCharged =
-    lens _cmur1RequestCharged (\s a -> s { _cmur1RequestCharged = a })
+-- | Undocumented member.
+crsBucket :: Lens' CompleteMultipartUploadResponse (Maybe BucketName)
+crsBucket = lens _crsBucket (\ s a -> s{_crsBucket = a});
 
--- | If present, specifies the ID of the AWS Key Management Service (KMS) master
--- encryption key that was used for the object.
-cmur1SSEKMSKeyId :: Lens' CompleteMultipartUploadResponse (Maybe Text)
-cmur1SSEKMSKeyId = lens _cmur1SSEKMSKeyId (\s a -> s { _cmur1SSEKMSKeyId = a }) . mapping _Sensitive
+-- | Undocumented member.
+crsKey :: Lens' CompleteMultipartUploadResponse (Maybe ObjectKey)
+crsKey = lens _crsKey (\ s a -> s{_crsKey = a});
 
+-- | If present, specifies the ID of the AWS Key Management Service (KMS)
+-- master encryption key that was used for the object.
+crsSSEKMSKeyId :: Lens' CompleteMultipartUploadResponse (Maybe Text)
+crsSSEKMSKeyId = lens _crsSSEKMSKeyId (\ s a -> s{_crsSSEKMSKeyId = a}) . mapping _Sensitive;
+
 -- | The Server-side encryption algorithm used when storing this object in S3
 -- (e.g., AES256, aws:kms).
-cmur1ServerSideEncryption :: Lens' CompleteMultipartUploadResponse (Maybe ServerSideEncryption)
-cmur1ServerSideEncryption =
-    lens _cmur1ServerSideEncryption
-        (\s a -> s { _cmur1ServerSideEncryption = a })
-
--- | Version of the object.
-cmur1VersionId :: Lens' CompleteMultipartUploadResponse (Maybe Text)
-cmur1VersionId = lens _cmur1VersionId (\s a -> s { _cmur1VersionId = a })
-
-instance ToPath CompleteMultipartUpload where
-    toPath CompleteMultipartUpload{..} = mconcat
-        [ "/"
-        , toText _cmu1Bucket
-        , "/"
-        , toText _cmu1Key
-        ]
-
-instance ToQuery CompleteMultipartUpload where
-    toQuery rq = "uploadId" =? _cmu1UploadId rq
-
-instance ToHeaders CompleteMultipartUpload where
-    toHeaders CompleteMultipartUpload{..} = mconcat
-        [ "x-amz-request-payer" =: _cmu1RequestPayer
-        ]
-
-instance ToXMLRoot CompleteMultipartUpload where
-    toXMLRoot = extractRoot ns . toXML . _cmu1MultipartUpload
-
-instance ToXML CompleteMultipartUpload
-
-instance AWSRequest CompleteMultipartUpload where
-    type Sv CompleteMultipartUpload = S3
-    type Rs CompleteMultipartUpload = CompleteMultipartUploadResponse
+crsServerSideEncryption :: Lens' CompleteMultipartUploadResponse (Maybe ServerSideEncryption)
+crsServerSideEncryption = lens _crsServerSideEncryption (\ s a -> s{_crsServerSideEncryption = a});
 
-    request  = post
-    response = xmlHeaderResponse $ \h x -> CompleteMultipartUploadResponse
-        <$> x .@? "Bucket"
-        <*> x .@? "ETag"
-        <*> h ~:? "x-amz-expiration"
-        <*> x .@? "Key"
-        <*> x .@? "Location"
-        <*> h ~:? "x-amz-request-charged"
-        <*> h ~:? "x-amz-server-side-encryption-aws-kms-key-id"
-        <*> h ~:? "x-amz-server-side-encryption"
-        <*> h ~:? "x-amz-version-id"
+-- | The response status code.
+crsStatus :: Lens' CompleteMultipartUploadResponse Int
+crsStatus = lens _crsStatus (\ s a -> s{_crsStatus = a});
diff --git a/gen/Network/AWS/S3/CopyObject.hs b/gen/Network/AWS/S3/CopyObject.hs
--- a/gen/Network/AWS/S3/CopyObject.hs
+++ b/gen/Network/AWS/S3/CopyObject.hs
@@ -1,541 +1,538 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.CopyObject
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Creates a copy of an object that is already stored in Amazon S3.
+-- Creates a copy of an object that is already stored in Amazon S3.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/CopyObject.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/CopyObject.html AWS API Reference> for CopyObject.
 module Network.AWS.S3.CopyObject
     (
-    -- * Request
-      CopyObject
-    -- ** Request constructor
-    , copyObject
-    -- ** Request lenses
-    , coACL
-    , coBucket
-    , coCacheControl
-    , coContentDisposition
-    , coContentEncoding
-    , coContentLanguage
-    , coContentType
-    , coCopySource
-    , coCopySourceIfMatch
+    -- * Creating a Request
+      copyObject
+    , CopyObject
+    -- * Request Lenses
     , coCopySourceIfModifiedSince
-    , coCopySourceIfNoneMatch
     , coCopySourceIfUnmodifiedSince
-    , coCopySourceSSECustomerAlgorithm
-    , coCopySourceSSECustomerKey
     , coCopySourceSSECustomerKeyMD5
-    , coExpires
-    , coGrantFullControl
-    , coGrantRead
-    , coGrantReadACP
-    , coGrantWriteACP
-    , coKey
-    , coMetadata
     , coMetadataDirective
-    , coRequestPayer
+    , coExpires
     , coSSECustomerAlgorithm
+    , coCopySourceIfNoneMatch
+    , coGrantReadACP
     , coSSECustomerKey
-    , coSSECustomerKeyMD5
+    , coRequestPayer
+    , coGrantWriteACP
+    , coWebsiteRedirectLocation
+    , coCopySourceIfMatch
+    , coGrantRead
+    , coStorageClass
+    , coContentEncoding
     , coSSEKMSKeyId
+    , coGrantFullControl
+    , coSSECustomerKeyMD5
+    , coMetadata
+    , coCacheControl
+    , coContentLanguage
+    , coACL
+    , coCopySourceSSECustomerKey
+    , coContentDisposition
+    , coCopySourceSSECustomerAlgorithm
     , coServerSideEncryption
-    , coStorageClass
-    , coWebsiteRedirectLocation
+    , coContentType
+    , coBucket
+    , coCopySource
+    , coKey
 
-    -- * Response
-    , CopyObjectResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , copyObjectResponse
-    -- ** Response lenses
-    , corCopyObjectResult
-    , corCopySourceVersionId
-    , corExpiration
-    , corRequestCharged
-    , corSSECustomerAlgorithm
-    , corSSECustomerKeyMD5
-    , corSSEKMSKeyId
-    , corServerSideEncryption
+    , CopyObjectResponse
+    -- * Response Lenses
+    , corsRequestCharged
+    , corsExpiration
+    , corsSSECustomerAlgorithm
+    , corsCopySourceVersionId
+    , corsSSEKMSKeyId
+    , corsSSECustomerKeyMD5
+    , corsServerSideEncryption
+    , corsCopyObjectResult
+    , corsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data CopyObject = CopyObject
-    { _coACL                            :: Maybe ObjectCannedACL
-    , _coBucket                         :: Text
-    , _coCacheControl                   :: Maybe Text
-    , _coContentDisposition             :: Maybe Text
-    , _coContentEncoding                :: Maybe Text
-    , _coContentLanguage                :: Maybe Text
-    , _coContentType                    :: Maybe Text
-    , _coCopySource                     :: Text
-    , _coCopySourceIfMatch              :: Maybe Text
-    , _coCopySourceIfModifiedSince      :: Maybe RFC822
-    , _coCopySourceIfNoneMatch          :: Maybe Text
-    , _coCopySourceIfUnmodifiedSince    :: Maybe RFC822
-    , _coCopySourceSSECustomerAlgorithm :: Maybe Text
-    , _coCopySourceSSECustomerKey       :: Maybe (Sensitive Text)
-    , _coCopySourceSSECustomerKeyMD5    :: Maybe Text
-    , _coExpires                        :: Maybe RFC822
-    , _coGrantFullControl               :: Maybe Text
-    , _coGrantRead                      :: Maybe Text
-    , _coGrantReadACP                   :: Maybe Text
-    , _coGrantWriteACP                  :: Maybe Text
-    , _coKey                            :: Text
-    , _coMetadata                       :: Map (CI Text) Text
-    , _coMetadataDirective              :: Maybe MetadataDirective
-    , _coRequestPayer                   :: Maybe RequestPayer
-    , _coSSECustomerAlgorithm           :: Maybe Text
-    , _coSSECustomerKey                 :: Maybe (Sensitive Text)
-    , _coSSECustomerKeyMD5              :: Maybe Text
-    , _coSSEKMSKeyId                    :: Maybe (Sensitive Text)
-    , _coServerSideEncryption           :: Maybe ServerSideEncryption
-    , _coStorageClass                   :: Maybe StorageClass
-    , _coWebsiteRedirectLocation        :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'copyObject' smart constructor.
+data CopyObject = CopyObject'
+    { _coCopySourceIfModifiedSince      :: !(Maybe RFC822)
+    , _coCopySourceIfUnmodifiedSince    :: !(Maybe RFC822)
+    , _coCopySourceSSECustomerKeyMD5    :: !(Maybe Text)
+    , _coMetadataDirective              :: !(Maybe MetadataDirective)
+    , _coExpires                        :: !(Maybe RFC822)
+    , _coSSECustomerAlgorithm           :: !(Maybe Text)
+    , _coCopySourceIfNoneMatch          :: !(Maybe Text)
+    , _coGrantReadACP                   :: !(Maybe Text)
+    , _coSSECustomerKey                 :: !(Maybe (Sensitive Text))
+    , _coRequestPayer                   :: !(Maybe RequestPayer)
+    , _coGrantWriteACP                  :: !(Maybe Text)
+    , _coWebsiteRedirectLocation        :: !(Maybe Text)
+    , _coCopySourceIfMatch              :: !(Maybe Text)
+    , _coGrantRead                      :: !(Maybe Text)
+    , _coStorageClass                   :: !(Maybe StorageClass)
+    , _coContentEncoding                :: !(Maybe Text)
+    , _coSSEKMSKeyId                    :: !(Maybe (Sensitive Text))
+    , _coGrantFullControl               :: !(Maybe Text)
+    , _coSSECustomerKeyMD5              :: !(Maybe Text)
+    , _coMetadata                       :: !(Map Text Text)
+    , _coCacheControl                   :: !(Maybe Text)
+    , _coContentLanguage                :: !(Maybe Text)
+    , _coACL                            :: !(Maybe ObjectCannedACL)
+    , _coCopySourceSSECustomerKey       :: !(Maybe (Sensitive Text))
+    , _coContentDisposition             :: !(Maybe Text)
+    , _coCopySourceSSECustomerAlgorithm :: !(Maybe Text)
+    , _coServerSideEncryption           :: !(Maybe ServerSideEncryption)
+    , _coContentType                    :: !(Maybe Text)
+    , _coBucket                         :: !BucketName
+    , _coCopySource                     :: !Text
+    , _coKey                            :: !ObjectKey
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CopyObject' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CopyObject' with the minimum fields required to make a request.
 --
--- * 'coACL' @::@ 'Maybe' 'ObjectCannedACL'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'coBucket' @::@ 'Text'
+-- * 'coCopySourceIfModifiedSince'
 --
--- * 'coCacheControl' @::@ 'Maybe' 'Text'
+-- * 'coCopySourceIfUnmodifiedSince'
 --
--- * 'coContentDisposition' @::@ 'Maybe' 'Text'
+-- * 'coCopySourceSSECustomerKeyMD5'
 --
--- * 'coContentEncoding' @::@ 'Maybe' 'Text'
+-- * 'coMetadataDirective'
 --
--- * 'coContentLanguage' @::@ 'Maybe' 'Text'
+-- * 'coExpires'
 --
--- * 'coContentType' @::@ 'Maybe' 'Text'
+-- * 'coSSECustomerAlgorithm'
 --
--- * 'coCopySource' @::@ 'Text'
+-- * 'coCopySourceIfNoneMatch'
 --
--- * 'coCopySourceIfMatch' @::@ 'Maybe' 'Text'
+-- * 'coGrantReadACP'
 --
--- * 'coCopySourceIfModifiedSince' @::@ 'Maybe' 'UTCTime'
+-- * 'coSSECustomerKey'
 --
--- * 'coCopySourceIfNoneMatch' @::@ 'Maybe' 'Text'
+-- * 'coRequestPayer'
 --
--- * 'coCopySourceIfUnmodifiedSince' @::@ 'Maybe' 'UTCTime'
+-- * 'coGrantWriteACP'
 --
--- * 'coCopySourceSSECustomerAlgorithm' @::@ 'Maybe' 'Text'
+-- * 'coWebsiteRedirectLocation'
 --
--- * 'coCopySourceSSECustomerKey' @::@ 'Maybe' 'Text'
+-- * 'coCopySourceIfMatch'
 --
--- * 'coCopySourceSSECustomerKeyMD5' @::@ 'Maybe' 'Text'
+-- * 'coGrantRead'
 --
--- * 'coExpires' @::@ 'Maybe' 'UTCTime'
+-- * 'coStorageClass'
 --
--- * 'coGrantFullControl' @::@ 'Maybe' 'Text'
+-- * 'coContentEncoding'
 --
--- * 'coGrantRead' @::@ 'Maybe' 'Text'
+-- * 'coSSEKMSKeyId'
 --
--- * 'coGrantReadACP' @::@ 'Maybe' 'Text'
+-- * 'coGrantFullControl'
 --
--- * 'coGrantWriteACP' @::@ 'Maybe' 'Text'
+-- * 'coSSECustomerKeyMD5'
 --
--- * 'coKey' @::@ 'Text'
+-- * 'coMetadata'
 --
--- * 'coMetadata' @::@ 'HashMap' ('CI' 'Text') 'Text'
+-- * 'coCacheControl'
 --
--- * 'coMetadataDirective' @::@ 'Maybe' 'MetadataDirective'
+-- * 'coContentLanguage'
 --
--- * 'coRequestPayer' @::@ 'Maybe' 'RequestPayer'
+-- * 'coACL'
 --
--- * 'coSSECustomerAlgorithm' @::@ 'Maybe' 'Text'
+-- * 'coCopySourceSSECustomerKey'
 --
--- * 'coSSECustomerKey' @::@ 'Maybe' 'Text'
+-- * 'coContentDisposition'
 --
--- * 'coSSECustomerKeyMD5' @::@ 'Maybe' 'Text'
+-- * 'coCopySourceSSECustomerAlgorithm'
 --
--- * 'coSSEKMSKeyId' @::@ 'Maybe' 'Text'
+-- * 'coServerSideEncryption'
 --
--- * 'coServerSideEncryption' @::@ 'Maybe' 'ServerSideEncryption'
+-- * 'coContentType'
 --
--- * 'coStorageClass' @::@ 'Maybe' 'StorageClass'
+-- * 'coBucket'
 --
--- * 'coWebsiteRedirectLocation' @::@ 'Maybe' 'Text'
+-- * 'coCopySource'
 --
-copyObject :: Text -- ^ 'coBucket'
-           -> Text -- ^ 'coCopySource'
-           -> Text -- ^ 'coKey'
-           -> CopyObject
-copyObject p1 p2 p3 = CopyObject
-    { _coBucket                         = p1
-    , _coCopySource                     = p2
-    , _coKey                            = p3
-    , _coACL                            = Nothing
-    , _coCacheControl                   = Nothing
-    , _coContentDisposition             = Nothing
-    , _coContentEncoding                = Nothing
-    , _coContentLanguage                = Nothing
-    , _coContentType                    = Nothing
-    , _coCopySourceIfMatch              = Nothing
-    , _coCopySourceIfModifiedSince      = Nothing
-    , _coCopySourceIfNoneMatch          = Nothing
-    , _coCopySourceIfUnmodifiedSince    = Nothing
-    , _coExpires                        = Nothing
-    , _coGrantFullControl               = Nothing
-    , _coGrantRead                      = Nothing
-    , _coGrantReadACP                   = Nothing
-    , _coGrantWriteACP                  = Nothing
-    , _coMetadata                       = mempty
-    , _coMetadataDirective              = Nothing
-    , _coServerSideEncryption           = Nothing
-    , _coStorageClass                   = Nothing
-    , _coWebsiteRedirectLocation        = Nothing
-    , _coSSECustomerAlgorithm           = Nothing
-    , _coSSECustomerKey                 = Nothing
-    , _coSSECustomerKeyMD5              = Nothing
-    , _coSSEKMSKeyId                    = Nothing
+-- * 'coKey'
+copyObject
+    :: BucketName -- ^ 'coBucket'
+    -> Text -- ^ 'coCopySource'
+    -> ObjectKey -- ^ 'coKey'
+    -> CopyObject
+copyObject pBucket_ pCopySource_ pKey_ =
+    CopyObject'
+    { _coCopySourceIfModifiedSince = Nothing
+    , _coCopySourceIfUnmodifiedSince = Nothing
+    , _coCopySourceSSECustomerKeyMD5 = Nothing
+    , _coMetadataDirective = Nothing
+    , _coExpires = Nothing
+    , _coSSECustomerAlgorithm = Nothing
+    , _coCopySourceIfNoneMatch = Nothing
+    , _coGrantReadACP = Nothing
+    , _coSSECustomerKey = Nothing
+    , _coRequestPayer = Nothing
+    , _coGrantWriteACP = Nothing
+    , _coWebsiteRedirectLocation = Nothing
+    , _coCopySourceIfMatch = Nothing
+    , _coGrantRead = Nothing
+    , _coStorageClass = Nothing
+    , _coContentEncoding = Nothing
+    , _coSSEKMSKeyId = Nothing
+    , _coGrantFullControl = Nothing
+    , _coSSECustomerKeyMD5 = Nothing
+    , _coMetadata = mempty
+    , _coCacheControl = Nothing
+    , _coContentLanguage = Nothing
+    , _coACL = Nothing
+    , _coCopySourceSSECustomerKey = Nothing
+    , _coContentDisposition = Nothing
     , _coCopySourceSSECustomerAlgorithm = Nothing
-    , _coCopySourceSSECustomerKey       = Nothing
-    , _coCopySourceSSECustomerKeyMD5    = Nothing
-    , _coRequestPayer                   = Nothing
+    , _coServerSideEncryption = Nothing
+    , _coContentType = Nothing
+    , _coBucket = pBucket_
+    , _coCopySource = pCopySource_
+    , _coKey = pKey_
     }
 
--- | The canned ACL to apply to the object.
-coACL :: Lens' CopyObject (Maybe ObjectCannedACL)
-coACL = lens _coACL (\s a -> s { _coACL = a })
-
-coBucket :: Lens' CopyObject Text
-coBucket = lens _coBucket (\s a -> s { _coBucket = a })
-
--- | Specifies caching behavior along the request/reply chain.
-coCacheControl :: Lens' CopyObject (Maybe Text)
-coCacheControl = lens _coCacheControl (\s a -> s { _coCacheControl = a })
-
--- | Specifies presentational information for the object.
-coContentDisposition :: Lens' CopyObject (Maybe Text)
-coContentDisposition =
-    lens _coContentDisposition (\s a -> s { _coContentDisposition = a })
-
--- | Specifies what content encodings have been applied to the object and thus
--- what decoding mechanisms must be applied to obtain the media-type referenced
--- by the Content-Type header field.
-coContentEncoding :: Lens' CopyObject (Maybe Text)
-coContentEncoding =
-    lens _coContentEncoding (\s a -> s { _coContentEncoding = a })
+-- | Copies the object if it has been modified since the specified time.
+coCopySourceIfModifiedSince :: Lens' CopyObject (Maybe UTCTime)
+coCopySourceIfModifiedSince = lens _coCopySourceIfModifiedSince (\ s a -> s{_coCopySourceIfModifiedSince = a}) . mapping _Time;
 
--- | The language the content is in.
-coContentLanguage :: Lens' CopyObject (Maybe Text)
-coContentLanguage =
-    lens _coContentLanguage (\s a -> s { _coContentLanguage = a })
+-- | Copies the object if it hasn\'t been modified since the specified time.
+coCopySourceIfUnmodifiedSince :: Lens' CopyObject (Maybe UTCTime)
+coCopySourceIfUnmodifiedSince = lens _coCopySourceIfUnmodifiedSince (\ s a -> s{_coCopySourceIfUnmodifiedSince = a}) . mapping _Time;
 
--- | A standard MIME type describing the format of the object data.
-coContentType :: Lens' CopyObject (Maybe Text)
-coContentType = lens _coContentType (\s a -> s { _coContentType = a })
+-- | Specifies the 128-bit MD5 digest of the encryption key according to RFC
+-- 1321. Amazon S3 uses this header for a message integrity check to ensure
+-- the encryption key was transmitted without error.
+coCopySourceSSECustomerKeyMD5 :: Lens' CopyObject (Maybe Text)
+coCopySourceSSECustomerKeyMD5 = lens _coCopySourceSSECustomerKeyMD5 (\ s a -> s{_coCopySourceSSECustomerKeyMD5 = a});
 
--- | The name of the source bucket and key name of the source object, separated by
--- a slash (/). Must be URL-encoded.
-coCopySource :: Lens' CopyObject Text
-coCopySource = lens _coCopySource (\s a -> s { _coCopySource = a })
+-- | Specifies whether the metadata is copied from the source object or
+-- replaced with metadata provided in the request.
+coMetadataDirective :: Lens' CopyObject (Maybe MetadataDirective)
+coMetadataDirective = lens _coMetadataDirective (\ s a -> s{_coMetadataDirective = a});
 
--- | Copies the object if its entity tag (ETag) matches the specified tag.
-coCopySourceIfMatch :: Lens' CopyObject (Maybe Text)
-coCopySourceIfMatch =
-    lens _coCopySourceIfMatch (\s a -> s { _coCopySourceIfMatch = a })
+-- | The date and time at which the object is no longer cacheable.
+coExpires :: Lens' CopyObject (Maybe UTCTime)
+coExpires = lens _coExpires (\ s a -> s{_coExpires = a}) . mapping _Time;
 
--- | Copies the object if it has been modified since the specified time.
-coCopySourceIfModifiedSince :: Lens' CopyObject (Maybe UTCTime)
-coCopySourceIfModifiedSince =
-    lens _coCopySourceIfModifiedSince
-        (\s a -> s { _coCopySourceIfModifiedSince = a })
-            . mapping _Time
+-- | Specifies the algorithm to use to when encrypting the object (e.g.,
+-- AES256).
+coSSECustomerAlgorithm :: Lens' CopyObject (Maybe Text)
+coSSECustomerAlgorithm = lens _coSSECustomerAlgorithm (\ s a -> s{_coSSECustomerAlgorithm = a});
 
--- | Copies the object if its entity tag (ETag) is different than the specified
--- ETag.
+-- | Copies the object if its entity tag (ETag) is different than the
+-- specified ETag.
 coCopySourceIfNoneMatch :: Lens' CopyObject (Maybe Text)
-coCopySourceIfNoneMatch =
-    lens _coCopySourceIfNoneMatch (\s a -> s { _coCopySourceIfNoneMatch = a })
+coCopySourceIfNoneMatch = lens _coCopySourceIfNoneMatch (\ s a -> s{_coCopySourceIfNoneMatch = a});
 
--- | Copies the object if it hasn't been modified since the specified time.
-coCopySourceIfUnmodifiedSince :: Lens' CopyObject (Maybe UTCTime)
-coCopySourceIfUnmodifiedSince =
-    lens _coCopySourceIfUnmodifiedSince
-        (\s a -> s { _coCopySourceIfUnmodifiedSince = a })
-            . mapping _Time
+-- | Allows grantee to read the object ACL.
+coGrantReadACP :: Lens' CopyObject (Maybe Text)
+coGrantReadACP = lens _coGrantReadACP (\ s a -> s{_coGrantReadACP = a});
 
--- | Specifies the algorithm to use when decrypting the source object (e.g.,
--- AES256).
-coCopySourceSSECustomerAlgorithm :: Lens' CopyObject (Maybe Text)
-coCopySourceSSECustomerAlgorithm =
-    lens _coCopySourceSSECustomerAlgorithm
-        (\s a -> s { _coCopySourceSSECustomerAlgorithm = a })
+-- | Specifies the customer-provided encryption key for Amazon S3 to use in
+-- encrypting data. This value is used to store the object and then it is
+-- discarded; Amazon does not store the encryption key. The key must be
+-- appropriate for use with the algorithm specified in the
+-- x-amz-server-side​-encryption​-customer-algorithm header.
+coSSECustomerKey :: Lens' CopyObject (Maybe Text)
+coSSECustomerKey = lens _coSSECustomerKey (\ s a -> s{_coSSECustomerKey = a}) . mapping _Sensitive;
 
--- | Specifies the customer-provided encryption key for Amazon S3 to use to
--- decrypt the source object. The encryption key provided in this header must be
--- one that was used when the source object was created.
-coCopySourceSSECustomerKey :: Lens' CopyObject (Maybe Text)
-coCopySourceSSECustomerKey =
-    lens _coCopySourceSSECustomerKey
-        (\s a -> s { _coCopySourceSSECustomerKey = a })
-            . mapping _Sensitive
+-- | Undocumented member.
+coRequestPayer :: Lens' CopyObject (Maybe RequestPayer)
+coRequestPayer = lens _coRequestPayer (\ s a -> s{_coRequestPayer = a});
 
--- | Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
--- Amazon S3 uses this header for a message integrity check to ensure the
--- encryption key was transmitted without error.
-coCopySourceSSECustomerKeyMD5 :: Lens' CopyObject (Maybe Text)
-coCopySourceSSECustomerKeyMD5 =
-    lens _coCopySourceSSECustomerKeyMD5
-        (\s a -> s { _coCopySourceSSECustomerKeyMD5 = a })
+-- | Allows grantee to write the ACL for the applicable object.
+coGrantWriteACP :: Lens' CopyObject (Maybe Text)
+coGrantWriteACP = lens _coGrantWriteACP (\ s a -> s{_coGrantWriteACP = a});
 
--- | The date and time at which the object is no longer cacheable.
-coExpires :: Lens' CopyObject (Maybe UTCTime)
-coExpires = lens _coExpires (\s a -> s { _coExpires = a }) . mapping _Time
+-- | If the bucket is configured as a website, redirects requests for this
+-- object to another object in the same bucket or to an external URL.
+-- Amazon S3 stores the value of this header in the object metadata.
+coWebsiteRedirectLocation :: Lens' CopyObject (Maybe Text)
+coWebsiteRedirectLocation = lens _coWebsiteRedirectLocation (\ s a -> s{_coWebsiteRedirectLocation = a});
 
--- | Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.
-coGrantFullControl :: Lens' CopyObject (Maybe Text)
-coGrantFullControl =
-    lens _coGrantFullControl (\s a -> s { _coGrantFullControl = a })
+-- | Copies the object if its entity tag (ETag) matches the specified tag.
+coCopySourceIfMatch :: Lens' CopyObject (Maybe Text)
+coCopySourceIfMatch = lens _coCopySourceIfMatch (\ s a -> s{_coCopySourceIfMatch = a});
 
 -- | Allows grantee to read the object data and its metadata.
 coGrantRead :: Lens' CopyObject (Maybe Text)
-coGrantRead = lens _coGrantRead (\s a -> s { _coGrantRead = a })
+coGrantRead = lens _coGrantRead (\ s a -> s{_coGrantRead = a});
 
--- | Allows grantee to read the object ACL.
-coGrantReadACP :: Lens' CopyObject (Maybe Text)
-coGrantReadACP = lens _coGrantReadACP (\s a -> s { _coGrantReadACP = a })
+-- | The type of storage to use for the object. Defaults to \'STANDARD\'.
+coStorageClass :: Lens' CopyObject (Maybe StorageClass)
+coStorageClass = lens _coStorageClass (\ s a -> s{_coStorageClass = a});
 
--- | Allows grantee to write the ACL for the applicable object.
-coGrantWriteACP :: Lens' CopyObject (Maybe Text)
-coGrantWriteACP = lens _coGrantWriteACP (\s a -> s { _coGrantWriteACP = a })
+-- | Specifies what content encodings have been applied to the object and
+-- thus what decoding mechanisms must be applied to obtain the media-type
+-- referenced by the Content-Type header field.
+coContentEncoding :: Lens' CopyObject (Maybe Text)
+coContentEncoding = lens _coContentEncoding (\ s a -> s{_coContentEncoding = a});
 
-coKey :: Lens' CopyObject Text
-coKey = lens _coKey (\s a -> s { _coKey = a })
+-- | Specifies the AWS KMS key ID to use for object encryption. All GET and
+-- PUT requests for an object protected by AWS KMS will fail if not made
+-- via SSL or using SigV4. Documentation on configuring any of the
+-- officially supported AWS SDKs and CLI can be found at
+-- http:\/\/docs.aws.amazon.com\/AmazonS3\/latest\/dev\/UsingAWSSDK.html#specify-signature-version
+coSSEKMSKeyId :: Lens' CopyObject (Maybe Text)
+coSSEKMSKeyId = lens _coSSEKMSKeyId (\ s a -> s{_coSSEKMSKeyId = a}) . mapping _Sensitive;
 
+-- | Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+-- object.
+coGrantFullControl :: Lens' CopyObject (Maybe Text)
+coGrantFullControl = lens _coGrantFullControl (\ s a -> s{_coGrantFullControl = a});
+
+-- | Specifies the 128-bit MD5 digest of the encryption key according to RFC
+-- 1321. Amazon S3 uses this header for a message integrity check to ensure
+-- the encryption key was transmitted without error.
+coSSECustomerKeyMD5 :: Lens' CopyObject (Maybe Text)
+coSSECustomerKeyMD5 = lens _coSSECustomerKeyMD5 (\ s a -> s{_coSSECustomerKeyMD5 = a});
+
 -- | A map of metadata to store with the object in S3.
-coMetadata :: Lens' CopyObject (HashMap (CI Text) Text)
-coMetadata = lens _coMetadata (\s a -> s { _coMetadata = a }) . _Map
+coMetadata :: Lens' CopyObject (HashMap Text Text)
+coMetadata = lens _coMetadata (\ s a -> s{_coMetadata = a}) . _Map;
 
--- | Specifies whether the metadata is copied from the source object or replaced
--- with metadata provided in the request.
-coMetadataDirective :: Lens' CopyObject (Maybe MetadataDirective)
-coMetadataDirective =
-    lens _coMetadataDirective (\s a -> s { _coMetadataDirective = a })
+-- | Specifies caching behavior along the request\/reply chain.
+coCacheControl :: Lens' CopyObject (Maybe Text)
+coCacheControl = lens _coCacheControl (\ s a -> s{_coCacheControl = a});
 
-coRequestPayer :: Lens' CopyObject (Maybe RequestPayer)
-coRequestPayer = lens _coRequestPayer (\s a -> s { _coRequestPayer = a })
+-- | The language the content is in.
+coContentLanguage :: Lens' CopyObject (Maybe Text)
+coContentLanguage = lens _coContentLanguage (\ s a -> s{_coContentLanguage = a});
 
--- | Specifies the algorithm to use to when encrypting the object (e.g., AES256,
--- aws:kms).
-coSSECustomerAlgorithm :: Lens' CopyObject (Maybe Text)
-coSSECustomerAlgorithm =
-    lens _coSSECustomerAlgorithm (\s a -> s { _coSSECustomerAlgorithm = a })
+-- | The canned ACL to apply to the object.
+coACL :: Lens' CopyObject (Maybe ObjectCannedACL)
+coACL = lens _coACL (\ s a -> s{_coACL = a});
 
--- | Specifies the customer-provided encryption key for Amazon S3 to use in
--- encrypting data. This value is used to store the object and then it is
--- discarded; Amazon does not store the encryption key. The key must be
--- appropriate for use with the algorithm specified in the
--- x-amz-server-side​-encryption​-customer-algorithm header.
-coSSECustomerKey :: Lens' CopyObject (Maybe Text)
-coSSECustomerKey = lens _coSSECustomerKey (\s a -> s { _coSSECustomerKey = a }) . mapping _Sensitive
+-- | Specifies the customer-provided encryption key for Amazon S3 to use to
+-- decrypt the source object. The encryption key provided in this header
+-- must be one that was used when the source object was created.
+coCopySourceSSECustomerKey :: Lens' CopyObject (Maybe Text)
+coCopySourceSSECustomerKey = lens _coCopySourceSSECustomerKey (\ s a -> s{_coCopySourceSSECustomerKey = a}) . mapping _Sensitive;
 
--- | Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
--- Amazon S3 uses this header for a message integrity check to ensure the
--- encryption key was transmitted without error.
-coSSECustomerKeyMD5 :: Lens' CopyObject (Maybe Text)
-coSSECustomerKeyMD5 =
-    lens _coSSECustomerKeyMD5 (\s a -> s { _coSSECustomerKeyMD5 = a })
+-- | Specifies presentational information for the object.
+coContentDisposition :: Lens' CopyObject (Maybe Text)
+coContentDisposition = lens _coContentDisposition (\ s a -> s{_coContentDisposition = a});
 
--- | Specifies the AWS KMS key ID to use for object encryption. All GET and PUT
--- requests for an object protected by AWS KMS will fail if not made via SSL or
--- using SigV4. Documentation on configuring any of the officially supported AWS
--- SDKs and CLI can be found at
--- http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version
-coSSEKMSKeyId :: Lens' CopyObject (Maybe Text)
-coSSEKMSKeyId = lens _coSSEKMSKeyId (\s a -> s { _coSSEKMSKeyId = a }) . mapping _Sensitive
+-- | Specifies the algorithm to use when decrypting the source object (e.g.,
+-- AES256).
+coCopySourceSSECustomerAlgorithm :: Lens' CopyObject (Maybe Text)
+coCopySourceSSECustomerAlgorithm = lens _coCopySourceSSECustomerAlgorithm (\ s a -> s{_coCopySourceSSECustomerAlgorithm = a});
 
 -- | The Server-side encryption algorithm used when storing this object in S3
 -- (e.g., AES256, aws:kms).
 coServerSideEncryption :: Lens' CopyObject (Maybe ServerSideEncryption)
-coServerSideEncryption =
-    lens _coServerSideEncryption (\s a -> s { _coServerSideEncryption = a })
+coServerSideEncryption = lens _coServerSideEncryption (\ s a -> s{_coServerSideEncryption = a});
 
--- | The type of storage to use for the object. Defaults to 'STANDARD'.
-coStorageClass :: Lens' CopyObject (Maybe StorageClass)
-coStorageClass = lens _coStorageClass (\s a -> s { _coStorageClass = a })
+-- | A standard MIME type describing the format of the object data.
+coContentType :: Lens' CopyObject (Maybe Text)
+coContentType = lens _coContentType (\ s a -> s{_coContentType = a});
 
--- | If the bucket is configured as a website, redirects requests for this object
--- to another object in the same bucket or to an external URL. Amazon S3 stores
--- the value of this header in the object metadata.
-coWebsiteRedirectLocation :: Lens' CopyObject (Maybe Text)
-coWebsiteRedirectLocation =
-    lens _coWebsiteRedirectLocation
-        (\s a -> s { _coWebsiteRedirectLocation = a })
+-- | Undocumented member.
+coBucket :: Lens' CopyObject BucketName
+coBucket = lens _coBucket (\ s a -> s{_coBucket = a});
 
-data CopyObjectResponse = CopyObjectResponse
-    { _corCopyObjectResult     :: Maybe CopyObjectResult
-    , _corCopySourceVersionId  :: Maybe Text
-    , _corExpiration           :: Maybe Text
-    , _corRequestCharged       :: Maybe RequestCharged
-    , _corSSECustomerAlgorithm :: Maybe Text
-    , _corSSECustomerKeyMD5    :: Maybe Text
-    , _corSSEKMSKeyId          :: Maybe (Sensitive Text)
-    , _corServerSideEncryption :: Maybe ServerSideEncryption
-    } deriving (Eq, Read, Show)
+-- | The name of the source bucket and key name of the source object,
+-- separated by a slash (\/). Must be URL-encoded.
+coCopySource :: Lens' CopyObject Text
+coCopySource = lens _coCopySource (\ s a -> s{_coCopySource = a});
 
--- | 'CopyObjectResponse' constructor.
+-- | Undocumented member.
+coKey :: Lens' CopyObject ObjectKey
+coKey = lens _coKey (\ s a -> s{_coKey = a});
+
+instance AWSRequest CopyObject where
+        type Sv CopyObject = S3
+        type Rs CopyObject = CopyObjectResponse
+        request = put
+        response
+          = receiveXML
+              (\ s h x ->
+                 CopyObjectResponse' <$>
+                   (h .#? "x-amz-request-charged") <*>
+                     (h .#? "x-amz-expiration")
+                     <*>
+                     (h .#?
+                        "x-amz-server-side-encryption-customer-algorithm")
+                     <*> (h .#? "x-amz-copy-source-version-id")
+                     <*>
+                     (h .#? "x-amz-server-side-encryption-aws-kms-key-id")
+                     <*>
+                     (h .#?
+                        "x-amz-server-side-encryption-customer-key-MD5")
+                     <*> (h .#? "x-amz-server-side-encryption")
+                     <*> (parseXML x)
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders CopyObject where
+        toHeaders CopyObject'{..}
+          = mconcat
+              ["x-amz-copy-source-if-modified-since" =#
+                 _coCopySourceIfModifiedSince,
+               "x-amz-copy-source-if-unmodified-since" =#
+                 _coCopySourceIfUnmodifiedSince,
+               "x-amz-copy-source-server-side-encryption-customer-key-MD5"
+                 =# _coCopySourceSSECustomerKeyMD5,
+               "x-amz-metadata-directive" =# _coMetadataDirective,
+               "Expires" =# _coExpires,
+               "x-amz-server-side-encryption-customer-algorithm" =#
+                 _coSSECustomerAlgorithm,
+               "x-amz-copy-source-if-none-match" =#
+                 _coCopySourceIfNoneMatch,
+               "x-amz-grant-read-acp" =# _coGrantReadACP,
+               "x-amz-server-side-encryption-customer-key" =#
+                 _coSSECustomerKey,
+               "x-amz-request-payer" =# _coRequestPayer,
+               "x-amz-grant-write-acp" =# _coGrantWriteACP,
+               "x-amz-website-redirect-location" =#
+                 _coWebsiteRedirectLocation,
+               "x-amz-copy-source-if-match" =# _coCopySourceIfMatch,
+               "x-amz-grant-read" =# _coGrantRead,
+               "x-amz-storage-class" =# _coStorageClass,
+               "Content-Encoding" =# _coContentEncoding,
+               "x-amz-server-side-encryption-aws-kms-key-id" =#
+                 _coSSEKMSKeyId,
+               "x-amz-grant-full-control" =# _coGrantFullControl,
+               "x-amz-server-side-encryption-customer-key-MD5" =#
+                 _coSSECustomerKeyMD5,
+               "x-amz-meta-" =# _coMetadata,
+               "Cache-Control" =# _coCacheControl,
+               "Content-Language" =# _coContentLanguage,
+               "x-amz-acl" =# _coACL,
+               "x-amz-copy-source-server-side-encryption-customer-key"
+                 =# _coCopySourceSSECustomerKey,
+               "Content-Disposition" =# _coContentDisposition,
+               "x-amz-copy-source-server-side-encryption-customer-algorithm"
+                 =# _coCopySourceSSECustomerAlgorithm,
+               "x-amz-server-side-encryption" =#
+                 _coServerSideEncryption,
+               "Content-Type" =# _coContentType,
+               "x-amz-copy-source" =# _coCopySource]
+
+instance ToPath CopyObject where
+        toPath CopyObject'{..}
+          = mconcat ["/", toBS _coBucket, "/", toBS _coKey]
+
+instance ToQuery CopyObject where
+        toQuery = const mempty
+
+-- | /See:/ 'copyObjectResponse' smart constructor.
+data CopyObjectResponse = CopyObjectResponse'
+    { _corsRequestCharged       :: !(Maybe RequestCharged)
+    , _corsExpiration           :: !(Maybe Text)
+    , _corsSSECustomerAlgorithm :: !(Maybe Text)
+    , _corsCopySourceVersionId  :: !(Maybe Text)
+    , _corsSSEKMSKeyId          :: !(Maybe (Sensitive Text))
+    , _corsSSECustomerKeyMD5    :: !(Maybe Text)
+    , _corsServerSideEncryption :: !(Maybe ServerSideEncryption)
+    , _corsCopyObjectResult     :: !(Maybe CopyObjectResult)
+    , _corsStatus               :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CopyObjectResponse' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'corCopyObjectResult' @::@ 'Maybe' 'CopyObjectResult'
+-- * 'corsRequestCharged'
 --
--- * 'corCopySourceVersionId' @::@ 'Maybe' 'Text'
+-- * 'corsExpiration'
 --
--- * 'corExpiration' @::@ 'Maybe' 'Text'
+-- * 'corsSSECustomerAlgorithm'
 --
--- * 'corRequestCharged' @::@ 'Maybe' 'RequestCharged'
+-- * 'corsCopySourceVersionId'
 --
--- * 'corSSECustomerAlgorithm' @::@ 'Maybe' 'Text'
+-- * 'corsSSEKMSKeyId'
 --
--- * 'corSSECustomerKeyMD5' @::@ 'Maybe' 'Text'
+-- * 'corsSSECustomerKeyMD5'
 --
--- * 'corSSEKMSKeyId' @::@ 'Maybe' 'Text'
+-- * 'corsServerSideEncryption'
 --
--- * 'corServerSideEncryption' @::@ 'Maybe' 'ServerSideEncryption'
+-- * 'corsCopyObjectResult'
 --
-copyObjectResponse :: CopyObjectResponse
-copyObjectResponse = CopyObjectResponse
-    { _corCopyObjectResult     = Nothing
-    , _corExpiration           = Nothing
-    , _corCopySourceVersionId  = Nothing
-    , _corServerSideEncryption = Nothing
-    , _corSSECustomerAlgorithm = Nothing
-    , _corSSECustomerKeyMD5    = Nothing
-    , _corSSEKMSKeyId          = Nothing
-    , _corRequestCharged       = Nothing
+-- * 'corsStatus'
+copyObjectResponse
+    :: Int -- ^ 'corsStatus'
+    -> CopyObjectResponse
+copyObjectResponse pStatus_ =
+    CopyObjectResponse'
+    { _corsRequestCharged = Nothing
+    , _corsExpiration = Nothing
+    , _corsSSECustomerAlgorithm = Nothing
+    , _corsCopySourceVersionId = Nothing
+    , _corsSSEKMSKeyId = Nothing
+    , _corsSSECustomerKeyMD5 = Nothing
+    , _corsServerSideEncryption = Nothing
+    , _corsCopyObjectResult = Nothing
+    , _corsStatus = pStatus_
     }
 
-corCopyObjectResult :: Lens' CopyObjectResponse (Maybe CopyObjectResult)
-corCopyObjectResult =
-    lens _corCopyObjectResult (\s a -> s { _corCopyObjectResult = a })
+-- | Undocumented member.
+corsRequestCharged :: Lens' CopyObjectResponse (Maybe RequestCharged)
+corsRequestCharged = lens _corsRequestCharged (\ s a -> s{_corsRequestCharged = a});
 
-corCopySourceVersionId :: Lens' CopyObjectResponse (Maybe Text)
-corCopySourceVersionId =
-    lens _corCopySourceVersionId (\s a -> s { _corCopySourceVersionId = a })
+-- | If the object expiration is configured, the response includes this
+-- header.
+corsExpiration :: Lens' CopyObjectResponse (Maybe Text)
+corsExpiration = lens _corsExpiration (\ s a -> s{_corsExpiration = a});
 
--- | If the object expiration is configured, the response includes this header.
-corExpiration :: Lens' CopyObjectResponse (Maybe Text)
-corExpiration = lens _corExpiration (\s a -> s { _corExpiration = a })
+-- | If server-side encryption with a customer-provided encryption key was
+-- requested, the response will include this header confirming the
+-- encryption algorithm used.
+corsSSECustomerAlgorithm :: Lens' CopyObjectResponse (Maybe Text)
+corsSSECustomerAlgorithm = lens _corsSSECustomerAlgorithm (\ s a -> s{_corsSSECustomerAlgorithm = a});
 
-corRequestCharged :: Lens' CopyObjectResponse (Maybe RequestCharged)
-corRequestCharged =
-    lens _corRequestCharged (\s a -> s { _corRequestCharged = a })
+-- | Undocumented member.
+corsCopySourceVersionId :: Lens' CopyObjectResponse (Maybe Text)
+corsCopySourceVersionId = lens _corsCopySourceVersionId (\ s a -> s{_corsCopySourceVersionId = a});
 
--- | If server-side encryption with a customer-provided encryption key was
--- requested, the response will include this header confirming the encryption
--- algorithm used.
-corSSECustomerAlgorithm :: Lens' CopyObjectResponse (Maybe Text)
-corSSECustomerAlgorithm =
-    lens _corSSECustomerAlgorithm (\s a -> s { _corSSECustomerAlgorithm = a })
+-- | If present, specifies the ID of the AWS Key Management Service (KMS)
+-- master encryption key that was used for the object.
+corsSSEKMSKeyId :: Lens' CopyObjectResponse (Maybe Text)
+corsSSEKMSKeyId = lens _corsSSEKMSKeyId (\ s a -> s{_corsSSEKMSKeyId = a}) . mapping _Sensitive;
 
 -- | If server-side encryption with a customer-provided encryption key was
 -- requested, the response will include this header to provide round trip
 -- message integrity verification of the customer-provided encryption key.
-corSSECustomerKeyMD5 :: Lens' CopyObjectResponse (Maybe Text)
-corSSECustomerKeyMD5 =
-    lens _corSSECustomerKeyMD5 (\s a -> s { _corSSECustomerKeyMD5 = a })
-
--- | If present, specifies the ID of the AWS Key Management Service (KMS) master
--- encryption key that was used for the object.
-corSSEKMSKeyId :: Lens' CopyObjectResponse (Maybe Text)
-corSSEKMSKeyId = lens _corSSEKMSKeyId (\s a -> s { _corSSEKMSKeyId = a }) . mapping _Sensitive
+corsSSECustomerKeyMD5 :: Lens' CopyObjectResponse (Maybe Text)
+corsSSECustomerKeyMD5 = lens _corsSSECustomerKeyMD5 (\ s a -> s{_corsSSECustomerKeyMD5 = a});
 
 -- | The Server-side encryption algorithm used when storing this object in S3
 -- (e.g., AES256, aws:kms).
-corServerSideEncryption :: Lens' CopyObjectResponse (Maybe ServerSideEncryption)
-corServerSideEncryption =
-    lens _corServerSideEncryption (\s a -> s { _corServerSideEncryption = a })
-
-instance ToPath CopyObject where
-    toPath CopyObject{..} = mconcat
-        [ "/"
-        , toText _coBucket
-        , "/"
-        , toText _coKey
-        ]
-
-instance ToQuery CopyObject where
-    toQuery = const mempty
-
-instance ToHeaders CopyObject where
-    toHeaders CopyObject{..} = mconcat
-        [ "x-amz-acl"                                                   =: _coACL
-        , "Cache-Control"                                               =: _coCacheControl
-        , "Content-Disposition"                                         =: _coContentDisposition
-        , "Content-Encoding"                                            =: _coContentEncoding
-        , "Content-Language"                                            =: _coContentLanguage
-        , "Content-Type"                                                =: _coContentType
-        , "x-amz-copy-source"                                           =: _coCopySource
-        , "x-amz-copy-source-if-match"                                  =: _coCopySourceIfMatch
-        , "x-amz-copy-source-if-modified-since"                         =: _coCopySourceIfModifiedSince
-        , "x-amz-copy-source-if-none-match"                             =: _coCopySourceIfNoneMatch
-        , "x-amz-copy-source-if-unmodified-since"                       =: _coCopySourceIfUnmodifiedSince
-        , "Expires"                                                     =: _coExpires
-        , "x-amz-grant-full-control"                                    =: _coGrantFullControl
-        , "x-amz-grant-read"                                            =: _coGrantRead
-        , "x-amz-grant-read-acp"                                        =: _coGrantReadACP
-        , "x-amz-grant-write-acp"                                       =: _coGrantWriteACP
-        , "x-amz-meta-"                                                 =: _coMetadata
-        , "x-amz-metadata-directive"                                    =: _coMetadataDirective
-        , "x-amz-server-side-encryption"                                =: _coServerSideEncryption
-        , "x-amz-storage-class"                                         =: _coStorageClass
-        , "x-amz-website-redirect-location"                             =: _coWebsiteRedirectLocation
-        , "x-amz-server-side-encryption-customer-algorithm"             =: _coSSECustomerAlgorithm
-        , "x-amz-server-side-encryption-customer-key"                   =: _coSSECustomerKey
-        , "x-amz-server-side-encryption-customer-key-MD5"               =: _coSSECustomerKeyMD5
-        , "x-amz-server-side-encryption-aws-kms-key-id"                 =: _coSSEKMSKeyId
-        , "x-amz-copy-source-server-side-encryption-customer-algorithm" =: _coCopySourceSSECustomerAlgorithm
-        , "x-amz-copy-source-server-side-encryption-customer-key"       =: _coCopySourceSSECustomerKey
-        , "x-amz-copy-source-server-side-encryption-customer-key-MD5"   =: _coCopySourceSSECustomerKeyMD5
-        , "x-amz-request-payer"                                         =: _coRequestPayer
-        ]
-
-instance ToXMLRoot CopyObject where
-    toXMLRoot = const (namespaced ns "CopyObject" [])
-
-instance ToXML CopyObject
+corsServerSideEncryption :: Lens' CopyObjectResponse (Maybe ServerSideEncryption)
+corsServerSideEncryption = lens _corsServerSideEncryption (\ s a -> s{_corsServerSideEncryption = a});
 
-instance AWSRequest CopyObject where
-    type Sv CopyObject = S3
-    type Rs CopyObject = CopyObjectResponse
+-- | Undocumented member.
+corsCopyObjectResult :: Lens' CopyObjectResponse (Maybe CopyObjectResult)
+corsCopyObjectResult = lens _corsCopyObjectResult (\ s a -> s{_corsCopyObjectResult = a});
 
-    request  = put
-    response = xmlHeaderResponse $ \h x -> CopyObjectResponse
-        <$> x .@? "CopyObjectResult"
-        <*> h ~:? "x-amz-copy-source-version-id"
-        <*> h ~:? "x-amz-expiration"
-        <*> h ~:? "x-amz-request-charged"
-        <*> h ~:? "x-amz-server-side-encryption-customer-algorithm"
-        <*> h ~:? "x-amz-server-side-encryption-customer-key-MD5"
-        <*> h ~:? "x-amz-server-side-encryption-aws-kms-key-id"
-        <*> h ~:? "x-amz-server-side-encryption"
+-- | The response status code.
+corsStatus :: Lens' CopyObjectResponse Int
+corsStatus = lens _corsStatus (\ s a -> s{_corsStatus = a});
diff --git a/gen/Network/AWS/S3/CreateBucket.hs b/gen/Network/AWS/S3/CreateBucket.hs
--- a/gen/Network/AWS/S3/CreateBucket.hs
+++ b/gen/Network/AWS/S3/CreateBucket.hs
@@ -1,183 +1,195 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.CreateBucket
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Creates a new bucket.
+-- Creates a new bucket.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/CreateBucket.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/CreateBucket.html AWS API Reference> for CreateBucket.
 module Network.AWS.S3.CreateBucket
     (
-    -- * Request
-      CreateBucket
-    -- ** Request constructor
-    , createBucket
-    -- ** Request lenses
-    , cbACL
-    , cbBucket
-    , cbCreateBucketConfiguration
-    , cbGrantFullControl
-    , cbGrantRead
+    -- * Creating a Request
+      createBucket
+    , CreateBucket
+    -- * Request Lenses
     , cbGrantReadACP
-    , cbGrantWrite
     , cbGrantWriteACP
+    , cbGrantRead
+    , cbGrantFullControl
+    , cbCreateBucketConfiguration
+    , cbGrantWrite
+    , cbACL
+    , cbBucket
 
-    -- * Response
-    , CreateBucketResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createBucketResponse
-    -- ** Response lenses
-    , cbrLocation
+    , CreateBucketResponse
+    -- * Response Lenses
+    , cbrsLocation
+    , cbrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data CreateBucket = CreateBucket
-    { _cbACL                       :: Maybe BucketCannedACL
-    , _cbBucket                    :: Text
-    , _cbCreateBucketConfiguration :: Maybe CreateBucketConfiguration
-    , _cbGrantFullControl          :: Maybe Text
-    , _cbGrantRead                 :: Maybe Text
-    , _cbGrantReadACP              :: Maybe Text
-    , _cbGrantWrite                :: Maybe Text
-    , _cbGrantWriteACP             :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'createBucket' smart constructor.
+data CreateBucket = CreateBucket'
+    { _cbGrantReadACP              :: !(Maybe Text)
+    , _cbGrantWriteACP             :: !(Maybe Text)
+    , _cbGrantRead                 :: !(Maybe Text)
+    , _cbGrantFullControl          :: !(Maybe Text)
+    , _cbCreateBucketConfiguration :: !(Maybe CreateBucketConfiguration)
+    , _cbGrantWrite                :: !(Maybe Text)
+    , _cbACL                       :: !(Maybe BucketCannedACL)
+    , _cbBucket                    :: !BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CreateBucket' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CreateBucket' with the minimum fields required to make a request.
 --
--- * 'cbACL' @::@ 'Maybe' 'BucketCannedACL'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cbBucket' @::@ 'Text'
+-- * 'cbGrantReadACP'
 --
--- * 'cbCreateBucketConfiguration' @::@ 'Maybe' 'CreateBucketConfiguration'
+-- * 'cbGrantWriteACP'
 --
--- * 'cbGrantFullControl' @::@ 'Maybe' 'Text'
+-- * 'cbGrantRead'
 --
--- * 'cbGrantRead' @::@ 'Maybe' 'Text'
+-- * 'cbGrantFullControl'
 --
--- * 'cbGrantReadACP' @::@ 'Maybe' 'Text'
+-- * 'cbCreateBucketConfiguration'
 --
--- * 'cbGrantWrite' @::@ 'Maybe' 'Text'
+-- * 'cbGrantWrite'
 --
--- * 'cbGrantWriteACP' @::@ 'Maybe' 'Text'
+-- * 'cbACL'
 --
-createBucket :: Text -- ^ 'cbBucket'
-             -> CreateBucket
-createBucket p1 = CreateBucket
-    { _cbBucket                    = p1
-    , _cbACL                       = Nothing
+-- * 'cbBucket'
+createBucket
+    :: BucketName -- ^ 'cbBucket'
+    -> CreateBucket
+createBucket pBucket_ =
+    CreateBucket'
+    { _cbGrantReadACP = Nothing
+    , _cbGrantWriteACP = Nothing
+    , _cbGrantRead = Nothing
+    , _cbGrantFullControl = Nothing
     , _cbCreateBucketConfiguration = Nothing
-    , _cbGrantFullControl          = Nothing
-    , _cbGrantRead                 = Nothing
-    , _cbGrantReadACP              = Nothing
-    , _cbGrantWrite                = Nothing
-    , _cbGrantWriteACP             = Nothing
+    , _cbGrantWrite = Nothing
+    , _cbACL = Nothing
+    , _cbBucket = pBucket_
     }
 
--- | The canned ACL to apply to the bucket.
-cbACL :: Lens' CreateBucket (Maybe BucketCannedACL)
-cbACL = lens _cbACL (\s a -> s { _cbACL = a })
-
-cbBucket :: Lens' CreateBucket Text
-cbBucket = lens _cbBucket (\s a -> s { _cbBucket = a })
-
-cbCreateBucketConfiguration :: Lens' CreateBucket (Maybe CreateBucketConfiguration)
-cbCreateBucketConfiguration =
-    lens _cbCreateBucketConfiguration
-        (\s a -> s { _cbCreateBucketConfiguration = a })
+-- | Allows grantee to read the bucket ACL.
+cbGrantReadACP :: Lens' CreateBucket (Maybe Text)
+cbGrantReadACP = lens _cbGrantReadACP (\ s a -> s{_cbGrantReadACP = a});
 
--- | Allows grantee the read, write, read ACP, and write ACP permissions on the
--- bucket.
-cbGrantFullControl :: Lens' CreateBucket (Maybe Text)
-cbGrantFullControl =
-    lens _cbGrantFullControl (\s a -> s { _cbGrantFullControl = a })
+-- | Allows grantee to write the ACL for the applicable bucket.
+cbGrantWriteACP :: Lens' CreateBucket (Maybe Text)
+cbGrantWriteACP = lens _cbGrantWriteACP (\ s a -> s{_cbGrantWriteACP = a});
 
 -- | Allows grantee to list the objects in the bucket.
 cbGrantRead :: Lens' CreateBucket (Maybe Text)
-cbGrantRead = lens _cbGrantRead (\s a -> s { _cbGrantRead = a })
+cbGrantRead = lens _cbGrantRead (\ s a -> s{_cbGrantRead = a});
 
--- | Allows grantee to read the bucket ACL.
-cbGrantReadACP :: Lens' CreateBucket (Maybe Text)
-cbGrantReadACP = lens _cbGrantReadACP (\s a -> s { _cbGrantReadACP = a })
+-- | Allows grantee the read, write, read ACP, and write ACP permissions on
+-- the bucket.
+cbGrantFullControl :: Lens' CreateBucket (Maybe Text)
+cbGrantFullControl = lens _cbGrantFullControl (\ s a -> s{_cbGrantFullControl = a});
 
--- | Allows grantee to create, overwrite, and delete any object in the bucket.
+-- | Undocumented member.
+cbCreateBucketConfiguration :: Lens' CreateBucket (Maybe CreateBucketConfiguration)
+cbCreateBucketConfiguration = lens _cbCreateBucketConfiguration (\ s a -> s{_cbCreateBucketConfiguration = a});
+
+-- | Allows grantee to create, overwrite, and delete any object in the
+-- bucket.
 cbGrantWrite :: Lens' CreateBucket (Maybe Text)
-cbGrantWrite = lens _cbGrantWrite (\s a -> s { _cbGrantWrite = a })
+cbGrantWrite = lens _cbGrantWrite (\ s a -> s{_cbGrantWrite = a});
 
--- | Allows grantee to write the ACL for the applicable bucket.
-cbGrantWriteACP :: Lens' CreateBucket (Maybe Text)
-cbGrantWriteACP = lens _cbGrantWriteACP (\s a -> s { _cbGrantWriteACP = a })
+-- | The canned ACL to apply to the bucket.
+cbACL :: Lens' CreateBucket (Maybe BucketCannedACL)
+cbACL = lens _cbACL (\ s a -> s{_cbACL = a});
 
-newtype CreateBucketResponse = CreateBucketResponse
-    { _cbrLocation :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
+-- | Undocumented member.
+cbBucket :: Lens' CreateBucket BucketName
+cbBucket = lens _cbBucket (\ s a -> s{_cbBucket = a});
 
--- | 'CreateBucketResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cbrLocation' @::@ 'Maybe' 'Text'
---
-createBucketResponse :: CreateBucketResponse
-createBucketResponse = CreateBucketResponse
-    { _cbrLocation = Nothing
-    }
+instance AWSRequest CreateBucket where
+        type Sv CreateBucket = S3
+        type Rs CreateBucket = CreateBucketResponse
+        request = putXML
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 CreateBucketResponse' <$>
+                   (h .#? "Location") <*> (pure (fromEnum s)))
 
-cbrLocation :: Lens' CreateBucketResponse (Maybe Text)
-cbrLocation = lens _cbrLocation (\s a -> s { _cbrLocation = a })
+instance ToElement CreateBucket where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}CreateBucketConfiguration"
+              .
+              _cbCreateBucketConfiguration
 
+instance ToHeaders CreateBucket where
+        toHeaders CreateBucket'{..}
+          = mconcat
+              ["x-amz-grant-read-acp" =# _cbGrantReadACP,
+               "x-amz-grant-write-acp" =# _cbGrantWriteACP,
+               "x-amz-grant-read" =# _cbGrantRead,
+               "x-amz-grant-full-control" =# _cbGrantFullControl,
+               "x-amz-grant-write" =# _cbGrantWrite,
+               "x-amz-acl" =# _cbACL]
+
 instance ToPath CreateBucket where
-    toPath CreateBucket{..} = mconcat
-        [ "/"
-        , toText _cbBucket
-        ]
+        toPath CreateBucket'{..}
+          = mconcat ["/", toBS _cbBucket]
 
 instance ToQuery CreateBucket where
-    toQuery = const mempty
-
-instance ToHeaders CreateBucket where
-    toHeaders CreateBucket{..} = mconcat
-        [ "x-amz-acl"                =: _cbACL
-        , "x-amz-grant-full-control" =: _cbGrantFullControl
-        , "x-amz-grant-read"         =: _cbGrantRead
-        , "x-amz-grant-read-acp"     =: _cbGrantReadACP
-        , "x-amz-grant-write"        =: _cbGrantWrite
-        , "x-amz-grant-write-acp"    =: _cbGrantWriteACP
-        ]
+        toQuery = const mempty
 
-instance ToXMLRoot CreateBucket where
-    toXMLRoot = extractRoot ns . toXML . _cbCreateBucketConfiguration
+-- | /See:/ 'createBucketResponse' smart constructor.
+data CreateBucketResponse = CreateBucketResponse'
+    { _cbrsLocation :: !(Maybe Text)
+    , _cbrsStatus   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToXML CreateBucket
+-- | Creates a value of 'CreateBucketResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cbrsLocation'
+--
+-- * 'cbrsStatus'
+createBucketResponse
+    :: Int -- ^ 'cbrsStatus'
+    -> CreateBucketResponse
+createBucketResponse pStatus_ =
+    CreateBucketResponse'
+    { _cbrsLocation = Nothing
+    , _cbrsStatus = pStatus_
+    }
 
-instance AWSRequest CreateBucket where
-    type Sv CreateBucket = S3
-    type Rs CreateBucket = CreateBucketResponse
+-- | Undocumented member.
+cbrsLocation :: Lens' CreateBucketResponse (Maybe Text)
+cbrsLocation = lens _cbrsLocation (\ s a -> s{_cbrsLocation = a});
 
-    request  = put
-    response = headerResponse $ \h -> CreateBucketResponse
-        <$> h ~:? "Location"
+-- | The response status code.
+cbrsStatus :: Lens' CreateBucketResponse Int
+cbrsStatus = lens _cbrsStatus (\ s a -> s{_cbrsStatus = a});
diff --git a/gen/Network/AWS/S3/CreateMultipartUpload.hs b/gen/Network/AWS/S3/CreateMultipartUpload.hs
--- a/gen/Network/AWS/S3/CreateMultipartUpload.hs
+++ b/gen/Network/AWS/S3/CreateMultipartUpload.hs
@@ -1,436 +1,438 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.CreateMultipartUpload
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Initiates a multipart upload and returns an upload ID.
+-- Initiates a multipart upload and returns an upload ID.
 --
--- Note: After you initiate multipart upload and upload one or more parts, you
--- must either complete or abort multipart upload in order to stop getting
--- charged for storage of the uploaded parts. Only after you either complete or
--- abort multipart upload, Amazon S3 frees up the parts storage and stops
--- charging you for the parts storage.
+-- __Note:__ After you initiate multipart upload and upload one or more
+-- parts, you must either complete or abort multipart upload in order to
+-- stop getting charged for storage of the uploaded parts. Only after you
+-- either complete or abort multipart upload, Amazon S3 frees up the parts
+-- storage and stops charging you for the parts storage.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/CreateMultipartUpload.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/CreateMultipartUpload.html AWS API Reference> for CreateMultipartUpload.
 module Network.AWS.S3.CreateMultipartUpload
     (
-    -- * Request
-      CreateMultipartUpload
-    -- ** Request constructor
-    , createMultipartUpload
-    -- ** Request lenses
-    , cmuACL
-    , cmuBucket
-    , cmuCacheControl
-    , cmuContentDisposition
-    , cmuContentEncoding
-    , cmuContentLanguage
-    , cmuContentType
+    -- * Creating a Request
+      createMultipartUpload
+    , CreateMultipartUpload
+    -- * Request Lenses
     , cmuExpires
-    , cmuGrantFullControl
-    , cmuGrantRead
-    , cmuGrantReadACP
-    , cmuGrantWriteACP
-    , cmuKey
-    , cmuMetadata
-    , cmuRequestPayer
     , cmuSSECustomerAlgorithm
+    , cmuGrantReadACP
     , cmuSSECustomerKey
-    , cmuSSECustomerKeyMD5
+    , cmuRequestPayer
+    , cmuGrantWriteACP
+    , cmuWebsiteRedirectLocation
+    , cmuGrantRead
+    , cmuStorageClass
+    , cmuContentEncoding
     , cmuSSEKMSKeyId
+    , cmuGrantFullControl
+    , cmuSSECustomerKeyMD5
+    , cmuMetadata
+    , cmuCacheControl
+    , cmuContentLanguage
+    , cmuACL
+    , cmuContentDisposition
     , cmuServerSideEncryption
-    , cmuStorageClass
-    , cmuWebsiteRedirectLocation
+    , cmuContentType
+    , cmuBucket
+    , cmuKey
 
-    -- * Response
-    , CreateMultipartUploadResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createMultipartUploadResponse
-    -- ** Response lenses
-    , cmurBucket
-    , cmurKey
-    , cmurRequestCharged
-    , cmurSSECustomerAlgorithm
-    , cmurSSECustomerKeyMD5
-    , cmurSSEKMSKeyId
-    , cmurServerSideEncryption
-    , cmurUploadId
+    , CreateMultipartUploadResponse
+    -- * Response Lenses
+    , cmursRequestCharged
+    , cmursSSECustomerAlgorithm
+    , cmursBucket
+    , cmursKey
+    , cmursSSEKMSKeyId
+    , cmursSSECustomerKeyMD5
+    , cmursUploadId
+    , cmursServerSideEncryption
+    , cmursStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data CreateMultipartUpload = CreateMultipartUpload
-    { _cmuACL                     :: Maybe ObjectCannedACL
-    , _cmuBucket                  :: Text
-    , _cmuCacheControl            :: Maybe Text
-    , _cmuContentDisposition      :: Maybe Text
-    , _cmuContentEncoding         :: Maybe Text
-    , _cmuContentLanguage         :: Maybe Text
-    , _cmuContentType             :: Maybe Text
-    , _cmuExpires                 :: Maybe RFC822
-    , _cmuGrantFullControl        :: Maybe Text
-    , _cmuGrantRead               :: Maybe Text
-    , _cmuGrantReadACP            :: Maybe Text
-    , _cmuGrantWriteACP           :: Maybe Text
-    , _cmuKey                     :: Text
-    , _cmuMetadata                :: Map (CI Text) Text
-    , _cmuRequestPayer            :: Maybe RequestPayer
-    , _cmuSSECustomerAlgorithm    :: Maybe Text
-    , _cmuSSECustomerKey          :: Maybe (Sensitive Text)
-    , _cmuSSECustomerKeyMD5       :: Maybe Text
-    , _cmuSSEKMSKeyId             :: Maybe (Sensitive Text)
-    , _cmuServerSideEncryption    :: Maybe ServerSideEncryption
-    , _cmuStorageClass            :: Maybe StorageClass
-    , _cmuWebsiteRedirectLocation :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'createMultipartUpload' smart constructor.
+data CreateMultipartUpload = CreateMultipartUpload'
+    { _cmuExpires                 :: !(Maybe RFC822)
+    , _cmuSSECustomerAlgorithm    :: !(Maybe Text)
+    , _cmuGrantReadACP            :: !(Maybe Text)
+    , _cmuSSECustomerKey          :: !(Maybe (Sensitive Text))
+    , _cmuRequestPayer            :: !(Maybe RequestPayer)
+    , _cmuGrantWriteACP           :: !(Maybe Text)
+    , _cmuWebsiteRedirectLocation :: !(Maybe Text)
+    , _cmuGrantRead               :: !(Maybe Text)
+    , _cmuStorageClass            :: !(Maybe StorageClass)
+    , _cmuContentEncoding         :: !(Maybe Text)
+    , _cmuSSEKMSKeyId             :: !(Maybe (Sensitive Text))
+    , _cmuGrantFullControl        :: !(Maybe Text)
+    , _cmuSSECustomerKeyMD5       :: !(Maybe Text)
+    , _cmuMetadata                :: !(Map Text Text)
+    , _cmuCacheControl            :: !(Maybe Text)
+    , _cmuContentLanguage         :: !(Maybe Text)
+    , _cmuACL                     :: !(Maybe ObjectCannedACL)
+    , _cmuContentDisposition      :: !(Maybe Text)
+    , _cmuServerSideEncryption    :: !(Maybe ServerSideEncryption)
+    , _cmuContentType             :: !(Maybe Text)
+    , _cmuBucket                  :: !BucketName
+    , _cmuKey                     :: !ObjectKey
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CreateMultipartUpload' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CreateMultipartUpload' with the minimum fields required to make a request.
 --
--- * 'cmuACL' @::@ 'Maybe' 'ObjectCannedACL'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cmuBucket' @::@ 'Text'
+-- * 'cmuExpires'
 --
--- * 'cmuCacheControl' @::@ 'Maybe' 'Text'
+-- * 'cmuSSECustomerAlgorithm'
 --
--- * 'cmuContentDisposition' @::@ 'Maybe' 'Text'
+-- * 'cmuGrantReadACP'
 --
--- * 'cmuContentEncoding' @::@ 'Maybe' 'Text'
+-- * 'cmuSSECustomerKey'
 --
--- * 'cmuContentLanguage' @::@ 'Maybe' 'Text'
+-- * 'cmuRequestPayer'
 --
--- * 'cmuContentType' @::@ 'Maybe' 'Text'
+-- * 'cmuGrantWriteACP'
 --
--- * 'cmuExpires' @::@ 'Maybe' 'UTCTime'
+-- * 'cmuWebsiteRedirectLocation'
 --
--- * 'cmuGrantFullControl' @::@ 'Maybe' 'Text'
+-- * 'cmuGrantRead'
 --
--- * 'cmuGrantRead' @::@ 'Maybe' 'Text'
+-- * 'cmuStorageClass'
 --
--- * 'cmuGrantReadACP' @::@ 'Maybe' 'Text'
+-- * 'cmuContentEncoding'
 --
--- * 'cmuGrantWriteACP' @::@ 'Maybe' 'Text'
+-- * 'cmuSSEKMSKeyId'
 --
--- * 'cmuKey' @::@ 'Text'
+-- * 'cmuGrantFullControl'
 --
--- * 'cmuMetadata' @::@ 'HashMap' ('CI' 'Text') 'Text'
+-- * 'cmuSSECustomerKeyMD5'
 --
--- * 'cmuRequestPayer' @::@ 'Maybe' 'RequestPayer'
+-- * 'cmuMetadata'
 --
--- * 'cmuSSECustomerAlgorithm' @::@ 'Maybe' 'Text'
+-- * 'cmuCacheControl'
 --
--- * 'cmuSSECustomerKey' @::@ 'Maybe' 'Text'
+-- * 'cmuContentLanguage'
 --
--- * 'cmuSSECustomerKeyMD5' @::@ 'Maybe' 'Text'
+-- * 'cmuACL'
 --
--- * 'cmuSSEKMSKeyId' @::@ 'Maybe' 'Text'
+-- * 'cmuContentDisposition'
 --
--- * 'cmuServerSideEncryption' @::@ 'Maybe' 'ServerSideEncryption'
+-- * 'cmuServerSideEncryption'
 --
--- * 'cmuStorageClass' @::@ 'Maybe' 'StorageClass'
+-- * 'cmuContentType'
 --
--- * 'cmuWebsiteRedirectLocation' @::@ 'Maybe' 'Text'
+-- * 'cmuBucket'
 --
-createMultipartUpload :: Text -- ^ 'cmuBucket'
-                      -> Text -- ^ 'cmuKey'
-                      -> CreateMultipartUpload
-createMultipartUpload p1 p2 = CreateMultipartUpload
-    { _cmuBucket                  = p1
-    , _cmuKey                     = p2
-    , _cmuACL                     = Nothing
-    , _cmuCacheControl            = Nothing
-    , _cmuContentDisposition      = Nothing
-    , _cmuContentEncoding         = Nothing
-    , _cmuContentLanguage         = Nothing
-    , _cmuContentType             = Nothing
-    , _cmuExpires                 = Nothing
-    , _cmuGrantFullControl        = Nothing
-    , _cmuGrantRead               = Nothing
-    , _cmuGrantReadACP            = Nothing
-    , _cmuGrantWriteACP           = Nothing
-    , _cmuMetadata                = mempty
-    , _cmuServerSideEncryption    = Nothing
-    , _cmuStorageClass            = Nothing
+-- * 'cmuKey'
+createMultipartUpload
+    :: BucketName -- ^ 'cmuBucket'
+    -> ObjectKey -- ^ 'cmuKey'
+    -> CreateMultipartUpload
+createMultipartUpload pBucket_ pKey_ =
+    CreateMultipartUpload'
+    { _cmuExpires = Nothing
+    , _cmuSSECustomerAlgorithm = Nothing
+    , _cmuGrantReadACP = Nothing
+    , _cmuSSECustomerKey = Nothing
+    , _cmuRequestPayer = Nothing
+    , _cmuGrantWriteACP = Nothing
     , _cmuWebsiteRedirectLocation = Nothing
-    , _cmuSSECustomerAlgorithm    = Nothing
-    , _cmuSSECustomerKey          = Nothing
-    , _cmuSSECustomerKeyMD5       = Nothing
-    , _cmuSSEKMSKeyId             = Nothing
-    , _cmuRequestPayer            = Nothing
+    , _cmuGrantRead = Nothing
+    , _cmuStorageClass = Nothing
+    , _cmuContentEncoding = Nothing
+    , _cmuSSEKMSKeyId = Nothing
+    , _cmuGrantFullControl = Nothing
+    , _cmuSSECustomerKeyMD5 = Nothing
+    , _cmuMetadata = mempty
+    , _cmuCacheControl = Nothing
+    , _cmuContentLanguage = Nothing
+    , _cmuACL = Nothing
+    , _cmuContentDisposition = Nothing
+    , _cmuServerSideEncryption = Nothing
+    , _cmuContentType = Nothing
+    , _cmuBucket = pBucket_
+    , _cmuKey = pKey_
     }
 
--- | The canned ACL to apply to the object.
-cmuACL :: Lens' CreateMultipartUpload (Maybe ObjectCannedACL)
-cmuACL = lens _cmuACL (\s a -> s { _cmuACL = a })
-
-cmuBucket :: Lens' CreateMultipartUpload Text
-cmuBucket = lens _cmuBucket (\s a -> s { _cmuBucket = a })
-
--- | Specifies caching behavior along the request/reply chain.
-cmuCacheControl :: Lens' CreateMultipartUpload (Maybe Text)
-cmuCacheControl = lens _cmuCacheControl (\s a -> s { _cmuCacheControl = a })
+-- | The date and time at which the object is no longer cacheable.
+cmuExpires :: Lens' CreateMultipartUpload (Maybe UTCTime)
+cmuExpires = lens _cmuExpires (\ s a -> s{_cmuExpires = a}) . mapping _Time;
 
--- | Specifies presentational information for the object.
-cmuContentDisposition :: Lens' CreateMultipartUpload (Maybe Text)
-cmuContentDisposition =
-    lens _cmuContentDisposition (\s a -> s { _cmuContentDisposition = a })
+-- | Specifies the algorithm to use to when encrypting the object (e.g.,
+-- AES256).
+cmuSSECustomerAlgorithm :: Lens' CreateMultipartUpload (Maybe Text)
+cmuSSECustomerAlgorithm = lens _cmuSSECustomerAlgorithm (\ s a -> s{_cmuSSECustomerAlgorithm = a});
 
--- | Specifies what content encodings have been applied to the object and thus
--- what decoding mechanisms must be applied to obtain the media-type referenced
--- by the Content-Type header field.
-cmuContentEncoding :: Lens' CreateMultipartUpload (Maybe Text)
-cmuContentEncoding =
-    lens _cmuContentEncoding (\s a -> s { _cmuContentEncoding = a })
+-- | Allows grantee to read the object ACL.
+cmuGrantReadACP :: Lens' CreateMultipartUpload (Maybe Text)
+cmuGrantReadACP = lens _cmuGrantReadACP (\ s a -> s{_cmuGrantReadACP = a});
 
--- | The language the content is in.
-cmuContentLanguage :: Lens' CreateMultipartUpload (Maybe Text)
-cmuContentLanguage =
-    lens _cmuContentLanguage (\s a -> s { _cmuContentLanguage = a })
+-- | Specifies the customer-provided encryption key for Amazon S3 to use in
+-- encrypting data. This value is used to store the object and then it is
+-- discarded; Amazon does not store the encryption key. The key must be
+-- appropriate for use with the algorithm specified in the
+-- x-amz-server-side​-encryption​-customer-algorithm header.
+cmuSSECustomerKey :: Lens' CreateMultipartUpload (Maybe Text)
+cmuSSECustomerKey = lens _cmuSSECustomerKey (\ s a -> s{_cmuSSECustomerKey = a}) . mapping _Sensitive;
 
--- | A standard MIME type describing the format of the object data.
-cmuContentType :: Lens' CreateMultipartUpload (Maybe Text)
-cmuContentType = lens _cmuContentType (\s a -> s { _cmuContentType = a })
+-- | Undocumented member.
+cmuRequestPayer :: Lens' CreateMultipartUpload (Maybe RequestPayer)
+cmuRequestPayer = lens _cmuRequestPayer (\ s a -> s{_cmuRequestPayer = a});
 
--- | The date and time at which the object is no longer cacheable.
-cmuExpires :: Lens' CreateMultipartUpload (Maybe UTCTime)
-cmuExpires = lens _cmuExpires (\s a -> s { _cmuExpires = a }) . mapping _Time
+-- | Allows grantee to write the ACL for the applicable object.
+cmuGrantWriteACP :: Lens' CreateMultipartUpload (Maybe Text)
+cmuGrantWriteACP = lens _cmuGrantWriteACP (\ s a -> s{_cmuGrantWriteACP = a});
 
--- | Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.
-cmuGrantFullControl :: Lens' CreateMultipartUpload (Maybe Text)
-cmuGrantFullControl =
-    lens _cmuGrantFullControl (\s a -> s { _cmuGrantFullControl = a })
+-- | If the bucket is configured as a website, redirects requests for this
+-- object to another object in the same bucket or to an external URL.
+-- Amazon S3 stores the value of this header in the object metadata.
+cmuWebsiteRedirectLocation :: Lens' CreateMultipartUpload (Maybe Text)
+cmuWebsiteRedirectLocation = lens _cmuWebsiteRedirectLocation (\ s a -> s{_cmuWebsiteRedirectLocation = a});
 
 -- | Allows grantee to read the object data and its metadata.
 cmuGrantRead :: Lens' CreateMultipartUpload (Maybe Text)
-cmuGrantRead = lens _cmuGrantRead (\s a -> s { _cmuGrantRead = a })
+cmuGrantRead = lens _cmuGrantRead (\ s a -> s{_cmuGrantRead = a});
 
--- | Allows grantee to read the object ACL.
-cmuGrantReadACP :: Lens' CreateMultipartUpload (Maybe Text)
-cmuGrantReadACP = lens _cmuGrantReadACP (\s a -> s { _cmuGrantReadACP = a })
+-- | The type of storage to use for the object. Defaults to \'STANDARD\'.
+cmuStorageClass :: Lens' CreateMultipartUpload (Maybe StorageClass)
+cmuStorageClass = lens _cmuStorageClass (\ s a -> s{_cmuStorageClass = a});
 
--- | Allows grantee to write the ACL for the applicable object.
-cmuGrantWriteACP :: Lens' CreateMultipartUpload (Maybe Text)
-cmuGrantWriteACP = lens _cmuGrantWriteACP (\s a -> s { _cmuGrantWriteACP = a })
+-- | Specifies what content encodings have been applied to the object and
+-- thus what decoding mechanisms must be applied to obtain the media-type
+-- referenced by the Content-Type header field.
+cmuContentEncoding :: Lens' CreateMultipartUpload (Maybe Text)
+cmuContentEncoding = lens _cmuContentEncoding (\ s a -> s{_cmuContentEncoding = a});
 
-cmuKey :: Lens' CreateMultipartUpload Text
-cmuKey = lens _cmuKey (\s a -> s { _cmuKey = a })
+-- | Specifies the AWS KMS key ID to use for object encryption. All GET and
+-- PUT requests for an object protected by AWS KMS will fail if not made
+-- via SSL or using SigV4. Documentation on configuring any of the
+-- officially supported AWS SDKs and CLI can be found at
+-- http:\/\/docs.aws.amazon.com\/AmazonS3\/latest\/dev\/UsingAWSSDK.html#specify-signature-version
+cmuSSEKMSKeyId :: Lens' CreateMultipartUpload (Maybe Text)
+cmuSSEKMSKeyId = lens _cmuSSEKMSKeyId (\ s a -> s{_cmuSSEKMSKeyId = a}) . mapping _Sensitive;
 
--- | A map of metadata to store with the object in S3.
-cmuMetadata :: Lens' CreateMultipartUpload (HashMap (CI Text) Text)
-cmuMetadata = lens _cmuMetadata (\s a -> s { _cmuMetadata = a }) . _Map
+-- | Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+-- object.
+cmuGrantFullControl :: Lens' CreateMultipartUpload (Maybe Text)
+cmuGrantFullControl = lens _cmuGrantFullControl (\ s a -> s{_cmuGrantFullControl = a});
 
-cmuRequestPayer :: Lens' CreateMultipartUpload (Maybe RequestPayer)
-cmuRequestPayer = lens _cmuRequestPayer (\s a -> s { _cmuRequestPayer = a })
+-- | Specifies the 128-bit MD5 digest of the encryption key according to RFC
+-- 1321. Amazon S3 uses this header for a message integrity check to ensure
+-- the encryption key was transmitted without error.
+cmuSSECustomerKeyMD5 :: Lens' CreateMultipartUpload (Maybe Text)
+cmuSSECustomerKeyMD5 = lens _cmuSSECustomerKeyMD5 (\ s a -> s{_cmuSSECustomerKeyMD5 = a});
 
--- | Specifies the algorithm to use to when encrypting the object (e.g., AES256,
--- aws:kms).
-cmuSSECustomerAlgorithm :: Lens' CreateMultipartUpload (Maybe Text)
-cmuSSECustomerAlgorithm =
-    lens _cmuSSECustomerAlgorithm (\s a -> s { _cmuSSECustomerAlgorithm = a })
+-- | A map of metadata to store with the object in S3.
+cmuMetadata :: Lens' CreateMultipartUpload (HashMap Text Text)
+cmuMetadata = lens _cmuMetadata (\ s a -> s{_cmuMetadata = a}) . _Map;
 
--- | Specifies the customer-provided encryption key for Amazon S3 to use in
--- encrypting data. This value is used to store the object and then it is
--- discarded; Amazon does not store the encryption key. The key must be
--- appropriate for use with the algorithm specified in the
--- x-amz-server-side​-encryption​-customer-algorithm header.
-cmuSSECustomerKey :: Lens' CreateMultipartUpload (Maybe Text)
-cmuSSECustomerKey =
-    lens _cmuSSECustomerKey (\s a -> s { _cmuSSECustomerKey = a })
-        . mapping _Sensitive
+-- | Specifies caching behavior along the request\/reply chain.
+cmuCacheControl :: Lens' CreateMultipartUpload (Maybe Text)
+cmuCacheControl = lens _cmuCacheControl (\ s a -> s{_cmuCacheControl = a});
 
--- | Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
--- Amazon S3 uses this header for a message integrity check to ensure the
--- encryption key was transmitted without error.
-cmuSSECustomerKeyMD5 :: Lens' CreateMultipartUpload (Maybe Text)
-cmuSSECustomerKeyMD5 =
-    lens _cmuSSECustomerKeyMD5 (\s a -> s { _cmuSSECustomerKeyMD5 = a })
+-- | The language the content is in.
+cmuContentLanguage :: Lens' CreateMultipartUpload (Maybe Text)
+cmuContentLanguage = lens _cmuContentLanguage (\ s a -> s{_cmuContentLanguage = a});
 
--- | Specifies the AWS KMS key ID to use for object encryption. All GET and PUT
--- requests for an object protected by AWS KMS will fail if not made via SSL or
--- using SigV4. Documentation on configuring any of the officially supported AWS
--- SDKs and CLI can be found at
--- http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version
-cmuSSEKMSKeyId :: Lens' CreateMultipartUpload (Maybe Text)
-cmuSSEKMSKeyId = lens _cmuSSEKMSKeyId (\s a -> s { _cmuSSEKMSKeyId = a }) . mapping _Sensitive
+-- | The canned ACL to apply to the object.
+cmuACL :: Lens' CreateMultipartUpload (Maybe ObjectCannedACL)
+cmuACL = lens _cmuACL (\ s a -> s{_cmuACL = a});
 
+-- | Specifies presentational information for the object.
+cmuContentDisposition :: Lens' CreateMultipartUpload (Maybe Text)
+cmuContentDisposition = lens _cmuContentDisposition (\ s a -> s{_cmuContentDisposition = a});
+
 -- | The Server-side encryption algorithm used when storing this object in S3
 -- (e.g., AES256, aws:kms).
 cmuServerSideEncryption :: Lens' CreateMultipartUpload (Maybe ServerSideEncryption)
-cmuServerSideEncryption =
-    lens _cmuServerSideEncryption (\s a -> s { _cmuServerSideEncryption = a })
+cmuServerSideEncryption = lens _cmuServerSideEncryption (\ s a -> s{_cmuServerSideEncryption = a});
 
--- | The type of storage to use for the object. Defaults to 'STANDARD'.
-cmuStorageClass :: Lens' CreateMultipartUpload (Maybe StorageClass)
-cmuStorageClass = lens _cmuStorageClass (\s a -> s { _cmuStorageClass = a })
+-- | A standard MIME type describing the format of the object data.
+cmuContentType :: Lens' CreateMultipartUpload (Maybe Text)
+cmuContentType = lens _cmuContentType (\ s a -> s{_cmuContentType = a});
 
--- | If the bucket is configured as a website, redirects requests for this object
--- to another object in the same bucket or to an external URL. Amazon S3 stores
--- the value of this header in the object metadata.
-cmuWebsiteRedirectLocation :: Lens' CreateMultipartUpload (Maybe Text)
-cmuWebsiteRedirectLocation =
-    lens _cmuWebsiteRedirectLocation
-        (\s a -> s { _cmuWebsiteRedirectLocation = a })
+-- | Undocumented member.
+cmuBucket :: Lens' CreateMultipartUpload BucketName
+cmuBucket = lens _cmuBucket (\ s a -> s{_cmuBucket = a});
 
-data CreateMultipartUploadResponse = CreateMultipartUploadResponse
-    { _cmurBucket               :: Maybe Text
-    , _cmurKey                  :: Maybe Text
-    , _cmurRequestCharged       :: Maybe RequestCharged
-    , _cmurSSECustomerAlgorithm :: Maybe Text
-    , _cmurSSECustomerKeyMD5    :: Maybe Text
-    , _cmurSSEKMSKeyId          :: Maybe (Sensitive Text)
-    , _cmurServerSideEncryption :: Maybe ServerSideEncryption
-    , _cmurUploadId             :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | Undocumented member.
+cmuKey :: Lens' CreateMultipartUpload ObjectKey
+cmuKey = lens _cmuKey (\ s a -> s{_cmuKey = a});
 
--- | 'CreateMultipartUploadResponse' constructor.
+instance AWSRequest CreateMultipartUpload where
+        type Sv CreateMultipartUpload = S3
+        type Rs CreateMultipartUpload =
+             CreateMultipartUploadResponse
+        request = post
+        response
+          = receiveXML
+              (\ s h x ->
+                 CreateMultipartUploadResponse' <$>
+                   (h .#? "x-amz-request-charged") <*>
+                     (h .#?
+                        "x-amz-server-side-encryption-customer-algorithm")
+                     <*> (x .@? "Bucket")
+                     <*> (x .@? "Key")
+                     <*>
+                     (h .#? "x-amz-server-side-encryption-aws-kms-key-id")
+                     <*>
+                     (h .#?
+                        "x-amz-server-side-encryption-customer-key-MD5")
+                     <*> (x .@? "UploadId")
+                     <*> (h .#? "x-amz-server-side-encryption")
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders CreateMultipartUpload where
+        toHeaders CreateMultipartUpload'{..}
+          = mconcat
+              ["Expires" =# _cmuExpires,
+               "x-amz-server-side-encryption-customer-algorithm" =#
+                 _cmuSSECustomerAlgorithm,
+               "x-amz-grant-read-acp" =# _cmuGrantReadACP,
+               "x-amz-server-side-encryption-customer-key" =#
+                 _cmuSSECustomerKey,
+               "x-amz-request-payer" =# _cmuRequestPayer,
+               "x-amz-grant-write-acp" =# _cmuGrantWriteACP,
+               "x-amz-website-redirect-location" =#
+                 _cmuWebsiteRedirectLocation,
+               "x-amz-grant-read" =# _cmuGrantRead,
+               "x-amz-storage-class" =# _cmuStorageClass,
+               "Content-Encoding" =# _cmuContentEncoding,
+               "x-amz-server-side-encryption-aws-kms-key-id" =#
+                 _cmuSSEKMSKeyId,
+               "x-amz-grant-full-control" =# _cmuGrantFullControl,
+               "x-amz-server-side-encryption-customer-key-MD5" =#
+                 _cmuSSECustomerKeyMD5,
+               "x-amz-meta-" =# _cmuMetadata,
+               "Cache-Control" =# _cmuCacheControl,
+               "Content-Language" =# _cmuContentLanguage,
+               "x-amz-acl" =# _cmuACL,
+               "Content-Disposition" =# _cmuContentDisposition,
+               "x-amz-server-side-encryption" =#
+                 _cmuServerSideEncryption,
+               "Content-Type" =# _cmuContentType]
+
+instance ToPath CreateMultipartUpload where
+        toPath CreateMultipartUpload'{..}
+          = mconcat ["/", toBS _cmuBucket, "/", toBS _cmuKey]
+
+instance ToQuery CreateMultipartUpload where
+        toQuery = const (mconcat ["uploads"])
+
+-- | /See:/ 'createMultipartUploadResponse' smart constructor.
+data CreateMultipartUploadResponse = CreateMultipartUploadResponse'
+    { _cmursRequestCharged       :: !(Maybe RequestCharged)
+    , _cmursSSECustomerAlgorithm :: !(Maybe Text)
+    , _cmursBucket               :: !(Maybe BucketName)
+    , _cmursKey                  :: !(Maybe ObjectKey)
+    , _cmursSSEKMSKeyId          :: !(Maybe (Sensitive Text))
+    , _cmursSSECustomerKeyMD5    :: !(Maybe Text)
+    , _cmursUploadId             :: !(Maybe Text)
+    , _cmursServerSideEncryption :: !(Maybe ServerSideEncryption)
+    , _cmursStatus               :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateMultipartUploadResponse' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cmurBucket' @::@ 'Maybe' 'Text'
+-- * 'cmursRequestCharged'
 --
--- * 'cmurKey' @::@ 'Maybe' 'Text'
+-- * 'cmursSSECustomerAlgorithm'
 --
--- * 'cmurRequestCharged' @::@ 'Maybe' 'RequestCharged'
+-- * 'cmursBucket'
 --
--- * 'cmurSSECustomerAlgorithm' @::@ 'Maybe' 'Text'
+-- * 'cmursKey'
 --
--- * 'cmurSSECustomerKeyMD5' @::@ 'Maybe' 'Text'
+-- * 'cmursSSEKMSKeyId'
 --
--- * 'cmurSSEKMSKeyId' @::@ 'Maybe' 'Text'
+-- * 'cmursSSECustomerKeyMD5'
 --
--- * 'cmurServerSideEncryption' @::@ 'Maybe' 'ServerSideEncryption'
+-- * 'cmursUploadId'
 --
--- * 'cmurUploadId' @::@ 'Maybe' 'Text'
+-- * 'cmursServerSideEncryption'
 --
-createMultipartUploadResponse :: CreateMultipartUploadResponse
-createMultipartUploadResponse = CreateMultipartUploadResponse
-    { _cmurBucket               = Nothing
-    , _cmurKey                  = Nothing
-    , _cmurUploadId             = Nothing
-    , _cmurServerSideEncryption = Nothing
-    , _cmurSSECustomerAlgorithm = Nothing
-    , _cmurSSECustomerKeyMD5    = Nothing
-    , _cmurSSEKMSKeyId          = Nothing
-    , _cmurRequestCharged       = Nothing
+-- * 'cmursStatus'
+createMultipartUploadResponse
+    :: Int -- ^ 'cmursStatus'
+    -> CreateMultipartUploadResponse
+createMultipartUploadResponse pStatus_ =
+    CreateMultipartUploadResponse'
+    { _cmursRequestCharged = Nothing
+    , _cmursSSECustomerAlgorithm = Nothing
+    , _cmursBucket = Nothing
+    , _cmursKey = Nothing
+    , _cmursSSEKMSKeyId = Nothing
+    , _cmursSSECustomerKeyMD5 = Nothing
+    , _cmursUploadId = Nothing
+    , _cmursServerSideEncryption = Nothing
+    , _cmursStatus = pStatus_
     }
 
+-- | Undocumented member.
+cmursRequestCharged :: Lens' CreateMultipartUploadResponse (Maybe RequestCharged)
+cmursRequestCharged = lens _cmursRequestCharged (\ s a -> s{_cmursRequestCharged = a});
+
+-- | If server-side encryption with a customer-provided encryption key was
+-- requested, the response will include this header confirming the
+-- encryption algorithm used.
+cmursSSECustomerAlgorithm :: Lens' CreateMultipartUploadResponse (Maybe Text)
+cmursSSECustomerAlgorithm = lens _cmursSSECustomerAlgorithm (\ s a -> s{_cmursSSECustomerAlgorithm = a});
+
 -- | Name of the bucket to which the multipart upload was initiated.
-cmurBucket :: Lens' CreateMultipartUploadResponse (Maybe Text)
-cmurBucket = lens _cmurBucket (\s a -> s { _cmurBucket = a })
+cmursBucket :: Lens' CreateMultipartUploadResponse (Maybe BucketName)
+cmursBucket = lens _cmursBucket (\ s a -> s{_cmursBucket = a});
 
 -- | Object key for which the multipart upload was initiated.
-cmurKey :: Lens' CreateMultipartUploadResponse (Maybe Text)
-cmurKey = lens _cmurKey (\s a -> s { _cmurKey = a })
-
-cmurRequestCharged :: Lens' CreateMultipartUploadResponse (Maybe RequestCharged)
-cmurRequestCharged =
-    lens _cmurRequestCharged (\s a -> s { _cmurRequestCharged = a })
+cmursKey :: Lens' CreateMultipartUploadResponse (Maybe ObjectKey)
+cmursKey = lens _cmursKey (\ s a -> s{_cmursKey = a});
 
--- | If server-side encryption with a customer-provided encryption key was
--- requested, the response will include this header confirming the encryption
--- algorithm used.
-cmurSSECustomerAlgorithm :: Lens' CreateMultipartUploadResponse (Maybe Text)
-cmurSSECustomerAlgorithm =
-    lens _cmurSSECustomerAlgorithm
-        (\s a -> s { _cmurSSECustomerAlgorithm = a })
+-- | If present, specifies the ID of the AWS Key Management Service (KMS)
+-- master encryption key that was used for the object.
+cmursSSEKMSKeyId :: Lens' CreateMultipartUploadResponse (Maybe Text)
+cmursSSEKMSKeyId = lens _cmursSSEKMSKeyId (\ s a -> s{_cmursSSEKMSKeyId = a}) . mapping _Sensitive;
 
 -- | If server-side encryption with a customer-provided encryption key was
 -- requested, the response will include this header to provide round trip
 -- message integrity verification of the customer-provided encryption key.
-cmurSSECustomerKeyMD5 :: Lens' CreateMultipartUploadResponse (Maybe Text)
-cmurSSECustomerKeyMD5 =
-    lens _cmurSSECustomerKeyMD5 (\s a -> s { _cmurSSECustomerKeyMD5 = a })
+cmursSSECustomerKeyMD5 :: Lens' CreateMultipartUploadResponse (Maybe Text)
+cmursSSECustomerKeyMD5 = lens _cmursSSECustomerKeyMD5 (\ s a -> s{_cmursSSECustomerKeyMD5 = a});
 
--- | If present, specifies the ID of the AWS Key Management Service (KMS) master
--- encryption key that was used for the object.
-cmurSSEKMSKeyId :: Lens' CreateMultipartUploadResponse (Maybe Text)
-cmurSSEKMSKeyId = lens _cmurSSEKMSKeyId (\s a -> s { _cmurSSEKMSKeyId = a }) . mapping _Sensitive
+-- | ID for the initiated multipart upload.
+cmursUploadId :: Lens' CreateMultipartUploadResponse (Maybe Text)
+cmursUploadId = lens _cmursUploadId (\ s a -> s{_cmursUploadId = a});
 
 -- | The Server-side encryption algorithm used when storing this object in S3
 -- (e.g., AES256, aws:kms).
-cmurServerSideEncryption :: Lens' CreateMultipartUploadResponse (Maybe ServerSideEncryption)
-cmurServerSideEncryption =
-    lens _cmurServerSideEncryption
-        (\s a -> s { _cmurServerSideEncryption = a })
-
--- | ID for the initiated multipart upload.
-cmurUploadId :: Lens' CreateMultipartUploadResponse (Maybe Text)
-cmurUploadId = lens _cmurUploadId (\s a -> s { _cmurUploadId = a })
-
-instance ToPath CreateMultipartUpload where
-    toPath CreateMultipartUpload{..} = mconcat
-        [ "/"
-        , toText _cmuBucket
-        , "/"
-        , toText _cmuKey
-        ]
-
-instance ToQuery CreateMultipartUpload where
-    toQuery = const "uploads"
-
-instance ToHeaders CreateMultipartUpload where
-    toHeaders CreateMultipartUpload{..} = mconcat
-        [ "x-amz-acl"                                       =: _cmuACL
-        , "Cache-Control"                                   =: _cmuCacheControl
-        , "Content-Disposition"                             =: _cmuContentDisposition
-        , "Content-Encoding"                                =: _cmuContentEncoding
-        , "Content-Language"                                =: _cmuContentLanguage
-        , "Content-Type"                                    =: _cmuContentType
-        , "Expires"                                         =: _cmuExpires
-        , "x-amz-grant-full-control"                        =: _cmuGrantFullControl
-        , "x-amz-grant-read"                                =: _cmuGrantRead
-        , "x-amz-grant-read-acp"                            =: _cmuGrantReadACP
-        , "x-amz-grant-write-acp"                           =: _cmuGrantWriteACP
-        , "x-amz-meta-"                                     =: _cmuMetadata
-        , "x-amz-server-side-encryption"                    =: _cmuServerSideEncryption
-        , "x-amz-storage-class"                             =: _cmuStorageClass
-        , "x-amz-website-redirect-location"                 =: _cmuWebsiteRedirectLocation
-        , "x-amz-server-side-encryption-customer-algorithm" =: _cmuSSECustomerAlgorithm
-        , "x-amz-server-side-encryption-customer-key"       =: _cmuSSECustomerKey
-        , "x-amz-server-side-encryption-customer-key-MD5"   =: _cmuSSECustomerKeyMD5
-        , "x-amz-server-side-encryption-aws-kms-key-id"     =: _cmuSSEKMSKeyId
-        , "x-amz-request-payer"                             =: _cmuRequestPayer
-        ]
-
-instance ToXMLRoot CreateMultipartUpload where
-    toXMLRoot = const (namespaced ns "CreateMultipartUpload" [])
-
-instance ToXML CreateMultipartUpload
-
-instance AWSRequest CreateMultipartUpload where
-    type Sv CreateMultipartUpload = S3
-    type Rs CreateMultipartUpload = CreateMultipartUploadResponse
+cmursServerSideEncryption :: Lens' CreateMultipartUploadResponse (Maybe ServerSideEncryption)
+cmursServerSideEncryption = lens _cmursServerSideEncryption (\ s a -> s{_cmursServerSideEncryption = a});
 
-    request  = post
-    response = xmlHeaderResponse $ \h x -> CreateMultipartUploadResponse
-        <$> x .@? "Bucket"
-        <*> x .@? "Key"
-        <*> h ~:? "x-amz-request-charged"
-        <*> h ~:? "x-amz-server-side-encryption-customer-algorithm"
-        <*> h ~:? "x-amz-server-side-encryption-customer-key-MD5"
-        <*> h ~:? "x-amz-server-side-encryption-aws-kms-key-id"
-        <*> h ~:? "x-amz-server-side-encryption"
-        <*> x .@? "UploadId"
+-- | The response status code.
+cmursStatus :: Lens' CreateMultipartUploadResponse Int
+cmursStatus = lens _cmursStatus (\ s a -> s{_cmursStatus = a});
diff --git a/gen/Network/AWS/S3/DeleteBucket.hs b/gen/Network/AWS/S3/DeleteBucket.hs
--- a/gen/Network/AWS/S3/DeleteBucket.hs
+++ b/gen/Network/AWS/S3/DeleteBucket.hs
@@ -1,97 +1,92 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.DeleteBucket
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deletes the bucket. All objects (including all object versions and Delete
--- Markers) in the bucket must be deleted before the bucket itself can be
--- deleted.
+-- Deletes the bucket. All objects (including all object versions and
+-- Delete Markers) in the bucket must be deleted before the bucket itself
+-- can be deleted.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/DeleteBucket.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/DeleteBucket.html AWS API Reference> for DeleteBucket.
 module Network.AWS.S3.DeleteBucket
     (
-    -- * Request
-      DeleteBucket
-    -- ** Request constructor
-    , deleteBucket
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteBucket
+    , DeleteBucket
+    -- * Request Lenses
     , dbBucket
 
-    -- * Response
-    , DeleteBucketResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteBucketResponse
+    , DeleteBucketResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-newtype DeleteBucket = DeleteBucket
-    { _dbBucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'deleteBucket' smart constructor.
+newtype DeleteBucket = DeleteBucket'
+    { _dbBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteBucket' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteBucket' with the minimum fields required to make a request.
 --
--- * 'dbBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-deleteBucket :: Text -- ^ 'dbBucket'
-             -> DeleteBucket
-deleteBucket p1 = DeleteBucket
-    { _dbBucket = p1
+-- * 'dbBucket'
+deleteBucket
+    :: BucketName -- ^ 'dbBucket'
+    -> DeleteBucket
+deleteBucket pBucket_ =
+    DeleteBucket'
+    { _dbBucket = pBucket_
     }
 
-dbBucket :: Lens' DeleteBucket Text
-dbBucket = lens _dbBucket (\s a -> s { _dbBucket = a })
+-- | Undocumented member.
+dbBucket :: Lens' DeleteBucket BucketName
+dbBucket = lens _dbBucket (\ s a -> s{_dbBucket = a});
 
-data DeleteBucketResponse = DeleteBucketResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteBucket where
+        type Sv DeleteBucket = S3
+        type Rs DeleteBucket = DeleteBucketResponse
+        request = delete
+        response = receiveNull DeleteBucketResponse'
 
--- | 'DeleteBucketResponse' constructor.
-deleteBucketResponse :: DeleteBucketResponse
-deleteBucketResponse = DeleteBucketResponse
+instance ToHeaders DeleteBucket where
+        toHeaders = const mempty
 
 instance ToPath DeleteBucket where
-    toPath DeleteBucket{..} = mconcat
-        [ "/"
-        , toText _dbBucket
-        ]
+        toPath DeleteBucket'{..}
+          = mconcat ["/", toBS _dbBucket]
 
 instance ToQuery DeleteBucket where
-    toQuery = const mempty
-
-instance ToHeaders DeleteBucket
-
-instance ToXMLRoot DeleteBucket where
-    toXMLRoot = const (namespaced ns "DeleteBucket" [])
-
-instance ToXML DeleteBucket
+        toQuery = const mempty
 
-instance AWSRequest DeleteBucket where
-    type Sv DeleteBucket = S3
-    type Rs DeleteBucket = DeleteBucketResponse
+-- | /See:/ 'deleteBucketResponse' smart constructor.
+data DeleteBucketResponse =
+    DeleteBucketResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = delete
-    response = nullResponse DeleteBucketResponse
+-- | Creates a value of 'DeleteBucketResponse' with the minimum fields required to make a request.
+--
+deleteBucketResponse
+    :: DeleteBucketResponse
+deleteBucketResponse = DeleteBucketResponse'
diff --git a/gen/Network/AWS/S3/DeleteBucketCORS.hs b/gen/Network/AWS/S3/DeleteBucketCORS.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/DeleteBucketCORS.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.S3.DeleteBucketCORS
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the cors configuration information set for the bucket.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/DeleteBucketCORS.html AWS API Reference> for DeleteBucketCORS.
+module Network.AWS.S3.DeleteBucketCORS
+    (
+    -- * Creating a Request
+      deleteBucketCORS
+    , DeleteBucketCORS
+    -- * Request Lenses
+    , dbcBucket
+
+    -- * Destructuring the Response
+    , deleteBucketCORSResponse
+    , DeleteBucketCORSResponse
+    ) where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'deleteBucketCORS' smart constructor.
+newtype DeleteBucketCORS = DeleteBucketCORS'
+    { _dbcBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteBucketCORS' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dbcBucket'
+deleteBucketCORS
+    :: BucketName -- ^ 'dbcBucket'
+    -> DeleteBucketCORS
+deleteBucketCORS pBucket_ =
+    DeleteBucketCORS'
+    { _dbcBucket = pBucket_
+    }
+
+-- | Undocumented member.
+dbcBucket :: Lens' DeleteBucketCORS BucketName
+dbcBucket = lens _dbcBucket (\ s a -> s{_dbcBucket = a});
+
+instance AWSRequest DeleteBucketCORS where
+        type Sv DeleteBucketCORS = S3
+        type Rs DeleteBucketCORS = DeleteBucketCORSResponse
+        request = delete
+        response = receiveNull DeleteBucketCORSResponse'
+
+instance ToHeaders DeleteBucketCORS where
+        toHeaders = const mempty
+
+instance ToPath DeleteBucketCORS where
+        toPath DeleteBucketCORS'{..}
+          = mconcat ["/", toBS _dbcBucket]
+
+instance ToQuery DeleteBucketCORS where
+        toQuery = const (mconcat ["cors"])
+
+-- | /See:/ 'deleteBucketCORSResponse' smart constructor.
+data DeleteBucketCORSResponse =
+    DeleteBucketCORSResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteBucketCORSResponse' with the minimum fields required to make a request.
+--
+deleteBucketCORSResponse
+    :: DeleteBucketCORSResponse
+deleteBucketCORSResponse = DeleteBucketCORSResponse'
diff --git a/gen/Network/AWS/S3/DeleteBucketCors.hs b/gen/Network/AWS/S3/DeleteBucketCors.hs
deleted file mode 100644
--- a/gen/Network/AWS/S3/DeleteBucketCors.hs
+++ /dev/null
@@ -1,95 +0,0 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.S3.DeleteBucketCors
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deletes the cors configuration information set for the bucket.
---
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/DeleteBucketCors.html>
-module Network.AWS.S3.DeleteBucketCors
-    (
-    -- * Request
-      DeleteBucketCors
-    -- ** Request constructor
-    , deleteBucketCors
-    -- ** Request lenses
-    , dbcBucket
-
-    -- * Response
-    , DeleteBucketCorsResponse
-    -- ** Response constructor
-    , deleteBucketCorsResponse
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
-
-newtype DeleteBucketCors = DeleteBucketCors
-    { _dbcBucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
-
--- | 'DeleteBucketCors' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dbcBucket' @::@ 'Text'
---
-deleteBucketCors :: Text -- ^ 'dbcBucket'
-                 -> DeleteBucketCors
-deleteBucketCors p1 = DeleteBucketCors
-    { _dbcBucket = p1
-    }
-
-dbcBucket :: Lens' DeleteBucketCors Text
-dbcBucket = lens _dbcBucket (\s a -> s { _dbcBucket = a })
-
-data DeleteBucketCorsResponse = DeleteBucketCorsResponse
-    deriving (Eq, Ord, Read, Show, Generic)
-
--- | 'DeleteBucketCorsResponse' constructor.
-deleteBucketCorsResponse :: DeleteBucketCorsResponse
-deleteBucketCorsResponse = DeleteBucketCorsResponse
-
-instance ToPath DeleteBucketCors where
-    toPath DeleteBucketCors{..} = mconcat
-        [ "/"
-        , toText _dbcBucket
-        ]
-
-instance ToQuery DeleteBucketCors where
-    toQuery = const "cors"
-
-instance ToHeaders DeleteBucketCors
-
-instance ToXMLRoot DeleteBucketCors where
-    toXMLRoot = const (namespaced ns "DeleteBucketCors" [])
-
-instance ToXML DeleteBucketCors
-
-instance AWSRequest DeleteBucketCors where
-    type Sv DeleteBucketCors = S3
-    type Rs DeleteBucketCors = DeleteBucketCorsResponse
-
-    request  = delete
-    response = nullResponse DeleteBucketCorsResponse
diff --git a/gen/Network/AWS/S3/DeleteBucketLifecycle.hs b/gen/Network/AWS/S3/DeleteBucketLifecycle.hs
--- a/gen/Network/AWS/S3/DeleteBucketLifecycle.hs
+++ b/gen/Network/AWS/S3/DeleteBucketLifecycle.hs
@@ -1,95 +1,91 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.DeleteBucketLifecycle
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deletes the lifecycle configuration from the bucket.
+-- Deletes the lifecycle configuration from the bucket.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/DeleteBucketLifecycle.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/DeleteBucketLifecycle.html AWS API Reference> for DeleteBucketLifecycle.
 module Network.AWS.S3.DeleteBucketLifecycle
     (
-    -- * Request
-      DeleteBucketLifecycle
-    -- ** Request constructor
-    , deleteBucketLifecycle
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteBucketLifecycle
+    , DeleteBucketLifecycle
+    -- * Request Lenses
     , dblBucket
 
-    -- * Response
-    , DeleteBucketLifecycleResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteBucketLifecycleResponse
+    , DeleteBucketLifecycleResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-newtype DeleteBucketLifecycle = DeleteBucketLifecycle
-    { _dblBucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'deleteBucketLifecycle' smart constructor.
+newtype DeleteBucketLifecycle = DeleteBucketLifecycle'
+    { _dblBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteBucketLifecycle' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteBucketLifecycle' with the minimum fields required to make a request.
 --
--- * 'dblBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-deleteBucketLifecycle :: Text -- ^ 'dblBucket'
-                      -> DeleteBucketLifecycle
-deleteBucketLifecycle p1 = DeleteBucketLifecycle
-    { _dblBucket = p1
+-- * 'dblBucket'
+deleteBucketLifecycle
+    :: BucketName -- ^ 'dblBucket'
+    -> DeleteBucketLifecycle
+deleteBucketLifecycle pBucket_ =
+    DeleteBucketLifecycle'
+    { _dblBucket = pBucket_
     }
 
-dblBucket :: Lens' DeleteBucketLifecycle Text
-dblBucket = lens _dblBucket (\s a -> s { _dblBucket = a })
+-- | Undocumented member.
+dblBucket :: Lens' DeleteBucketLifecycle BucketName
+dblBucket = lens _dblBucket (\ s a -> s{_dblBucket = a});
 
-data DeleteBucketLifecycleResponse = DeleteBucketLifecycleResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteBucketLifecycle where
+        type Sv DeleteBucketLifecycle = S3
+        type Rs DeleteBucketLifecycle =
+             DeleteBucketLifecycleResponse
+        request = delete
+        response = receiveNull DeleteBucketLifecycleResponse'
 
--- | 'DeleteBucketLifecycleResponse' constructor.
-deleteBucketLifecycleResponse :: DeleteBucketLifecycleResponse
-deleteBucketLifecycleResponse = DeleteBucketLifecycleResponse
+instance ToHeaders DeleteBucketLifecycle where
+        toHeaders = const mempty
 
 instance ToPath DeleteBucketLifecycle where
-    toPath DeleteBucketLifecycle{..} = mconcat
-        [ "/"
-        , toText _dblBucket
-        ]
+        toPath DeleteBucketLifecycle'{..}
+          = mconcat ["/", toBS _dblBucket]
 
 instance ToQuery DeleteBucketLifecycle where
-    toQuery = const "lifecycle"
-
-instance ToHeaders DeleteBucketLifecycle
-
-instance ToXMLRoot DeleteBucketLifecycle where
-    toXMLRoot = const (namespaced ns "DeleteBucketLifecycle" [])
-
-instance ToXML DeleteBucketLifecycle
+        toQuery = const (mconcat ["lifecycle"])
 
-instance AWSRequest DeleteBucketLifecycle where
-    type Sv DeleteBucketLifecycle = S3
-    type Rs DeleteBucketLifecycle = DeleteBucketLifecycleResponse
+-- | /See:/ 'deleteBucketLifecycleResponse' smart constructor.
+data DeleteBucketLifecycleResponse =
+    DeleteBucketLifecycleResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = delete
-    response = nullResponse DeleteBucketLifecycleResponse
+-- | Creates a value of 'DeleteBucketLifecycleResponse' with the minimum fields required to make a request.
+--
+deleteBucketLifecycleResponse
+    :: DeleteBucketLifecycleResponse
+deleteBucketLifecycleResponse = DeleteBucketLifecycleResponse'
diff --git a/gen/Network/AWS/S3/DeleteBucketPolicy.hs b/gen/Network/AWS/S3/DeleteBucketPolicy.hs
--- a/gen/Network/AWS/S3/DeleteBucketPolicy.hs
+++ b/gen/Network/AWS/S3/DeleteBucketPolicy.hs
@@ -1,95 +1,91 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.DeleteBucketPolicy
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deletes the policy from the bucket.
+-- Deletes the policy from the bucket.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/DeleteBucketPolicy.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/DeleteBucketPolicy.html AWS API Reference> for DeleteBucketPolicy.
 module Network.AWS.S3.DeleteBucketPolicy
     (
-    -- * Request
-      DeleteBucketPolicy
-    -- ** Request constructor
-    , deleteBucketPolicy
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteBucketPolicy
+    , DeleteBucketPolicy
+    -- * Request Lenses
     , dbpBucket
 
-    -- * Response
-    , DeleteBucketPolicyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteBucketPolicyResponse
+    , DeleteBucketPolicyResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-newtype DeleteBucketPolicy = DeleteBucketPolicy
-    { _dbpBucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'deleteBucketPolicy' smart constructor.
+newtype DeleteBucketPolicy = DeleteBucketPolicy'
+    { _dbpBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteBucketPolicy' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteBucketPolicy' with the minimum fields required to make a request.
 --
--- * 'dbpBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-deleteBucketPolicy :: Text -- ^ 'dbpBucket'
-                   -> DeleteBucketPolicy
-deleteBucketPolicy p1 = DeleteBucketPolicy
-    { _dbpBucket = p1
+-- * 'dbpBucket'
+deleteBucketPolicy
+    :: BucketName -- ^ 'dbpBucket'
+    -> DeleteBucketPolicy
+deleteBucketPolicy pBucket_ =
+    DeleteBucketPolicy'
+    { _dbpBucket = pBucket_
     }
 
-dbpBucket :: Lens' DeleteBucketPolicy Text
-dbpBucket = lens _dbpBucket (\s a -> s { _dbpBucket = a })
+-- | Undocumented member.
+dbpBucket :: Lens' DeleteBucketPolicy BucketName
+dbpBucket = lens _dbpBucket (\ s a -> s{_dbpBucket = a});
 
-data DeleteBucketPolicyResponse = DeleteBucketPolicyResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteBucketPolicy where
+        type Sv DeleteBucketPolicy = S3
+        type Rs DeleteBucketPolicy =
+             DeleteBucketPolicyResponse
+        request = delete
+        response = receiveNull DeleteBucketPolicyResponse'
 
--- | 'DeleteBucketPolicyResponse' constructor.
-deleteBucketPolicyResponse :: DeleteBucketPolicyResponse
-deleteBucketPolicyResponse = DeleteBucketPolicyResponse
+instance ToHeaders DeleteBucketPolicy where
+        toHeaders = const mempty
 
 instance ToPath DeleteBucketPolicy where
-    toPath DeleteBucketPolicy{..} = mconcat
-        [ "/"
-        , toText _dbpBucket
-        ]
+        toPath DeleteBucketPolicy'{..}
+          = mconcat ["/", toBS _dbpBucket]
 
 instance ToQuery DeleteBucketPolicy where
-    toQuery = const "policy"
-
-instance ToHeaders DeleteBucketPolicy
-
-instance ToXMLRoot DeleteBucketPolicy where
-    toXMLRoot = const (namespaced ns "DeleteBucketPolicy" [])
-
-instance ToXML DeleteBucketPolicy
+        toQuery = const (mconcat ["policy"])
 
-instance AWSRequest DeleteBucketPolicy where
-    type Sv DeleteBucketPolicy = S3
-    type Rs DeleteBucketPolicy = DeleteBucketPolicyResponse
+-- | /See:/ 'deleteBucketPolicyResponse' smart constructor.
+data DeleteBucketPolicyResponse =
+    DeleteBucketPolicyResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = delete
-    response = nullResponse DeleteBucketPolicyResponse
+-- | Creates a value of 'DeleteBucketPolicyResponse' with the minimum fields required to make a request.
+--
+deleteBucketPolicyResponse
+    :: DeleteBucketPolicyResponse
+deleteBucketPolicyResponse = DeleteBucketPolicyResponse'
diff --git a/gen/Network/AWS/S3/DeleteBucketReplication.hs b/gen/Network/AWS/S3/DeleteBucketReplication.hs
--- a/gen/Network/AWS/S3/DeleteBucketReplication.hs
+++ b/gen/Network/AWS/S3/DeleteBucketReplication.hs
@@ -1,93 +1,92 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.DeleteBucketReplication
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | <http://docs.aws.amazon.com/AmazonS3/latest/API/DeleteBucketReplication.html>
+-- Undocumented operation.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/DeleteBucketReplication.html AWS API Reference> for DeleteBucketReplication.
 module Network.AWS.S3.DeleteBucketReplication
     (
-    -- * Request
-      DeleteBucketReplication
-    -- ** Request constructor
-    , deleteBucketReplication
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteBucketReplication
+    , DeleteBucketReplication
+    -- * Request Lenses
     , dbrBucket
 
-    -- * Response
-    , DeleteBucketReplicationResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteBucketReplicationResponse
+    , DeleteBucketReplicationResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-newtype DeleteBucketReplication = DeleteBucketReplication
-    { _dbrBucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'deleteBucketReplication' smart constructor.
+newtype DeleteBucketReplication = DeleteBucketReplication'
+    { _dbrBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteBucketReplication' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteBucketReplication' with the minimum fields required to make a request.
 --
--- * 'dbrBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-deleteBucketReplication :: Text -- ^ 'dbrBucket'
-                        -> DeleteBucketReplication
-deleteBucketReplication p1 = DeleteBucketReplication
-    { _dbrBucket = p1
+-- * 'dbrBucket'
+deleteBucketReplication
+    :: BucketName -- ^ 'dbrBucket'
+    -> DeleteBucketReplication
+deleteBucketReplication pBucket_ =
+    DeleteBucketReplication'
+    { _dbrBucket = pBucket_
     }
 
-dbrBucket :: Lens' DeleteBucketReplication Text
-dbrBucket = lens _dbrBucket (\s a -> s { _dbrBucket = a })
+-- | Undocumented member.
+dbrBucket :: Lens' DeleteBucketReplication BucketName
+dbrBucket = lens _dbrBucket (\ s a -> s{_dbrBucket = a});
 
-data DeleteBucketReplicationResponse = DeleteBucketReplicationResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteBucketReplication where
+        type Sv DeleteBucketReplication = S3
+        type Rs DeleteBucketReplication =
+             DeleteBucketReplicationResponse
+        request = delete
+        response
+          = receiveNull DeleteBucketReplicationResponse'
 
--- | 'DeleteBucketReplicationResponse' constructor.
-deleteBucketReplicationResponse :: DeleteBucketReplicationResponse
-deleteBucketReplicationResponse = DeleteBucketReplicationResponse
+instance ToHeaders DeleteBucketReplication where
+        toHeaders = const mempty
 
 instance ToPath DeleteBucketReplication where
-    toPath DeleteBucketReplication{..} = mconcat
-        [ "/"
-        , toText _dbrBucket
-        ]
+        toPath DeleteBucketReplication'{..}
+          = mconcat ["/", toBS _dbrBucket]
 
 instance ToQuery DeleteBucketReplication where
-    toQuery = const "replication"
-
-instance ToHeaders DeleteBucketReplication
-
-instance ToXMLRoot DeleteBucketReplication where
-    toXMLRoot = const (namespaced ns "DeleteBucketReplication" [])
-
-instance ToXML DeleteBucketReplication
+        toQuery = const (mconcat ["replication"])
 
-instance AWSRequest DeleteBucketReplication where
-    type Sv DeleteBucketReplication = S3
-    type Rs DeleteBucketReplication = DeleteBucketReplicationResponse
+-- | /See:/ 'deleteBucketReplicationResponse' smart constructor.
+data DeleteBucketReplicationResponse =
+    DeleteBucketReplicationResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = delete
-    response = nullResponse DeleteBucketReplicationResponse
+-- | Creates a value of 'DeleteBucketReplicationResponse' with the minimum fields required to make a request.
+--
+deleteBucketReplicationResponse
+    :: DeleteBucketReplicationResponse
+deleteBucketReplicationResponse = DeleteBucketReplicationResponse'
diff --git a/gen/Network/AWS/S3/DeleteBucketTagging.hs b/gen/Network/AWS/S3/DeleteBucketTagging.hs
--- a/gen/Network/AWS/S3/DeleteBucketTagging.hs
+++ b/gen/Network/AWS/S3/DeleteBucketTagging.hs
@@ -1,95 +1,91 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.DeleteBucketTagging
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deletes the tags from the bucket.
+-- Deletes the tags from the bucket.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/DeleteBucketTagging.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/DeleteBucketTagging.html AWS API Reference> for DeleteBucketTagging.
 module Network.AWS.S3.DeleteBucketTagging
     (
-    -- * Request
-      DeleteBucketTagging
-    -- ** Request constructor
-    , deleteBucketTagging
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteBucketTagging
+    , DeleteBucketTagging
+    -- * Request Lenses
     , dbtBucket
 
-    -- * Response
-    , DeleteBucketTaggingResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteBucketTaggingResponse
+    , DeleteBucketTaggingResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-newtype DeleteBucketTagging = DeleteBucketTagging
-    { _dbtBucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'deleteBucketTagging' smart constructor.
+newtype DeleteBucketTagging = DeleteBucketTagging'
+    { _dbtBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteBucketTagging' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteBucketTagging' with the minimum fields required to make a request.
 --
--- * 'dbtBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-deleteBucketTagging :: Text -- ^ 'dbtBucket'
-                    -> DeleteBucketTagging
-deleteBucketTagging p1 = DeleteBucketTagging
-    { _dbtBucket = p1
+-- * 'dbtBucket'
+deleteBucketTagging
+    :: BucketName -- ^ 'dbtBucket'
+    -> DeleteBucketTagging
+deleteBucketTagging pBucket_ =
+    DeleteBucketTagging'
+    { _dbtBucket = pBucket_
     }
 
-dbtBucket :: Lens' DeleteBucketTagging Text
-dbtBucket = lens _dbtBucket (\s a -> s { _dbtBucket = a })
+-- | Undocumented member.
+dbtBucket :: Lens' DeleteBucketTagging BucketName
+dbtBucket = lens _dbtBucket (\ s a -> s{_dbtBucket = a});
 
-data DeleteBucketTaggingResponse = DeleteBucketTaggingResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteBucketTagging where
+        type Sv DeleteBucketTagging = S3
+        type Rs DeleteBucketTagging =
+             DeleteBucketTaggingResponse
+        request = delete
+        response = receiveNull DeleteBucketTaggingResponse'
 
--- | 'DeleteBucketTaggingResponse' constructor.
-deleteBucketTaggingResponse :: DeleteBucketTaggingResponse
-deleteBucketTaggingResponse = DeleteBucketTaggingResponse
+instance ToHeaders DeleteBucketTagging where
+        toHeaders = const mempty
 
 instance ToPath DeleteBucketTagging where
-    toPath DeleteBucketTagging{..} = mconcat
-        [ "/"
-        , toText _dbtBucket
-        ]
+        toPath DeleteBucketTagging'{..}
+          = mconcat ["/", toBS _dbtBucket]
 
 instance ToQuery DeleteBucketTagging where
-    toQuery = const "tagging"
-
-instance ToHeaders DeleteBucketTagging
-
-instance ToXMLRoot DeleteBucketTagging where
-    toXMLRoot = const (namespaced ns "DeleteBucketTagging" [])
-
-instance ToXML DeleteBucketTagging
+        toQuery = const (mconcat ["tagging"])
 
-instance AWSRequest DeleteBucketTagging where
-    type Sv DeleteBucketTagging = S3
-    type Rs DeleteBucketTagging = DeleteBucketTaggingResponse
+-- | /See:/ 'deleteBucketTaggingResponse' smart constructor.
+data DeleteBucketTaggingResponse =
+    DeleteBucketTaggingResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = delete
-    response = nullResponse DeleteBucketTaggingResponse
+-- | Creates a value of 'DeleteBucketTaggingResponse' with the minimum fields required to make a request.
+--
+deleteBucketTaggingResponse
+    :: DeleteBucketTaggingResponse
+deleteBucketTaggingResponse = DeleteBucketTaggingResponse'
diff --git a/gen/Network/AWS/S3/DeleteBucketWebsite.hs b/gen/Network/AWS/S3/DeleteBucketWebsite.hs
--- a/gen/Network/AWS/S3/DeleteBucketWebsite.hs
+++ b/gen/Network/AWS/S3/DeleteBucketWebsite.hs
@@ -1,95 +1,91 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.DeleteBucketWebsite
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | This operation removes the website configuration from the bucket.
+-- This operation removes the website configuration from the bucket.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/DeleteBucketWebsite.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/DeleteBucketWebsite.html AWS API Reference> for DeleteBucketWebsite.
 module Network.AWS.S3.DeleteBucketWebsite
     (
-    -- * Request
-      DeleteBucketWebsite
-    -- ** Request constructor
-    , deleteBucketWebsite
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteBucketWebsite
+    , DeleteBucketWebsite
+    -- * Request Lenses
     , dbwBucket
 
-    -- * Response
-    , DeleteBucketWebsiteResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteBucketWebsiteResponse
+    , DeleteBucketWebsiteResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-newtype DeleteBucketWebsite = DeleteBucketWebsite
-    { _dbwBucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'deleteBucketWebsite' smart constructor.
+newtype DeleteBucketWebsite = DeleteBucketWebsite'
+    { _dbwBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteBucketWebsite' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteBucketWebsite' with the minimum fields required to make a request.
 --
--- * 'dbwBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-deleteBucketWebsite :: Text -- ^ 'dbwBucket'
-                    -> DeleteBucketWebsite
-deleteBucketWebsite p1 = DeleteBucketWebsite
-    { _dbwBucket = p1
+-- * 'dbwBucket'
+deleteBucketWebsite
+    :: BucketName -- ^ 'dbwBucket'
+    -> DeleteBucketWebsite
+deleteBucketWebsite pBucket_ =
+    DeleteBucketWebsite'
+    { _dbwBucket = pBucket_
     }
 
-dbwBucket :: Lens' DeleteBucketWebsite Text
-dbwBucket = lens _dbwBucket (\s a -> s { _dbwBucket = a })
+-- | Undocumented member.
+dbwBucket :: Lens' DeleteBucketWebsite BucketName
+dbwBucket = lens _dbwBucket (\ s a -> s{_dbwBucket = a});
 
-data DeleteBucketWebsiteResponse = DeleteBucketWebsiteResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteBucketWebsite where
+        type Sv DeleteBucketWebsite = S3
+        type Rs DeleteBucketWebsite =
+             DeleteBucketWebsiteResponse
+        request = delete
+        response = receiveNull DeleteBucketWebsiteResponse'
 
--- | 'DeleteBucketWebsiteResponse' constructor.
-deleteBucketWebsiteResponse :: DeleteBucketWebsiteResponse
-deleteBucketWebsiteResponse = DeleteBucketWebsiteResponse
+instance ToHeaders DeleteBucketWebsite where
+        toHeaders = const mempty
 
 instance ToPath DeleteBucketWebsite where
-    toPath DeleteBucketWebsite{..} = mconcat
-        [ "/"
-        , toText _dbwBucket
-        ]
+        toPath DeleteBucketWebsite'{..}
+          = mconcat ["/", toBS _dbwBucket]
 
 instance ToQuery DeleteBucketWebsite where
-    toQuery = const "website"
-
-instance ToHeaders DeleteBucketWebsite
-
-instance ToXMLRoot DeleteBucketWebsite where
-    toXMLRoot = const (namespaced ns "DeleteBucketWebsite" [])
-
-instance ToXML DeleteBucketWebsite
+        toQuery = const (mconcat ["website"])
 
-instance AWSRequest DeleteBucketWebsite where
-    type Sv DeleteBucketWebsite = S3
-    type Rs DeleteBucketWebsite = DeleteBucketWebsiteResponse
+-- | /See:/ 'deleteBucketWebsiteResponse' smart constructor.
+data DeleteBucketWebsiteResponse =
+    DeleteBucketWebsiteResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = delete
-    response = nullResponse DeleteBucketWebsiteResponse
+-- | Creates a value of 'DeleteBucketWebsiteResponse' with the minimum fields required to make a request.
+--
+deleteBucketWebsiteResponse
+    :: DeleteBucketWebsiteResponse
+deleteBucketWebsiteResponse = DeleteBucketWebsiteResponse'
diff --git a/gen/Network/AWS/S3/DeleteObject.hs b/gen/Network/AWS/S3/DeleteObject.hs
--- a/gen/Network/AWS/S3/DeleteObject.hs
+++ b/gen/Network/AWS/S3/DeleteObject.hs
@@ -1,176 +1,183 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.DeleteObject
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Removes the null version (if there is one) of an object and inserts a delete
--- marker, which becomes the latest version of the object. If there isn't a null
--- version, Amazon S3 does not remove any objects.
+-- Removes the null version (if there is one) of an object and inserts a
+-- delete marker, which becomes the latest version of the object. If there
+-- isn\'t a null version, Amazon S3 does not remove any objects.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/DeleteObject.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/DeleteObject.html AWS API Reference> for DeleteObject.
 module Network.AWS.S3.DeleteObject
     (
-    -- * Request
-      DeleteObject
-    -- ** Request constructor
-    , deleteObject
-    -- ** Request lenses
-    , doBucket
-    , doKey
+    -- * Creating a Request
+      deleteObject
+    , DeleteObject
+    -- * Request Lenses
+    , doVersionId
     , doMFA
     , doRequestPayer
-    , doVersionId
+    , doBucket
+    , doKey
 
-    -- * Response
-    , DeleteObjectResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteObjectResponse
-    -- ** Response lenses
-    , dorDeleteMarker
-    , dorRequestCharged
-    , dorVersionId
+    , DeleteObjectResponse
+    -- * Response Lenses
+    , dorsVersionId
+    , dorsRequestCharged
+    , dorsDeleteMarker
+    , dorsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data DeleteObject = DeleteObject
-    { _doBucket       :: Text
-    , _doKey          :: Text
-    , _doMFA          :: Maybe Text
-    , _doRequestPayer :: Maybe RequestPayer
-    , _doVersionId    :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'deleteObject' smart constructor.
+data DeleteObject = DeleteObject'
+    { _doVersionId    :: !(Maybe ObjectVersionId)
+    , _doMFA          :: !(Maybe Text)
+    , _doRequestPayer :: !(Maybe RequestPayer)
+    , _doBucket       :: !BucketName
+    , _doKey          :: !ObjectKey
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteObject' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteObject' with the minimum fields required to make a request.
 --
--- * 'doBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'doKey' @::@ 'Text'
+-- * 'doVersionId'
 --
--- * 'doMFA' @::@ 'Maybe' 'Text'
+-- * 'doMFA'
 --
--- * 'doRequestPayer' @::@ 'Maybe' 'RequestPayer'
+-- * 'doRequestPayer'
 --
--- * 'doVersionId' @::@ 'Maybe' 'Text'
+-- * 'doBucket'
 --
-deleteObject :: Text -- ^ 'doBucket'
-             -> Text -- ^ 'doKey'
-             -> DeleteObject
-deleteObject p1 p2 = DeleteObject
-    { _doBucket       = p1
-    , _doKey          = p2
-    , _doMFA          = Nothing
-    , _doVersionId    = Nothing
+-- * 'doKey'
+deleteObject
+    :: BucketName -- ^ 'doBucket'
+    -> ObjectKey -- ^ 'doKey'
+    -> DeleteObject
+deleteObject pBucket_ pKey_ =
+    DeleteObject'
+    { _doVersionId = Nothing
+    , _doMFA = Nothing
     , _doRequestPayer = Nothing
+    , _doBucket = pBucket_
+    , _doKey = pKey_
     }
 
-doBucket :: Lens' DeleteObject Text
-doBucket = lens _doBucket (\s a -> s { _doBucket = a })
-
-doKey :: Lens' DeleteObject Text
-doKey = lens _doKey (\s a -> s { _doKey = a })
+-- | VersionId used to reference a specific version of the object.
+doVersionId :: Lens' DeleteObject (Maybe ObjectVersionId)
+doVersionId = lens _doVersionId (\ s a -> s{_doVersionId = a});
 
--- | The concatenation of the authentication device's serial number, a space, and
--- the value that is displayed on your authentication device.
+-- | The concatenation of the authentication device\'s serial number, a
+-- space, and the value that is displayed on your authentication device.
 doMFA :: Lens' DeleteObject (Maybe Text)
-doMFA = lens _doMFA (\s a -> s { _doMFA = a })
+doMFA = lens _doMFA (\ s a -> s{_doMFA = a});
 
+-- | Undocumented member.
 doRequestPayer :: Lens' DeleteObject (Maybe RequestPayer)
-doRequestPayer = lens _doRequestPayer (\s a -> s { _doRequestPayer = a })
-
--- | VersionId used to reference a specific version of the object.
-doVersionId :: Lens' DeleteObject (Maybe Text)
-doVersionId = lens _doVersionId (\s a -> s { _doVersionId = a })
-
-data DeleteObjectResponse = DeleteObjectResponse
-    { _dorDeleteMarker   :: Maybe Bool
-    , _dorRequestCharged :: Maybe RequestCharged
-    , _dorVersionId      :: Maybe Text
-    } deriving (Eq, Read, Show)
+doRequestPayer = lens _doRequestPayer (\ s a -> s{_doRequestPayer = a});
 
--- | 'DeleteObjectResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dorDeleteMarker' @::@ 'Maybe' 'Bool'
---
--- * 'dorRequestCharged' @::@ 'Maybe' 'RequestCharged'
---
--- * 'dorVersionId' @::@ 'Maybe' 'Text'
---
-deleteObjectResponse :: DeleteObjectResponse
-deleteObjectResponse = DeleteObjectResponse
-    { _dorDeleteMarker   = Nothing
-    , _dorVersionId      = Nothing
-    , _dorRequestCharged = Nothing
-    }
+-- | Undocumented member.
+doBucket :: Lens' DeleteObject BucketName
+doBucket = lens _doBucket (\ s a -> s{_doBucket = a});
 
--- | Specifies whether the versioned object that was permanently deleted was
--- (true) or was not (false) a delete marker.
-dorDeleteMarker :: Lens' DeleteObjectResponse (Maybe Bool)
-dorDeleteMarker = lens _dorDeleteMarker (\s a -> s { _dorDeleteMarker = a })
+-- | Undocumented member.
+doKey :: Lens' DeleteObject ObjectKey
+doKey = lens _doKey (\ s a -> s{_doKey = a});
 
-dorRequestCharged :: Lens' DeleteObjectResponse (Maybe RequestCharged)
-dorRequestCharged =
-    lens _dorRequestCharged (\s a -> s { _dorRequestCharged = a })
+instance AWSRequest DeleteObject where
+        type Sv DeleteObject = S3
+        type Rs DeleteObject = DeleteObjectResponse
+        request = delete
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteObjectResponse' <$>
+                   (h .#? "x-amz-version-id") <*>
+                     (h .#? "x-amz-request-charged")
+                     <*> (h .#? "x-amz-delete-marker")
+                     <*> (pure (fromEnum s)))
 
--- | Returns the version ID of the delete marker created as a result of the DELETE
--- operation.
-dorVersionId :: Lens' DeleteObjectResponse (Maybe Text)
-dorVersionId = lens _dorVersionId (\s a -> s { _dorVersionId = a })
+instance ToHeaders DeleteObject where
+        toHeaders DeleteObject'{..}
+          = mconcat
+              ["x-amz-mfa" =# _doMFA,
+               "x-amz-request-payer" =# _doRequestPayer]
 
 instance ToPath DeleteObject where
-    toPath DeleteObject{..} = mconcat
-        [ "/"
-        , toText _doBucket
-        , "/"
-        , toText _doKey
-        ]
+        toPath DeleteObject'{..}
+          = mconcat ["/", toBS _doBucket, "/", toBS _doKey]
 
 instance ToQuery DeleteObject where
-    toQuery rq = "versionId" =? _doVersionId rq
+        toQuery DeleteObject'{..}
+          = mconcat ["versionId" =: _doVersionId]
 
-instance ToHeaders DeleteObject where
-    toHeaders DeleteObject{..} = mconcat
-        [ "x-amz-mfa"           =: _doMFA
-        , "x-amz-request-payer" =: _doRequestPayer
-        ]
+-- | /See:/ 'deleteObjectResponse' smart constructor.
+data DeleteObjectResponse = DeleteObjectResponse'
+    { _dorsVersionId      :: !(Maybe ObjectVersionId)
+    , _dorsRequestCharged :: !(Maybe RequestCharged)
+    , _dorsDeleteMarker   :: !(Maybe Bool)
+    , _dorsStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToXMLRoot DeleteObject where
-    toXMLRoot = const (namespaced ns "DeleteObject" [])
+-- | Creates a value of 'DeleteObjectResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dorsVersionId'
+--
+-- * 'dorsRequestCharged'
+--
+-- * 'dorsDeleteMarker'
+--
+-- * 'dorsStatus'
+deleteObjectResponse
+    :: Int -- ^ 'dorsStatus'
+    -> DeleteObjectResponse
+deleteObjectResponse pStatus_ =
+    DeleteObjectResponse'
+    { _dorsVersionId = Nothing
+    , _dorsRequestCharged = Nothing
+    , _dorsDeleteMarker = Nothing
+    , _dorsStatus = pStatus_
+    }
 
-instance ToXML DeleteObject
+-- | Returns the version ID of the delete marker created as a result of the
+-- DELETE operation.
+dorsVersionId :: Lens' DeleteObjectResponse (Maybe ObjectVersionId)
+dorsVersionId = lens _dorsVersionId (\ s a -> s{_dorsVersionId = a});
 
-instance AWSRequest DeleteObject where
-    type Sv DeleteObject = S3
-    type Rs DeleteObject = DeleteObjectResponse
+-- | Undocumented member.
+dorsRequestCharged :: Lens' DeleteObjectResponse (Maybe RequestCharged)
+dorsRequestCharged = lens _dorsRequestCharged (\ s a -> s{_dorsRequestCharged = a});
 
-    request  = delete
-    response = headerResponse $ \h -> DeleteObjectResponse
-        <$> h ~:? "x-amz-delete-marker"
-        <*> h ~:? "x-amz-request-charged"
-        <*> h ~:? "x-amz-version-id"
+-- | Specifies whether the versioned object that was permanently deleted was
+-- (true) or was not (false) a delete marker.
+dorsDeleteMarker :: Lens' DeleteObjectResponse (Maybe Bool)
+dorsDeleteMarker = lens _dorsDeleteMarker (\ s a -> s{_dorsDeleteMarker = a});
+
+-- | The response status code.
+dorsStatus :: Lens' DeleteObjectResponse Int
+dorsStatus = lens _dorsStatus (\ s a -> s{_dorsStatus = a});
diff --git a/gen/Network/AWS/S3/DeleteObjects.hs b/gen/Network/AWS/S3/DeleteObjects.hs
--- a/gen/Network/AWS/S3/DeleteObjects.hs
+++ b/gen/Network/AWS/S3/DeleteObjects.hs
@@ -1,160 +1,177 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.DeleteObjects
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | This operation enables you to delete multiple objects from a bucket using a
--- single HTTP request. You may specify up to 1000 keys.
+-- This operation enables you to delete multiple objects from a bucket
+-- using a single HTTP request. You may specify up to 1000 keys.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/DeleteObjects.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/DeleteObjects.html AWS API Reference> for DeleteObjects.
 module Network.AWS.S3.DeleteObjects
     (
-    -- * Request
-      DeleteObjects
-    -- ** Request constructor
-    , deleteObjects
-    -- ** Request lenses
-    , do1Bucket
-    , do1Delete
-    , do1MFA
-    , do1RequestPayer
+    -- * Creating a Request
+      deleteObjects
+    , DeleteObjects
+    -- * Request Lenses
+    , dosMFA
+    , dosRequestPayer
+    , dosBucket
+    , dosDelete
 
-    -- * Response
-    , DeleteObjectsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteObjectsResponse
-    -- ** Response lenses
-    , dor1Deleted
-    , dor1Errors
-    , dor1RequestCharged
+    , DeleteObjectsResponse
+    -- * Response Lenses
+    , drsRequestCharged
+    , drsDeleted
+    , drsErrors
+    , drsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data DeleteObjects = DeleteObjects
-    { _do1Bucket       :: Text
-    , _do1Delete       :: Delete
-    , _do1MFA          :: Maybe Text
-    , _do1RequestPayer :: Maybe RequestPayer
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'deleteObjects' smart constructor.
+data DeleteObjects = DeleteObjects'
+    { _dosMFA          :: !(Maybe Text)
+    , _dosRequestPayer :: !(Maybe RequestPayer)
+    , _dosBucket       :: !BucketName
+    , _dosDelete       :: !Delete
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteObjects' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteObjects' with the minimum fields required to make a request.
 --
--- * 'do1Bucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'do1Delete' @::@ 'Delete'
+-- * 'dosMFA'
 --
--- * 'do1MFA' @::@ 'Maybe' 'Text'
+-- * 'dosRequestPayer'
 --
--- * 'do1RequestPayer' @::@ 'Maybe' 'RequestPayer'
+-- * 'dosBucket'
 --
-deleteObjects :: Text -- ^ 'do1Bucket'
-              -> Delete -- ^ 'do1Delete'
-              -> DeleteObjects
-deleteObjects p1 p2 = DeleteObjects
-    { _do1Bucket       = p1
-    , _do1Delete       = p2
-    , _do1MFA          = Nothing
-    , _do1RequestPayer = Nothing
+-- * 'dosDelete'
+deleteObjects
+    :: BucketName -- ^ 'dosBucket'
+    -> Delete -- ^ 'dosDelete'
+    -> DeleteObjects
+deleteObjects pBucket_ pDelete_ =
+    DeleteObjects'
+    { _dosMFA = Nothing
+    , _dosRequestPayer = Nothing
+    , _dosBucket = pBucket_
+    , _dosDelete = pDelete_
     }
 
-do1Bucket :: Lens' DeleteObjects Text
-do1Bucket = lens _do1Bucket (\s a -> s { _do1Bucket = a })
-
-do1Delete :: Lens' DeleteObjects Delete
-do1Delete = lens _do1Delete (\s a -> s { _do1Delete = a })
-
--- | The concatenation of the authentication device's serial number, a space, and
--- the value that is displayed on your authentication device.
-do1MFA :: Lens' DeleteObjects (Maybe Text)
-do1MFA = lens _do1MFA (\s a -> s { _do1MFA = a })
+-- | The concatenation of the authentication device\'s serial number, a
+-- space, and the value that is displayed on your authentication device.
+dosMFA :: Lens' DeleteObjects (Maybe Text)
+dosMFA = lens _dosMFA (\ s a -> s{_dosMFA = a});
 
-do1RequestPayer :: Lens' DeleteObjects (Maybe RequestPayer)
-do1RequestPayer = lens _do1RequestPayer (\s a -> s { _do1RequestPayer = a })
+-- | Undocumented member.
+dosRequestPayer :: Lens' DeleteObjects (Maybe RequestPayer)
+dosRequestPayer = lens _dosRequestPayer (\ s a -> s{_dosRequestPayer = a});
 
-data DeleteObjectsResponse = DeleteObjectsResponse
-    { _dor1Deleted        :: List "Deleted" DeletedObject
-    , _dor1Errors         :: List "Error" S3ServiceError
-    , _dor1RequestCharged :: Maybe RequestCharged
-    } deriving (Eq, Read, Show)
+-- | Undocumented member.
+dosBucket :: Lens' DeleteObjects BucketName
+dosBucket = lens _dosBucket (\ s a -> s{_dosBucket = a});
 
--- | 'DeleteObjectsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dor1Deleted' @::@ ['DeletedObject']
---
--- * 'dor1Errors' @::@ ['S3ServiceError']
---
--- * 'dor1RequestCharged' @::@ 'Maybe' 'RequestCharged'
---
-deleteObjectsResponse :: DeleteObjectsResponse
-deleteObjectsResponse = DeleteObjectsResponse
-    { _dor1Deleted        = mempty
-    , _dor1RequestCharged = Nothing
-    , _dor1Errors         = mempty
-    }
+-- | Undocumented member.
+dosDelete :: Lens' DeleteObjects Delete
+dosDelete = lens _dosDelete (\ s a -> s{_dosDelete = a});
 
-dor1Deleted :: Lens' DeleteObjectsResponse [DeletedObject]
-dor1Deleted = lens _dor1Deleted (\s a -> s { _dor1Deleted = a }) . _List
+instance AWSRequest DeleteObjects where
+        type Sv DeleteObjects = S3
+        type Rs DeleteObjects = DeleteObjectsResponse
+        request = contentMD5 . postXML
+        response
+          = receiveXML
+              (\ s h x ->
+                 DeleteObjectsResponse' <$>
+                   (h .#? "x-amz-request-charged") <*>
+                     (may (parseXMLList "Deleted") x)
+                     <*> (may (parseXMLList "Error") x)
+                     <*> (pure (fromEnum s)))
 
-dor1Errors :: Lens' DeleteObjectsResponse [S3ServiceError]
-dor1Errors = lens _dor1Errors (\s a -> s { _dor1Errors = a }) . _List
+instance ToElement DeleteObjects where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}Delete"
+              .
+              _dosDelete
 
-dor1RequestCharged :: Lens' DeleteObjectsResponse (Maybe RequestCharged)
-dor1RequestCharged =
-    lens _dor1RequestCharged (\s a -> s { _dor1RequestCharged = a })
+instance ToHeaders DeleteObjects where
+        toHeaders DeleteObjects'{..}
+          = mconcat
+              ["x-amz-mfa" =# _dosMFA,
+               "x-amz-request-payer" =# _dosRequestPayer]
 
 instance ToPath DeleteObjects where
-    toPath DeleteObjects{..} = mconcat
-        [ "/"
-        , toText _do1Bucket
-        ]
+        toPath DeleteObjects'{..}
+          = mconcat ["/", toBS _dosBucket]
 
 instance ToQuery DeleteObjects where
-    toQuery = const "delete"
+        toQuery = const (mconcat ["delete"])
 
-instance ToHeaders DeleteObjects where
-    toHeaders DeleteObjects{..} = mconcat
-        [ "x-amz-mfa"           =: _do1MFA
-        , "x-amz-request-payer" =: _do1RequestPayer
-        ]
+-- | /See:/ 'deleteObjectsResponse' smart constructor.
+data DeleteObjectsResponse = DeleteObjectsResponse'
+    { _drsRequestCharged :: !(Maybe RequestCharged)
+    , _drsDeleted        :: !(Maybe [DeletedObject])
+    , _drsErrors         :: !(Maybe [S3ServiceError])
+    , _drsStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToXMLRoot DeleteObjects where
-    toXMLRoot = extractRoot ns . toXML . _do1Delete
+-- | Creates a value of 'DeleteObjectsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drsRequestCharged'
+--
+-- * 'drsDeleted'
+--
+-- * 'drsErrors'
+--
+-- * 'drsStatus'
+deleteObjectsResponse
+    :: Int -- ^ 'drsStatus'
+    -> DeleteObjectsResponse
+deleteObjectsResponse pStatus_ =
+    DeleteObjectsResponse'
+    { _drsRequestCharged = Nothing
+    , _drsDeleted = Nothing
+    , _drsErrors = Nothing
+    , _drsStatus = pStatus_
+    }
 
-instance ToXML DeleteObjects
+-- | Undocumented member.
+drsRequestCharged :: Lens' DeleteObjectsResponse (Maybe RequestCharged)
+drsRequestCharged = lens _drsRequestCharged (\ s a -> s{_drsRequestCharged = a});
 
-instance AWSRequest DeleteObjects where
-    type Sv DeleteObjects = S3
-    type Rs DeleteObjects = DeleteObjectsResponse
+-- | Undocumented member.
+drsDeleted :: Lens' DeleteObjectsResponse [DeletedObject]
+drsDeleted = lens _drsDeleted (\ s a -> s{_drsDeleted = a}) . _Default . _Coerce;
 
-    request  = post
-    response = xmlHeaderResponse $ \h x -> DeleteObjectsResponse
-        <$> x .@? "Deleted" .!@ mempty
-        <*> x .@? "Error" .!@ mempty
-        <*> h ~:? "x-amz-request-charged"
+-- | Undocumented member.
+drsErrors :: Lens' DeleteObjectsResponse [S3ServiceError]
+drsErrors = lens _drsErrors (\ s a -> s{_drsErrors = a}) . _Default . _Coerce;
+
+-- | The response status code.
+drsStatus :: Lens' DeleteObjectsResponse Int
+drsStatus = lens _drsStatus (\ s a -> s{_drsStatus = a});
diff --git a/gen/Network/AWS/S3/GetBucketACL.hs b/gen/Network/AWS/S3/GetBucketACL.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/GetBucketACL.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.S3.GetBucketACL
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the access control policy for the bucket.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketACL.html AWS API Reference> for GetBucketACL.
+module Network.AWS.S3.GetBucketACL
+    (
+    -- * Creating a Request
+      getBucketACL
+    , GetBucketACL
+    -- * Request Lenses
+    , gbaBucket
+
+    -- * Destructuring the Response
+    , getBucketACLResponse
+    , GetBucketACLResponse
+    -- * Response Lenses
+    , gbarsGrants
+    , gbarsOwner
+    , gbarsStatus
+    ) where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'getBucketACL' smart constructor.
+newtype GetBucketACL = GetBucketACL'
+    { _gbaBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetBucketACL' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbaBucket'
+getBucketACL
+    :: BucketName -- ^ 'gbaBucket'
+    -> GetBucketACL
+getBucketACL pBucket_ =
+    GetBucketACL'
+    { _gbaBucket = pBucket_
+    }
+
+-- | Undocumented member.
+gbaBucket :: Lens' GetBucketACL BucketName
+gbaBucket = lens _gbaBucket (\ s a -> s{_gbaBucket = a});
+
+instance AWSRequest GetBucketACL where
+        type Sv GetBucketACL = S3
+        type Rs GetBucketACL = GetBucketACLResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetBucketACLResponse' <$>
+                   (x .@? "AccessControlList" .!@ mempty >>=
+                      may (parseXMLList "Grant"))
+                     <*> (x .@? "Owner")
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders GetBucketACL where
+        toHeaders = const mempty
+
+instance ToPath GetBucketACL where
+        toPath GetBucketACL'{..}
+          = mconcat ["/", toBS _gbaBucket]
+
+instance ToQuery GetBucketACL where
+        toQuery = const (mconcat ["acl"])
+
+-- | /See:/ 'getBucketACLResponse' smart constructor.
+data GetBucketACLResponse = GetBucketACLResponse'
+    { _gbarsGrants :: !(Maybe [Grant])
+    , _gbarsOwner  :: !(Maybe Owner)
+    , _gbarsStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetBucketACLResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbarsGrants'
+--
+-- * 'gbarsOwner'
+--
+-- * 'gbarsStatus'
+getBucketACLResponse
+    :: Int -- ^ 'gbarsStatus'
+    -> GetBucketACLResponse
+getBucketACLResponse pStatus_ =
+    GetBucketACLResponse'
+    { _gbarsGrants = Nothing
+    , _gbarsOwner = Nothing
+    , _gbarsStatus = pStatus_
+    }
+
+-- | A list of grants.
+gbarsGrants :: Lens' GetBucketACLResponse [Grant]
+gbarsGrants = lens _gbarsGrants (\ s a -> s{_gbarsGrants = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+gbarsOwner :: Lens' GetBucketACLResponse (Maybe Owner)
+gbarsOwner = lens _gbarsOwner (\ s a -> s{_gbarsOwner = a});
+
+-- | The response status code.
+gbarsStatus :: Lens' GetBucketACLResponse Int
+gbarsStatus = lens _gbarsStatus (\ s a -> s{_gbarsStatus = a});
diff --git a/gen/Network/AWS/S3/GetBucketAcl.hs b/gen/Network/AWS/S3/GetBucketAcl.hs
deleted file mode 100644
--- a/gen/Network/AWS/S3/GetBucketAcl.hs
+++ /dev/null
@@ -1,122 +0,0 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.S3.GetBucketAcl
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Gets the access control policy for the bucket.
---
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketAcl.html>
-module Network.AWS.S3.GetBucketAcl
-    (
-    -- * Request
-      GetBucketAcl
-    -- ** Request constructor
-    , getBucketAcl
-    -- ** Request lenses
-    , gbaBucket
-
-    -- * Response
-    , GetBucketAclResponse
-    -- ** Response constructor
-    , getBucketAclResponse
-    -- ** Response lenses
-    , gbarGrants
-    , gbarOwner
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
-
-newtype GetBucketAcl = GetBucketAcl
-    { _gbaBucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
-
--- | 'GetBucketAcl' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gbaBucket' @::@ 'Text'
---
-getBucketAcl :: Text -- ^ 'gbaBucket'
-             -> GetBucketAcl
-getBucketAcl p1 = GetBucketAcl
-    { _gbaBucket = p1
-    }
-
-gbaBucket :: Lens' GetBucketAcl Text
-gbaBucket = lens _gbaBucket (\s a -> s { _gbaBucket = a })
-
-data GetBucketAclResponse = GetBucketAclResponse
-    { _gbarGrants :: List "Grant" Grant
-    , _gbarOwner  :: Maybe Owner
-    } deriving (Eq, Read, Show)
-
--- | 'GetBucketAclResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gbarGrants' @::@ ['Grant']
---
--- * 'gbarOwner' @::@ 'Maybe' 'Owner'
---
-getBucketAclResponse :: GetBucketAclResponse
-getBucketAclResponse = GetBucketAclResponse
-    { _gbarOwner  = Nothing
-    , _gbarGrants = mempty
-    }
-
--- | A list of grants.
-gbarGrants :: Lens' GetBucketAclResponse [Grant]
-gbarGrants = lens _gbarGrants (\s a -> s { _gbarGrants = a }) . _List
-
-gbarOwner :: Lens' GetBucketAclResponse (Maybe Owner)
-gbarOwner = lens _gbarOwner (\s a -> s { _gbarOwner = a })
-
-instance ToPath GetBucketAcl where
-    toPath GetBucketAcl{..} = mconcat
-        [ "/"
-        , toText _gbaBucket
-        ]
-
-instance ToQuery GetBucketAcl where
-    toQuery = const "acl"
-
-instance ToHeaders GetBucketAcl
-
-instance ToXMLRoot GetBucketAcl where
-    toXMLRoot = const (namespaced ns "GetBucketAcl" [])
-
-instance ToXML GetBucketAcl
-
-instance AWSRequest GetBucketAcl where
-    type Sv GetBucketAcl = S3
-    type Rs GetBucketAcl = GetBucketAclResponse
-
-    request  = get
-    response = xmlResponse
-
-instance FromXML GetBucketAclResponse where
-    parseXML x = GetBucketAclResponse
-        <$> x .@? "AccessControlList" .!@ mempty
-        <*> x .@? "Owner"
diff --git a/gen/Network/AWS/S3/GetBucketCORS.hs b/gen/Network/AWS/S3/GetBucketCORS.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/GetBucketCORS.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.S3.GetBucketCORS
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the cors configuration for the bucket.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketCORS.html AWS API Reference> for GetBucketCORS.
+module Network.AWS.S3.GetBucketCORS
+    (
+    -- * Creating a Request
+      getBucketCORS
+    , GetBucketCORS
+    -- * Request Lenses
+    , gbcBucket
+
+    -- * Destructuring the Response
+    , getBucketCORSResponse
+    , GetBucketCORSResponse
+    -- * Response Lenses
+    , gbcrsCORSRules
+    , gbcrsStatus
+    ) where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'getBucketCORS' smart constructor.
+newtype GetBucketCORS = GetBucketCORS'
+    { _gbcBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetBucketCORS' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbcBucket'
+getBucketCORS
+    :: BucketName -- ^ 'gbcBucket'
+    -> GetBucketCORS
+getBucketCORS pBucket_ =
+    GetBucketCORS'
+    { _gbcBucket = pBucket_
+    }
+
+-- | Undocumented member.
+gbcBucket :: Lens' GetBucketCORS BucketName
+gbcBucket = lens _gbcBucket (\ s a -> s{_gbcBucket = a});
+
+instance AWSRequest GetBucketCORS where
+        type Sv GetBucketCORS = S3
+        type Rs GetBucketCORS = GetBucketCORSResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetBucketCORSResponse' <$>
+                   (may (parseXMLList "CORSRule") x) <*>
+                     (pure (fromEnum s)))
+
+instance ToHeaders GetBucketCORS where
+        toHeaders = const mempty
+
+instance ToPath GetBucketCORS where
+        toPath GetBucketCORS'{..}
+          = mconcat ["/", toBS _gbcBucket]
+
+instance ToQuery GetBucketCORS where
+        toQuery = const (mconcat ["cors"])
+
+-- | /See:/ 'getBucketCORSResponse' smart constructor.
+data GetBucketCORSResponse = GetBucketCORSResponse'
+    { _gbcrsCORSRules :: !(Maybe [CORSRule])
+    , _gbcrsStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetBucketCORSResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbcrsCORSRules'
+--
+-- * 'gbcrsStatus'
+getBucketCORSResponse
+    :: Int -- ^ 'gbcrsStatus'
+    -> GetBucketCORSResponse
+getBucketCORSResponse pStatus_ =
+    GetBucketCORSResponse'
+    { _gbcrsCORSRules = Nothing
+    , _gbcrsStatus = pStatus_
+    }
+
+-- | Undocumented member.
+gbcrsCORSRules :: Lens' GetBucketCORSResponse [CORSRule]
+gbcrsCORSRules = lens _gbcrsCORSRules (\ s a -> s{_gbcrsCORSRules = a}) . _Default . _Coerce;
+
+-- | The response status code.
+gbcrsStatus :: Lens' GetBucketCORSResponse Int
+gbcrsStatus = lens _gbcrsStatus (\ s a -> s{_gbcrsStatus = a});
diff --git a/gen/Network/AWS/S3/GetBucketCors.hs b/gen/Network/AWS/S3/GetBucketCors.hs
deleted file mode 100644
--- a/gen/Network/AWS/S3/GetBucketCors.hs
+++ /dev/null
@@ -1,112 +0,0 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.S3.GetBucketCors
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns the cors configuration for the bucket.
---
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketCors.html>
-module Network.AWS.S3.GetBucketCors
-    (
-    -- * Request
-      GetBucketCors
-    -- ** Request constructor
-    , getBucketCors
-    -- ** Request lenses
-    , gbcBucket
-
-    -- * Response
-    , GetBucketCorsResponse
-    -- ** Response constructor
-    , getBucketCorsResponse
-    -- ** Response lenses
-    , gbcrCORSRules
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
-
-newtype GetBucketCors = GetBucketCors
-    { _gbcBucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
-
--- | 'GetBucketCors' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gbcBucket' @::@ 'Text'
---
-getBucketCors :: Text -- ^ 'gbcBucket'
-              -> GetBucketCors
-getBucketCors p1 = GetBucketCors
-    { _gbcBucket = p1
-    }
-
-gbcBucket :: Lens' GetBucketCors Text
-gbcBucket = lens _gbcBucket (\s a -> s { _gbcBucket = a })
-
-newtype GetBucketCorsResponse = GetBucketCorsResponse
-    { _gbcrCORSRules :: List "CORSRule" CORSRule
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
-
--- | 'GetBucketCorsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gbcrCORSRules' @::@ ['CORSRule']
---
-getBucketCorsResponse :: GetBucketCorsResponse
-getBucketCorsResponse = GetBucketCorsResponse
-    { _gbcrCORSRules = mempty
-    }
-
-gbcrCORSRules :: Lens' GetBucketCorsResponse [CORSRule]
-gbcrCORSRules = lens _gbcrCORSRules (\s a -> s { _gbcrCORSRules = a }) . _List
-
-instance ToPath GetBucketCors where
-    toPath GetBucketCors{..} = mconcat
-        [ "/"
-        , toText _gbcBucket
-        ]
-
-instance ToQuery GetBucketCors where
-    toQuery = const "cors"
-
-instance ToHeaders GetBucketCors
-
-instance ToXMLRoot GetBucketCors where
-    toXMLRoot = const (namespaced ns "GetBucketCors" [])
-
-instance ToXML GetBucketCors
-
-instance AWSRequest GetBucketCors where
-    type Sv GetBucketCors = S3
-    type Rs GetBucketCors = GetBucketCorsResponse
-
-    request  = get
-    response = xmlResponse
-
-instance FromXML GetBucketCorsResponse where
-    parseXML x = GetBucketCorsResponse
-        <$> parseXML x
diff --git a/gen/Network/AWS/S3/GetBucketLifecycle.hs b/gen/Network/AWS/S3/GetBucketLifecycle.hs
--- a/gen/Network/AWS/S3/GetBucketLifecycle.hs
+++ b/gen/Network/AWS/S3/GetBucketLifecycle.hs
@@ -1,112 +1,118 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.GetBucketLifecycle
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns the lifecycle configuration information set on the bucket.
+-- Returns the lifecycle configuration information set on the bucket.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketLifecycle.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketLifecycle.html AWS API Reference> for GetBucketLifecycle.
 module Network.AWS.S3.GetBucketLifecycle
     (
-    -- * Request
-      GetBucketLifecycle
-    -- ** Request constructor
-    , getBucketLifecycle
-    -- ** Request lenses
-    , gbl1Bucket
+    -- * Creating a Request
+      getBucketLifecycle
+    , GetBucketLifecycle
+    -- * Request Lenses
+    , gBucket
 
-    -- * Response
-    , GetBucketLifecycleResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getBucketLifecycleResponse
-    -- ** Response lenses
-    , gblrRules
+    , GetBucketLifecycleResponse
+    -- * Response Lenses
+    , gblrsRules
+    , gblrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-newtype GetBucketLifecycle = GetBucketLifecycle
-    { _gbl1Bucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'getBucketLifecycle' smart constructor.
+newtype GetBucketLifecycle = GetBucketLifecycle'
+    { _gBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetBucketLifecycle' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetBucketLifecycle' with the minimum fields required to make a request.
 --
--- * 'gbl1Bucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getBucketLifecycle :: Text -- ^ 'gbl1Bucket'
-                   -> GetBucketLifecycle
-getBucketLifecycle p1 = GetBucketLifecycle
-    { _gbl1Bucket = p1
+-- * 'gBucket'
+getBucketLifecycle
+    :: BucketName -- ^ 'gBucket'
+    -> GetBucketLifecycle
+getBucketLifecycle pBucket_ =
+    GetBucketLifecycle'
+    { _gBucket = pBucket_
     }
 
-gbl1Bucket :: Lens' GetBucketLifecycle Text
-gbl1Bucket = lens _gbl1Bucket (\s a -> s { _gbl1Bucket = a })
-
-newtype GetBucketLifecycleResponse = GetBucketLifecycleResponse
-    { _gblrRules :: List "Rule" Rule
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
+-- | Undocumented member.
+gBucket :: Lens' GetBucketLifecycle BucketName
+gBucket = lens _gBucket (\ s a -> s{_gBucket = a});
 
--- | 'GetBucketLifecycleResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gblrRules' @::@ ['Rule']
---
-getBucketLifecycleResponse :: GetBucketLifecycleResponse
-getBucketLifecycleResponse = GetBucketLifecycleResponse
-    { _gblrRules = mempty
-    }
+instance AWSRequest GetBucketLifecycle where
+        type Sv GetBucketLifecycle = S3
+        type Rs GetBucketLifecycle =
+             GetBucketLifecycleResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetBucketLifecycleResponse' <$>
+                   (may (parseXMLList "Rule") x) <*>
+                     (pure (fromEnum s)))
 
-gblrRules :: Lens' GetBucketLifecycleResponse [Rule]
-gblrRules = lens _gblrRules (\s a -> s { _gblrRules = a }) . _List
+instance ToHeaders GetBucketLifecycle where
+        toHeaders = const mempty
 
 instance ToPath GetBucketLifecycle where
-    toPath GetBucketLifecycle{..} = mconcat
-        [ "/"
-        , toText _gbl1Bucket
-        ]
+        toPath GetBucketLifecycle'{..}
+          = mconcat ["/", toBS _gBucket]
 
 instance ToQuery GetBucketLifecycle where
-    toQuery = const "lifecycle"
-
-instance ToHeaders GetBucketLifecycle
-
-instance ToXMLRoot GetBucketLifecycle where
-    toXMLRoot = const (namespaced ns "GetBucketLifecycle" [])
+        toQuery = const (mconcat ["lifecycle"])
 
-instance ToXML GetBucketLifecycle
+-- | /See:/ 'getBucketLifecycleResponse' smart constructor.
+data GetBucketLifecycleResponse = GetBucketLifecycleResponse'
+    { _gblrsRules  :: !(Maybe [Rule])
+    , _gblrsStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetBucketLifecycle where
-    type Sv GetBucketLifecycle = S3
-    type Rs GetBucketLifecycle = GetBucketLifecycleResponse
+-- | Creates a value of 'GetBucketLifecycleResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gblrsRules'
+--
+-- * 'gblrsStatus'
+getBucketLifecycleResponse
+    :: Int -- ^ 'gblrsStatus'
+    -> GetBucketLifecycleResponse
+getBucketLifecycleResponse pStatus_ =
+    GetBucketLifecycleResponse'
+    { _gblrsRules = Nothing
+    , _gblrsStatus = pStatus_
+    }
 
-    request  = get
-    response = xmlResponse
+-- | Undocumented member.
+gblrsRules :: Lens' GetBucketLifecycleResponse [Rule]
+gblrsRules = lens _gblrsRules (\ s a -> s{_gblrsRules = a}) . _Default . _Coerce;
 
-instance FromXML GetBucketLifecycleResponse where
-    parseXML x = GetBucketLifecycleResponse
-        <$> parseXML x
+-- | The response status code.
+gblrsStatus :: Lens' GetBucketLifecycleResponse Int
+gblrsStatus = lens _gblrsStatus (\ s a -> s{_gblrsStatus = a});
diff --git a/gen/Network/AWS/S3/GetBucketLocation.hs b/gen/Network/AWS/S3/GetBucketLocation.hs
--- a/gen/Network/AWS/S3/GetBucketLocation.hs
+++ b/gen/Network/AWS/S3/GetBucketLocation.hs
@@ -1,113 +1,116 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.GetBucketLocation
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns the region the bucket resides in.
+-- Returns the region the bucket resides in.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketLocation.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketLocation.html AWS API Reference> for GetBucketLocation.
 module Network.AWS.S3.GetBucketLocation
     (
-    -- * Request
-      GetBucketLocation
-    -- ** Request constructor
-    , getBucketLocation
-    -- ** Request lenses
+    -- * Creating a Request
+      getBucketLocation
+    , GetBucketLocation
+    -- * Request Lenses
     , gblBucket
 
-    -- * Response
-    , GetBucketLocationResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getBucketLocationResponse
-    -- ** Response lenses
-    , gblrLocationConstraint
+    , GetBucketLocationResponse
+    -- * Response Lenses
+    , getrsLocationConstraint
+    , getrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-newtype GetBucketLocation = GetBucketLocation
-    { _gblBucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'getBucketLocation' smart constructor.
+newtype GetBucketLocation = GetBucketLocation'
+    { _gblBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetBucketLocation' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetBucketLocation' with the minimum fields required to make a request.
 --
--- * 'gblBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getBucketLocation :: Text -- ^ 'gblBucket'
-                  -> GetBucketLocation
-getBucketLocation p1 = GetBucketLocation
-    { _gblBucket = p1
+-- * 'gblBucket'
+getBucketLocation
+    :: BucketName -- ^ 'gblBucket'
+    -> GetBucketLocation
+getBucketLocation pBucket_ =
+    GetBucketLocation'
+    { _gblBucket = pBucket_
     }
 
-gblBucket :: Lens' GetBucketLocation Text
-gblBucket = lens _gblBucket (\s a -> s { _gblBucket = a })
-
-newtype GetBucketLocationResponse = GetBucketLocationResponse
-    { _gblrLocationConstraint :: Maybe Region
-    } deriving (Eq, Read, Show)
+-- | Undocumented member.
+gblBucket :: Lens' GetBucketLocation BucketName
+gblBucket = lens _gblBucket (\ s a -> s{_gblBucket = a});
 
--- | 'GetBucketLocationResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gblrLocationConstraint' @::@ 'Maybe' 'Region'
---
-getBucketLocationResponse :: GetBucketLocationResponse
-getBucketLocationResponse = GetBucketLocationResponse
-    { _gblrLocationConstraint = Nothing
-    }
+instance AWSRequest GetBucketLocation where
+        type Sv GetBucketLocation = S3
+        type Rs GetBucketLocation = GetBucketLocationResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetBucketLocationResponse' <$>
+                   (x .@? "LocationConstraint") <*> (pure (fromEnum s)))
 
-gblrLocationConstraint :: Lens' GetBucketLocationResponse (Maybe Region)
-gblrLocationConstraint =
-    lens _gblrLocationConstraint (\s a -> s { _gblrLocationConstraint = a })
+instance ToHeaders GetBucketLocation where
+        toHeaders = const mempty
 
 instance ToPath GetBucketLocation where
-    toPath GetBucketLocation{..} = mconcat
-        [ "/"
-        , toText _gblBucket
-        ]
+        toPath GetBucketLocation'{..}
+          = mconcat ["/", toBS _gblBucket]
 
 instance ToQuery GetBucketLocation where
-    toQuery = const "location"
-
-instance ToHeaders GetBucketLocation
-
-instance ToXMLRoot GetBucketLocation where
-    toXMLRoot = const (namespaced ns "GetBucketLocation" [])
+        toQuery = const (mconcat ["location"])
 
-instance ToXML GetBucketLocation
+-- | /See:/ 'getBucketLocationResponse' smart constructor.
+data GetBucketLocationResponse = GetBucketLocationResponse'
+    { _getrsLocationConstraint :: !(Maybe Region)
+    , _getrsStatus             :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetBucketLocation where
-    type Sv GetBucketLocation = S3
-    type Rs GetBucketLocation = GetBucketLocationResponse
+-- | Creates a value of 'GetBucketLocationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'getrsLocationConstraint'
+--
+-- * 'getrsStatus'
+getBucketLocationResponse
+    :: Int -- ^ 'getrsStatus'
+    -> GetBucketLocationResponse
+getBucketLocationResponse pStatus_ =
+    GetBucketLocationResponse'
+    { _getrsLocationConstraint = Nothing
+    , _getrsStatus = pStatus_
+    }
 
-    request  = get
-    response = xmlResponse
+-- | Undocumented member.
+getrsLocationConstraint :: Lens' GetBucketLocationResponse (Maybe Region)
+getrsLocationConstraint = lens _getrsLocationConstraint (\ s a -> s{_getrsLocationConstraint = a});
 
-instance FromXML GetBucketLocationResponse where
-    parseXML x = GetBucketLocationResponse
-        <$> x .@? "LocationConstraint"
+-- | The response status code.
+getrsStatus :: Lens' GetBucketLocationResponse Int
+getrsStatus = lens _getrsStatus (\ s a -> s{_getrsStatus = a});
diff --git a/gen/Network/AWS/S3/GetBucketLogging.hs b/gen/Network/AWS/S3/GetBucketLogging.hs
--- a/gen/Network/AWS/S3/GetBucketLogging.hs
+++ b/gen/Network/AWS/S3/GetBucketLogging.hs
@@ -1,114 +1,117 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.GetBucketLogging
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns the logging status of a bucket and the permissions users have to view
--- and modify that status. To use GET, you must be the bucket owner.
+-- Returns the logging status of a bucket and the permissions users have to
+-- view and modify that status. To use GET, you must be the bucket owner.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketLogging.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketLogging.html AWS API Reference> for GetBucketLogging.
 module Network.AWS.S3.GetBucketLogging
     (
-    -- * Request
-      GetBucketLogging
-    -- ** Request constructor
-    , getBucketLogging
-    -- ** Request lenses
-    , gbl2Bucket
+    -- * Creating a Request
+      getBucketLogging
+    , GetBucketLogging
+    -- * Request Lenses
+    , getBucket
 
-    -- * Response
-    , GetBucketLoggingResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getBucketLoggingResponse
-    -- ** Response lenses
-    , gblrLoggingEnabled
+    , GetBucketLoggingResponse
+    -- * Response Lenses
+    , grsLoggingEnabled
+    , grsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-newtype GetBucketLogging = GetBucketLogging
-    { _gbl2Bucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'getBucketLogging' smart constructor.
+newtype GetBucketLogging = GetBucketLogging'
+    { _getBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetBucketLogging' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetBucketLogging' with the minimum fields required to make a request.
 --
--- * 'gbl2Bucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getBucketLogging :: Text -- ^ 'gbl2Bucket'
-                 -> GetBucketLogging
-getBucketLogging p1 = GetBucketLogging
-    { _gbl2Bucket = p1
+-- * 'getBucket'
+getBucketLogging
+    :: BucketName -- ^ 'getBucket'
+    -> GetBucketLogging
+getBucketLogging pBucket_ =
+    GetBucketLogging'
+    { _getBucket = pBucket_
     }
 
-gbl2Bucket :: Lens' GetBucketLogging Text
-gbl2Bucket = lens _gbl2Bucket (\s a -> s { _gbl2Bucket = a })
-
-newtype GetBucketLoggingResponse = GetBucketLoggingResponse
-    { _gblrLoggingEnabled :: Maybe LoggingEnabled
-    } deriving (Eq, Read, Show)
+-- | Undocumented member.
+getBucket :: Lens' GetBucketLogging BucketName
+getBucket = lens _getBucket (\ s a -> s{_getBucket = a});
 
--- | 'GetBucketLoggingResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gblrLoggingEnabled' @::@ 'Maybe' 'LoggingEnabled'
---
-getBucketLoggingResponse :: GetBucketLoggingResponse
-getBucketLoggingResponse = GetBucketLoggingResponse
-    { _gblrLoggingEnabled = Nothing
-    }
+instance AWSRequest GetBucketLogging where
+        type Sv GetBucketLogging = S3
+        type Rs GetBucketLogging = GetBucketLoggingResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetBucketLoggingResponse' <$>
+                   (x .@? "LoggingEnabled") <*> (pure (fromEnum s)))
 
-gblrLoggingEnabled :: Lens' GetBucketLoggingResponse (Maybe LoggingEnabled)
-gblrLoggingEnabled =
-    lens _gblrLoggingEnabled (\s a -> s { _gblrLoggingEnabled = a })
+instance ToHeaders GetBucketLogging where
+        toHeaders = const mempty
 
 instance ToPath GetBucketLogging where
-    toPath GetBucketLogging{..} = mconcat
-        [ "/"
-        , toText _gbl2Bucket
-        ]
+        toPath GetBucketLogging'{..}
+          = mconcat ["/", toBS _getBucket]
 
 instance ToQuery GetBucketLogging where
-    toQuery = const "logging"
-
-instance ToHeaders GetBucketLogging
-
-instance ToXMLRoot GetBucketLogging where
-    toXMLRoot = const (namespaced ns "GetBucketLogging" [])
+        toQuery = const (mconcat ["logging"])
 
-instance ToXML GetBucketLogging
+-- | /See:/ 'getBucketLoggingResponse' smart constructor.
+data GetBucketLoggingResponse = GetBucketLoggingResponse'
+    { _grsLoggingEnabled :: !(Maybe LoggingEnabled)
+    , _grsStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetBucketLogging where
-    type Sv GetBucketLogging = S3
-    type Rs GetBucketLogging = GetBucketLoggingResponse
+-- | Creates a value of 'GetBucketLoggingResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'grsLoggingEnabled'
+--
+-- * 'grsStatus'
+getBucketLoggingResponse
+    :: Int -- ^ 'grsStatus'
+    -> GetBucketLoggingResponse
+getBucketLoggingResponse pStatus_ =
+    GetBucketLoggingResponse'
+    { _grsLoggingEnabled = Nothing
+    , _grsStatus = pStatus_
+    }
 
-    request  = get
-    response = xmlResponse
+-- | Undocumented member.
+grsLoggingEnabled :: Lens' GetBucketLoggingResponse (Maybe LoggingEnabled)
+grsLoggingEnabled = lens _grsLoggingEnabled (\ s a -> s{_grsLoggingEnabled = a});
 
-instance FromXML GetBucketLoggingResponse where
-    parseXML x = GetBucketLoggingResponse
-        <$> x .@? "LoggingEnabled"
+-- | The response status code.
+grsStatus :: Lens' GetBucketLoggingResponse Int
+grsStatus = lens _grsStatus (\ s a -> s{_grsStatus = a});
diff --git a/gen/Network/AWS/S3/GetBucketNotification.hs b/gen/Network/AWS/S3/GetBucketNotification.hs
deleted file mode 100644
--- a/gen/Network/AWS/S3/GetBucketNotification.hs
+++ /dev/null
@@ -1,135 +0,0 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.S3.GetBucketNotification
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deprecated, see the GetBucketNotificationConfiguration operation.
---
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketNotification.html>
-module Network.AWS.S3.GetBucketNotification
-    (
-    -- * Request
-      GetBucketNotification
-    -- ** Request constructor
-    , getBucketNotification
-    -- ** Request lenses
-    , gbnBucket
-
-    -- * Response
-    , GetBucketNotificationResponse
-    -- ** Response constructor
-    , getBucketNotificationResponse
-    -- ** Response lenses
-    , gbnrCloudFunctionConfiguration
-    , gbnrQueueConfiguration
-    , gbnrTopicConfiguration
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
-
-newtype GetBucketNotification = GetBucketNotification
-    { _gbnBucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
-
--- | 'GetBucketNotification' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gbnBucket' @::@ 'Text'
---
-getBucketNotification :: Text -- ^ 'gbnBucket'
-                      -> GetBucketNotification
-getBucketNotification p1 = GetBucketNotification
-    { _gbnBucket = p1
-    }
-
--- | Name of the buket to get the notification configuration for.
-gbnBucket :: Lens' GetBucketNotification Text
-gbnBucket = lens _gbnBucket (\s a -> s { _gbnBucket = a })
-
-data GetBucketNotificationResponse = GetBucketNotificationResponse
-    { _gbnrCloudFunctionConfiguration :: Maybe CloudFunctionConfiguration
-    , _gbnrQueueConfiguration         :: Maybe QueueConfigurationDeprecated
-    , _gbnrTopicConfiguration         :: Maybe TopicConfigurationDeprecated
-    } deriving (Eq, Read, Show)
-
--- | 'GetBucketNotificationResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gbnrCloudFunctionConfiguration' @::@ 'Maybe' 'CloudFunctionConfiguration'
---
--- * 'gbnrQueueConfiguration' @::@ 'Maybe' 'QueueConfigurationDeprecated'
---
--- * 'gbnrTopicConfiguration' @::@ 'Maybe' 'TopicConfigurationDeprecated'
---
-getBucketNotificationResponse :: GetBucketNotificationResponse
-getBucketNotificationResponse = GetBucketNotificationResponse
-    { _gbnrTopicConfiguration         = Nothing
-    , _gbnrQueueConfiguration         = Nothing
-    , _gbnrCloudFunctionConfiguration = Nothing
-    }
-
-gbnrCloudFunctionConfiguration :: Lens' GetBucketNotificationResponse (Maybe CloudFunctionConfiguration)
-gbnrCloudFunctionConfiguration =
-    lens _gbnrCloudFunctionConfiguration
-        (\s a -> s { _gbnrCloudFunctionConfiguration = a })
-
-gbnrQueueConfiguration :: Lens' GetBucketNotificationResponse (Maybe QueueConfigurationDeprecated)
-gbnrQueueConfiguration =
-    lens _gbnrQueueConfiguration (\s a -> s { _gbnrQueueConfiguration = a })
-
-gbnrTopicConfiguration :: Lens' GetBucketNotificationResponse (Maybe TopicConfigurationDeprecated)
-gbnrTopicConfiguration =
-    lens _gbnrTopicConfiguration (\s a -> s { _gbnrTopicConfiguration = a })
-
-instance ToPath GetBucketNotification where
-    toPath GetBucketNotification{..} = mconcat
-        [ "/"
-        , toText _gbnBucket
-        ]
-
-instance ToQuery GetBucketNotification where
-    toQuery = const "notification"
-
-instance ToHeaders GetBucketNotification
-
-instance ToXMLRoot GetBucketNotification where
-    toXMLRoot = const (namespaced ns "GetBucketNotification" [])
-
-instance ToXML GetBucketNotification
-
-instance AWSRequest GetBucketNotification where
-    type Sv GetBucketNotification = S3
-    type Rs GetBucketNotification = GetBucketNotificationResponse
-
-    request  = get
-    response = xmlResponse
-
-instance FromXML GetBucketNotificationResponse where
-    parseXML x = GetBucketNotificationResponse
-        <$> x .@? "CloudFunctionConfiguration"
-        <*> x .@? "QueueConfiguration"
-        <*> x .@? "TopicConfiguration"
diff --git a/gen/Network/AWS/S3/GetBucketNotificationConfiguration.hs b/gen/Network/AWS/S3/GetBucketNotificationConfiguration.hs
--- a/gen/Network/AWS/S3/GetBucketNotificationConfiguration.hs
+++ b/gen/Network/AWS/S3/GetBucketNotificationConfiguration.hs
@@ -1,140 +1,88 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.GetBucketNotificationConfiguration
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns the notification configuration of a bucket.
+-- Returns the notification configuration of a bucket.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketNotificationConfiguration.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketNotificationConfiguration.html AWS API Reference> for GetBucketNotificationConfiguration.
 module Network.AWS.S3.GetBucketNotificationConfiguration
     (
-    -- * Request
-      GetBucketNotificationConfiguration
-    -- ** Request constructor
-    , getBucketNotificationConfiguration
-    -- ** Request lenses
-    , gbnc1Bucket
+    -- * Creating a Request
+      getBucketNotificationConfiguration
+    , GetBucketNotificationConfiguration
+    -- * Request Lenses
+    , gbncBucket
 
-    -- * Response
-    , GetBucketNotificationConfigurationResponse
-    -- ** Response constructor
-    , getBucketNotificationConfigurationResponse
-    -- ** Response lenses
-    , gbncrLambdaFunctionConfigurations
-    , gbncrQueueConfigurations
-    , gbncrTopicConfigurations
+    -- * Destructuring the Response
+    , notificationConfiguration
+    , NotificationConfiguration
+    -- * Response Lenses
+    , ncQueueConfigurations
+    , ncTopicConfigurations
+    , ncLambdaFunctionConfigurations
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-newtype GetBucketNotificationConfiguration = GetBucketNotificationConfiguration
-    { _gbnc1Bucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'getBucketNotificationConfiguration' smart constructor.
+newtype GetBucketNotificationConfiguration = GetBucketNotificationConfiguration'
+    { _gbncBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetBucketNotificationConfiguration' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetBucketNotificationConfiguration' with the minimum fields required to make a request.
 --
--- * 'gbnc1Bucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getBucketNotificationConfiguration :: Text -- ^ 'gbnc1Bucket'
-                                   -> GetBucketNotificationConfiguration
-getBucketNotificationConfiguration p1 = GetBucketNotificationConfiguration
-    { _gbnc1Bucket = p1
+-- * 'gbncBucket'
+getBucketNotificationConfiguration
+    :: BucketName -- ^ 'gbncBucket'
+    -> GetBucketNotificationConfiguration
+getBucketNotificationConfiguration pBucket_ =
+    GetBucketNotificationConfiguration'
+    { _gbncBucket = pBucket_
     }
 
 -- | Name of the buket to get the notification configuration for.
-gbnc1Bucket :: Lens' GetBucketNotificationConfiguration Text
-gbnc1Bucket = lens _gbnc1Bucket (\s a -> s { _gbnc1Bucket = a })
-
-data GetBucketNotificationConfigurationResponse = GetBucketNotificationConfigurationResponse
-    { _gbncrLambdaFunctionConfigurations :: List "CloudFunctionConfiguration" LambdaFunctionConfiguration
-    , _gbncrQueueConfigurations          :: List "QueueConfiguration" QueueConfiguration
-    , _gbncrTopicConfigurations          :: List "TopicConfiguration" TopicConfiguration
-    } deriving (Eq, Read, Show)
-
--- | 'GetBucketNotificationConfigurationResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gbncrLambdaFunctionConfigurations' @::@ ['LambdaFunctionConfiguration']
---
--- * 'gbncrQueueConfigurations' @::@ ['QueueConfiguration']
---
--- * 'gbncrTopicConfigurations' @::@ ['TopicConfiguration']
---
-getBucketNotificationConfigurationResponse :: GetBucketNotificationConfigurationResponse
-getBucketNotificationConfigurationResponse = GetBucketNotificationConfigurationResponse
-    { _gbncrTopicConfigurations          = mempty
-    , _gbncrQueueConfigurations          = mempty
-    , _gbncrLambdaFunctionConfigurations = mempty
-    }
-
-gbncrLambdaFunctionConfigurations :: Lens' GetBucketNotificationConfigurationResponse [LambdaFunctionConfiguration]
-gbncrLambdaFunctionConfigurations =
-    lens _gbncrLambdaFunctionConfigurations
-        (\s a -> s { _gbncrLambdaFunctionConfigurations = a })
-            . _List
-
-gbncrQueueConfigurations :: Lens' GetBucketNotificationConfigurationResponse [QueueConfiguration]
-gbncrQueueConfigurations =
-    lens _gbncrQueueConfigurations
-        (\s a -> s { _gbncrQueueConfigurations = a })
-            . _List
-
-gbncrTopicConfigurations :: Lens' GetBucketNotificationConfigurationResponse [TopicConfiguration]
-gbncrTopicConfigurations =
-    lens _gbncrTopicConfigurations
-        (\s a -> s { _gbncrTopicConfigurations = a })
-            . _List
-
-instance ToPath GetBucketNotificationConfiguration where
-    toPath GetBucketNotificationConfiguration{..} = mconcat
-        [ "/"
-        , toText _gbnc1Bucket
-        ]
+gbncBucket :: Lens' GetBucketNotificationConfiguration BucketName
+gbncBucket = lens _gbncBucket (\ s a -> s{_gbncBucket = a});
 
-instance ToQuery GetBucketNotificationConfiguration where
-    toQuery = const "notification"
+instance AWSRequest
+         GetBucketNotificationConfiguration where
+        type Sv GetBucketNotificationConfiguration = S3
+        type Rs GetBucketNotificationConfiguration =
+             NotificationConfiguration
+        request = get
+        response = receiveXML (\ s h x -> parseXML x)
 
 instance ToHeaders GetBucketNotificationConfiguration
-
-instance ToXMLRoot GetBucketNotificationConfiguration where
-    toXMLRoot = const (namespaced ns "GetBucketNotificationConfiguration" [])
-
-instance ToXML GetBucketNotificationConfiguration
-
-instance AWSRequest GetBucketNotificationConfiguration where
-    type Sv GetBucketNotificationConfiguration = S3
-    type Rs GetBucketNotificationConfiguration = GetBucketNotificationConfigurationResponse
+         where
+        toHeaders = const mempty
 
-    request  = get
-    response = xmlResponse
+instance ToPath GetBucketNotificationConfiguration
+         where
+        toPath GetBucketNotificationConfiguration'{..}
+          = mconcat ["/", toBS _gbncBucket]
 
-instance FromXML GetBucketNotificationConfigurationResponse where
-    parseXML x = GetBucketNotificationConfigurationResponse
-        <$> parseXML x
-        <*> parseXML x
-        <*> parseXML x
+instance ToQuery GetBucketNotificationConfiguration
+         where
+        toQuery = const (mconcat ["notification"])
diff --git a/gen/Network/AWS/S3/GetBucketPolicy.hs b/gen/Network/AWS/S3/GetBucketPolicy.hs
--- a/gen/Network/AWS/S3/GetBucketPolicy.hs
+++ b/gen/Network/AWS/S3/GetBucketPolicy.hs
@@ -1,113 +1,116 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.GetBucketPolicy
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns the policy of a specified bucket.
+-- Returns the policy of a specified bucket.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketPolicy.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketPolicy.html AWS API Reference> for GetBucketPolicy.
 module Network.AWS.S3.GetBucketPolicy
     (
-    -- * Request
-      GetBucketPolicy
-    -- ** Request constructor
-    , getBucketPolicy
-    -- ** Request lenses
+    -- * Creating a Request
+      getBucketPolicy
+    , GetBucketPolicy
+    -- * Request Lenses
     , gbpBucket
 
-    -- * Response
-    , GetBucketPolicyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getBucketPolicyResponse
-    -- ** Response lenses
-    , gbprPolicy
+    , GetBucketPolicyResponse
+    -- * Response Lenses
+    , gbprsPolicy
+    , gbprsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-newtype GetBucketPolicy = GetBucketPolicy
-    { _gbpBucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'getBucketPolicy' smart constructor.
+newtype GetBucketPolicy = GetBucketPolicy'
+    { _gbpBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetBucketPolicy' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetBucketPolicy' with the minimum fields required to make a request.
 --
--- * 'gbpBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getBucketPolicy :: Text -- ^ 'gbpBucket'
-                -> GetBucketPolicy
-getBucketPolicy p1 = GetBucketPolicy
-    { _gbpBucket = p1
+-- * 'gbpBucket'
+getBucketPolicy
+    :: BucketName -- ^ 'gbpBucket'
+    -> GetBucketPolicy
+getBucketPolicy pBucket_ =
+    GetBucketPolicy'
+    { _gbpBucket = pBucket_
     }
 
-gbpBucket :: Lens' GetBucketPolicy Text
-gbpBucket = lens _gbpBucket (\s a -> s { _gbpBucket = a })
-
-newtype GetBucketPolicyResponse = GetBucketPolicyResponse
-    { _gbprPolicy :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
+-- | Undocumented member.
+gbpBucket :: Lens' GetBucketPolicy BucketName
+gbpBucket = lens _gbpBucket (\ s a -> s{_gbpBucket = a});
 
--- | 'GetBucketPolicyResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gbprPolicy' @::@ 'Maybe' 'Text'
---
-getBucketPolicyResponse :: GetBucketPolicyResponse
-getBucketPolicyResponse = GetBucketPolicyResponse
-    { _gbprPolicy = Nothing
-    }
+instance AWSRequest GetBucketPolicy where
+        type Sv GetBucketPolicy = S3
+        type Rs GetBucketPolicy = GetBucketPolicyResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetBucketPolicyResponse' <$>
+                   (parseXML x) <*> (pure (fromEnum s)))
 
--- | The bucket policy as a JSON document.
-gbprPolicy :: Lens' GetBucketPolicyResponse (Maybe Text)
-gbprPolicy = lens _gbprPolicy (\s a -> s { _gbprPolicy = a })
+instance ToHeaders GetBucketPolicy where
+        toHeaders = const mempty
 
 instance ToPath GetBucketPolicy where
-    toPath GetBucketPolicy{..} = mconcat
-        [ "/"
-        , toText _gbpBucket
-        ]
+        toPath GetBucketPolicy'{..}
+          = mconcat ["/", toBS _gbpBucket]
 
 instance ToQuery GetBucketPolicy where
-    toQuery = const "policy"
-
-instance ToHeaders GetBucketPolicy
-
-instance ToXMLRoot GetBucketPolicy where
-    toXMLRoot = const (namespaced ns "GetBucketPolicy" [])
+        toQuery = const (mconcat ["policy"])
 
-instance ToXML GetBucketPolicy
+-- | /See:/ 'getBucketPolicyResponse' smart constructor.
+data GetBucketPolicyResponse = GetBucketPolicyResponse'
+    { _gbprsPolicy :: !(Maybe Text)
+    , _gbprsStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetBucketPolicy where
-    type Sv GetBucketPolicy = S3
-    type Rs GetBucketPolicy = GetBucketPolicyResponse
+-- | Creates a value of 'GetBucketPolicyResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbprsPolicy'
+--
+-- * 'gbprsStatus'
+getBucketPolicyResponse
+    :: Int -- ^ 'gbprsStatus'
+    -> GetBucketPolicyResponse
+getBucketPolicyResponse pStatus_ =
+    GetBucketPolicyResponse'
+    { _gbprsPolicy = Nothing
+    , _gbprsStatus = pStatus_
+    }
 
-    request  = get
-    response = xmlResponse
+-- | The bucket policy as a JSON document.
+gbprsPolicy :: Lens' GetBucketPolicyResponse (Maybe Text)
+gbprsPolicy = lens _gbprsPolicy (\ s a -> s{_gbprsPolicy = a});
 
-instance FromXML GetBucketPolicyResponse where
-    parseXML x = GetBucketPolicyResponse
-        <$> x .@? "Policy"
+-- | The response status code.
+gbprsStatus :: Lens' GetBucketPolicyResponse Int
+gbprsStatus = lens _gbprsStatus (\ s a -> s{_gbprsStatus = a});
diff --git a/gen/Network/AWS/S3/GetBucketReplication.hs b/gen/Network/AWS/S3/GetBucketReplication.hs
--- a/gen/Network/AWS/S3/GetBucketReplication.hs
+++ b/gen/Network/AWS/S3/GetBucketReplication.hs
@@ -1,112 +1,117 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.GetBucketReplication
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketReplication.html>
+-- Undocumented operation.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketReplication.html AWS API Reference> for GetBucketReplication.
 module Network.AWS.S3.GetBucketReplication
     (
-    -- * Request
-      GetBucketReplication
-    -- ** Request constructor
-    , getBucketReplication
-    -- ** Request lenses
+    -- * Creating a Request
+      getBucketReplication
+    , GetBucketReplication
+    -- * Request Lenses
     , gbrBucket
 
-    -- * Response
-    , GetBucketReplicationResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getBucketReplicationResponse
-    -- ** Response lenses
-    , gbrrReplicationConfiguration
+    , GetBucketReplicationResponse
+    -- * Response Lenses
+    , gbrrsReplicationConfiguration
+    , gbrrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-newtype GetBucketReplication = GetBucketReplication
-    { _gbrBucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'getBucketReplication' smart constructor.
+newtype GetBucketReplication = GetBucketReplication'
+    { _gbrBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetBucketReplication' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetBucketReplication' with the minimum fields required to make a request.
 --
--- * 'gbrBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getBucketReplication :: Text -- ^ 'gbrBucket'
-                     -> GetBucketReplication
-getBucketReplication p1 = GetBucketReplication
-    { _gbrBucket = p1
+-- * 'gbrBucket'
+getBucketReplication
+    :: BucketName -- ^ 'gbrBucket'
+    -> GetBucketReplication
+getBucketReplication pBucket_ =
+    GetBucketReplication'
+    { _gbrBucket = pBucket_
     }
 
-gbrBucket :: Lens' GetBucketReplication Text
-gbrBucket = lens _gbrBucket (\s a -> s { _gbrBucket = a })
-
-newtype GetBucketReplicationResponse = GetBucketReplicationResponse
-    { _gbrrReplicationConfiguration :: Maybe ReplicationConfiguration
-    } deriving (Eq, Read, Show)
+-- | Undocumented member.
+gbrBucket :: Lens' GetBucketReplication BucketName
+gbrBucket = lens _gbrBucket (\ s a -> s{_gbrBucket = a});
 
--- | 'GetBucketReplicationResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gbrrReplicationConfiguration' @::@ 'Maybe' 'ReplicationConfiguration'
---
-getBucketReplicationResponse :: GetBucketReplicationResponse
-getBucketReplicationResponse = GetBucketReplicationResponse
-    { _gbrrReplicationConfiguration = Nothing
-    }
+instance AWSRequest GetBucketReplication where
+        type Sv GetBucketReplication = S3
+        type Rs GetBucketReplication =
+             GetBucketReplicationResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetBucketReplicationResponse' <$>
+                   (parseXML x) <*> (pure (fromEnum s)))
 
-gbrrReplicationConfiguration :: Lens' GetBucketReplicationResponse (Maybe ReplicationConfiguration)
-gbrrReplicationConfiguration =
-    lens _gbrrReplicationConfiguration
-        (\s a -> s { _gbrrReplicationConfiguration = a })
+instance ToHeaders GetBucketReplication where
+        toHeaders = const mempty
 
 instance ToPath GetBucketReplication where
-    toPath GetBucketReplication{..} = mconcat
-        [ "/"
-        , toText _gbrBucket
-        ]
+        toPath GetBucketReplication'{..}
+          = mconcat ["/", toBS _gbrBucket]
 
 instance ToQuery GetBucketReplication where
-    toQuery = const "replication"
-
-instance ToHeaders GetBucketReplication
-
-instance ToXMLRoot GetBucketReplication where
-    toXMLRoot = const (namespaced ns "GetBucketReplication" [])
+        toQuery = const (mconcat ["replication"])
 
-instance ToXML GetBucketReplication
+-- | /See:/ 'getBucketReplicationResponse' smart constructor.
+data GetBucketReplicationResponse = GetBucketReplicationResponse'
+    { _gbrrsReplicationConfiguration :: !(Maybe ReplicationConfiguration)
+    , _gbrrsStatus                   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetBucketReplication where
-    type Sv GetBucketReplication = S3
-    type Rs GetBucketReplication = GetBucketReplicationResponse
+-- | Creates a value of 'GetBucketReplicationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbrrsReplicationConfiguration'
+--
+-- * 'gbrrsStatus'
+getBucketReplicationResponse
+    :: Int -- ^ 'gbrrsStatus'
+    -> GetBucketReplicationResponse
+getBucketReplicationResponse pStatus_ =
+    GetBucketReplicationResponse'
+    { _gbrrsReplicationConfiguration = Nothing
+    , _gbrrsStatus = pStatus_
+    }
 
-    request  = get
-    response = xmlResponse
+-- | Undocumented member.
+gbrrsReplicationConfiguration :: Lens' GetBucketReplicationResponse (Maybe ReplicationConfiguration)
+gbrrsReplicationConfiguration = lens _gbrrsReplicationConfiguration (\ s a -> s{_gbrrsReplicationConfiguration = a});
 
-instance FromXML GetBucketReplicationResponse where
-    parseXML x = GetBucketReplicationResponse
-        <$> x .@? "ReplicationConfiguration"
+-- | The response status code.
+gbrrsStatus :: Lens' GetBucketReplicationResponse Int
+gbrrsStatus = lens _gbrrsStatus (\ s a -> s{_gbrrsStatus = a});
diff --git a/gen/Network/AWS/S3/GetBucketRequestPayment.hs b/gen/Network/AWS/S3/GetBucketRequestPayment.hs
--- a/gen/Network/AWS/S3/GetBucketRequestPayment.hs
+++ b/gen/Network/AWS/S3/GetBucketRequestPayment.hs
@@ -1,113 +1,117 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.GetBucketRequestPayment
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns the request payment configuration of a bucket.
+-- Returns the request payment configuration of a bucket.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketRequestPayment.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketRequestPayment.html AWS API Reference> for GetBucketRequestPayment.
 module Network.AWS.S3.GetBucketRequestPayment
     (
-    -- * Request
-      GetBucketRequestPayment
-    -- ** Request constructor
-    , getBucketRequestPayment
-    -- ** Request lenses
+    -- * Creating a Request
+      getBucketRequestPayment
+    , GetBucketRequestPayment
+    -- * Request Lenses
     , gbrpBucket
 
-    -- * Response
-    , GetBucketRequestPaymentResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getBucketRequestPaymentResponse
-    -- ** Response lenses
-    , gbrprPayer
+    , GetBucketRequestPaymentResponse
+    -- * Response Lenses
+    , gbrprsPayer
+    , gbrprsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-newtype GetBucketRequestPayment = GetBucketRequestPayment
-    { _gbrpBucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'getBucketRequestPayment' smart constructor.
+newtype GetBucketRequestPayment = GetBucketRequestPayment'
+    { _gbrpBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetBucketRequestPayment' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetBucketRequestPayment' with the minimum fields required to make a request.
 --
--- * 'gbrpBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getBucketRequestPayment :: Text -- ^ 'gbrpBucket'
-                        -> GetBucketRequestPayment
-getBucketRequestPayment p1 = GetBucketRequestPayment
-    { _gbrpBucket = p1
+-- * 'gbrpBucket'
+getBucketRequestPayment
+    :: BucketName -- ^ 'gbrpBucket'
+    -> GetBucketRequestPayment
+getBucketRequestPayment pBucket_ =
+    GetBucketRequestPayment'
+    { _gbrpBucket = pBucket_
     }
 
-gbrpBucket :: Lens' GetBucketRequestPayment Text
-gbrpBucket = lens _gbrpBucket (\s a -> s { _gbrpBucket = a })
-
-newtype GetBucketRequestPaymentResponse = GetBucketRequestPaymentResponse
-    { _gbrprPayer :: Maybe Payer
-    } deriving (Eq, Read, Show)
+-- | Undocumented member.
+gbrpBucket :: Lens' GetBucketRequestPayment BucketName
+gbrpBucket = lens _gbrpBucket (\ s a -> s{_gbrpBucket = a});
 
--- | 'GetBucketRequestPaymentResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gbrprPayer' @::@ 'Maybe' 'Payer'
---
-getBucketRequestPaymentResponse :: GetBucketRequestPaymentResponse
-getBucketRequestPaymentResponse = GetBucketRequestPaymentResponse
-    { _gbrprPayer = Nothing
-    }
+instance AWSRequest GetBucketRequestPayment where
+        type Sv GetBucketRequestPayment = S3
+        type Rs GetBucketRequestPayment =
+             GetBucketRequestPaymentResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetBucketRequestPaymentResponse' <$>
+                   (x .@? "Payer") <*> (pure (fromEnum s)))
 
--- | Specifies who pays for the download and request fees.
-gbrprPayer :: Lens' GetBucketRequestPaymentResponse (Maybe Payer)
-gbrprPayer = lens _gbrprPayer (\s a -> s { _gbrprPayer = a })
+instance ToHeaders GetBucketRequestPayment where
+        toHeaders = const mempty
 
 instance ToPath GetBucketRequestPayment where
-    toPath GetBucketRequestPayment{..} = mconcat
-        [ "/"
-        , toText _gbrpBucket
-        ]
+        toPath GetBucketRequestPayment'{..}
+          = mconcat ["/", toBS _gbrpBucket]
 
 instance ToQuery GetBucketRequestPayment where
-    toQuery = const "requestPayment"
-
-instance ToHeaders GetBucketRequestPayment
-
-instance ToXMLRoot GetBucketRequestPayment where
-    toXMLRoot = const (namespaced ns "GetBucketRequestPayment" [])
+        toQuery = const (mconcat ["requestPayment"])
 
-instance ToXML GetBucketRequestPayment
+-- | /See:/ 'getBucketRequestPaymentResponse' smart constructor.
+data GetBucketRequestPaymentResponse = GetBucketRequestPaymentResponse'
+    { _gbrprsPayer  :: !(Maybe Payer)
+    , _gbrprsStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetBucketRequestPayment where
-    type Sv GetBucketRequestPayment = S3
-    type Rs GetBucketRequestPayment = GetBucketRequestPaymentResponse
+-- | Creates a value of 'GetBucketRequestPaymentResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbrprsPayer'
+--
+-- * 'gbrprsStatus'
+getBucketRequestPaymentResponse
+    :: Int -- ^ 'gbrprsStatus'
+    -> GetBucketRequestPaymentResponse
+getBucketRequestPaymentResponse pStatus_ =
+    GetBucketRequestPaymentResponse'
+    { _gbrprsPayer = Nothing
+    , _gbrprsStatus = pStatus_
+    }
 
-    request  = get
-    response = xmlResponse
+-- | Specifies who pays for the download and request fees.
+gbrprsPayer :: Lens' GetBucketRequestPaymentResponse (Maybe Payer)
+gbrprsPayer = lens _gbrprsPayer (\ s a -> s{_gbrprsPayer = a});
 
-instance FromXML GetBucketRequestPaymentResponse where
-    parseXML x = GetBucketRequestPaymentResponse
-        <$> x .@? "Payer"
+-- | The response status code.
+gbrprsStatus :: Lens' GetBucketRequestPaymentResponse Int
+gbrprsStatus = lens _gbrprsStatus (\ s a -> s{_gbrprsStatus = a});
diff --git a/gen/Network/AWS/S3/GetBucketTagging.hs b/gen/Network/AWS/S3/GetBucketTagging.hs
--- a/gen/Network/AWS/S3/GetBucketTagging.hs
+++ b/gen/Network/AWS/S3/GetBucketTagging.hs
@@ -1,118 +1,117 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.GetBucketTagging
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns the tag set associated with the bucket.
+-- Returns the tag set associated with the bucket.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketTagging.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketTagging.html AWS API Reference> for GetBucketTagging.
 module Network.AWS.S3.GetBucketTagging
     (
-    -- * Request
-      GetBucketTagging
-    -- ** Request constructor
-    , getBucketTagging
-    -- ** Request lenses
+    -- * Creating a Request
+      getBucketTagging
+    , GetBucketTagging
+    -- * Request Lenses
     , gbtBucket
 
-    -- * Response
-    , GetBucketTaggingResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getBucketTaggingResponse
-    -- ** Response lenses
-    , gbtrTagSet
+    , GetBucketTaggingResponse
+    -- * Response Lenses
+    , gbtrsStatus
+    , gbtrsTagSet
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-newtype GetBucketTagging = GetBucketTagging
-    { _gbtBucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'getBucketTagging' smart constructor.
+newtype GetBucketTagging = GetBucketTagging'
+    { _gbtBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetBucketTagging' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetBucketTagging' with the minimum fields required to make a request.
 --
--- * 'gbtBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getBucketTagging :: Text -- ^ 'gbtBucket'
-                 -> GetBucketTagging
-getBucketTagging p1 = GetBucketTagging
-    { _gbtBucket = p1
+-- * 'gbtBucket'
+getBucketTagging
+    :: BucketName -- ^ 'gbtBucket'
+    -> GetBucketTagging
+getBucketTagging pBucket_ =
+    GetBucketTagging'
+    { _gbtBucket = pBucket_
     }
 
-gbtBucket :: Lens' GetBucketTagging Text
-gbtBucket = lens _gbtBucket (\s a -> s { _gbtBucket = a })
-
-newtype GetBucketTaggingResponse = GetBucketTaggingResponse
-    { _gbtrTagSet :: List "Tag" Tag
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
-
-instance GHC.Exts.IsList GetBucketTaggingResponse where
-    type Item GetBucketTaggingResponse = Tag
-
-    fromList = GetBucketTaggingResponse . GHC.Exts.fromList
-    toList   = GHC.Exts.toList . _gbtrTagSet
+-- | Undocumented member.
+gbtBucket :: Lens' GetBucketTagging BucketName
+gbtBucket = lens _gbtBucket (\ s a -> s{_gbtBucket = a});
 
--- | 'GetBucketTaggingResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gbtrTagSet' @::@ ['Tag']
---
-getBucketTaggingResponse :: GetBucketTaggingResponse
-getBucketTaggingResponse = GetBucketTaggingResponse
-    { _gbtrTagSet = mempty
-    }
+instance AWSRequest GetBucketTagging where
+        type Sv GetBucketTagging = S3
+        type Rs GetBucketTagging = GetBucketTaggingResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetBucketTaggingResponse' <$>
+                   (pure (fromEnum s)) <*>
+                     (x .@? "TagSet" .!@ mempty >>= parseXMLList "Tag"))
 
-gbtrTagSet :: Lens' GetBucketTaggingResponse [Tag]
-gbtrTagSet = lens _gbtrTagSet (\s a -> s { _gbtrTagSet = a }) . _List
+instance ToHeaders GetBucketTagging where
+        toHeaders = const mempty
 
 instance ToPath GetBucketTagging where
-    toPath GetBucketTagging{..} = mconcat
-        [ "/"
-        , toText _gbtBucket
-        ]
+        toPath GetBucketTagging'{..}
+          = mconcat ["/", toBS _gbtBucket]
 
 instance ToQuery GetBucketTagging where
-    toQuery = const "tagging"
-
-instance ToHeaders GetBucketTagging
-
-instance ToXMLRoot GetBucketTagging where
-    toXMLRoot = const (namespaced ns "GetBucketTagging" [])
+        toQuery = const (mconcat ["tagging"])
 
-instance ToXML GetBucketTagging
+-- | /See:/ 'getBucketTaggingResponse' smart constructor.
+data GetBucketTaggingResponse = GetBucketTaggingResponse'
+    { _gbtrsStatus :: !Int
+    , _gbtrsTagSet :: ![Tag]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetBucketTagging where
-    type Sv GetBucketTagging = S3
-    type Rs GetBucketTagging = GetBucketTaggingResponse
+-- | Creates a value of 'GetBucketTaggingResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbtrsStatus'
+--
+-- * 'gbtrsTagSet'
+getBucketTaggingResponse
+    :: Int -- ^ 'gbtrsStatus'
+    -> GetBucketTaggingResponse
+getBucketTaggingResponse pStatus_ =
+    GetBucketTaggingResponse'
+    { _gbtrsStatus = pStatus_
+    , _gbtrsTagSet = mempty
+    }
 
-    request  = get
-    response = xmlResponse
+-- | The response status code.
+gbtrsStatus :: Lens' GetBucketTaggingResponse Int
+gbtrsStatus = lens _gbtrsStatus (\ s a -> s{_gbtrsStatus = a});
 
-instance FromXML GetBucketTaggingResponse where
-    parseXML x = GetBucketTaggingResponse
-        <$> x .@? "TagSet" .!@ mempty
+-- | Undocumented member.
+gbtrsTagSet :: Lens' GetBucketTaggingResponse [Tag]
+gbtrsTagSet = lens _gbtrsTagSet (\ s a -> s{_gbtrsTagSet = a}) . _Coerce;
diff --git a/gen/Network/AWS/S3/GetBucketVersioning.hs b/gen/Network/AWS/S3/GetBucketVersioning.hs
--- a/gen/Network/AWS/S3/GetBucketVersioning.hs
+++ b/gen/Network/AWS/S3/GetBucketVersioning.hs
@@ -1,126 +1,120 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.GetBucketVersioning
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns the versioning state of a bucket.
+-- Returns the versioning state of a bucket.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketVersioning.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketVersioning.html AWS API Reference> for GetBucketVersioning.
 module Network.AWS.S3.GetBucketVersioning
     (
-    -- * Request
-      GetBucketVersioning
-    -- ** Request constructor
-    , getBucketVersioning
-    -- ** Request lenses
+    -- * Creating a Request
+      getBucketVersioning
+    , GetBucketVersioning
+    -- * Request Lenses
     , gbvBucket
 
-    -- * Response
-    , GetBucketVersioningResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getBucketVersioningResponse
-    -- ** Response lenses
-    , gbvrMFADelete
-    , gbvrStatus
+    , GetBucketVersioningResponse
+    -- * Response Lenses
+    , gbvrsMFADelete
+    , gbvrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-newtype GetBucketVersioning = GetBucketVersioning
-    { _gbvBucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'getBucketVersioning' smart constructor.
+newtype GetBucketVersioning = GetBucketVersioning'
+    { _gbvBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetBucketVersioning' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetBucketVersioning' with the minimum fields required to make a request.
 --
--- * 'gbvBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getBucketVersioning :: Text -- ^ 'gbvBucket'
-                    -> GetBucketVersioning
-getBucketVersioning p1 = GetBucketVersioning
-    { _gbvBucket = p1
+-- * 'gbvBucket'
+getBucketVersioning
+    :: BucketName -- ^ 'gbvBucket'
+    -> GetBucketVersioning
+getBucketVersioning pBucket_ =
+    GetBucketVersioning'
+    { _gbvBucket = pBucket_
     }
 
-gbvBucket :: Lens' GetBucketVersioning Text
-gbvBucket = lens _gbvBucket (\s a -> s { _gbvBucket = a })
-
-data GetBucketVersioningResponse = GetBucketVersioningResponse
-    { _gbvrMFADelete :: Maybe MFADeleteStatus
-    , _gbvrStatus    :: Maybe BucketVersioningStatus
-    } deriving (Eq, Read, Show)
-
--- | 'GetBucketVersioningResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gbvrMFADelete' @::@ 'Maybe' 'MFADeleteStatus'
---
--- * 'gbvrStatus' @::@ 'Maybe' 'BucketVersioningStatus'
---
-getBucketVersioningResponse :: GetBucketVersioningResponse
-getBucketVersioningResponse = GetBucketVersioningResponse
-    { _gbvrStatus    = Nothing
-    , _gbvrMFADelete = Nothing
-    }
+-- | Undocumented member.
+gbvBucket :: Lens' GetBucketVersioning BucketName
+gbvBucket = lens _gbvBucket (\ s a -> s{_gbvBucket = a});
 
--- | Specifies whether MFA delete is enabled in the bucket versioning
--- configuration. This element is only returned if the bucket has been
--- configured with MFA delete. If the bucket has never been so configured, this
--- element is not returned.
-gbvrMFADelete :: Lens' GetBucketVersioningResponse (Maybe MFADeleteStatus)
-gbvrMFADelete = lens _gbvrMFADelete (\s a -> s { _gbvrMFADelete = a })
+instance AWSRequest GetBucketVersioning where
+        type Sv GetBucketVersioning = S3
+        type Rs GetBucketVersioning =
+             GetBucketVersioningResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetBucketVersioningResponse' <$>
+                   (x .@? "MfaDelete") <*> (pure (fromEnum s)))
 
--- | The versioning state of the bucket.
-gbvrStatus :: Lens' GetBucketVersioningResponse (Maybe BucketVersioningStatus)
-gbvrStatus = lens _gbvrStatus (\s a -> s { _gbvrStatus = a })
+instance ToHeaders GetBucketVersioning where
+        toHeaders = const mempty
 
 instance ToPath GetBucketVersioning where
-    toPath GetBucketVersioning{..} = mconcat
-        [ "/"
-        , toText _gbvBucket
-        ]
+        toPath GetBucketVersioning'{..}
+          = mconcat ["/", toBS _gbvBucket]
 
 instance ToQuery GetBucketVersioning where
-    toQuery = const "versioning"
-
-instance ToHeaders GetBucketVersioning
-
-instance ToXMLRoot GetBucketVersioning where
-    toXMLRoot = const (namespaced ns "GetBucketVersioning" [])
+        toQuery = const (mconcat ["versioning"])
 
-instance ToXML GetBucketVersioning
+-- | /See:/ 'getBucketVersioningResponse' smart constructor.
+data GetBucketVersioningResponse = GetBucketVersioningResponse'
+    { _gbvrsMFADelete :: !(Maybe MFADeleteStatus)
+    , _gbvrsStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetBucketVersioning where
-    type Sv GetBucketVersioning = S3
-    type Rs GetBucketVersioning = GetBucketVersioningResponse
+-- | Creates a value of 'GetBucketVersioningResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbvrsMFADelete'
+--
+-- * 'gbvrsStatus'
+getBucketVersioningResponse
+    :: Int -- ^ 'gbvrsStatus'
+    -> GetBucketVersioningResponse
+getBucketVersioningResponse pStatus_ =
+    GetBucketVersioningResponse'
+    { _gbvrsMFADelete = Nothing
+    , _gbvrsStatus = pStatus_
+    }
 
-    request  = get
-    response = xmlResponse
+-- | Specifies whether MFA delete is enabled in the bucket versioning
+-- configuration. This element is only returned if the bucket has been
+-- configured with MFA delete. If the bucket has never been so configured,
+-- this element is not returned.
+gbvrsMFADelete :: Lens' GetBucketVersioningResponse (Maybe MFADeleteStatus)
+gbvrsMFADelete = lens _gbvrsMFADelete (\ s a -> s{_gbvrsMFADelete = a});
 
-instance FromXML GetBucketVersioningResponse where
-    parseXML x = GetBucketVersioningResponse
-        <$> x .@? "MfaDelete"
-        <*> x .@? "Status"
+-- | The response status code.
+gbvrsStatus :: Lens' GetBucketVersioningResponse Int
+gbvrsStatus = lens _gbvrsStatus (\ s a -> s{_gbvrsStatus = a});
diff --git a/gen/Network/AWS/S3/GetBucketWebsite.hs b/gen/Network/AWS/S3/GetBucketWebsite.hs
--- a/gen/Network/AWS/S3/GetBucketWebsite.hs
+++ b/gen/Network/AWS/S3/GetBucketWebsite.hs
@@ -1,143 +1,149 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.GetBucketWebsite
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns the website configuration for a bucket.
+-- Returns the website configuration for a bucket.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketWebsite.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketWebsite.html AWS API Reference> for GetBucketWebsite.
 module Network.AWS.S3.GetBucketWebsite
     (
-    -- * Request
-      GetBucketWebsite
-    -- ** Request constructor
-    , getBucketWebsite
-    -- ** Request lenses
+    -- * Creating a Request
+      getBucketWebsite
+    , GetBucketWebsite
+    -- * Request Lenses
     , gbwBucket
 
-    -- * Response
-    , GetBucketWebsiteResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getBucketWebsiteResponse
-    -- ** Response lenses
-    , gbwrErrorDocument
-    , gbwrIndexDocument
-    , gbwrRedirectAllRequestsTo
-    , gbwrRoutingRules
+    , GetBucketWebsiteResponse
+    -- * Response Lenses
+    , gbwrsRedirectAllRequestsTo
+    , gbwrsErrorDocument
+    , gbwrsRoutingRules
+    , gbwrsIndexDocument
+    , gbwrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-newtype GetBucketWebsite = GetBucketWebsite
-    { _gbwBucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'getBucketWebsite' smart constructor.
+newtype GetBucketWebsite = GetBucketWebsite'
+    { _gbwBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetBucketWebsite' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetBucketWebsite' with the minimum fields required to make a request.
 --
--- * 'gbwBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getBucketWebsite :: Text -- ^ 'gbwBucket'
-                 -> GetBucketWebsite
-getBucketWebsite p1 = GetBucketWebsite
-    { _gbwBucket = p1
+-- * 'gbwBucket'
+getBucketWebsite
+    :: BucketName -- ^ 'gbwBucket'
+    -> GetBucketWebsite
+getBucketWebsite pBucket_ =
+    GetBucketWebsite'
+    { _gbwBucket = pBucket_
     }
 
-gbwBucket :: Lens' GetBucketWebsite Text
-gbwBucket = lens _gbwBucket (\s a -> s { _gbwBucket = a })
+-- | Undocumented member.
+gbwBucket :: Lens' GetBucketWebsite BucketName
+gbwBucket = lens _gbwBucket (\ s a -> s{_gbwBucket = a});
 
-data GetBucketWebsiteResponse = GetBucketWebsiteResponse
-    { _gbwrErrorDocument         :: Maybe ErrorDocument
-    , _gbwrIndexDocument         :: Maybe IndexDocument
-    , _gbwrRedirectAllRequestsTo :: Maybe RedirectAllRequestsTo
-    , _gbwrRoutingRules          :: List "RoutingRule" RoutingRule
-    } deriving (Eq, Read, Show)
+instance AWSRequest GetBucketWebsite where
+        type Sv GetBucketWebsite = S3
+        type Rs GetBucketWebsite = GetBucketWebsiteResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetBucketWebsiteResponse' <$>
+                   (x .@? "RedirectAllRequestsTo") <*>
+                     (x .@? "ErrorDocument")
+                     <*>
+                     (x .@? "RoutingRules" .!@ mempty >>=
+                        may (parseXMLList "RoutingRule"))
+                     <*> (x .@? "IndexDocument")
+                     <*> (pure (fromEnum s)))
 
--- | 'GetBucketWebsiteResponse' constructor.
+instance ToHeaders GetBucketWebsite where
+        toHeaders = const mempty
+
+instance ToPath GetBucketWebsite where
+        toPath GetBucketWebsite'{..}
+          = mconcat ["/", toBS _gbwBucket]
+
+instance ToQuery GetBucketWebsite where
+        toQuery = const (mconcat ["website"])
+
+-- | /See:/ 'getBucketWebsiteResponse' smart constructor.
+data GetBucketWebsiteResponse = GetBucketWebsiteResponse'
+    { _gbwrsRedirectAllRequestsTo :: !(Maybe RedirectAllRequestsTo)
+    , _gbwrsErrorDocument         :: !(Maybe ErrorDocument)
+    , _gbwrsRoutingRules          :: !(Maybe [RoutingRule])
+    , _gbwrsIndexDocument         :: !(Maybe IndexDocument)
+    , _gbwrsStatus                :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetBucketWebsiteResponse' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gbwrErrorDocument' @::@ 'Maybe' 'ErrorDocument'
+-- * 'gbwrsRedirectAllRequestsTo'
 --
--- * 'gbwrIndexDocument' @::@ 'Maybe' 'IndexDocument'
+-- * 'gbwrsErrorDocument'
 --
--- * 'gbwrRedirectAllRequestsTo' @::@ 'Maybe' 'RedirectAllRequestsTo'
+-- * 'gbwrsRoutingRules'
 --
--- * 'gbwrRoutingRules' @::@ ['RoutingRule']
+-- * 'gbwrsIndexDocument'
 --
-getBucketWebsiteResponse :: GetBucketWebsiteResponse
-getBucketWebsiteResponse = GetBucketWebsiteResponse
-    { _gbwrRedirectAllRequestsTo = Nothing
-    , _gbwrIndexDocument         = Nothing
-    , _gbwrErrorDocument         = Nothing
-    , _gbwrRoutingRules          = mempty
+-- * 'gbwrsStatus'
+getBucketWebsiteResponse
+    :: Int -- ^ 'gbwrsStatus'
+    -> GetBucketWebsiteResponse
+getBucketWebsiteResponse pStatus_ =
+    GetBucketWebsiteResponse'
+    { _gbwrsRedirectAllRequestsTo = Nothing
+    , _gbwrsErrorDocument = Nothing
+    , _gbwrsRoutingRules = Nothing
+    , _gbwrsIndexDocument = Nothing
+    , _gbwrsStatus = pStatus_
     }
 
-gbwrErrorDocument :: Lens' GetBucketWebsiteResponse (Maybe ErrorDocument)
-gbwrErrorDocument =
-    lens _gbwrErrorDocument (\s a -> s { _gbwrErrorDocument = a })
-
-gbwrIndexDocument :: Lens' GetBucketWebsiteResponse (Maybe IndexDocument)
-gbwrIndexDocument =
-    lens _gbwrIndexDocument (\s a -> s { _gbwrIndexDocument = a })
-
-gbwrRedirectAllRequestsTo :: Lens' GetBucketWebsiteResponse (Maybe RedirectAllRequestsTo)
-gbwrRedirectAllRequestsTo =
-    lens _gbwrRedirectAllRequestsTo
-        (\s a -> s { _gbwrRedirectAllRequestsTo = a })
-
-gbwrRoutingRules :: Lens' GetBucketWebsiteResponse [RoutingRule]
-gbwrRoutingRules = lens _gbwrRoutingRules (\s a -> s { _gbwrRoutingRules = a }) . _List
-
-instance ToPath GetBucketWebsite where
-    toPath GetBucketWebsite{..} = mconcat
-        [ "/"
-        , toText _gbwBucket
-        ]
-
-instance ToQuery GetBucketWebsite where
-    toQuery = const "website"
-
-instance ToHeaders GetBucketWebsite
-
-instance ToXMLRoot GetBucketWebsite where
-    toXMLRoot = const (namespaced ns "GetBucketWebsite" [])
+-- | Undocumented member.
+gbwrsRedirectAllRequestsTo :: Lens' GetBucketWebsiteResponse (Maybe RedirectAllRequestsTo)
+gbwrsRedirectAllRequestsTo = lens _gbwrsRedirectAllRequestsTo (\ s a -> s{_gbwrsRedirectAllRequestsTo = a});
 
-instance ToXML GetBucketWebsite
+-- | Undocumented member.
+gbwrsErrorDocument :: Lens' GetBucketWebsiteResponse (Maybe ErrorDocument)
+gbwrsErrorDocument = lens _gbwrsErrorDocument (\ s a -> s{_gbwrsErrorDocument = a});
 
-instance AWSRequest GetBucketWebsite where
-    type Sv GetBucketWebsite = S3
-    type Rs GetBucketWebsite = GetBucketWebsiteResponse
+-- | Undocumented member.
+gbwrsRoutingRules :: Lens' GetBucketWebsiteResponse [RoutingRule]
+gbwrsRoutingRules = lens _gbwrsRoutingRules (\ s a -> s{_gbwrsRoutingRules = a}) . _Default . _Coerce;
 
-    request  = get
-    response = xmlResponse
+-- | Undocumented member.
+gbwrsIndexDocument :: Lens' GetBucketWebsiteResponse (Maybe IndexDocument)
+gbwrsIndexDocument = lens _gbwrsIndexDocument (\ s a -> s{_gbwrsIndexDocument = a});
 
-instance FromXML GetBucketWebsiteResponse where
-    parseXML x = GetBucketWebsiteResponse
-        <$> x .@? "ErrorDocument"
-        <*> x .@? "IndexDocument"
-        <*> x .@? "RedirectAllRequestsTo"
-        <*> x .@? "RoutingRules" .!@ mempty
+-- | The response status code.
+gbwrsStatus :: Lens' GetBucketWebsiteResponse Int
+gbwrsStatus = lens _gbwrsStatus (\ s a -> s{_gbwrsStatus = a});
diff --git a/gen/Network/AWS/S3/GetObject.hs b/gen/Network/AWS/S3/GetObject.hs
--- a/gen/Network/AWS/S3/GetObject.hs
+++ b/gen/Network/AWS/S3/GetObject.hs
@@ -1,255 +1,202 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.GetObject
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Retrieves objects from Amazon S3.
+-- Retrieves objects from Amazon S3.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/GetObject.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/GetObject.html AWS API Reference> for GetObject.
 module Network.AWS.S3.GetObject
     (
-    -- * Request
-      GetObject
-    -- ** Request constructor
-    , getObject
-    -- ** Request lenses
-    , goBucket
+    -- * Creating a Request
+      getObject
+    , GetObject
+    -- * Request Lenses
     , goIfMatch
-    , goIfModifiedSince
-    , goIfNoneMatch
-    , goIfUnmodifiedSince
-    , goKey
-    , goRange
-    , goRequestPayer
-    , goResponseCacheControl
+    , goVersionId
+    , goResponseContentType
     , goResponseContentDisposition
-    , goResponseContentEncoding
     , goResponseContentLanguage
-    , goResponseContentType
-    , goResponseExpires
     , goSSECustomerAlgorithm
     , goSSECustomerKey
+    , goRequestPayer
+    , goResponseContentEncoding
+    , goIfModifiedSince
+    , goRange
+    , goIfUnmodifiedSince
     , goSSECustomerKeyMD5
-    , goVersionId
+    , goResponseCacheControl
+    , goResponseExpires
+    , goIfNoneMatch
+    , goBucket
+    , goKey
 
-    -- * Response
-    , GetObjectResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getObjectResponse
-    -- ** Response lenses
-    , gorAcceptRanges
-    , gorBody
-    , gorCacheControl
-    , gorContentDisposition
-    , gorContentEncoding
-    , gorContentLanguage
-    , gorContentLength
-    , gorContentType
-    , gorDeleteMarker
-    , gorETag
-    , gorExpiration
-    , gorExpires
-    , gorLastModified
-    , gorMetadata
-    , gorMissingMeta
-    , gorReplicationStatus
-    , gorRequestCharged
-    , gorRestore
-    , gorSSECustomerAlgorithm
-    , gorSSECustomerKeyMD5
-    , gorSSEKMSKeyId
-    , gorServerSideEncryption
-    , gorVersionId
-    , gorWebsiteRedirectLocation
+    , GetObjectResponse
+    -- * Response Lenses
+    , gorsVersionId
+    , gorsETag
+    , gorsRequestCharged
+    , gorsContentLength
+    , gorsRestore
+    , gorsExpires
+    , gorsDeleteMarker
+    , gorsExpiration
+    , gorsSSECustomerAlgorithm
+    , gorsMissingMeta
+    , gorsWebsiteRedirectLocation
+    , gorsAcceptRanges
+    , gorsStorageClass
+    , gorsContentEncoding
+    , gorsSSEKMSKeyId
+    , gorsSSECustomerKeyMD5
+    , gorsMetadata
+    , gorsReplicationStatus
+    , gorsCacheControl
+    , gorsContentLanguage
+    , gorsLastModified
+    , gorsContentDisposition
+    , gorsContentRange
+    , gorsServerSideEncryption
+    , gorsContentType
+    , gorsStatus
+    , gorsBody
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data GetObject = GetObject
-    { _goBucket                     :: Text
-    , _goIfMatch                    :: Maybe Text
-    , _goIfModifiedSince            :: Maybe RFC822
-    , _goIfNoneMatch                :: Maybe Text
-    , _goIfUnmodifiedSince          :: Maybe RFC822
-    , _goKey                        :: Text
-    , _goRange                      :: Maybe Text
-    , _goRequestPayer               :: Maybe RequestPayer
-    , _goResponseCacheControl       :: Maybe Text
-    , _goResponseContentDisposition :: Maybe Text
-    , _goResponseContentEncoding    :: Maybe Text
-    , _goResponseContentLanguage    :: Maybe Text
-    , _goResponseContentType        :: Maybe Text
-    , _goResponseExpires            :: Maybe RFC822
-    , _goSSECustomerAlgorithm       :: Maybe Text
-    , _goSSECustomerKey             :: Maybe (Sensitive Text)
-    , _goSSECustomerKeyMD5          :: Maybe Text
-    , _goVersionId                  :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'getObject' smart constructor.
+data GetObject = GetObject'
+    { _goIfMatch                    :: !(Maybe Text)
+    , _goVersionId                  :: !(Maybe ObjectVersionId)
+    , _goResponseContentType        :: !(Maybe Text)
+    , _goResponseContentDisposition :: !(Maybe Text)
+    , _goResponseContentLanguage    :: !(Maybe Text)
+    , _goSSECustomerAlgorithm       :: !(Maybe Text)
+    , _goSSECustomerKey             :: !(Maybe (Sensitive Text))
+    , _goRequestPayer               :: !(Maybe RequestPayer)
+    , _goResponseContentEncoding    :: !(Maybe Text)
+    , _goIfModifiedSince            :: !(Maybe RFC822)
+    , _goRange                      :: !(Maybe Text)
+    , _goIfUnmodifiedSince          :: !(Maybe RFC822)
+    , _goSSECustomerKeyMD5          :: !(Maybe Text)
+    , _goResponseCacheControl       :: !(Maybe Text)
+    , _goResponseExpires            :: !(Maybe RFC822)
+    , _goIfNoneMatch                :: !(Maybe Text)
+    , _goBucket                     :: !BucketName
+    , _goKey                        :: !ObjectKey
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetObject' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetObject' with the minimum fields required to make a request.
 --
--- * 'goBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'goIfMatch' @::@ 'Maybe' 'Text'
+-- * 'goIfMatch'
 --
--- * 'goIfModifiedSince' @::@ 'Maybe' 'UTCTime'
+-- * 'goVersionId'
 --
--- * 'goIfNoneMatch' @::@ 'Maybe' 'Text'
+-- * 'goResponseContentType'
 --
--- * 'goIfUnmodifiedSince' @::@ 'Maybe' 'UTCTime'
+-- * 'goResponseContentDisposition'
 --
--- * 'goKey' @::@ 'Text'
+-- * 'goResponseContentLanguage'
 --
--- * 'goRange' @::@ 'Maybe' 'Text'
+-- * 'goSSECustomerAlgorithm'
 --
--- * 'goRequestPayer' @::@ 'Maybe' 'RequestPayer'
+-- * 'goSSECustomerKey'
 --
--- * 'goResponseCacheControl' @::@ 'Maybe' 'Text'
+-- * 'goRequestPayer'
 --
--- * 'goResponseContentDisposition' @::@ 'Maybe' 'Text'
+-- * 'goResponseContentEncoding'
 --
--- * 'goResponseContentEncoding' @::@ 'Maybe' 'Text'
+-- * 'goIfModifiedSince'
 --
--- * 'goResponseContentLanguage' @::@ 'Maybe' 'Text'
+-- * 'goRange'
 --
--- * 'goResponseContentType' @::@ 'Maybe' 'Text'
+-- * 'goIfUnmodifiedSince'
 --
--- * 'goResponseExpires' @::@ 'Maybe' 'UTCTime'
+-- * 'goSSECustomerKeyMD5'
 --
--- * 'goSSECustomerAlgorithm' @::@ 'Maybe' 'Text'
+-- * 'goResponseCacheControl'
 --
--- * 'goSSECustomerKey' @::@ 'Maybe' 'Text'
+-- * 'goResponseExpires'
 --
--- * 'goSSECustomerKeyMD5' @::@ 'Maybe' 'Text'
+-- * 'goIfNoneMatch'
 --
--- * 'goVersionId' @::@ 'Maybe' 'Text'
+-- * 'goBucket'
 --
-getObject :: Text -- ^ 'goBucket'
-          -> Text -- ^ 'goKey'
-          -> GetObject
-getObject p1 p2 = GetObject
-    { _goBucket                     = p1
-    , _goKey                        = p2
-    , _goIfMatch                    = Nothing
-    , _goIfModifiedSince            = Nothing
-    , _goIfNoneMatch                = Nothing
-    , _goIfUnmodifiedSince          = Nothing
-    , _goRange                      = Nothing
-    , _goResponseCacheControl       = Nothing
+-- * 'goKey'
+getObject
+    :: BucketName -- ^ 'goBucket'
+    -> ObjectKey -- ^ 'goKey'
+    -> GetObject
+getObject pBucket_ pKey_ =
+    GetObject'
+    { _goIfMatch = Nothing
+    , _goVersionId = Nothing
+    , _goResponseContentType = Nothing
     , _goResponseContentDisposition = Nothing
-    , _goResponseContentEncoding    = Nothing
-    , _goResponseContentLanguage    = Nothing
-    , _goResponseContentType        = Nothing
-    , _goResponseExpires            = Nothing
-    , _goVersionId                  = Nothing
-    , _goSSECustomerAlgorithm       = Nothing
-    , _goSSECustomerKey             = Nothing
-    , _goSSECustomerKeyMD5          = Nothing
-    , _goRequestPayer               = Nothing
+    , _goResponseContentLanguage = Nothing
+    , _goSSECustomerAlgorithm = Nothing
+    , _goSSECustomerKey = Nothing
+    , _goRequestPayer = Nothing
+    , _goResponseContentEncoding = Nothing
+    , _goIfModifiedSince = Nothing
+    , _goRange = Nothing
+    , _goIfUnmodifiedSince = Nothing
+    , _goSSECustomerKeyMD5 = Nothing
+    , _goResponseCacheControl = Nothing
+    , _goResponseExpires = Nothing
+    , _goIfNoneMatch = Nothing
+    , _goBucket = pBucket_
+    , _goKey = pKey_
     }
 
-goBucket :: Lens' GetObject Text
-goBucket = lens _goBucket (\s a -> s { _goBucket = a })
-
 -- | Return the object only if its entity tag (ETag) is the same as the one
 -- specified, otherwise return a 412 (precondition failed).
 goIfMatch :: Lens' GetObject (Maybe Text)
-goIfMatch = lens _goIfMatch (\s a -> s { _goIfMatch = a })
-
--- | Return the object only if it has been modified since the specified time,
--- otherwise return a 304 (not modified).
-goIfModifiedSince :: Lens' GetObject (Maybe UTCTime)
-goIfModifiedSince =
-    lens _goIfModifiedSince (\s a -> s { _goIfModifiedSince = a })
-        . mapping _Time
-
--- | Return the object only if its entity tag (ETag) is different from the one
--- specified, otherwise return a 304 (not modified).
-goIfNoneMatch :: Lens' GetObject (Maybe Text)
-goIfNoneMatch = lens _goIfNoneMatch (\s a -> s { _goIfNoneMatch = a })
-
--- | Return the object only if it has not been modified since the specified time,
--- otherwise return a 412 (precondition failed).
-goIfUnmodifiedSince :: Lens' GetObject (Maybe UTCTime)
-goIfUnmodifiedSince =
-    lens _goIfUnmodifiedSince (\s a -> s { _goIfUnmodifiedSince = a })
-        . mapping _Time
-
-goKey :: Lens' GetObject Text
-goKey = lens _goKey (\s a -> s { _goKey = a })
-
--- | Downloads the specified range bytes of an object. For more information about
--- the HTTP Range header, go to
--- http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.
-goRange :: Lens' GetObject (Maybe Text)
-goRange = lens _goRange (\s a -> s { _goRange = a })
+goIfMatch = lens _goIfMatch (\ s a -> s{_goIfMatch = a});
 
-goRequestPayer :: Lens' GetObject (Maybe RequestPayer)
-goRequestPayer = lens _goRequestPayer (\s a -> s { _goRequestPayer = a })
+-- | VersionId used to reference a specific version of the object.
+goVersionId :: Lens' GetObject (Maybe ObjectVersionId)
+goVersionId = lens _goVersionId (\ s a -> s{_goVersionId = a});
 
--- | Sets the Cache-Control header of the response.
-goResponseCacheControl :: Lens' GetObject (Maybe Text)
-goResponseCacheControl =
-    lens _goResponseCacheControl (\s a -> s { _goResponseCacheControl = a })
+-- | Sets the Content-Type header of the response.
+goResponseContentType :: Lens' GetObject (Maybe Text)
+goResponseContentType = lens _goResponseContentType (\ s a -> s{_goResponseContentType = a});
 
 -- | Sets the Content-Disposition header of the response
 goResponseContentDisposition :: Lens' GetObject (Maybe Text)
-goResponseContentDisposition =
-    lens _goResponseContentDisposition
-        (\s a -> s { _goResponseContentDisposition = a })
-
--- | Sets the Content-Encoding header of the response.
-goResponseContentEncoding :: Lens' GetObject (Maybe Text)
-goResponseContentEncoding =
-    lens _goResponseContentEncoding
-        (\s a -> s { _goResponseContentEncoding = a })
+goResponseContentDisposition = lens _goResponseContentDisposition (\ s a -> s{_goResponseContentDisposition = a});
 
 -- | Sets the Content-Language header of the response.
 goResponseContentLanguage :: Lens' GetObject (Maybe Text)
-goResponseContentLanguage =
-    lens _goResponseContentLanguage
-        (\s a -> s { _goResponseContentLanguage = a })
-
--- | Sets the Content-Type header of the response.
-goResponseContentType :: Lens' GetObject (Maybe Text)
-goResponseContentType =
-    lens _goResponseContentType (\s a -> s { _goResponseContentType = a })
-
--- | Sets the Expires header of the response.
-goResponseExpires :: Lens' GetObject (Maybe UTCTime)
-goResponseExpires =
-    lens _goResponseExpires (\s a -> s { _goResponseExpires = a })
-        . mapping _Time
+goResponseContentLanguage = lens _goResponseContentLanguage (\ s a -> s{_goResponseContentLanguage = a});
 
--- | Specifies the algorithm to use to when encrypting the object (e.g., AES256,
--- aws:kms).
+-- | Specifies the algorithm to use to when encrypting the object (e.g.,
+-- AES256).
 goSSECustomerAlgorithm :: Lens' GetObject (Maybe Text)
-goSSECustomerAlgorithm =
-    lens _goSSECustomerAlgorithm (\s a -> s { _goSSECustomerAlgorithm = a })
+goSSECustomerAlgorithm = lens _goSSECustomerAlgorithm (\ s a -> s{_goSSECustomerAlgorithm = a});
 
 -- | Specifies the customer-provided encryption key for Amazon S3 to use in
 -- encrypting data. This value is used to store the object and then it is
@@ -257,313 +204,381 @@
 -- appropriate for use with the algorithm specified in the
 -- x-amz-server-side​-encryption​-customer-algorithm header.
 goSSECustomerKey :: Lens' GetObject (Maybe Text)
-goSSECustomerKey = lens _goSSECustomerKey (\s a -> s { _goSSECustomerKey = a }) . mapping _Sensitive
+goSSECustomerKey = lens _goSSECustomerKey (\ s a -> s{_goSSECustomerKey = a}) . mapping _Sensitive;
 
--- | Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
--- Amazon S3 uses this header for a message integrity check to ensure the
--- encryption key was transmitted without error.
+-- | Undocumented member.
+goRequestPayer :: Lens' GetObject (Maybe RequestPayer)
+goRequestPayer = lens _goRequestPayer (\ s a -> s{_goRequestPayer = a});
+
+-- | Sets the Content-Encoding header of the response.
+goResponseContentEncoding :: Lens' GetObject (Maybe Text)
+goResponseContentEncoding = lens _goResponseContentEncoding (\ s a -> s{_goResponseContentEncoding = a});
+
+-- | Return the object only if it has been modified since the specified time,
+-- otherwise return a 304 (not modified).
+goIfModifiedSince :: Lens' GetObject (Maybe UTCTime)
+goIfModifiedSince = lens _goIfModifiedSince (\ s a -> s{_goIfModifiedSince = a}) . mapping _Time;
+
+-- | Downloads the specified range bytes of an object. For more information
+-- about the HTTP Range header, go to
+-- http:\/\/www.w3.org\/Protocols\/rfc2616\/rfc2616-sec14.html#sec14.35.
+goRange :: Lens' GetObject (Maybe Text)
+goRange = lens _goRange (\ s a -> s{_goRange = a});
+
+-- | Return the object only if it has not been modified since the specified
+-- time, otherwise return a 412 (precondition failed).
+goIfUnmodifiedSince :: Lens' GetObject (Maybe UTCTime)
+goIfUnmodifiedSince = lens _goIfUnmodifiedSince (\ s a -> s{_goIfUnmodifiedSince = a}) . mapping _Time;
+
+-- | Specifies the 128-bit MD5 digest of the encryption key according to RFC
+-- 1321. Amazon S3 uses this header for a message integrity check to ensure
+-- the encryption key was transmitted without error.
 goSSECustomerKeyMD5 :: Lens' GetObject (Maybe Text)
-goSSECustomerKeyMD5 =
-    lens _goSSECustomerKeyMD5 (\s a -> s { _goSSECustomerKeyMD5 = a })
+goSSECustomerKeyMD5 = lens _goSSECustomerKeyMD5 (\ s a -> s{_goSSECustomerKeyMD5 = a});
 
--- | VersionId used to reference a specific version of the object.
-goVersionId :: Lens' GetObject (Maybe Text)
-goVersionId = lens _goVersionId (\s a -> s { _goVersionId = a })
+-- | Sets the Cache-Control header of the response.
+goResponseCacheControl :: Lens' GetObject (Maybe Text)
+goResponseCacheControl = lens _goResponseCacheControl (\ s a -> s{_goResponseCacheControl = a});
 
-data GetObjectResponse = GetObjectResponse
-    { _gorAcceptRanges            :: Maybe Text
-    , _gorBody                    :: RsBody
-    , _gorCacheControl            :: Maybe Text
-    , _gorContentDisposition      :: Maybe Text
-    , _gorContentEncoding         :: Maybe Text
-    , _gorContentLanguage         :: Maybe Text
-    , _gorContentLength           :: Maybe Int
-    , _gorContentType             :: Maybe Text
-    , _gorDeleteMarker            :: Maybe Bool
-    , _gorETag                    :: Maybe Text
-    , _gorExpiration              :: Maybe Text
-    , _gorExpires                 :: Maybe RFC822
-    , _gorLastModified            :: Maybe RFC822
-    , _gorMetadata                :: Map (CI Text) Text
-    , _gorMissingMeta             :: Maybe Int
-    , _gorReplicationStatus       :: Maybe ReplicationStatus
-    , _gorRequestCharged          :: Maybe RequestCharged
-    , _gorRestore                 :: Maybe Text
-    , _gorSSECustomerAlgorithm    :: Maybe Text
-    , _gorSSECustomerKeyMD5       :: Maybe Text
-    , _gorSSEKMSKeyId             :: Maybe (Sensitive Text)
-    , _gorServerSideEncryption    :: Maybe ServerSideEncryption
-    , _gorVersionId               :: Maybe Text
-    , _gorWebsiteRedirectLocation :: Maybe Text
-    } deriving (Show)
+-- | Sets the Expires header of the response.
+goResponseExpires :: Lens' GetObject (Maybe UTCTime)
+goResponseExpires = lens _goResponseExpires (\ s a -> s{_goResponseExpires = a}) . mapping _Time;
 
--- | 'GetObjectResponse' constructor.
+-- | Return the object only if its entity tag (ETag) is different from the
+-- one specified, otherwise return a 304 (not modified).
+goIfNoneMatch :: Lens' GetObject (Maybe Text)
+goIfNoneMatch = lens _goIfNoneMatch (\ s a -> s{_goIfNoneMatch = a});
+
+-- | Undocumented member.
+goBucket :: Lens' GetObject BucketName
+goBucket = lens _goBucket (\ s a -> s{_goBucket = a});
+
+-- | Undocumented member.
+goKey :: Lens' GetObject ObjectKey
+goKey = lens _goKey (\ s a -> s{_goKey = a});
+
+instance AWSRequest GetObject where
+        type Sv GetObject = S3
+        type Rs GetObject = GetObjectResponse
+        request = get
+        response
+          = receiveBody
+              (\ s h x ->
+                 GetObjectResponse' <$>
+                   (h .#? "x-amz-version-id") <*> (h .#? "ETag") <*>
+                     (h .#? "x-amz-request-charged")
+                     <*> (h .#? "Content-Length")
+                     <*> (h .#? "x-amz-restore")
+                     <*> (h .#? "Expires")
+                     <*> (h .#? "x-amz-delete-marker")
+                     <*> (h .#? "x-amz-expiration")
+                     <*>
+                     (h .#?
+                        "x-amz-server-side-encryption-customer-algorithm")
+                     <*> (h .#? "x-amz-missing-meta")
+                     <*> (h .#? "x-amz-website-redirect-location")
+                     <*> (h .#? "accept-ranges")
+                     <*> (h .#? "x-amz-storage-class")
+                     <*> (h .#? "Content-Encoding")
+                     <*>
+                     (h .#? "x-amz-server-side-encryption-aws-kms-key-id")
+                     <*>
+                     (h .#?
+                        "x-amz-server-side-encryption-customer-key-MD5")
+                     <*> (parseHeadersMap "x-amz-meta-" h)
+                     <*> (h .#? "x-amz-replication-status")
+                     <*> (h .#? "Cache-Control")
+                     <*> (h .#? "Content-Language")
+                     <*> (h .#? "Last-Modified")
+                     <*> (h .#? "Content-Disposition")
+                     <*> (h .#? "Content-Range")
+                     <*> (h .#? "x-amz-server-side-encryption")
+                     <*> (h .#? "Content-Type")
+                     <*> (pure (fromEnum s))
+                     <*> (pure x))
+
+instance ToHeaders GetObject where
+        toHeaders GetObject'{..}
+          = mconcat
+              ["If-Match" =# _goIfMatch,
+               "x-amz-server-side-encryption-customer-algorithm" =#
+                 _goSSECustomerAlgorithm,
+               "x-amz-server-side-encryption-customer-key" =#
+                 _goSSECustomerKey,
+               "x-amz-request-payer" =# _goRequestPayer,
+               "If-Modified-Since" =# _goIfModifiedSince,
+               "Range" =# _goRange,
+               "If-Unmodified-Since" =# _goIfUnmodifiedSince,
+               "x-amz-server-side-encryption-customer-key-MD5" =#
+                 _goSSECustomerKeyMD5,
+               "If-None-Match" =# _goIfNoneMatch]
+
+instance ToPath GetObject where
+        toPath GetObject'{..}
+          = mconcat ["/", toBS _goBucket, "/", toBS _goKey]
+
+instance ToQuery GetObject where
+        toQuery GetObject'{..}
+          = mconcat
+              ["versionId" =: _goVersionId,
+               "response-content-type" =: _goResponseContentType,
+               "response-content-disposition" =:
+                 _goResponseContentDisposition,
+               "response-content-language" =:
+                 _goResponseContentLanguage,
+               "response-content-encoding" =:
+                 _goResponseContentEncoding,
+               "response-cache-control" =: _goResponseCacheControl,
+               "response-expires" =: _goResponseExpires]
+
+-- | /See:/ 'getObjectResponse' smart constructor.
+data GetObjectResponse = GetObjectResponse'
+    { _gorsVersionId               :: !(Maybe ObjectVersionId)
+    , _gorsETag                    :: !(Maybe ETag)
+    , _gorsRequestCharged          :: !(Maybe RequestCharged)
+    , _gorsContentLength           :: !(Maybe Int)
+    , _gorsRestore                 :: !(Maybe Text)
+    , _gorsExpires                 :: !(Maybe RFC822)
+    , _gorsDeleteMarker            :: !(Maybe Bool)
+    , _gorsExpiration              :: !(Maybe Text)
+    , _gorsSSECustomerAlgorithm    :: !(Maybe Text)
+    , _gorsMissingMeta             :: !(Maybe Int)
+    , _gorsWebsiteRedirectLocation :: !(Maybe Text)
+    , _gorsAcceptRanges            :: !(Maybe Text)
+    , _gorsStorageClass            :: !(Maybe StorageClass)
+    , _gorsContentEncoding         :: !(Maybe Text)
+    , _gorsSSEKMSKeyId             :: !(Maybe (Sensitive Text))
+    , _gorsSSECustomerKeyMD5       :: !(Maybe Text)
+    , _gorsMetadata                :: !(Map Text Text)
+    , _gorsReplicationStatus       :: !(Maybe ReplicationStatus)
+    , _gorsCacheControl            :: !(Maybe Text)
+    , _gorsContentLanguage         :: !(Maybe Text)
+    , _gorsLastModified            :: !(Maybe RFC822)
+    , _gorsContentDisposition      :: !(Maybe Text)
+    , _gorsContentRange            :: !(Maybe Text)
+    , _gorsServerSideEncryption    :: !(Maybe ServerSideEncryption)
+    , _gorsContentType             :: !(Maybe Text)
+    , _gorsStatus                  :: !Int
+    , _gorsBody                    :: !RsBody
+    } deriving (Show,Generic)
+
+-- | Creates a value of 'GetObjectResponse' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gorAcceptRanges' @::@ 'Maybe' 'Text'
+-- * 'gorsVersionId'
 --
--- * 'gorBody' @::@ 'RsBody'
+-- * 'gorsETag'
 --
--- * 'gorCacheControl' @::@ 'Maybe' 'Text'
+-- * 'gorsRequestCharged'
 --
--- * 'gorContentDisposition' @::@ 'Maybe' 'Text'
+-- * 'gorsContentLength'
 --
--- * 'gorContentEncoding' @::@ 'Maybe' 'Text'
+-- * 'gorsRestore'
 --
--- * 'gorContentLanguage' @::@ 'Maybe' 'Text'
+-- * 'gorsExpires'
 --
--- * 'gorContentLength' @::@ 'Maybe' 'Int'
+-- * 'gorsDeleteMarker'
 --
--- * 'gorContentType' @::@ 'Maybe' 'Text'
+-- * 'gorsExpiration'
 --
--- * 'gorDeleteMarker' @::@ 'Maybe' 'Bool'
+-- * 'gorsSSECustomerAlgorithm'
 --
--- * 'gorETag' @::@ 'Maybe' 'Text'
+-- * 'gorsMissingMeta'
 --
--- * 'gorExpiration' @::@ 'Maybe' 'Text'
+-- * 'gorsWebsiteRedirectLocation'
 --
--- * 'gorExpires' @::@ 'Maybe' 'UTCTime'
+-- * 'gorsAcceptRanges'
 --
--- * 'gorLastModified' @::@ 'Maybe' 'UTCTime'
+-- * 'gorsStorageClass'
 --
--- * 'gorMetadata' @::@ 'HashMap' ('CI' 'Text') 'Text'
+-- * 'gorsContentEncoding'
 --
--- * 'gorMissingMeta' @::@ 'Maybe' 'Int'
+-- * 'gorsSSEKMSKeyId'
 --
--- * 'gorReplicationStatus' @::@ 'Maybe' 'ReplicationStatus'
+-- * 'gorsSSECustomerKeyMD5'
 --
--- * 'gorRequestCharged' @::@ 'Maybe' 'RequestCharged'
+-- * 'gorsMetadata'
 --
--- * 'gorRestore' @::@ 'Maybe' 'Text'
+-- * 'gorsReplicationStatus'
 --
--- * 'gorSSECustomerAlgorithm' @::@ 'Maybe' 'Text'
+-- * 'gorsCacheControl'
 --
--- * 'gorSSECustomerKeyMD5' @::@ 'Maybe' 'Text'
+-- * 'gorsContentLanguage'
 --
--- * 'gorSSEKMSKeyId' @::@ 'Maybe' 'Text'
+-- * 'gorsLastModified'
 --
--- * 'gorServerSideEncryption' @::@ 'Maybe' 'ServerSideEncryption'
+-- * 'gorsContentDisposition'
 --
--- * 'gorVersionId' @::@ 'Maybe' 'Text'
+-- * 'gorsContentRange'
 --
--- * 'gorWebsiteRedirectLocation' @::@ 'Maybe' 'Text'
+-- * 'gorsServerSideEncryption'
 --
-getObjectResponse :: RsBody -- ^ 'gorBody'
-                  -> GetObjectResponse
-getObjectResponse p1 = GetObjectResponse
-    { _gorBody                    = p1
-    , _gorDeleteMarker            = Nothing
-    , _gorAcceptRanges            = Nothing
-    , _gorExpiration              = Nothing
-    , _gorRestore                 = Nothing
-    , _gorLastModified            = Nothing
-    , _gorContentLength           = Nothing
-    , _gorETag                    = Nothing
-    , _gorMissingMeta             = Nothing
-    , _gorVersionId               = Nothing
-    , _gorCacheControl            = Nothing
-    , _gorContentDisposition      = Nothing
-    , _gorContentEncoding         = Nothing
-    , _gorContentLanguage         = Nothing
-    , _gorContentType             = Nothing
-    , _gorExpires                 = Nothing
-    , _gorWebsiteRedirectLocation = Nothing
-    , _gorServerSideEncryption    = Nothing
-    , _gorMetadata                = mempty
-    , _gorSSECustomerAlgorithm    = Nothing
-    , _gorSSECustomerKeyMD5       = Nothing
-    , _gorSSEKMSKeyId             = Nothing
-    , _gorRequestCharged          = Nothing
-    , _gorReplicationStatus       = Nothing
+-- * 'gorsContentType'
+--
+-- * 'gorsStatus'
+--
+-- * 'gorsBody'
+getObjectResponse
+    :: Int -- ^ 'gorsStatus'
+    -> RsBody -- ^ 'gorsBody'
+    -> GetObjectResponse
+getObjectResponse pStatus_ pBody_ =
+    GetObjectResponse'
+    { _gorsVersionId = Nothing
+    , _gorsETag = Nothing
+    , _gorsRequestCharged = Nothing
+    , _gorsContentLength = Nothing
+    , _gorsRestore = Nothing
+    , _gorsExpires = Nothing
+    , _gorsDeleteMarker = Nothing
+    , _gorsExpiration = Nothing
+    , _gorsSSECustomerAlgorithm = Nothing
+    , _gorsMissingMeta = Nothing
+    , _gorsWebsiteRedirectLocation = Nothing
+    , _gorsAcceptRanges = Nothing
+    , _gorsStorageClass = Nothing
+    , _gorsContentEncoding = Nothing
+    , _gorsSSEKMSKeyId = Nothing
+    , _gorsSSECustomerKeyMD5 = Nothing
+    , _gorsMetadata = mempty
+    , _gorsReplicationStatus = Nothing
+    , _gorsCacheControl = Nothing
+    , _gorsContentLanguage = Nothing
+    , _gorsLastModified = Nothing
+    , _gorsContentDisposition = Nothing
+    , _gorsContentRange = Nothing
+    , _gorsServerSideEncryption = Nothing
+    , _gorsContentType = Nothing
+    , _gorsStatus = pStatus_
+    , _gorsBody = pBody_
     }
 
-gorAcceptRanges :: Lens' GetObjectResponse (Maybe Text)
-gorAcceptRanges = lens _gorAcceptRanges (\s a -> s { _gorAcceptRanges = a })
-
--- | Object data.
-gorBody :: Lens' GetObjectResponse RsBody
-gorBody = lens _gorBody (\s a -> s { _gorBody = a })
-
--- | Specifies caching behavior along the request/reply chain.
-gorCacheControl :: Lens' GetObjectResponse (Maybe Text)
-gorCacheControl = lens _gorCacheControl (\s a -> s { _gorCacheControl = a })
-
--- | Specifies presentational information for the object.
-gorContentDisposition :: Lens' GetObjectResponse (Maybe Text)
-gorContentDisposition =
-    lens _gorContentDisposition (\s a -> s { _gorContentDisposition = a })
+-- | Version of the object.
+gorsVersionId :: Lens' GetObjectResponse (Maybe ObjectVersionId)
+gorsVersionId = lens _gorsVersionId (\ s a -> s{_gorsVersionId = a});
 
--- | Specifies what content encodings have been applied to the object and thus
--- what decoding mechanisms must be applied to obtain the media-type referenced
--- by the Content-Type header field.
-gorContentEncoding :: Lens' GetObjectResponse (Maybe Text)
-gorContentEncoding =
-    lens _gorContentEncoding (\s a -> s { _gorContentEncoding = a })
+-- | An ETag is an opaque identifier assigned by a web server to a specific
+-- version of a resource found at a URL
+gorsETag :: Lens' GetObjectResponse (Maybe ETag)
+gorsETag = lens _gorsETag (\ s a -> s{_gorsETag = a});
 
--- | The language the content is in.
-gorContentLanguage :: Lens' GetObjectResponse (Maybe Text)
-gorContentLanguage =
-    lens _gorContentLanguage (\s a -> s { _gorContentLanguage = a })
+-- | Undocumented member.
+gorsRequestCharged :: Lens' GetObjectResponse (Maybe RequestCharged)
+gorsRequestCharged = lens _gorsRequestCharged (\ s a -> s{_gorsRequestCharged = a});
 
 -- | Size of the body in bytes.
-gorContentLength :: Lens' GetObjectResponse (Maybe Int)
-gorContentLength = lens _gorContentLength (\s a -> s { _gorContentLength = a })
+gorsContentLength :: Lens' GetObjectResponse (Maybe Int)
+gorsContentLength = lens _gorsContentLength (\ s a -> s{_gorsContentLength = a});
 
--- | A standard MIME type describing the format of the object data.
-gorContentType :: Lens' GetObjectResponse (Maybe Text)
-gorContentType = lens _gorContentType (\s a -> s { _gorContentType = a })
+-- | Provides information about object restoration operation and expiration
+-- time of the restored object copy.
+gorsRestore :: Lens' GetObjectResponse (Maybe Text)
+gorsRestore = lens _gorsRestore (\ s a -> s{_gorsRestore = a});
 
--- | Specifies whether the object retrieved was (true) or was not (false) a Delete
--- Marker. If false, this response header does not appear in the response.
-gorDeleteMarker :: Lens' GetObjectResponse (Maybe Bool)
-gorDeleteMarker = lens _gorDeleteMarker (\s a -> s { _gorDeleteMarker = a })
+-- | The date and time at which the object is no longer cacheable.
+gorsExpires :: Lens' GetObjectResponse (Maybe UTCTime)
+gorsExpires = lens _gorsExpires (\ s a -> s{_gorsExpires = a}) . mapping _Time;
 
--- | An ETag is an opaque identifier assigned by a web server to a specific
--- version of a resource found at a URL
-gorETag :: Lens' GetObjectResponse (Maybe Text)
-gorETag = lens _gorETag (\s a -> s { _gorETag = a })
+-- | Specifies whether the object retrieved was (true) or was not (false) a
+-- Delete Marker. If false, this response header does not appear in the
+-- response.
+gorsDeleteMarker :: Lens' GetObjectResponse (Maybe Bool)
+gorsDeleteMarker = lens _gorsDeleteMarker (\ s a -> s{_gorsDeleteMarker = a});
 
 -- | If the object expiration is configured (see PUT Bucket lifecycle), the
--- response includes this header. It includes the expiry-date and rule-id key
--- value pairs providing object expiration information. The value of the rule-id
--- is URL encoded.
-gorExpiration :: Lens' GetObjectResponse (Maybe Text)
-gorExpiration = lens _gorExpiration (\s a -> s { _gorExpiration = a })
-
--- | The date and time at which the object is no longer cacheable.
-gorExpires :: Lens' GetObjectResponse (Maybe UTCTime)
-gorExpires = lens _gorExpires (\s a -> s { _gorExpires = a }) . mapping _Time
-
--- | Last modified date of the object
-gorLastModified :: Lens' GetObjectResponse (Maybe UTCTime)
-gorLastModified = lens _gorLastModified (\s a -> s { _gorLastModified = a }) . mapping _Time
+-- response includes this header. It includes the expiry-date and rule-id
+-- key value pairs providing object expiration information. The value of
+-- the rule-id is URL encoded.
+gorsExpiration :: Lens' GetObjectResponse (Maybe Text)
+gorsExpiration = lens _gorsExpiration (\ s a -> s{_gorsExpiration = a});
 
--- | A map of metadata to store with the object in S3.
-gorMetadata :: Lens' GetObjectResponse (HashMap (CI Text) Text)
-gorMetadata = lens _gorMetadata (\s a -> s { _gorMetadata = a }) . _Map
+-- | If server-side encryption with a customer-provided encryption key was
+-- requested, the response will include this header confirming the
+-- encryption algorithm used.
+gorsSSECustomerAlgorithm :: Lens' GetObjectResponse (Maybe Text)
+gorsSSECustomerAlgorithm = lens _gorsSSECustomerAlgorithm (\ s a -> s{_gorsSSECustomerAlgorithm = a});
 
 -- | This is set to the number of metadata entries not returned in x-amz-meta
--- headers. This can happen if you create metadata using an API like SOAP that
--- supports more flexible metadata than the REST API. For example, using SOAP,
--- you can create metadata whose values are not legal HTTP headers.
-gorMissingMeta :: Lens' GetObjectResponse (Maybe Int)
-gorMissingMeta = lens _gorMissingMeta (\s a -> s { _gorMissingMeta = a })
+-- headers. This can happen if you create metadata using an API like SOAP
+-- that supports more flexible metadata than the REST API. For example,
+-- using SOAP, you can create metadata whose values are not legal HTTP
+-- headers.
+gorsMissingMeta :: Lens' GetObjectResponse (Maybe Int)
+gorsMissingMeta = lens _gorsMissingMeta (\ s a -> s{_gorsMissingMeta = a});
 
-gorReplicationStatus :: Lens' GetObjectResponse (Maybe ReplicationStatus)
-gorReplicationStatus =
-    lens _gorReplicationStatus (\s a -> s { _gorReplicationStatus = a })
+-- | If the bucket is configured as a website, redirects requests for this
+-- object to another object in the same bucket or to an external URL.
+-- Amazon S3 stores the value of this header in the object metadata.
+gorsWebsiteRedirectLocation :: Lens' GetObjectResponse (Maybe Text)
+gorsWebsiteRedirectLocation = lens _gorsWebsiteRedirectLocation (\ s a -> s{_gorsWebsiteRedirectLocation = a});
 
-gorRequestCharged :: Lens' GetObjectResponse (Maybe RequestCharged)
-gorRequestCharged =
-    lens _gorRequestCharged (\s a -> s { _gorRequestCharged = a })
+-- | Undocumented member.
+gorsAcceptRanges :: Lens' GetObjectResponse (Maybe Text)
+gorsAcceptRanges = lens _gorsAcceptRanges (\ s a -> s{_gorsAcceptRanges = a});
 
--- | Provides information about object restoration operation and expiration time
--- of the restored object copy.
-gorRestore :: Lens' GetObjectResponse (Maybe Text)
-gorRestore = lens _gorRestore (\s a -> s { _gorRestore = a })
+-- | Undocumented member.
+gorsStorageClass :: Lens' GetObjectResponse (Maybe StorageClass)
+gorsStorageClass = lens _gorsStorageClass (\ s a -> s{_gorsStorageClass = a});
 
--- | If server-side encryption with a customer-provided encryption key was
--- requested, the response will include this header confirming the encryption
--- algorithm used.
-gorSSECustomerAlgorithm :: Lens' GetObjectResponse (Maybe Text)
-gorSSECustomerAlgorithm =
-    lens _gorSSECustomerAlgorithm (\s a -> s { _gorSSECustomerAlgorithm = a })
+-- | Specifies what content encodings have been applied to the object and
+-- thus what decoding mechanisms must be applied to obtain the media-type
+-- referenced by the Content-Type header field.
+gorsContentEncoding :: Lens' GetObjectResponse (Maybe Text)
+gorsContentEncoding = lens _gorsContentEncoding (\ s a -> s{_gorsContentEncoding = a});
 
+-- | If present, specifies the ID of the AWS Key Management Service (KMS)
+-- master encryption key that was used for the object.
+gorsSSEKMSKeyId :: Lens' GetObjectResponse (Maybe Text)
+gorsSSEKMSKeyId = lens _gorsSSEKMSKeyId (\ s a -> s{_gorsSSEKMSKeyId = a}) . mapping _Sensitive;
+
 -- | If server-side encryption with a customer-provided encryption key was
 -- requested, the response will include this header to provide round trip
 -- message integrity verification of the customer-provided encryption key.
-gorSSECustomerKeyMD5 :: Lens' GetObjectResponse (Maybe Text)
-gorSSECustomerKeyMD5 =
-    lens _gorSSECustomerKeyMD5 (\s a -> s { _gorSSECustomerKeyMD5 = a })
+gorsSSECustomerKeyMD5 :: Lens' GetObjectResponse (Maybe Text)
+gorsSSECustomerKeyMD5 = lens _gorsSSECustomerKeyMD5 (\ s a -> s{_gorsSSECustomerKeyMD5 = a});
 
--- | If present, specifies the ID of the AWS Key Management Service (KMS) master
--- encryption key that was used for the object.
-gorSSEKMSKeyId :: Lens' GetObjectResponse (Maybe Text)
-gorSSEKMSKeyId = lens _gorSSEKMSKeyId (\s a -> s { _gorSSEKMSKeyId = a }) . mapping _Sensitive
+-- | A map of metadata to store with the object in S3.
+gorsMetadata :: Lens' GetObjectResponse (HashMap Text Text)
+gorsMetadata = lens _gorsMetadata (\ s a -> s{_gorsMetadata = a}) . _Map;
 
--- | The Server-side encryption algorithm used when storing this object in S3
--- (e.g., AES256, aws:kms).
-gorServerSideEncryption :: Lens' GetObjectResponse (Maybe ServerSideEncryption)
-gorServerSideEncryption =
-    lens _gorServerSideEncryption (\s a -> s { _gorServerSideEncryption = a })
+-- | Undocumented member.
+gorsReplicationStatus :: Lens' GetObjectResponse (Maybe ReplicationStatus)
+gorsReplicationStatus = lens _gorsReplicationStatus (\ s a -> s{_gorsReplicationStatus = a});
 
--- | Version of the object.
-gorVersionId :: Lens' GetObjectResponse (Maybe Text)
-gorVersionId = lens _gorVersionId (\s a -> s { _gorVersionId = a })
+-- | Specifies caching behavior along the request\/reply chain.
+gorsCacheControl :: Lens' GetObjectResponse (Maybe Text)
+gorsCacheControl = lens _gorsCacheControl (\ s a -> s{_gorsCacheControl = a});
 
--- | If the bucket is configured as a website, redirects requests for this object
--- to another object in the same bucket or to an external URL. Amazon S3 stores
--- the value of this header in the object metadata.
-gorWebsiteRedirectLocation :: Lens' GetObjectResponse (Maybe Text)
-gorWebsiteRedirectLocation =
-    lens _gorWebsiteRedirectLocation
-        (\s a -> s { _gorWebsiteRedirectLocation = a })
+-- | The language the content is in.
+gorsContentLanguage :: Lens' GetObjectResponse (Maybe Text)
+gorsContentLanguage = lens _gorsContentLanguage (\ s a -> s{_gorsContentLanguage = a});
 
-instance ToPath GetObject where
-    toPath GetObject{..} = mconcat
-        [ "/"
-        , toText _goBucket
-        , "/"
-        , toText _goKey
-        ]
+-- | Last modified date of the object
+gorsLastModified :: Lens' GetObjectResponse (Maybe UTCTime)
+gorsLastModified = lens _gorsLastModified (\ s a -> s{_gorsLastModified = a}) . mapping _Time;
 
-instance ToQuery GetObject where
-    toQuery GetObject{..} = mconcat
-        [ "response-cache-control"       =? _goResponseCacheControl
-        , "response-content-disposition" =? _goResponseContentDisposition
-        , "response-content-encoding"    =? _goResponseContentEncoding
-        , "response-content-language"    =? _goResponseContentLanguage
-        , "response-content-type"        =? _goResponseContentType
-        , "response-expires"             =? _goResponseExpires
-        , "versionId"                    =? _goVersionId
-        ]
+-- | Specifies presentational information for the object.
+gorsContentDisposition :: Lens' GetObjectResponse (Maybe Text)
+gorsContentDisposition = lens _gorsContentDisposition (\ s a -> s{_gorsContentDisposition = a});
 
-instance ToHeaders GetObject where
-    toHeaders GetObject{..} = mconcat
-        [ "If-Match"                                        =: _goIfMatch
-        , "If-Modified-Since"                               =: _goIfModifiedSince
-        , "If-None-Match"                                   =: _goIfNoneMatch
-        , "If-Unmodified-Since"                             =: _goIfUnmodifiedSince
-        , "Range"                                           =: _goRange
-        , "x-amz-server-side-encryption-customer-algorithm" =: _goSSECustomerAlgorithm
-        , "x-amz-server-side-encryption-customer-key"       =: _goSSECustomerKey
-        , "x-amz-server-side-encryption-customer-key-MD5"   =: _goSSECustomerKeyMD5
-        , "x-amz-request-payer"                             =: _goRequestPayer
-        ]
+-- | The portion of the object returned in the response.
+gorsContentRange :: Lens' GetObjectResponse (Maybe Text)
+gorsContentRange = lens _gorsContentRange (\ s a -> s{_gorsContentRange = a});
 
-instance ToXMLRoot GetObject where
-    toXMLRoot = const (namespaced ns "GetObject" [])
+-- | The Server-side encryption algorithm used when storing this object in S3
+-- (e.g., AES256, aws:kms).
+gorsServerSideEncryption :: Lens' GetObjectResponse (Maybe ServerSideEncryption)
+gorsServerSideEncryption = lens _gorsServerSideEncryption (\ s a -> s{_gorsServerSideEncryption = a});
 
-instance ToXML GetObject
+-- | A standard MIME type describing the format of the object data.
+gorsContentType :: Lens' GetObjectResponse (Maybe Text)
+gorsContentType = lens _gorsContentType (\ s a -> s{_gorsContentType = a});
 
-instance AWSRequest GetObject where
-    type Sv GetObject = S3
-    type Rs GetObject = GetObjectResponse
+-- | The response status code.
+gorsStatus :: Lens' GetObjectResponse Int
+gorsStatus = lens _gorsStatus (\ s a -> s{_gorsStatus = a});
 
-    request  = get
-    response = bodyResponse $ \h s b -> GetObjectResponse
-        <$> h ~:? "accept-ranges"
-        <*> pure (RsBody b)
-        <*> h ~:? "Cache-Control"
-        <*> h ~:? "Content-Disposition"
-        <*> h ~:? "Content-Encoding"
-        <*> h ~:? "Content-Language"
-        <*> h ~:? "Content-Length"
-        <*> h ~:? "Content-Type"
-        <*> h ~:? "x-amz-delete-marker"
-        <*> h ~:? "ETag"
-        <*> h ~:? "x-amz-expiration"
-        <*> h ~:? "Expires"
-        <*> h ~:? "Last-Modified"
-        <*> h ~:: "x-amz-meta-"
-        <*> h ~:? "x-amz-missing-meta"
-        <*> h ~:? "x-amz-replication-status"
-        <*> h ~:? "x-amz-request-charged"
-        <*> h ~:? "x-amz-restore"
-        <*> h ~:? "x-amz-server-side-encryption-customer-algorithm"
-        <*> h ~:? "x-amz-server-side-encryption-customer-key-MD5"
-        <*> h ~:? "x-amz-server-side-encryption-aws-kms-key-id"
-        <*> h ~:? "x-amz-server-side-encryption"
-        <*> h ~:? "x-amz-version-id"
-        <*> h ~:? "x-amz-website-redirect-location"
+-- | Object data.
+gorsBody :: Lens' GetObjectResponse RsBody
+gorsBody = lens _gorsBody (\ s a -> s{_gorsBody = a});
diff --git a/gen/Network/AWS/S3/GetObjectACL.hs b/gen/Network/AWS/S3/GetObjectACL.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/GetObjectACL.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.S3.GetObjectACL
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the access control list (ACL) of an object.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/GetObjectACL.html AWS API Reference> for GetObjectACL.
+module Network.AWS.S3.GetObjectACL
+    (
+    -- * Creating a Request
+      getObjectACL
+    , GetObjectACL
+    -- * Request Lenses
+    , goaVersionId
+    , goaRequestPayer
+    , goaBucket
+    , goaKey
+
+    -- * Destructuring the Response
+    , getObjectACLResponse
+    , GetObjectACLResponse
+    -- * Response Lenses
+    , goarsRequestCharged
+    , goarsGrants
+    , goarsOwner
+    , goarsStatus
+    ) where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'getObjectACL' smart constructor.
+data GetObjectACL = GetObjectACL'
+    { _goaVersionId    :: !(Maybe ObjectVersionId)
+    , _goaRequestPayer :: !(Maybe RequestPayer)
+    , _goaBucket       :: !BucketName
+    , _goaKey          :: !ObjectKey
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetObjectACL' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'goaVersionId'
+--
+-- * 'goaRequestPayer'
+--
+-- * 'goaBucket'
+--
+-- * 'goaKey'
+getObjectACL
+    :: BucketName -- ^ 'goaBucket'
+    -> ObjectKey -- ^ 'goaKey'
+    -> GetObjectACL
+getObjectACL pBucket_ pKey_ =
+    GetObjectACL'
+    { _goaVersionId = Nothing
+    , _goaRequestPayer = Nothing
+    , _goaBucket = pBucket_
+    , _goaKey = pKey_
+    }
+
+-- | VersionId used to reference a specific version of the object.
+goaVersionId :: Lens' GetObjectACL (Maybe ObjectVersionId)
+goaVersionId = lens _goaVersionId (\ s a -> s{_goaVersionId = a});
+
+-- | Undocumented member.
+goaRequestPayer :: Lens' GetObjectACL (Maybe RequestPayer)
+goaRequestPayer = lens _goaRequestPayer (\ s a -> s{_goaRequestPayer = a});
+
+-- | Undocumented member.
+goaBucket :: Lens' GetObjectACL BucketName
+goaBucket = lens _goaBucket (\ s a -> s{_goaBucket = a});
+
+-- | Undocumented member.
+goaKey :: Lens' GetObjectACL ObjectKey
+goaKey = lens _goaKey (\ s a -> s{_goaKey = a});
+
+instance AWSRequest GetObjectACL where
+        type Sv GetObjectACL = S3
+        type Rs GetObjectACL = GetObjectACLResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetObjectACLResponse' <$>
+                   (h .#? "x-amz-request-charged") <*>
+                     (x .@? "AccessControlList" .!@ mempty >>=
+                        may (parseXMLList "Grant"))
+                     <*> (x .@? "Owner")
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders GetObjectACL where
+        toHeaders GetObjectACL'{..}
+          = mconcat ["x-amz-request-payer" =# _goaRequestPayer]
+
+instance ToPath GetObjectACL where
+        toPath GetObjectACL'{..}
+          = mconcat ["/", toBS _goaBucket, "/", toBS _goaKey]
+
+instance ToQuery GetObjectACL where
+        toQuery GetObjectACL'{..}
+          = mconcat ["versionId" =: _goaVersionId, "acl"]
+
+-- | /See:/ 'getObjectACLResponse' smart constructor.
+data GetObjectACLResponse = GetObjectACLResponse'
+    { _goarsRequestCharged :: !(Maybe RequestCharged)
+    , _goarsGrants         :: !(Maybe [Grant])
+    , _goarsOwner          :: !(Maybe Owner)
+    , _goarsStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetObjectACLResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'goarsRequestCharged'
+--
+-- * 'goarsGrants'
+--
+-- * 'goarsOwner'
+--
+-- * 'goarsStatus'
+getObjectACLResponse
+    :: Int -- ^ 'goarsStatus'
+    -> GetObjectACLResponse
+getObjectACLResponse pStatus_ =
+    GetObjectACLResponse'
+    { _goarsRequestCharged = Nothing
+    , _goarsGrants = Nothing
+    , _goarsOwner = Nothing
+    , _goarsStatus = pStatus_
+    }
+
+-- | Undocumented member.
+goarsRequestCharged :: Lens' GetObjectACLResponse (Maybe RequestCharged)
+goarsRequestCharged = lens _goarsRequestCharged (\ s a -> s{_goarsRequestCharged = a});
+
+-- | A list of grants.
+goarsGrants :: Lens' GetObjectACLResponse [Grant]
+goarsGrants = lens _goarsGrants (\ s a -> s{_goarsGrants = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+goarsOwner :: Lens' GetObjectACLResponse (Maybe Owner)
+goarsOwner = lens _goarsOwner (\ s a -> s{_goarsOwner = a});
+
+-- | The response status code.
+goarsStatus :: Lens' GetObjectACLResponse Int
+goarsStatus = lens _goarsStatus (\ s a -> s{_goarsStatus = a});
diff --git a/gen/Network/AWS/S3/GetObjectAcl.hs b/gen/Network/AWS/S3/GetObjectAcl.hs
deleted file mode 100644
--- a/gen/Network/AWS/S3/GetObjectAcl.hs
+++ /dev/null
@@ -1,163 +0,0 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.S3.GetObjectAcl
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns the access control list (ACL) of an object.
---
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/GetObjectAcl.html>
-module Network.AWS.S3.GetObjectAcl
-    (
-    -- * Request
-      GetObjectAcl
-    -- ** Request constructor
-    , getObjectAcl
-    -- ** Request lenses
-    , goaBucket
-    , goaKey
-    , goaRequestPayer
-    , goaVersionId
-
-    -- * Response
-    , GetObjectAclResponse
-    -- ** Response constructor
-    , getObjectAclResponse
-    -- ** Response lenses
-    , goarGrants
-    , goarOwner
-    , goarRequestCharged
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
-
-data GetObjectAcl = GetObjectAcl
-    { _goaBucket       :: Text
-    , _goaKey          :: Text
-    , _goaRequestPayer :: Maybe RequestPayer
-    , _goaVersionId    :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'GetObjectAcl' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'goaBucket' @::@ 'Text'
---
--- * 'goaKey' @::@ 'Text'
---
--- * 'goaRequestPayer' @::@ 'Maybe' 'RequestPayer'
---
--- * 'goaVersionId' @::@ 'Maybe' 'Text'
---
-getObjectAcl :: Text -- ^ 'goaBucket'
-             -> Text -- ^ 'goaKey'
-             -> GetObjectAcl
-getObjectAcl p1 p2 = GetObjectAcl
-    { _goaBucket       = p1
-    , _goaKey          = p2
-    , _goaVersionId    = Nothing
-    , _goaRequestPayer = Nothing
-    }
-
-goaBucket :: Lens' GetObjectAcl Text
-goaBucket = lens _goaBucket (\s a -> s { _goaBucket = a })
-
-goaKey :: Lens' GetObjectAcl Text
-goaKey = lens _goaKey (\s a -> s { _goaKey = a })
-
-goaRequestPayer :: Lens' GetObjectAcl (Maybe RequestPayer)
-goaRequestPayer = lens _goaRequestPayer (\s a -> s { _goaRequestPayer = a })
-
--- | VersionId used to reference a specific version of the object.
-goaVersionId :: Lens' GetObjectAcl (Maybe Text)
-goaVersionId = lens _goaVersionId (\s a -> s { _goaVersionId = a })
-
-data GetObjectAclResponse = GetObjectAclResponse
-    { _goarGrants         :: List "Grant" Grant
-    , _goarOwner          :: Maybe Owner
-    , _goarRequestCharged :: Maybe RequestCharged
-    } deriving (Eq, Read, Show)
-
--- | 'GetObjectAclResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'goarGrants' @::@ ['Grant']
---
--- * 'goarOwner' @::@ 'Maybe' 'Owner'
---
--- * 'goarRequestCharged' @::@ 'Maybe' 'RequestCharged'
---
-getObjectAclResponse :: GetObjectAclResponse
-getObjectAclResponse = GetObjectAclResponse
-    { _goarOwner          = Nothing
-    , _goarGrants         = mempty
-    , _goarRequestCharged = Nothing
-    }
-
--- | A list of grants.
-goarGrants :: Lens' GetObjectAclResponse [Grant]
-goarGrants = lens _goarGrants (\s a -> s { _goarGrants = a }) . _List
-
-goarOwner :: Lens' GetObjectAclResponse (Maybe Owner)
-goarOwner = lens _goarOwner (\s a -> s { _goarOwner = a })
-
-goarRequestCharged :: Lens' GetObjectAclResponse (Maybe RequestCharged)
-goarRequestCharged =
-    lens _goarRequestCharged (\s a -> s { _goarRequestCharged = a })
-
-instance ToPath GetObjectAcl where
-    toPath GetObjectAcl{..} = mconcat
-        [ "/"
-        , toText _goaBucket
-        , "/"
-        , toText _goaKey
-        ]
-
-instance ToQuery GetObjectAcl where
-    toQuery GetObjectAcl{..} = mconcat
-        [ "acl"
-        , "versionId" =? _goaVersionId
-        ]
-
-instance ToHeaders GetObjectAcl where
-    toHeaders GetObjectAcl{..} = mconcat
-        [ "x-amz-request-payer" =: _goaRequestPayer
-        ]
-
-instance ToXMLRoot GetObjectAcl where
-    toXMLRoot = const (namespaced ns "GetObjectAcl" [])
-
-instance ToXML GetObjectAcl
-
-instance AWSRequest GetObjectAcl where
-    type Sv GetObjectAcl = S3
-    type Rs GetObjectAcl = GetObjectAclResponse
-
-    request  = get
-    response = xmlHeaderResponse $ \h x -> GetObjectAclResponse
-        <$> x .@? "AccessControlList" .!@ mempty
-        <*> x .@? "Owner"
-        <*> h ~:? "x-amz-request-charged"
diff --git a/gen/Network/AWS/S3/GetObjectTorrent.hs b/gen/Network/AWS/S3/GetObjectTorrent.hs
--- a/gen/Network/AWS/S3/GetObjectTorrent.hs
+++ b/gen/Network/AWS/S3/GetObjectTorrent.hs
@@ -1,142 +1,148 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.GetObjectTorrent
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Return torrent files from a bucket.
+-- Return torrent files from a bucket.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/GetObjectTorrent.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/GetObjectTorrent.html AWS API Reference> for GetObjectTorrent.
 module Network.AWS.S3.GetObjectTorrent
     (
-    -- * Request
-      GetObjectTorrent
-    -- ** Request constructor
-    , getObjectTorrent
-    -- ** Request lenses
+    -- * Creating a Request
+      getObjectTorrent
+    , GetObjectTorrent
+    -- * Request Lenses
+    , gotRequestPayer
     , gotBucket
     , gotKey
-    , gotRequestPayer
 
-    -- * Response
-    , GetObjectTorrentResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getObjectTorrentResponse
-    -- ** Response lenses
-    , gotrBody
-    , gotrRequestCharged
+    , GetObjectTorrentResponse
+    -- * Response Lenses
+    , gotrsRequestCharged
+    , gotrsStatus
+    , gotrsBody
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data GetObjectTorrent = GetObjectTorrent
-    { _gotBucket       :: Text
-    , _gotKey          :: Text
-    , _gotRequestPayer :: Maybe RequestPayer
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'getObjectTorrent' smart constructor.
+data GetObjectTorrent = GetObjectTorrent'
+    { _gotRequestPayer :: !(Maybe RequestPayer)
+    , _gotBucket       :: !BucketName
+    , _gotKey          :: !ObjectKey
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetObjectTorrent' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetObjectTorrent' with the minimum fields required to make a request.
 --
--- * 'gotBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gotKey' @::@ 'Text'
+-- * 'gotRequestPayer'
 --
--- * 'gotRequestPayer' @::@ 'Maybe' 'RequestPayer'
+-- * 'gotBucket'
 --
-getObjectTorrent :: Text -- ^ 'gotBucket'
-                 -> Text -- ^ 'gotKey'
-                 -> GetObjectTorrent
-getObjectTorrent p1 p2 = GetObjectTorrent
-    { _gotBucket       = p1
-    , _gotKey          = p2
-    , _gotRequestPayer = Nothing
+-- * 'gotKey'
+getObjectTorrent
+    :: BucketName -- ^ 'gotBucket'
+    -> ObjectKey -- ^ 'gotKey'
+    -> GetObjectTorrent
+getObjectTorrent pBucket_ pKey_ =
+    GetObjectTorrent'
+    { _gotRequestPayer = Nothing
+    , _gotBucket = pBucket_
+    , _gotKey = pKey_
     }
 
-gotBucket :: Lens' GetObjectTorrent Text
-gotBucket = lens _gotBucket (\s a -> s { _gotBucket = a })
-
-gotKey :: Lens' GetObjectTorrent Text
-gotKey = lens _gotKey (\s a -> s { _gotKey = a })
-
+-- | Undocumented member.
 gotRequestPayer :: Lens' GetObjectTorrent (Maybe RequestPayer)
-gotRequestPayer = lens _gotRequestPayer (\s a -> s { _gotRequestPayer = a })
+gotRequestPayer = lens _gotRequestPayer (\ s a -> s{_gotRequestPayer = a});
 
-data GetObjectTorrentResponse = GetObjectTorrentResponse
-    { _gotrBody           :: RsBody
-    , _gotrRequestCharged :: Maybe RequestCharged
-    } deriving (Show)
+-- | Undocumented member.
+gotBucket :: Lens' GetObjectTorrent BucketName
+gotBucket = lens _gotBucket (\ s a -> s{_gotBucket = a});
 
--- | 'GetObjectTorrentResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gotrBody' @::@ 'RsBody'
---
--- * 'gotrRequestCharged' @::@ 'Maybe' 'RequestCharged'
---
-getObjectTorrentResponse :: RsBody -- ^ 'gotrBody'
-                         -> GetObjectTorrentResponse
-getObjectTorrentResponse p1 = GetObjectTorrentResponse
-    { _gotrBody           = p1
-    , _gotrRequestCharged = Nothing
-    }
+-- | Undocumented member.
+gotKey :: Lens' GetObjectTorrent ObjectKey
+gotKey = lens _gotKey (\ s a -> s{_gotKey = a});
 
-gotrBody :: Lens' GetObjectTorrentResponse RsBody
-gotrBody = lens _gotrBody (\s a -> s { _gotrBody = a })
+instance AWSRequest GetObjectTorrent where
+        type Sv GetObjectTorrent = S3
+        type Rs GetObjectTorrent = GetObjectTorrentResponse
+        request = get
+        response
+          = receiveBody
+              (\ s h x ->
+                 GetObjectTorrentResponse' <$>
+                   (h .#? "x-amz-request-charged") <*>
+                     (pure (fromEnum s))
+                     <*> (pure x))
 
-gotrRequestCharged :: Lens' GetObjectTorrentResponse (Maybe RequestCharged)
-gotrRequestCharged =
-    lens _gotrRequestCharged (\s a -> s { _gotrRequestCharged = a })
+instance ToHeaders GetObjectTorrent where
+        toHeaders GetObjectTorrent'{..}
+          = mconcat ["x-amz-request-payer" =# _gotRequestPayer]
 
 instance ToPath GetObjectTorrent where
-    toPath GetObjectTorrent{..} = mconcat
-        [ "/"
-        , toText _gotBucket
-        , "/"
-        , toText _gotKey
-        ]
+        toPath GetObjectTorrent'{..}
+          = mconcat ["/", toBS _gotBucket, "/", toBS _gotKey]
 
 instance ToQuery GetObjectTorrent where
-    toQuery = const "torrent"
+        toQuery = const (mconcat ["torrent"])
 
-instance ToHeaders GetObjectTorrent where
-    toHeaders GetObjectTorrent{..} = mconcat
-        [ "x-amz-request-payer" =: _gotRequestPayer
-        ]
+-- | /See:/ 'getObjectTorrentResponse' smart constructor.
+data GetObjectTorrentResponse = GetObjectTorrentResponse'
+    { _gotrsRequestCharged :: !(Maybe RequestCharged)
+    , _gotrsStatus         :: !Int
+    , _gotrsBody           :: !RsBody
+    } deriving (Show,Generic)
 
-instance ToXMLRoot GetObjectTorrent where
-    toXMLRoot = const (namespaced ns "GetObjectTorrent" [])
+-- | Creates a value of 'GetObjectTorrentResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gotrsRequestCharged'
+--
+-- * 'gotrsStatus'
+--
+-- * 'gotrsBody'
+getObjectTorrentResponse
+    :: Int -- ^ 'gotrsStatus'
+    -> RsBody -- ^ 'gotrsBody'
+    -> GetObjectTorrentResponse
+getObjectTorrentResponse pStatus_ pBody_ =
+    GetObjectTorrentResponse'
+    { _gotrsRequestCharged = Nothing
+    , _gotrsStatus = pStatus_
+    , _gotrsBody = pBody_
+    }
 
-instance ToXML GetObjectTorrent
+-- | Undocumented member.
+gotrsRequestCharged :: Lens' GetObjectTorrentResponse (Maybe RequestCharged)
+gotrsRequestCharged = lens _gotrsRequestCharged (\ s a -> s{_gotrsRequestCharged = a});
 
-instance AWSRequest GetObjectTorrent where
-    type Sv GetObjectTorrent = S3
-    type Rs GetObjectTorrent = GetObjectTorrentResponse
+-- | The response status code.
+gotrsStatus :: Lens' GetObjectTorrentResponse Int
+gotrsStatus = lens _gotrsStatus (\ s a -> s{_gotrsStatus = a});
 
-    request  = get
-    response = bodyResponse $ \h s b -> GetObjectTorrentResponse
-        <$> pure (RsBody b)
-        <*> h ~:? "x-amz-request-charged"
+-- | Undocumented member.
+gotrsBody :: Lens' GetObjectTorrentResponse RsBody
+gotrsBody = lens _gotrsBody (\ s a -> s{_gotrsBody = a});
diff --git a/gen/Network/AWS/S3/HeadBucket.hs b/gen/Network/AWS/S3/HeadBucket.hs
--- a/gen/Network/AWS/S3/HeadBucket.hs
+++ b/gen/Network/AWS/S3/HeadBucket.hs
@@ -1,96 +1,91 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.HeadBucket
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | This operation is useful to determine if a bucket exists and you have
+-- This operation is useful to determine if a bucket exists and you have
 -- permission to access it.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/HeadBucket.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/HeadBucket.html AWS API Reference> for HeadBucket.
 module Network.AWS.S3.HeadBucket
     (
-    -- * Request
-      HeadBucket
-    -- ** Request constructor
-    , headBucket
-    -- ** Request lenses
+    -- * Creating a Request
+      headBucket
+    , HeadBucket
+    -- * Request Lenses
     , hbBucket
 
-    -- * Response
-    , HeadBucketResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , headBucketResponse
+    , HeadBucketResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-newtype HeadBucket = HeadBucket
-    { _hbBucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'headBucket' smart constructor.
+newtype HeadBucket = HeadBucket'
+    { _hbBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'HeadBucket' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'HeadBucket' with the minimum fields required to make a request.
 --
--- * 'hbBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-headBucket :: Text -- ^ 'hbBucket'
-           -> HeadBucket
-headBucket p1 = HeadBucket
-    { _hbBucket = p1
+-- * 'hbBucket'
+headBucket
+    :: BucketName -- ^ 'hbBucket'
+    -> HeadBucket
+headBucket pBucket_ =
+    HeadBucket'
+    { _hbBucket = pBucket_
     }
 
-hbBucket :: Lens' HeadBucket Text
-hbBucket = lens _hbBucket (\s a -> s { _hbBucket = a })
+-- | Undocumented member.
+hbBucket :: Lens' HeadBucket BucketName
+hbBucket = lens _hbBucket (\ s a -> s{_hbBucket = a});
 
-data HeadBucketResponse = HeadBucketResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest HeadBucket where
+        type Sv HeadBucket = S3
+        type Rs HeadBucket = HeadBucketResponse
+        request = head'
+        response = receiveNull HeadBucketResponse'
 
--- | 'HeadBucketResponse' constructor.
-headBucketResponse :: HeadBucketResponse
-headBucketResponse = HeadBucketResponse
+instance ToHeaders HeadBucket where
+        toHeaders = const mempty
 
 instance ToPath HeadBucket where
-    toPath HeadBucket{..} = mconcat
-        [ "/"
-        , toText _hbBucket
-        ]
+        toPath HeadBucket'{..}
+          = mconcat ["/", toBS _hbBucket]
 
 instance ToQuery HeadBucket where
-    toQuery = const mempty
-
-instance ToHeaders HeadBucket
-
-instance ToXMLRoot HeadBucket where
-    toXMLRoot = const (namespaced ns "HeadBucket" [])
-
-instance ToXML HeadBucket
+        toQuery = const mempty
 
-instance AWSRequest HeadBucket where
-    type Sv HeadBucket = S3
-    type Rs HeadBucket = HeadBucketResponse
+-- | /See:/ 'headBucketResponse' smart constructor.
+data HeadBucketResponse =
+    HeadBucketResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = head
-    response = nullResponse HeadBucketResponse
+-- | Creates a value of 'HeadBucketResponse' with the minimum fields required to make a request.
+--
+headBucketResponse
+    :: HeadBucketResponse
+headBucketResponse = HeadBucketResponse'
diff --git a/gen/Network/AWS/S3/HeadObject.hs b/gen/Network/AWS/S3/HeadObject.hs
--- a/gen/Network/AWS/S3/HeadObject.hs
+++ b/gen/Network/AWS/S3/HeadObject.hs
@@ -1,488 +1,502 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.HeadObject
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | The HEAD operation retrieves metadata from an object without returning the
--- object itself. This operation is useful if you're only interested in an
--- object's metadata. To use HEAD, you must have READ access to the object.
+-- The HEAD operation retrieves metadata from an object without returning
+-- the object itself. This operation is useful if you\'re only interested
+-- in an object\'s metadata. To use HEAD, you must have READ access to the
+-- object.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/HeadObject.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/HeadObject.html AWS API Reference> for HeadObject.
 module Network.AWS.S3.HeadObject
     (
-    -- * Request
-      HeadObject
-    -- ** Request constructor
-    , headObject
-    -- ** Request lenses
-    , hoBucket
+    -- * Creating a Request
+      headObject
+    , HeadObject
+    -- * Request Lenses
     , hoIfMatch
-    , hoIfModifiedSince
-    , hoIfNoneMatch
-    , hoIfUnmodifiedSince
-    , hoKey
-    , hoRange
-    , hoRequestPayer
+    , hoVersionId
     , hoSSECustomerAlgorithm
     , hoSSECustomerKey
+    , hoRequestPayer
+    , hoIfModifiedSince
+    , hoRange
+    , hoIfUnmodifiedSince
     , hoSSECustomerKeyMD5
-    , hoVersionId
+    , hoIfNoneMatch
+    , hoBucket
+    , hoKey
 
-    -- * Response
-    , HeadObjectResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , headObjectResponse
-    -- ** Response lenses
-    , horAcceptRanges
-    , horCacheControl
-    , horContentDisposition
-    , horContentEncoding
-    , horContentLanguage
-    , horContentLength
-    , horContentType
-    , horDeleteMarker
-    , horETag
-    , horExpiration
-    , horExpires
-    , horLastModified
-    , horMetadata
-    , horMissingMeta
-    , horReplicationStatus
-    , horRequestCharged
-    , horRestore
-    , horSSECustomerAlgorithm
-    , horSSECustomerKeyMD5
-    , horSSEKMSKeyId
-    , horServerSideEncryption
-    , horVersionId
-    , horWebsiteRedirectLocation
+    , HeadObjectResponse
+    -- * Response Lenses
+    , horsVersionId
+    , horsETag
+    , horsRequestCharged
+    , horsContentLength
+    , horsRestore
+    , horsExpires
+    , horsDeleteMarker
+    , horsExpiration
+    , horsSSECustomerAlgorithm
+    , horsMissingMeta
+    , horsWebsiteRedirectLocation
+    , horsAcceptRanges
+    , horsStorageClass
+    , horsContentEncoding
+    , horsSSEKMSKeyId
+    , horsSSECustomerKeyMD5
+    , horsMetadata
+    , horsReplicationStatus
+    , horsCacheControl
+    , horsContentLanguage
+    , horsLastModified
+    , horsContentDisposition
+    , horsServerSideEncryption
+    , horsContentType
+    , horsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data HeadObject = HeadObject
-    { _hoBucket               :: Text
-    , _hoIfMatch              :: Maybe Text
-    , _hoIfModifiedSince      :: Maybe RFC822
-    , _hoIfNoneMatch          :: Maybe Text
-    , _hoIfUnmodifiedSince    :: Maybe RFC822
-    , _hoKey                  :: Text
-    , _hoRange                :: Maybe Text
-    , _hoRequestPayer         :: Maybe RequestPayer
-    , _hoSSECustomerAlgorithm :: Maybe Text
-    , _hoSSECustomerKey       :: Maybe (Sensitive Text)
-    , _hoSSECustomerKeyMD5    :: Maybe Text
-    , _hoVersionId            :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'headObject' smart constructor.
+data HeadObject = HeadObject'
+    { _hoIfMatch              :: !(Maybe Text)
+    , _hoVersionId            :: !(Maybe ObjectVersionId)
+    , _hoSSECustomerAlgorithm :: !(Maybe Text)
+    , _hoSSECustomerKey       :: !(Maybe (Sensitive Text))
+    , _hoRequestPayer         :: !(Maybe RequestPayer)
+    , _hoIfModifiedSince      :: !(Maybe RFC822)
+    , _hoRange                :: !(Maybe Text)
+    , _hoIfUnmodifiedSince    :: !(Maybe RFC822)
+    , _hoSSECustomerKeyMD5    :: !(Maybe Text)
+    , _hoIfNoneMatch          :: !(Maybe Text)
+    , _hoBucket               :: !BucketName
+    , _hoKey                  :: !ObjectKey
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'HeadObject' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'HeadObject' with the minimum fields required to make a request.
 --
--- * 'hoBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'hoIfMatch' @::@ 'Maybe' 'Text'
+-- * 'hoIfMatch'
 --
--- * 'hoIfModifiedSince' @::@ 'Maybe' 'UTCTime'
+-- * 'hoVersionId'
 --
--- * 'hoIfNoneMatch' @::@ 'Maybe' 'Text'
+-- * 'hoSSECustomerAlgorithm'
 --
--- * 'hoIfUnmodifiedSince' @::@ 'Maybe' 'UTCTime'
+-- * 'hoSSECustomerKey'
 --
--- * 'hoKey' @::@ 'Text'
+-- * 'hoRequestPayer'
 --
--- * 'hoRange' @::@ 'Maybe' 'Text'
+-- * 'hoIfModifiedSince'
 --
--- * 'hoRequestPayer' @::@ 'Maybe' 'RequestPayer'
+-- * 'hoRange'
 --
--- * 'hoSSECustomerAlgorithm' @::@ 'Maybe' 'Text'
+-- * 'hoIfUnmodifiedSince'
 --
--- * 'hoSSECustomerKey' @::@ 'Maybe' 'Text'
+-- * 'hoSSECustomerKeyMD5'
 --
--- * 'hoSSECustomerKeyMD5' @::@ 'Maybe' 'Text'
+-- * 'hoIfNoneMatch'
 --
--- * 'hoVersionId' @::@ 'Maybe' 'Text'
+-- * 'hoBucket'
 --
-headObject :: Text -- ^ 'hoBucket'
-           -> Text -- ^ 'hoKey'
-           -> HeadObject
-headObject p1 p2 = HeadObject
-    { _hoBucket               = p1
-    , _hoKey                  = p2
-    , _hoIfMatch              = Nothing
-    , _hoIfModifiedSince      = Nothing
-    , _hoIfNoneMatch          = Nothing
-    , _hoIfUnmodifiedSince    = Nothing
-    , _hoRange                = Nothing
-    , _hoVersionId            = Nothing
+-- * 'hoKey'
+headObject
+    :: BucketName -- ^ 'hoBucket'
+    -> ObjectKey -- ^ 'hoKey'
+    -> HeadObject
+headObject pBucket_ pKey_ =
+    HeadObject'
+    { _hoIfMatch = Nothing
+    , _hoVersionId = Nothing
     , _hoSSECustomerAlgorithm = Nothing
-    , _hoSSECustomerKey       = Nothing
-    , _hoSSECustomerKeyMD5    = Nothing
-    , _hoRequestPayer         = Nothing
+    , _hoSSECustomerKey = Nothing
+    , _hoRequestPayer = Nothing
+    , _hoIfModifiedSince = Nothing
+    , _hoRange = Nothing
+    , _hoIfUnmodifiedSince = Nothing
+    , _hoSSECustomerKeyMD5 = Nothing
+    , _hoIfNoneMatch = Nothing
+    , _hoBucket = pBucket_
+    , _hoKey = pKey_
     }
 
-hoBucket :: Lens' HeadObject Text
-hoBucket = lens _hoBucket (\s a -> s { _hoBucket = a })
-
 -- | Return the object only if its entity tag (ETag) is the same as the one
 -- specified, otherwise return a 412 (precondition failed).
 hoIfMatch :: Lens' HeadObject (Maybe Text)
-hoIfMatch = lens _hoIfMatch (\s a -> s { _hoIfMatch = a })
+hoIfMatch = lens _hoIfMatch (\ s a -> s{_hoIfMatch = a});
 
+-- | VersionId used to reference a specific version of the object.
+hoVersionId :: Lens' HeadObject (Maybe ObjectVersionId)
+hoVersionId = lens _hoVersionId (\ s a -> s{_hoVersionId = a});
+
+-- | Specifies the algorithm to use to when encrypting the object (e.g.,
+-- AES256).
+hoSSECustomerAlgorithm :: Lens' HeadObject (Maybe Text)
+hoSSECustomerAlgorithm = lens _hoSSECustomerAlgorithm (\ s a -> s{_hoSSECustomerAlgorithm = a});
+
+-- | Specifies the customer-provided encryption key for Amazon S3 to use in
+-- encrypting data. This value is used to store the object and then it is
+-- discarded; Amazon does not store the encryption key. The key must be
+-- appropriate for use with the algorithm specified in the
+-- x-amz-server-side​-encryption​-customer-algorithm header.
+hoSSECustomerKey :: Lens' HeadObject (Maybe Text)
+hoSSECustomerKey = lens _hoSSECustomerKey (\ s a -> s{_hoSSECustomerKey = a}) . mapping _Sensitive;
+
+-- | Undocumented member.
+hoRequestPayer :: Lens' HeadObject (Maybe RequestPayer)
+hoRequestPayer = lens _hoRequestPayer (\ s a -> s{_hoRequestPayer = a});
+
 -- | Return the object only if it has been modified since the specified time,
 -- otherwise return a 304 (not modified).
 hoIfModifiedSince :: Lens' HeadObject (Maybe UTCTime)
-hoIfModifiedSince =
-    lens _hoIfModifiedSince (\s a -> s { _hoIfModifiedSince = a })
-        . mapping _Time
+hoIfModifiedSince = lens _hoIfModifiedSince (\ s a -> s{_hoIfModifiedSince = a}) . mapping _Time;
 
--- | Return the object only if its entity tag (ETag) is different from the one
--- specified, otherwise return a 304 (not modified).
-hoIfNoneMatch :: Lens' HeadObject (Maybe Text)
-hoIfNoneMatch = lens _hoIfNoneMatch (\s a -> s { _hoIfNoneMatch = a })
+-- | Downloads the specified range bytes of an object. For more information
+-- about the HTTP Range header, go to
+-- http:\/\/www.w3.org\/Protocols\/rfc2616\/rfc2616-sec14.html#sec14.35.
+hoRange :: Lens' HeadObject (Maybe Text)
+hoRange = lens _hoRange (\ s a -> s{_hoRange = a});
 
--- | Return the object only if it has not been modified since the specified time,
--- otherwise return a 412 (precondition failed).
+-- | Return the object only if it has not been modified since the specified
+-- time, otherwise return a 412 (precondition failed).
 hoIfUnmodifiedSince :: Lens' HeadObject (Maybe UTCTime)
-hoIfUnmodifiedSince =
-    lens _hoIfUnmodifiedSince (\s a -> s { _hoIfUnmodifiedSince = a })
-        . mapping _Time
+hoIfUnmodifiedSince = lens _hoIfUnmodifiedSince (\ s a -> s{_hoIfUnmodifiedSince = a}) . mapping _Time;
 
-hoKey :: Lens' HeadObject Text
-hoKey = lens _hoKey (\s a -> s { _hoKey = a })
+-- | Specifies the 128-bit MD5 digest of the encryption key according to RFC
+-- 1321. Amazon S3 uses this header for a message integrity check to ensure
+-- the encryption key was transmitted without error.
+hoSSECustomerKeyMD5 :: Lens' HeadObject (Maybe Text)
+hoSSECustomerKeyMD5 = lens _hoSSECustomerKeyMD5 (\ s a -> s{_hoSSECustomerKeyMD5 = a});
 
--- | Downloads the specified range bytes of an object. For more information about
--- the HTTP Range header, go to
--- http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.
-hoRange :: Lens' HeadObject (Maybe Text)
-hoRange = lens _hoRange (\s a -> s { _hoRange = a })
+-- | Return the object only if its entity tag (ETag) is different from the
+-- one specified, otherwise return a 304 (not modified).
+hoIfNoneMatch :: Lens' HeadObject (Maybe Text)
+hoIfNoneMatch = lens _hoIfNoneMatch (\ s a -> s{_hoIfNoneMatch = a});
 
-hoRequestPayer :: Lens' HeadObject (Maybe RequestPayer)
-hoRequestPayer = lens _hoRequestPayer (\s a -> s { _hoRequestPayer = a })
+-- | Undocumented member.
+hoBucket :: Lens' HeadObject BucketName
+hoBucket = lens _hoBucket (\ s a -> s{_hoBucket = a});
 
--- | Specifies the algorithm to use to when encrypting the object (e.g., AES256,
--- aws:kms).
-hoSSECustomerAlgorithm :: Lens' HeadObject (Maybe Text)
-hoSSECustomerAlgorithm =
-    lens _hoSSECustomerAlgorithm (\s a -> s { _hoSSECustomerAlgorithm = a })
+-- | Undocumented member.
+hoKey :: Lens' HeadObject ObjectKey
+hoKey = lens _hoKey (\ s a -> s{_hoKey = a});
 
--- | Specifies the customer-provided encryption key for Amazon S3 to use in
--- encrypting data. This value is used to store the object and then it is
--- discarded; Amazon does not store the encryption key. The key must be
--- appropriate for use with the algorithm specified in the
--- x-amz-server-side​-encryption​-customer-algorithm header.
-hoSSECustomerKey :: Lens' HeadObject (Maybe Text)
-hoSSECustomerKey = lens _hoSSECustomerKey (\s a -> s { _hoSSECustomerKey = a }) . mapping _Sensitive
+instance AWSRequest HeadObject where
+        type Sv HeadObject = S3
+        type Rs HeadObject = HeadObjectResponse
+        request = head'
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 HeadObjectResponse' <$>
+                   (h .#? "x-amz-version-id") <*> (h .#? "ETag") <*>
+                     (h .#? "x-amz-request-charged")
+                     <*> (h .#? "Content-Length")
+                     <*> (h .#? "x-amz-restore")
+                     <*> (h .#? "Expires")
+                     <*> (h .#? "x-amz-delete-marker")
+                     <*> (h .#? "x-amz-expiration")
+                     <*>
+                     (h .#?
+                        "x-amz-server-side-encryption-customer-algorithm")
+                     <*> (h .#? "x-amz-missing-meta")
+                     <*> (h .#? "x-amz-website-redirect-location")
+                     <*> (h .#? "accept-ranges")
+                     <*> (h .#? "x-amz-storage-class")
+                     <*> (h .#? "Content-Encoding")
+                     <*>
+                     (h .#? "x-amz-server-side-encryption-aws-kms-key-id")
+                     <*>
+                     (h .#?
+                        "x-amz-server-side-encryption-customer-key-MD5")
+                     <*> (parseHeadersMap "x-amz-meta-" h)
+                     <*> (h .#? "x-amz-replication-status")
+                     <*> (h .#? "Cache-Control")
+                     <*> (h .#? "Content-Language")
+                     <*> (h .#? "Last-Modified")
+                     <*> (h .#? "Content-Disposition")
+                     <*> (h .#? "x-amz-server-side-encryption")
+                     <*> (h .#? "Content-Type")
+                     <*> (pure (fromEnum s)))
 
--- | Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
--- Amazon S3 uses this header for a message integrity check to ensure the
--- encryption key was transmitted without error.
-hoSSECustomerKeyMD5 :: Lens' HeadObject (Maybe Text)
-hoSSECustomerKeyMD5 =
-    lens _hoSSECustomerKeyMD5 (\s a -> s { _hoSSECustomerKeyMD5 = a })
+instance ToHeaders HeadObject where
+        toHeaders HeadObject'{..}
+          = mconcat
+              ["If-Match" =# _hoIfMatch,
+               "x-amz-server-side-encryption-customer-algorithm" =#
+                 _hoSSECustomerAlgorithm,
+               "x-amz-server-side-encryption-customer-key" =#
+                 _hoSSECustomerKey,
+               "x-amz-request-payer" =# _hoRequestPayer,
+               "If-Modified-Since" =# _hoIfModifiedSince,
+               "Range" =# _hoRange,
+               "If-Unmodified-Since" =# _hoIfUnmodifiedSince,
+               "x-amz-server-side-encryption-customer-key-MD5" =#
+                 _hoSSECustomerKeyMD5,
+               "If-None-Match" =# _hoIfNoneMatch]
 
--- | VersionId used to reference a specific version of the object.
-hoVersionId :: Lens' HeadObject (Maybe Text)
-hoVersionId = lens _hoVersionId (\s a -> s { _hoVersionId = a })
+instance ToPath HeadObject where
+        toPath HeadObject'{..}
+          = mconcat ["/", toBS _hoBucket, "/", toBS _hoKey]
 
-data HeadObjectResponse = HeadObjectResponse
-    { _horAcceptRanges            :: Maybe Text
-    , _horCacheControl            :: Maybe Text
-    , _horContentDisposition      :: Maybe Text
-    , _horContentEncoding         :: Maybe Text
-    , _horContentLanguage         :: Maybe Text
-    , _horContentLength           :: Maybe Int
-    , _horContentType             :: Maybe Text
-    , _horDeleteMarker            :: Maybe Bool
-    , _horETag                    :: Maybe Text
-    , _horExpiration              :: Maybe Text
-    , _horExpires                 :: Maybe RFC822
-    , _horLastModified            :: Maybe RFC822
-    , _horMetadata                :: Map (CI Text) Text
-    , _horMissingMeta             :: Maybe Int
-    , _horReplicationStatus       :: Maybe ReplicationStatus
-    , _horRequestCharged          :: Maybe RequestCharged
-    , _horRestore                 :: Maybe Text
-    , _horSSECustomerAlgorithm    :: Maybe Text
-    , _horSSECustomerKeyMD5       :: Maybe Text
-    , _horSSEKMSKeyId             :: Maybe (Sensitive Text)
-    , _horServerSideEncryption    :: Maybe ServerSideEncryption
-    , _horVersionId               :: Maybe Text
-    , _horWebsiteRedirectLocation :: Maybe Text
-    } deriving (Eq, Read, Show)
+instance ToQuery HeadObject where
+        toQuery HeadObject'{..}
+          = mconcat ["versionId" =: _hoVersionId]
 
--- | 'HeadObjectResponse' constructor.
+-- | /See:/ 'headObjectResponse' smart constructor.
+data HeadObjectResponse = HeadObjectResponse'
+    { _horsVersionId               :: !(Maybe ObjectVersionId)
+    , _horsETag                    :: !(Maybe ETag)
+    , _horsRequestCharged          :: !(Maybe RequestCharged)
+    , _horsContentLength           :: !(Maybe Int)
+    , _horsRestore                 :: !(Maybe Text)
+    , _horsExpires                 :: !(Maybe RFC822)
+    , _horsDeleteMarker            :: !(Maybe Bool)
+    , _horsExpiration              :: !(Maybe Text)
+    , _horsSSECustomerAlgorithm    :: !(Maybe Text)
+    , _horsMissingMeta             :: !(Maybe Int)
+    , _horsWebsiteRedirectLocation :: !(Maybe Text)
+    , _horsAcceptRanges            :: !(Maybe Text)
+    , _horsStorageClass            :: !(Maybe StorageClass)
+    , _horsContentEncoding         :: !(Maybe Text)
+    , _horsSSEKMSKeyId             :: !(Maybe (Sensitive Text))
+    , _horsSSECustomerKeyMD5       :: !(Maybe Text)
+    , _horsMetadata                :: !(Map Text Text)
+    , _horsReplicationStatus       :: !(Maybe ReplicationStatus)
+    , _horsCacheControl            :: !(Maybe Text)
+    , _horsContentLanguage         :: !(Maybe Text)
+    , _horsLastModified            :: !(Maybe RFC822)
+    , _horsContentDisposition      :: !(Maybe Text)
+    , _horsServerSideEncryption    :: !(Maybe ServerSideEncryption)
+    , _horsContentType             :: !(Maybe Text)
+    , _horsStatus                  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HeadObjectResponse' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'horAcceptRanges' @::@ 'Maybe' 'Text'
+-- * 'horsVersionId'
 --
--- * 'horCacheControl' @::@ 'Maybe' 'Text'
+-- * 'horsETag'
 --
--- * 'horContentDisposition' @::@ 'Maybe' 'Text'
+-- * 'horsRequestCharged'
 --
--- * 'horContentEncoding' @::@ 'Maybe' 'Text'
+-- * 'horsContentLength'
 --
--- * 'horContentLanguage' @::@ 'Maybe' 'Text'
+-- * 'horsRestore'
 --
--- * 'horContentLength' @::@ 'Maybe' 'Int'
+-- * 'horsExpires'
 --
--- * 'horContentType' @::@ 'Maybe' 'Text'
+-- * 'horsDeleteMarker'
 --
--- * 'horDeleteMarker' @::@ 'Maybe' 'Bool'
+-- * 'horsExpiration'
 --
--- * 'horETag' @::@ 'Maybe' 'Text'
+-- * 'horsSSECustomerAlgorithm'
 --
--- * 'horExpiration' @::@ 'Maybe' 'Text'
+-- * 'horsMissingMeta'
 --
--- * 'horExpires' @::@ 'Maybe' 'UTCTime'
+-- * 'horsWebsiteRedirectLocation'
 --
--- * 'horLastModified' @::@ 'Maybe' 'UTCTime'
+-- * 'horsAcceptRanges'
 --
--- * 'horMetadata' @::@ 'HashMap' ('CI' 'Text') 'Text'
+-- * 'horsStorageClass'
 --
--- * 'horMissingMeta' @::@ 'Maybe' 'Int'
+-- * 'horsContentEncoding'
 --
--- * 'horReplicationStatus' @::@ 'Maybe' 'ReplicationStatus'
+-- * 'horsSSEKMSKeyId'
 --
--- * 'horRequestCharged' @::@ 'Maybe' 'RequestCharged'
+-- * 'horsSSECustomerKeyMD5'
 --
--- * 'horRestore' @::@ 'Maybe' 'Text'
+-- * 'horsMetadata'
 --
--- * 'horSSECustomerAlgorithm' @::@ 'Maybe' 'Text'
+-- * 'horsReplicationStatus'
 --
--- * 'horSSECustomerKeyMD5' @::@ 'Maybe' 'Text'
+-- * 'horsCacheControl'
 --
--- * 'horSSEKMSKeyId' @::@ 'Maybe' 'Text'
+-- * 'horsContentLanguage'
 --
--- * 'horServerSideEncryption' @::@ 'Maybe' 'ServerSideEncryption'
+-- * 'horsLastModified'
 --
--- * 'horVersionId' @::@ 'Maybe' 'Text'
+-- * 'horsContentDisposition'
 --
--- * 'horWebsiteRedirectLocation' @::@ 'Maybe' 'Text'
+-- * 'horsServerSideEncryption'
 --
-headObjectResponse :: HeadObjectResponse
-headObjectResponse = HeadObjectResponse
-    { _horDeleteMarker            = Nothing
-    , _horAcceptRanges            = Nothing
-    , _horExpiration              = Nothing
-    , _horRestore                 = Nothing
-    , _horLastModified            = Nothing
-    , _horContentLength           = Nothing
-    , _horETag                    = Nothing
-    , _horMissingMeta             = Nothing
-    , _horVersionId               = Nothing
-    , _horCacheControl            = Nothing
-    , _horContentDisposition      = Nothing
-    , _horContentEncoding         = Nothing
-    , _horContentLanguage         = Nothing
-    , _horContentType             = Nothing
-    , _horExpires                 = Nothing
-    , _horWebsiteRedirectLocation = Nothing
-    , _horServerSideEncryption    = Nothing
-    , _horMetadata                = mempty
-    , _horSSECustomerAlgorithm    = Nothing
-    , _horSSECustomerKeyMD5       = Nothing
-    , _horSSEKMSKeyId             = Nothing
-    , _horRequestCharged          = Nothing
-    , _horReplicationStatus       = Nothing
+-- * 'horsContentType'
+--
+-- * 'horsStatus'
+headObjectResponse
+    :: Int -- ^ 'horsStatus'
+    -> HeadObjectResponse
+headObjectResponse pStatus_ =
+    HeadObjectResponse'
+    { _horsVersionId = Nothing
+    , _horsETag = Nothing
+    , _horsRequestCharged = Nothing
+    , _horsContentLength = Nothing
+    , _horsRestore = Nothing
+    , _horsExpires = Nothing
+    , _horsDeleteMarker = Nothing
+    , _horsExpiration = Nothing
+    , _horsSSECustomerAlgorithm = Nothing
+    , _horsMissingMeta = Nothing
+    , _horsWebsiteRedirectLocation = Nothing
+    , _horsAcceptRanges = Nothing
+    , _horsStorageClass = Nothing
+    , _horsContentEncoding = Nothing
+    , _horsSSEKMSKeyId = Nothing
+    , _horsSSECustomerKeyMD5 = Nothing
+    , _horsMetadata = mempty
+    , _horsReplicationStatus = Nothing
+    , _horsCacheControl = Nothing
+    , _horsContentLanguage = Nothing
+    , _horsLastModified = Nothing
+    , _horsContentDisposition = Nothing
+    , _horsServerSideEncryption = Nothing
+    , _horsContentType = Nothing
+    , _horsStatus = pStatus_
     }
 
-horAcceptRanges :: Lens' HeadObjectResponse (Maybe Text)
-horAcceptRanges = lens _horAcceptRanges (\s a -> s { _horAcceptRanges = a })
-
--- | Specifies caching behavior along the request/reply chain.
-horCacheControl :: Lens' HeadObjectResponse (Maybe Text)
-horCacheControl = lens _horCacheControl (\s a -> s { _horCacheControl = a })
-
--- | Specifies presentational information for the object.
-horContentDisposition :: Lens' HeadObjectResponse (Maybe Text)
-horContentDisposition =
-    lens _horContentDisposition (\s a -> s { _horContentDisposition = a })
+-- | Version of the object.
+horsVersionId :: Lens' HeadObjectResponse (Maybe ObjectVersionId)
+horsVersionId = lens _horsVersionId (\ s a -> s{_horsVersionId = a});
 
--- | Specifies what content encodings have been applied to the object and thus
--- what decoding mechanisms must be applied to obtain the media-type referenced
--- by the Content-Type header field.
-horContentEncoding :: Lens' HeadObjectResponse (Maybe Text)
-horContentEncoding =
-    lens _horContentEncoding (\s a -> s { _horContentEncoding = a })
+-- | An ETag is an opaque identifier assigned by a web server to a specific
+-- version of a resource found at a URL
+horsETag :: Lens' HeadObjectResponse (Maybe ETag)
+horsETag = lens _horsETag (\ s a -> s{_horsETag = a});
 
--- | The language the content is in.
-horContentLanguage :: Lens' HeadObjectResponse (Maybe Text)
-horContentLanguage =
-    lens _horContentLanguage (\s a -> s { _horContentLanguage = a })
+-- | Undocumented member.
+horsRequestCharged :: Lens' HeadObjectResponse (Maybe RequestCharged)
+horsRequestCharged = lens _horsRequestCharged (\ s a -> s{_horsRequestCharged = a});
 
 -- | Size of the body in bytes.
-horContentLength :: Lens' HeadObjectResponse (Maybe Int)
-horContentLength = lens _horContentLength (\s a -> s { _horContentLength = a })
+horsContentLength :: Lens' HeadObjectResponse (Maybe Int)
+horsContentLength = lens _horsContentLength (\ s a -> s{_horsContentLength = a});
 
--- | A standard MIME type describing the format of the object data.
-horContentType :: Lens' HeadObjectResponse (Maybe Text)
-horContentType = lens _horContentType (\s a -> s { _horContentType = a })
+-- | Provides information about object restoration operation and expiration
+-- time of the restored object copy.
+horsRestore :: Lens' HeadObjectResponse (Maybe Text)
+horsRestore = lens _horsRestore (\ s a -> s{_horsRestore = a});
 
--- | Specifies whether the object retrieved was (true) or was not (false) a Delete
--- Marker. If false, this response header does not appear in the response.
-horDeleteMarker :: Lens' HeadObjectResponse (Maybe Bool)
-horDeleteMarker = lens _horDeleteMarker (\s a -> s { _horDeleteMarker = a })
+-- | The date and time at which the object is no longer cacheable.
+horsExpires :: Lens' HeadObjectResponse (Maybe UTCTime)
+horsExpires = lens _horsExpires (\ s a -> s{_horsExpires = a}) . mapping _Time;
 
--- | An ETag is an opaque identifier assigned by a web server to a specific
--- version of a resource found at a URL
-horETag :: Lens' HeadObjectResponse (Maybe Text)
-horETag = lens _horETag (\s a -> s { _horETag = a })
+-- | Specifies whether the object retrieved was (true) or was not (false) a
+-- Delete Marker. If false, this response header does not appear in the
+-- response.
+horsDeleteMarker :: Lens' HeadObjectResponse (Maybe Bool)
+horsDeleteMarker = lens _horsDeleteMarker (\ s a -> s{_horsDeleteMarker = a});
 
 -- | If the object expiration is configured (see PUT Bucket lifecycle), the
--- response includes this header. It includes the expiry-date and rule-id key
--- value pairs providing object expiration information. The value of the rule-id
--- is URL encoded.
-horExpiration :: Lens' HeadObjectResponse (Maybe Text)
-horExpiration = lens _horExpiration (\s a -> s { _horExpiration = a })
-
--- | The date and time at which the object is no longer cacheable.
-horExpires :: Lens' HeadObjectResponse (Maybe UTCTime)
-horExpires = lens _horExpires (\s a -> s { _horExpires = a }) . mapping _Time
-
--- | Last modified date of the object
-horLastModified :: Lens' HeadObjectResponse (Maybe UTCTime)
-horLastModified = lens _horLastModified (\s a -> s { _horLastModified = a }) . mapping _Time
+-- response includes this header. It includes the expiry-date and rule-id
+-- key value pairs providing object expiration information. The value of
+-- the rule-id is URL encoded.
+horsExpiration :: Lens' HeadObjectResponse (Maybe Text)
+horsExpiration = lens _horsExpiration (\ s a -> s{_horsExpiration = a});
 
--- | A map of metadata to store with the object in S3.
-horMetadata :: Lens' HeadObjectResponse (HashMap (CI Text) Text)
-horMetadata = lens _horMetadata (\s a -> s { _horMetadata = a }) . _Map
+-- | If server-side encryption with a customer-provided encryption key was
+-- requested, the response will include this header confirming the
+-- encryption algorithm used.
+horsSSECustomerAlgorithm :: Lens' HeadObjectResponse (Maybe Text)
+horsSSECustomerAlgorithm = lens _horsSSECustomerAlgorithm (\ s a -> s{_horsSSECustomerAlgorithm = a});
 
 -- | This is set to the number of metadata entries not returned in x-amz-meta
--- headers. This can happen if you create metadata using an API like SOAP that
--- supports more flexible metadata than the REST API. For example, using SOAP,
--- you can create metadata whose values are not legal HTTP headers.
-horMissingMeta :: Lens' HeadObjectResponse (Maybe Int)
-horMissingMeta = lens _horMissingMeta (\s a -> s { _horMissingMeta = a })
+-- headers. This can happen if you create metadata using an API like SOAP
+-- that supports more flexible metadata than the REST API. For example,
+-- using SOAP, you can create metadata whose values are not legal HTTP
+-- headers.
+horsMissingMeta :: Lens' HeadObjectResponse (Maybe Int)
+horsMissingMeta = lens _horsMissingMeta (\ s a -> s{_horsMissingMeta = a});
 
-horReplicationStatus :: Lens' HeadObjectResponse (Maybe ReplicationStatus)
-horReplicationStatus =
-    lens _horReplicationStatus (\s a -> s { _horReplicationStatus = a })
+-- | If the bucket is configured as a website, redirects requests for this
+-- object to another object in the same bucket or to an external URL.
+-- Amazon S3 stores the value of this header in the object metadata.
+horsWebsiteRedirectLocation :: Lens' HeadObjectResponse (Maybe Text)
+horsWebsiteRedirectLocation = lens _horsWebsiteRedirectLocation (\ s a -> s{_horsWebsiteRedirectLocation = a});
 
-horRequestCharged :: Lens' HeadObjectResponse (Maybe RequestCharged)
-horRequestCharged =
-    lens _horRequestCharged (\s a -> s { _horRequestCharged = a })
+-- | Undocumented member.
+horsAcceptRanges :: Lens' HeadObjectResponse (Maybe Text)
+horsAcceptRanges = lens _horsAcceptRanges (\ s a -> s{_horsAcceptRanges = a});
 
--- | Provides information about object restoration operation and expiration time
--- of the restored object copy.
-horRestore :: Lens' HeadObjectResponse (Maybe Text)
-horRestore = lens _horRestore (\s a -> s { _horRestore = a })
+-- | Undocumented member.
+horsStorageClass :: Lens' HeadObjectResponse (Maybe StorageClass)
+horsStorageClass = lens _horsStorageClass (\ s a -> s{_horsStorageClass = a});
 
--- | If server-side encryption with a customer-provided encryption key was
--- requested, the response will include this header confirming the encryption
--- algorithm used.
-horSSECustomerAlgorithm :: Lens' HeadObjectResponse (Maybe Text)
-horSSECustomerAlgorithm =
-    lens _horSSECustomerAlgorithm (\s a -> s { _horSSECustomerAlgorithm = a })
+-- | Specifies what content encodings have been applied to the object and
+-- thus what decoding mechanisms must be applied to obtain the media-type
+-- referenced by the Content-Type header field.
+horsContentEncoding :: Lens' HeadObjectResponse (Maybe Text)
+horsContentEncoding = lens _horsContentEncoding (\ s a -> s{_horsContentEncoding = a});
 
+-- | If present, specifies the ID of the AWS Key Management Service (KMS)
+-- master encryption key that was used for the object.
+horsSSEKMSKeyId :: Lens' HeadObjectResponse (Maybe Text)
+horsSSEKMSKeyId = lens _horsSSEKMSKeyId (\ s a -> s{_horsSSEKMSKeyId = a}) . mapping _Sensitive;
+
 -- | If server-side encryption with a customer-provided encryption key was
 -- requested, the response will include this header to provide round trip
 -- message integrity verification of the customer-provided encryption key.
-horSSECustomerKeyMD5 :: Lens' HeadObjectResponse (Maybe Text)
-horSSECustomerKeyMD5 =
-    lens _horSSECustomerKeyMD5 (\s a -> s { _horSSECustomerKeyMD5 = a })
-
--- | If present, specifies the ID of the AWS Key Management Service (KMS) master
--- encryption key that was used for the object.
-horSSEKMSKeyId :: Lens' HeadObjectResponse (Maybe Text)
-horSSEKMSKeyId = lens _horSSEKMSKeyId (\s a -> s { _horSSEKMSKeyId = a }) . mapping _Sensitive
-
--- | The Server-side encryption algorithm used when storing this object in S3
--- (e.g., AES256, aws:kms).
-horServerSideEncryption :: Lens' HeadObjectResponse (Maybe ServerSideEncryption)
-horServerSideEncryption =
-    lens _horServerSideEncryption (\s a -> s { _horServerSideEncryption = a })
+horsSSECustomerKeyMD5 :: Lens' HeadObjectResponse (Maybe Text)
+horsSSECustomerKeyMD5 = lens _horsSSECustomerKeyMD5 (\ s a -> s{_horsSSECustomerKeyMD5 = a});
 
--- | Version of the object.
-horVersionId :: Lens' HeadObjectResponse (Maybe Text)
-horVersionId = lens _horVersionId (\s a -> s { _horVersionId = a })
+-- | A map of metadata to store with the object in S3.
+horsMetadata :: Lens' HeadObjectResponse (HashMap Text Text)
+horsMetadata = lens _horsMetadata (\ s a -> s{_horsMetadata = a}) . _Map;
 
--- | If the bucket is configured as a website, redirects requests for this object
--- to another object in the same bucket or to an external URL. Amazon S3 stores
--- the value of this header in the object metadata.
-horWebsiteRedirectLocation :: Lens' HeadObjectResponse (Maybe Text)
-horWebsiteRedirectLocation =
-    lens _horWebsiteRedirectLocation
-        (\s a -> s { _horWebsiteRedirectLocation = a })
+-- | Undocumented member.
+horsReplicationStatus :: Lens' HeadObjectResponse (Maybe ReplicationStatus)
+horsReplicationStatus = lens _horsReplicationStatus (\ s a -> s{_horsReplicationStatus = a});
 
-instance ToPath HeadObject where
-    toPath HeadObject{..} = mconcat
-        [ "/"
-        , toText _hoBucket
-        , "/"
-        , toText _hoKey
-        ]
+-- | Specifies caching behavior along the request\/reply chain.
+horsCacheControl :: Lens' HeadObjectResponse (Maybe Text)
+horsCacheControl = lens _horsCacheControl (\ s a -> s{_horsCacheControl = a});
 
-instance ToQuery HeadObject where
-    toQuery rq = "versionId" =? _hoVersionId rq
+-- | The language the content is in.
+horsContentLanguage :: Lens' HeadObjectResponse (Maybe Text)
+horsContentLanguage = lens _horsContentLanguage (\ s a -> s{_horsContentLanguage = a});
 
-instance ToHeaders HeadObject where
-    toHeaders HeadObject{..} = mconcat
-        [ "If-Match"                                        =: _hoIfMatch
-        , "If-Modified-Since"                               =: _hoIfModifiedSince
-        , "If-None-Match"                                   =: _hoIfNoneMatch
-        , "If-Unmodified-Since"                             =: _hoIfUnmodifiedSince
-        , "Range"                                           =: _hoRange
-        , "x-amz-server-side-encryption-customer-algorithm" =: _hoSSECustomerAlgorithm
-        , "x-amz-server-side-encryption-customer-key"       =: _hoSSECustomerKey
-        , "x-amz-server-side-encryption-customer-key-MD5"   =: _hoSSECustomerKeyMD5
-        , "x-amz-request-payer"                             =: _hoRequestPayer
-        ]
+-- | Last modified date of the object
+horsLastModified :: Lens' HeadObjectResponse (Maybe UTCTime)
+horsLastModified = lens _horsLastModified (\ s a -> s{_horsLastModified = a}) . mapping _Time;
 
-instance ToXMLRoot HeadObject where
-    toXMLRoot = const (namespaced ns "HeadObject" [])
+-- | Specifies presentational information for the object.
+horsContentDisposition :: Lens' HeadObjectResponse (Maybe Text)
+horsContentDisposition = lens _horsContentDisposition (\ s a -> s{_horsContentDisposition = a});
 
-instance ToXML HeadObject
+-- | The Server-side encryption algorithm used when storing this object in S3
+-- (e.g., AES256, aws:kms).
+horsServerSideEncryption :: Lens' HeadObjectResponse (Maybe ServerSideEncryption)
+horsServerSideEncryption = lens _horsServerSideEncryption (\ s a -> s{_horsServerSideEncryption = a});
 
-instance AWSRequest HeadObject where
-    type Sv HeadObject = S3
-    type Rs HeadObject = HeadObjectResponse
+-- | A standard MIME type describing the format of the object data.
+horsContentType :: Lens' HeadObjectResponse (Maybe Text)
+horsContentType = lens _horsContentType (\ s a -> s{_horsContentType = a});
 
-    request  = head
-    response = headerResponse $ \h -> HeadObjectResponse
-        <$> h ~:? "accept-ranges"
-        <*> h ~:? "Cache-Control"
-        <*> h ~:? "Content-Disposition"
-        <*> h ~:? "Content-Encoding"
-        <*> h ~:? "Content-Language"
-        <*> h ~:? "Content-Length"
-        <*> h ~:? "Content-Type"
-        <*> h ~:? "x-amz-delete-marker"
-        <*> h ~:? "ETag"
-        <*> h ~:? "x-amz-expiration"
-        <*> h ~:? "Expires"
-        <*> h ~:? "Last-Modified"
-        <*> h ~:: "x-amz-meta-"
-        <*> h ~:? "x-amz-missing-meta"
-        <*> h ~:? "x-amz-replication-status"
-        <*> h ~:? "x-amz-request-charged"
-        <*> h ~:? "x-amz-restore"
-        <*> h ~:? "x-amz-server-side-encryption-customer-algorithm"
-        <*> h ~:? "x-amz-server-side-encryption-customer-key-MD5"
-        <*> h ~:? "x-amz-server-side-encryption-aws-kms-key-id"
-        <*> h ~:? "x-amz-server-side-encryption"
-        <*> h ~:? "x-amz-version-id"
-        <*> h ~:? "x-amz-website-redirect-location"
+-- | The response status code.
+horsStatus :: Lens' HeadObjectResponse Int
+horsStatus = lens _horsStatus (\ s a -> s{_horsStatus = a});
diff --git a/gen/Network/AWS/S3/ListBuckets.hs b/gen/Network/AWS/S3/ListBuckets.hs
--- a/gen/Network/AWS/S3/ListBuckets.hs
+++ b/gen/Network/AWS/S3/ListBuckets.hs
@@ -1,105 +1,115 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.ListBuckets
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns a list of all buckets owned by the authenticated sender of the
+-- Returns a list of all buckets owned by the authenticated sender of the
 -- request.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/ListBuckets.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/ListBuckets.html AWS API Reference> for ListBuckets.
 module Network.AWS.S3.ListBuckets
     (
-    -- * Request
-      ListBuckets
-    -- ** Request constructor
-    , listBuckets
+    -- * Creating a Request
+      listBuckets
+    , ListBuckets
 
-    -- * Response
-    , ListBucketsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listBucketsResponse
-    -- ** Response lenses
-    , lbrBuckets
-    , lbrOwner
+    , ListBucketsResponse
+    -- * Response Lenses
+    , lbrsBuckets
+    , lbrsOwner
+    , lbrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
-
-data ListBuckets = ListBuckets
-    deriving (Eq, Ord, Read, Show, Generic)
-
--- | 'ListBuckets' constructor.
-listBuckets :: ListBuckets
-listBuckets = ListBuckets
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data ListBucketsResponse = ListBucketsResponse
-    { _lbrBuckets :: List "Bucket" Bucket
-    , _lbrOwner   :: Maybe Owner
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'listBuckets' smart constructor.
+data ListBuckets =
+    ListBuckets'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListBucketsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lbrBuckets' @::@ ['Bucket']
---
--- * 'lbrOwner' @::@ 'Maybe' 'Owner'
+-- | Creates a value of 'ListBuckets' with the minimum fields required to make a request.
 --
-listBucketsResponse :: ListBucketsResponse
-listBucketsResponse = ListBucketsResponse
-    { _lbrBuckets = mempty
-    , _lbrOwner   = Nothing
-    }
+listBuckets
+    :: ListBuckets
+listBuckets = ListBuckets'
 
-lbrBuckets :: Lens' ListBucketsResponse [Bucket]
-lbrBuckets = lens _lbrBuckets (\s a -> s { _lbrBuckets = a }) . _List
+instance AWSRequest ListBuckets where
+        type Sv ListBuckets = S3
+        type Rs ListBuckets = ListBucketsResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListBucketsResponse' <$>
+                   (x .@? "Buckets" .!@ mempty >>=
+                      may (parseXMLList "Bucket"))
+                     <*> (x .@? "Owner")
+                     <*> (pure (fromEnum s)))
 
-lbrOwner :: Lens' ListBucketsResponse (Maybe Owner)
-lbrOwner = lens _lbrOwner (\s a -> s { _lbrOwner = a })
+instance ToHeaders ListBuckets where
+        toHeaders = const mempty
 
 instance ToPath ListBuckets where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery ListBuckets where
-    toQuery = const mempty
-
-instance ToHeaders ListBuckets
+        toQuery = const mempty
 
-instance ToXMLRoot ListBuckets where
-    toXMLRoot = const (namespaced ns "ListBuckets" [])
+-- | /See:/ 'listBucketsResponse' smart constructor.
+data ListBucketsResponse = ListBucketsResponse'
+    { _lbrsBuckets :: !(Maybe [Bucket])
+    , _lbrsOwner   :: !(Maybe Owner)
+    , _lbrsStatus  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToXML ListBuckets
+-- | Creates a value of 'ListBucketsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lbrsBuckets'
+--
+-- * 'lbrsOwner'
+--
+-- * 'lbrsStatus'
+listBucketsResponse
+    :: Int -- ^ 'lbrsStatus'
+    -> ListBucketsResponse
+listBucketsResponse pStatus_ =
+    ListBucketsResponse'
+    { _lbrsBuckets = Nothing
+    , _lbrsOwner = Nothing
+    , _lbrsStatus = pStatus_
+    }
 
-instance AWSRequest ListBuckets where
-    type Sv ListBuckets = S3
-    type Rs ListBuckets = ListBucketsResponse
+-- | Undocumented member.
+lbrsBuckets :: Lens' ListBucketsResponse [Bucket]
+lbrsBuckets = lens _lbrsBuckets (\ s a -> s{_lbrsBuckets = a}) . _Default . _Coerce;
 
-    request  = get
-    response = xmlResponse
+-- | Undocumented member.
+lbrsOwner :: Lens' ListBucketsResponse (Maybe Owner)
+lbrsOwner = lens _lbrsOwner (\ s a -> s{_lbrsOwner = a});
 
-instance FromXML ListBucketsResponse where
-    parseXML x = ListBucketsResponse
-        <$> x .@? "Buckets" .!@ mempty
-        <*> x .@? "Owner"
+-- | The response status code.
+lbrsStatus :: Lens' ListBucketsResponse Int
+lbrsStatus = lens _lbrsStatus (\ s a -> s{_lbrsStatus = a});
diff --git a/gen/Network/AWS/S3/ListMultipartUploads.hs b/gen/Network/AWS/S3/ListMultipartUploads.hs
--- a/gen/Network/AWS/S3/ListMultipartUploads.hs
+++ b/gen/Network/AWS/S3/ListMultipartUploads.hs
@@ -1,311 +1,316 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.ListMultipartUploads
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | This operation lists in-progress multipart uploads.
+-- This operation lists in-progress multipart uploads.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/ListMultipartUploads.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/ListMultipartUploads.html AWS API Reference> for ListMultipartUploads.
+--
+-- This operation returns paginated results.
 module Network.AWS.S3.ListMultipartUploads
     (
-    -- * Request
-      ListMultipartUploads
-    -- ** Request constructor
-    , listMultipartUploads
-    -- ** Request lenses
-    , lmuBucket
-    , lmuDelimiter
-    , lmuEncodingType
+    -- * Creating a Request
+      listMultipartUploads
+    , ListMultipartUploads
+    -- * Request Lenses
     , lmuKeyMarker
-    , lmuMaxUploads
     , lmuPrefix
+    , lmuEncodingType
+    , lmuMaxUploads
     , lmuUploadIdMarker
+    , lmuDelimiter
+    , lmuBucket
 
-    -- * Response
-    , ListMultipartUploadsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listMultipartUploadsResponse
-    -- ** Response lenses
-    , lmurBucket
-    , lmurCommonPrefixes
-    , lmurDelimiter
-    , lmurEncodingType
-    , lmurIsTruncated
-    , lmurKeyMarker
-    , lmurMaxUploads
-    , lmurNextKeyMarker
-    , lmurNextUploadIdMarker
-    , lmurPrefix
-    , lmurUploadIdMarker
-    , lmurUploads
+    , ListMultipartUploadsResponse
+    -- * Response Lenses
+    , lmursKeyMarker
+    , lmursPrefix
+    , lmursEncodingType
+    , lmursCommonPrefixes
+    , lmursBucket
+    , lmursMaxUploads
+    , lmursUploadIdMarker
+    , lmursNextKeyMarker
+    , lmursUploads
+    , lmursIsTruncated
+    , lmursNextUploadIdMarker
+    , lmursDelimiter
+    , lmursStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data ListMultipartUploads = ListMultipartUploads
-    { _lmuBucket         :: Text
-    , _lmuDelimiter      :: Maybe Text
-    , _lmuEncodingType   :: Maybe EncodingType
-    , _lmuKeyMarker      :: Maybe Text
-    , _lmuMaxUploads     :: Maybe Int
-    , _lmuPrefix         :: Maybe Text
-    , _lmuUploadIdMarker :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'listMultipartUploads' smart constructor.
+data ListMultipartUploads = ListMultipartUploads'
+    { _lmuKeyMarker      :: !(Maybe Text)
+    , _lmuPrefix         :: !(Maybe Text)
+    , _lmuEncodingType   :: !(Maybe EncodingType)
+    , _lmuMaxUploads     :: !(Maybe Int)
+    , _lmuUploadIdMarker :: !(Maybe Text)
+    , _lmuDelimiter      :: !(Maybe Delimiter)
+    , _lmuBucket         :: !BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListMultipartUploads' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ListMultipartUploads' with the minimum fields required to make a request.
 --
--- * 'lmuBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lmuDelimiter' @::@ 'Maybe' 'Text'
+-- * 'lmuKeyMarker'
 --
--- * 'lmuEncodingType' @::@ 'Maybe' 'EncodingType'
+-- * 'lmuPrefix'
 --
--- * 'lmuKeyMarker' @::@ 'Maybe' 'Text'
+-- * 'lmuEncodingType'
 --
--- * 'lmuMaxUploads' @::@ 'Maybe' 'Int'
+-- * 'lmuMaxUploads'
 --
--- * 'lmuPrefix' @::@ 'Maybe' 'Text'
+-- * 'lmuUploadIdMarker'
 --
--- * 'lmuUploadIdMarker' @::@ 'Maybe' 'Text'
+-- * 'lmuDelimiter'
 --
-listMultipartUploads :: Text -- ^ 'lmuBucket'
-                     -> ListMultipartUploads
-listMultipartUploads p1 = ListMultipartUploads
-    { _lmuBucket         = p1
-    , _lmuDelimiter      = Nothing
-    , _lmuEncodingType   = Nothing
-    , _lmuKeyMarker      = Nothing
-    , _lmuMaxUploads     = Nothing
-    , _lmuPrefix         = Nothing
+-- * 'lmuBucket'
+listMultipartUploads
+    :: BucketName -- ^ 'lmuBucket'
+    -> ListMultipartUploads
+listMultipartUploads pBucket_ =
+    ListMultipartUploads'
+    { _lmuKeyMarker = Nothing
+    , _lmuPrefix = Nothing
+    , _lmuEncodingType = Nothing
+    , _lmuMaxUploads = Nothing
     , _lmuUploadIdMarker = Nothing
+    , _lmuDelimiter = Nothing
+    , _lmuBucket = pBucket_
     }
 
-lmuBucket :: Lens' ListMultipartUploads Text
-lmuBucket = lens _lmuBucket (\s a -> s { _lmuBucket = a })
+-- | Together with upload-id-marker, this parameter specifies the multipart
+-- upload after which listing should begin.
+lmuKeyMarker :: Lens' ListMultipartUploads (Maybe Text)
+lmuKeyMarker = lens _lmuKeyMarker (\ s a -> s{_lmuKeyMarker = a});
 
--- | Character you use to group keys.
-lmuDelimiter :: Lens' ListMultipartUploads (Maybe Text)
-lmuDelimiter = lens _lmuDelimiter (\s a -> s { _lmuDelimiter = a })
+-- | Lists in-progress uploads only for those keys that begin with the
+-- specified prefix.
+lmuPrefix :: Lens' ListMultipartUploads (Maybe Text)
+lmuPrefix = lens _lmuPrefix (\ s a -> s{_lmuPrefix = a});
 
+-- | Undocumented member.
 lmuEncodingType :: Lens' ListMultipartUploads (Maybe EncodingType)
-lmuEncodingType = lens _lmuEncodingType (\s a -> s { _lmuEncodingType = a })
-
--- | Together with upload-id-marker, this parameter specifies the multipart upload
--- after which listing should begin.
-lmuKeyMarker :: Lens' ListMultipartUploads (Maybe Text)
-lmuKeyMarker = lens _lmuKeyMarker (\s a -> s { _lmuKeyMarker = a })
+lmuEncodingType = lens _lmuEncodingType (\ s a -> s{_lmuEncodingType = a});
 
--- | Sets the maximum number of multipart uploads, from 1 to 1,000, to return in
--- the response body. 1,000 is the maximum number of uploads that can be
+-- | Sets the maximum number of multipart uploads, from 1 to 1,000, to return
+-- in the response body. 1,000 is the maximum number of uploads that can be
 -- returned in a response.
 lmuMaxUploads :: Lens' ListMultipartUploads (Maybe Int)
-lmuMaxUploads = lens _lmuMaxUploads (\s a -> s { _lmuMaxUploads = a })
-
--- | Lists in-progress uploads only for those keys that begin with the specified
--- prefix.
-lmuPrefix :: Lens' ListMultipartUploads (Maybe Text)
-lmuPrefix = lens _lmuPrefix (\s a -> s { _lmuPrefix = a })
+lmuMaxUploads = lens _lmuMaxUploads (\ s a -> s{_lmuMaxUploads = a});
 
--- | Together with key-marker, specifies the multipart upload after which listing
--- should begin. If key-marker is not specified, the upload-id-marker parameter
--- is ignored.
+-- | Together with key-marker, specifies the multipart upload after which
+-- listing should begin. If key-marker is not specified, the
+-- upload-id-marker parameter is ignored.
 lmuUploadIdMarker :: Lens' ListMultipartUploads (Maybe Text)
-lmuUploadIdMarker =
-    lens _lmuUploadIdMarker (\s a -> s { _lmuUploadIdMarker = a })
+lmuUploadIdMarker = lens _lmuUploadIdMarker (\ s a -> s{_lmuUploadIdMarker = a});
 
-data ListMultipartUploadsResponse = ListMultipartUploadsResponse
-    { _lmurBucket             :: Maybe Text
-    , _lmurCommonPrefixes     :: List "CommonPrefixes" CommonPrefix
-    , _lmurDelimiter          :: Maybe Text
-    , _lmurEncodingType       :: Maybe EncodingType
-    , _lmurIsTruncated        :: Maybe Bool
-    , _lmurKeyMarker          :: Maybe Text
-    , _lmurMaxUploads         :: Maybe Int
-    , _lmurNextKeyMarker      :: Maybe Text
-    , _lmurNextUploadIdMarker :: Maybe Text
-    , _lmurPrefix             :: Maybe Text
-    , _lmurUploadIdMarker     :: Maybe Text
-    , _lmurUploads            :: List "Upload" MultipartUpload
-    } deriving (Eq, Read, Show)
+-- | Character you use to group keys.
+lmuDelimiter :: Lens' ListMultipartUploads (Maybe Delimiter)
+lmuDelimiter = lens _lmuDelimiter (\ s a -> s{_lmuDelimiter = a});
 
--- | 'ListMultipartUploadsResponse' constructor.
+-- | Undocumented member.
+lmuBucket :: Lens' ListMultipartUploads BucketName
+lmuBucket = lens _lmuBucket (\ s a -> s{_lmuBucket = a});
+
+instance AWSPager ListMultipartUploads where
+        page rq rs
+          | stop (rs ^. lmursIsTruncated) = Nothing
+          | isNothing (rs ^. lmursNextKeyMarker) &&
+              isNothing (rs ^. lmursNextUploadIdMarker)
+            = Nothing
+          | otherwise =
+            Just $ rq & lmuKeyMarker .~ rs ^. lmursNextKeyMarker
+              & lmuUploadIdMarker .~ rs ^. lmursNextUploadIdMarker
+
+instance AWSRequest ListMultipartUploads where
+        type Sv ListMultipartUploads = S3
+        type Rs ListMultipartUploads =
+             ListMultipartUploadsResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListMultipartUploadsResponse' <$>
+                   (x .@? "KeyMarker") <*> (x .@? "Prefix") <*>
+                     (x .@? "EncodingType")
+                     <*> (may (parseXMLList "CommonPrefixes") x)
+                     <*> (x .@? "Bucket")
+                     <*> (x .@? "MaxUploads")
+                     <*> (x .@? "UploadIdMarker")
+                     <*> (x .@? "NextKeyMarker")
+                     <*> (may (parseXMLList "Upload") x)
+                     <*> (x .@? "IsTruncated")
+                     <*> (x .@? "NextUploadIdMarker")
+                     <*> (x .@? "Delimiter")
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders ListMultipartUploads where
+        toHeaders = const mempty
+
+instance ToPath ListMultipartUploads where
+        toPath ListMultipartUploads'{..}
+          = mconcat ["/", toBS _lmuBucket]
+
+instance ToQuery ListMultipartUploads where
+        toQuery ListMultipartUploads'{..}
+          = mconcat
+              ["key-marker" =: _lmuKeyMarker,
+               "prefix" =: _lmuPrefix,
+               "encoding-type" =: _lmuEncodingType,
+               "max-uploads" =: _lmuMaxUploads,
+               "upload-id-marker" =: _lmuUploadIdMarker,
+               "delimiter" =: _lmuDelimiter, "uploads"]
+
+-- | /See:/ 'listMultipartUploadsResponse' smart constructor.
+data ListMultipartUploadsResponse = ListMultipartUploadsResponse'
+    { _lmursKeyMarker          :: !(Maybe Text)
+    , _lmursPrefix             :: !(Maybe Text)
+    , _lmursEncodingType       :: !(Maybe EncodingType)
+    , _lmursCommonPrefixes     :: !(Maybe [CommonPrefix])
+    , _lmursBucket             :: !(Maybe BucketName)
+    , _lmursMaxUploads         :: !(Maybe Int)
+    , _lmursUploadIdMarker     :: !(Maybe Text)
+    , _lmursNextKeyMarker      :: !(Maybe Text)
+    , _lmursUploads            :: !(Maybe [MultipartUpload])
+    , _lmursIsTruncated        :: !(Maybe Bool)
+    , _lmursNextUploadIdMarker :: !(Maybe Text)
+    , _lmursDelimiter          :: !(Maybe Delimiter)
+    , _lmursStatus             :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListMultipartUploadsResponse' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lmurBucket' @::@ 'Maybe' 'Text'
+-- * 'lmursKeyMarker'
 --
--- * 'lmurCommonPrefixes' @::@ ['CommonPrefix']
+-- * 'lmursPrefix'
 --
--- * 'lmurDelimiter' @::@ 'Maybe' 'Text'
+-- * 'lmursEncodingType'
 --
--- * 'lmurEncodingType' @::@ 'Maybe' 'EncodingType'
+-- * 'lmursCommonPrefixes'
 --
--- * 'lmurIsTruncated' @::@ 'Maybe' 'Bool'
+-- * 'lmursBucket'
 --
--- * 'lmurKeyMarker' @::@ 'Maybe' 'Text'
+-- * 'lmursMaxUploads'
 --
--- * 'lmurMaxUploads' @::@ 'Maybe' 'Int'
+-- * 'lmursUploadIdMarker'
 --
--- * 'lmurNextKeyMarker' @::@ 'Maybe' 'Text'
+-- * 'lmursNextKeyMarker'
 --
--- * 'lmurNextUploadIdMarker' @::@ 'Maybe' 'Text'
+-- * 'lmursUploads'
 --
--- * 'lmurPrefix' @::@ 'Maybe' 'Text'
+-- * 'lmursIsTruncated'
 --
--- * 'lmurUploadIdMarker' @::@ 'Maybe' 'Text'
+-- * 'lmursNextUploadIdMarker'
 --
--- * 'lmurUploads' @::@ ['MultipartUpload']
+-- * 'lmursDelimiter'
 --
-listMultipartUploadsResponse :: ListMultipartUploadsResponse
-listMultipartUploadsResponse = ListMultipartUploadsResponse
-    { _lmurBucket             = Nothing
-    , _lmurKeyMarker          = Nothing
-    , _lmurUploadIdMarker     = Nothing
-    , _lmurNextKeyMarker      = Nothing
-    , _lmurPrefix             = Nothing
-    , _lmurDelimiter          = Nothing
-    , _lmurNextUploadIdMarker = Nothing
-    , _lmurMaxUploads         = Nothing
-    , _lmurIsTruncated        = Nothing
-    , _lmurUploads            = mempty
-    , _lmurCommonPrefixes     = mempty
-    , _lmurEncodingType       = Nothing
+-- * 'lmursStatus'
+listMultipartUploadsResponse
+    :: Int -- ^ 'lmursStatus'
+    -> ListMultipartUploadsResponse
+listMultipartUploadsResponse pStatus_ =
+    ListMultipartUploadsResponse'
+    { _lmursKeyMarker = Nothing
+    , _lmursPrefix = Nothing
+    , _lmursEncodingType = Nothing
+    , _lmursCommonPrefixes = Nothing
+    , _lmursBucket = Nothing
+    , _lmursMaxUploads = Nothing
+    , _lmursUploadIdMarker = Nothing
+    , _lmursNextKeyMarker = Nothing
+    , _lmursUploads = Nothing
+    , _lmursIsTruncated = Nothing
+    , _lmursNextUploadIdMarker = Nothing
+    , _lmursDelimiter = Nothing
+    , _lmursStatus = pStatus_
     }
 
--- | Name of the bucket to which the multipart upload was initiated.
-lmurBucket :: Lens' ListMultipartUploadsResponse (Maybe Text)
-lmurBucket = lens _lmurBucket (\s a -> s { _lmurBucket = a })
-
-lmurCommonPrefixes :: Lens' ListMultipartUploadsResponse [CommonPrefix]
-lmurCommonPrefixes =
-    lens _lmurCommonPrefixes (\s a -> s { _lmurCommonPrefixes = a })
-        . _List
+-- | The key at or after which the listing began.
+lmursKeyMarker :: Lens' ListMultipartUploadsResponse (Maybe Text)
+lmursKeyMarker = lens _lmursKeyMarker (\ s a -> s{_lmursKeyMarker = a});
 
-lmurDelimiter :: Lens' ListMultipartUploadsResponse (Maybe Text)
-lmurDelimiter = lens _lmurDelimiter (\s a -> s { _lmurDelimiter = a })
+-- | When a prefix is provided in the request, this field contains the
+-- specified prefix. The result contains only keys starting with the
+-- specified prefix.
+lmursPrefix :: Lens' ListMultipartUploadsResponse (Maybe Text)
+lmursPrefix = lens _lmursPrefix (\ s a -> s{_lmursPrefix = a});
 
 -- | Encoding type used by Amazon S3 to encode object keys in the response.
-lmurEncodingType :: Lens' ListMultipartUploadsResponse (Maybe EncodingType)
-lmurEncodingType = lens _lmurEncodingType (\s a -> s { _lmurEncodingType = a })
+lmursEncodingType :: Lens' ListMultipartUploadsResponse (Maybe EncodingType)
+lmursEncodingType = lens _lmursEncodingType (\ s a -> s{_lmursEncodingType = a});
 
--- | Indicates whether the returned list of multipart uploads is truncated. A
--- value of true indicates that the list was truncated. The list can be
--- truncated if the number of multipart uploads exceeds the limit allowed or
--- specified by max uploads.
-lmurIsTruncated :: Lens' ListMultipartUploadsResponse (Maybe Bool)
-lmurIsTruncated = lens _lmurIsTruncated (\s a -> s { _lmurIsTruncated = a })
+-- | Undocumented member.
+lmursCommonPrefixes :: Lens' ListMultipartUploadsResponse [CommonPrefix]
+lmursCommonPrefixes = lens _lmursCommonPrefixes (\ s a -> s{_lmursCommonPrefixes = a}) . _Default . _Coerce;
 
--- | The key at or after which the listing began.
-lmurKeyMarker :: Lens' ListMultipartUploadsResponse (Maybe Text)
-lmurKeyMarker = lens _lmurKeyMarker (\s a -> s { _lmurKeyMarker = a })
+-- | Name of the bucket to which the multipart upload was initiated.
+lmursBucket :: Lens' ListMultipartUploadsResponse (Maybe BucketName)
+lmursBucket = lens _lmursBucket (\ s a -> s{_lmursBucket = a});
 
 -- | Maximum number of multipart uploads that could have been included in the
 -- response.
-lmurMaxUploads :: Lens' ListMultipartUploadsResponse (Maybe Int)
-lmurMaxUploads = lens _lmurMaxUploads (\s a -> s { _lmurMaxUploads = a })
-
--- | When a list is truncated, this element specifies the value that should be
--- used for the key-marker request parameter in a subsequent request.
-lmurNextKeyMarker :: Lens' ListMultipartUploadsResponse (Maybe Text)
-lmurNextKeyMarker =
-    lens _lmurNextKeyMarker (\s a -> s { _lmurNextKeyMarker = a })
-
--- | When a list is truncated, this element specifies the value that should be
--- used for the upload-id-marker request parameter in a subsequent request.
-lmurNextUploadIdMarker :: Lens' ListMultipartUploadsResponse (Maybe Text)
-lmurNextUploadIdMarker =
-    lens _lmurNextUploadIdMarker (\s a -> s { _lmurNextUploadIdMarker = a })
-
--- | When a prefix is provided in the request, this field contains the specified
--- prefix. The result contains only keys starting with the specified prefix.
-lmurPrefix :: Lens' ListMultipartUploadsResponse (Maybe Text)
-lmurPrefix = lens _lmurPrefix (\s a -> s { _lmurPrefix = a })
+lmursMaxUploads :: Lens' ListMultipartUploadsResponse (Maybe Int)
+lmursMaxUploads = lens _lmursMaxUploads (\ s a -> s{_lmursMaxUploads = a});
 
 -- | Upload ID after which listing began.
-lmurUploadIdMarker :: Lens' ListMultipartUploadsResponse (Maybe Text)
-lmurUploadIdMarker =
-    lens _lmurUploadIdMarker (\s a -> s { _lmurUploadIdMarker = a })
-
-lmurUploads :: Lens' ListMultipartUploadsResponse [MultipartUpload]
-lmurUploads = lens _lmurUploads (\s a -> s { _lmurUploads = a }) . _List
-
-instance ToPath ListMultipartUploads where
-    toPath ListMultipartUploads{..} = mconcat
-        [ "/"
-        , toText _lmuBucket
-        ]
-
-instance ToQuery ListMultipartUploads where
-    toQuery ListMultipartUploads{..} = mconcat
-        [ "uploads"
-        , "delimiter"        =? _lmuDelimiter
-        , "encoding-type"    =? _lmuEncodingType
-        , "key-marker"       =? _lmuKeyMarker
-        , "max-uploads"      =? _lmuMaxUploads
-        , "prefix"           =? _lmuPrefix
-        , "upload-id-marker" =? _lmuUploadIdMarker
-        ]
-
-instance ToHeaders ListMultipartUploads
+lmursUploadIdMarker :: Lens' ListMultipartUploadsResponse (Maybe Text)
+lmursUploadIdMarker = lens _lmursUploadIdMarker (\ s a -> s{_lmursUploadIdMarker = a});
 
-instance ToXMLRoot ListMultipartUploads where
-    toXMLRoot = const (namespaced ns "ListMultipartUploads" [])
+-- | When a list is truncated, this element specifies the value that should
+-- be used for the key-marker request parameter in a subsequent request.
+lmursNextKeyMarker :: Lens' ListMultipartUploadsResponse (Maybe Text)
+lmursNextKeyMarker = lens _lmursNextKeyMarker (\ s a -> s{_lmursNextKeyMarker = a});
 
-instance ToXML ListMultipartUploads
+-- | Undocumented member.
+lmursUploads :: Lens' ListMultipartUploadsResponse [MultipartUpload]
+lmursUploads = lens _lmursUploads (\ s a -> s{_lmursUploads = a}) . _Default . _Coerce;
 
-instance AWSRequest ListMultipartUploads where
-    type Sv ListMultipartUploads = S3
-    type Rs ListMultipartUploads = ListMultipartUploadsResponse
+-- | Indicates whether the returned list of multipart uploads is truncated. A
+-- value of true indicates that the list was truncated. The list can be
+-- truncated if the number of multipart uploads exceeds the limit allowed
+-- or specified by max uploads.
+lmursIsTruncated :: Lens' ListMultipartUploadsResponse (Maybe Bool)
+lmursIsTruncated = lens _lmursIsTruncated (\ s a -> s{_lmursIsTruncated = a});
 
-    request  = get
-    response = xmlResponse
+-- | When a list is truncated, this element specifies the value that should
+-- be used for the upload-id-marker request parameter in a subsequent
+-- request.
+lmursNextUploadIdMarker :: Lens' ListMultipartUploadsResponse (Maybe Text)
+lmursNextUploadIdMarker = lens _lmursNextUploadIdMarker (\ s a -> s{_lmursNextUploadIdMarker = a});
 
-instance FromXML ListMultipartUploadsResponse where
-    parseXML x = ListMultipartUploadsResponse
-        <$> x .@? "Bucket"
-        <*> parseXML x
-        <*> x .@? "Delimiter"
-        <*> x .@? "EncodingType"
-        <*> x .@? "IsTruncated"
-        <*> x .@? "KeyMarker"
-        <*> x .@? "MaxUploads"
-        <*> x .@? "NextKeyMarker"
-        <*> x .@? "NextUploadIdMarker"
-        <*> x .@? "Prefix"
-        <*> x .@? "UploadIdMarker"
-        <*> parseXML x
+-- | Undocumented member.
+lmursDelimiter :: Lens' ListMultipartUploadsResponse (Maybe Delimiter)
+lmursDelimiter = lens _lmursDelimiter (\ s a -> s{_lmursDelimiter = a});
 
-instance AWSPager ListMultipartUploads where
-    page rq rs
-        | stop (rs ^. lmurIsTruncated) = Nothing
-        | isNothing p1 && isNothing p2 = Nothing
-        | otherwise = Just $ rq
-            & lmuKeyMarker .~ p1
-            & lmuUploadIdMarker .~ p2
-      where
-        p1 = rs ^. lmurNextKeyMarker
-        p2 = rs ^. lmurNextUploadIdMarker
+-- | The response status code.
+lmursStatus :: Lens' ListMultipartUploadsResponse Int
+lmursStatus = lens _lmursStatus (\ s a -> s{_lmursStatus = a});
diff --git a/gen/Network/AWS/S3/ListObjectVersions.hs b/gen/Network/AWS/S3/ListObjectVersions.hs
--- a/gen/Network/AWS/S3/ListObjectVersions.hs
+++ b/gen/Network/AWS/S3/ListObjectVersions.hs
@@ -1,311 +1,319 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.ListObjectVersions
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns metadata about all of the versions of objects in a bucket.
+-- Returns metadata about all of the versions of objects in a bucket.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/ListObjectVersions.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/ListObjectVersions.html AWS API Reference> for ListObjectVersions.
+--
+-- This operation returns paginated results.
 module Network.AWS.S3.ListObjectVersions
     (
-    -- * Request
-      ListObjectVersions
-    -- ** Request constructor
-    , listObjectVersions
-    -- ** Request lenses
-    , lovBucket
-    , lovDelimiter
-    , lovEncodingType
+    -- * Creating a Request
+      listObjectVersions
+    , ListObjectVersions
+    -- * Request Lenses
     , lovKeyMarker
-    , lovMaxKeys
     , lovPrefix
+    , lovEncodingType
     , lovVersionIdMarker
+    , lovMaxKeys
+    , lovDelimiter
+    , lovBucket
 
-    -- * Response
-    , ListObjectVersionsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listObjectVersionsResponse
-    -- ** Response lenses
-    , lovrCommonPrefixes
-    , lovrDeleteMarkers
-    , lovrDelimiter
-    , lovrEncodingType
-    , lovrIsTruncated
-    , lovrKeyMarker
-    , lovrMaxKeys
-    , lovrName
-    , lovrNextKeyMarker
-    , lovrNextVersionIdMarker
-    , lovrPrefix
-    , lovrVersionIdMarker
-    , lovrVersions
+    , ListObjectVersionsResponse
+    -- * Response Lenses
+    , lovrsNextVersionIdMarker
+    , lovrsKeyMarker
+    , lovrsPrefix
+    , lovrsDeleteMarkers
+    , lovrsEncodingType
+    , lovrsCommonPrefixes
+    , lovrsVersions
+    , lovrsName
+    , lovrsNextKeyMarker
+    , lovrsVersionIdMarker
+    , lovrsMaxKeys
+    , lovrsIsTruncated
+    , lovrsDelimiter
+    , lovrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data ListObjectVersions = ListObjectVersions
-    { _lovBucket          :: Text
-    , _lovDelimiter       :: Maybe Text
-    , _lovEncodingType    :: Maybe EncodingType
-    , _lovKeyMarker       :: Maybe Text
-    , _lovMaxKeys         :: Maybe Int
-    , _lovPrefix          :: Maybe Text
-    , _lovVersionIdMarker :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'listObjectVersions' smart constructor.
+data ListObjectVersions = ListObjectVersions'
+    { _lovKeyMarker       :: !(Maybe Text)
+    , _lovPrefix          :: !(Maybe Text)
+    , _lovEncodingType    :: !(Maybe EncodingType)
+    , _lovVersionIdMarker :: !(Maybe Text)
+    , _lovMaxKeys         :: !(Maybe Int)
+    , _lovDelimiter       :: !(Maybe Delimiter)
+    , _lovBucket          :: !BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListObjectVersions' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ListObjectVersions' with the minimum fields required to make a request.
 --
--- * 'lovBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lovDelimiter' @::@ 'Maybe' 'Text'
+-- * 'lovKeyMarker'
 --
--- * 'lovEncodingType' @::@ 'Maybe' 'EncodingType'
+-- * 'lovPrefix'
 --
--- * 'lovKeyMarker' @::@ 'Maybe' 'Text'
+-- * 'lovEncodingType'
 --
--- * 'lovMaxKeys' @::@ 'Maybe' 'Int'
+-- * 'lovVersionIdMarker'
 --
--- * 'lovPrefix' @::@ 'Maybe' 'Text'
+-- * 'lovMaxKeys'
 --
--- * 'lovVersionIdMarker' @::@ 'Maybe' 'Text'
+-- * 'lovDelimiter'
 --
-listObjectVersions :: Text -- ^ 'lovBucket'
-                   -> ListObjectVersions
-listObjectVersions p1 = ListObjectVersions
-    { _lovBucket          = p1
-    , _lovDelimiter       = Nothing
-    , _lovEncodingType    = Nothing
-    , _lovKeyMarker       = Nothing
-    , _lovMaxKeys         = Nothing
-    , _lovPrefix          = Nothing
+-- * 'lovBucket'
+listObjectVersions
+    :: BucketName -- ^ 'lovBucket'
+    -> ListObjectVersions
+listObjectVersions pBucket_ =
+    ListObjectVersions'
+    { _lovKeyMarker = Nothing
+    , _lovPrefix = Nothing
+    , _lovEncodingType = Nothing
     , _lovVersionIdMarker = Nothing
+    , _lovMaxKeys = Nothing
+    , _lovDelimiter = Nothing
+    , _lovBucket = pBucket_
     }
 
-lovBucket :: Lens' ListObjectVersions Text
-lovBucket = lens _lovBucket (\s a -> s { _lovBucket = a })
-
--- | A delimiter is a character you use to group keys.
-lovDelimiter :: Lens' ListObjectVersions (Maybe Text)
-lovDelimiter = lens _lovDelimiter (\s a -> s { _lovDelimiter = a })
-
-lovEncodingType :: Lens' ListObjectVersions (Maybe EncodingType)
-lovEncodingType = lens _lovEncodingType (\s a -> s { _lovEncodingType = a })
-
 -- | Specifies the key to start with when listing objects in a bucket.
 lovKeyMarker :: Lens' ListObjectVersions (Maybe Text)
-lovKeyMarker = lens _lovKeyMarker (\s a -> s { _lovKeyMarker = a })
-
--- | Sets the maximum number of keys returned in the response. The response might
--- contain fewer keys but will never contain more.
-lovMaxKeys :: Lens' ListObjectVersions (Maybe Int)
-lovMaxKeys = lens _lovMaxKeys (\s a -> s { _lovMaxKeys = a })
+lovKeyMarker = lens _lovKeyMarker (\ s a -> s{_lovKeyMarker = a});
 
 -- | Limits the response to keys that begin with the specified prefix.
 lovPrefix :: Lens' ListObjectVersions (Maybe Text)
-lovPrefix = lens _lovPrefix (\s a -> s { _lovPrefix = a })
+lovPrefix = lens _lovPrefix (\ s a -> s{_lovPrefix = a});
 
+-- | Undocumented member.
+lovEncodingType :: Lens' ListObjectVersions (Maybe EncodingType)
+lovEncodingType = lens _lovEncodingType (\ s a -> s{_lovEncodingType = a});
+
 -- | Specifies the object version you want to start listing from.
 lovVersionIdMarker :: Lens' ListObjectVersions (Maybe Text)
-lovVersionIdMarker =
-    lens _lovVersionIdMarker (\s a -> s { _lovVersionIdMarker = a })
+lovVersionIdMarker = lens _lovVersionIdMarker (\ s a -> s{_lovVersionIdMarker = a});
 
-data ListObjectVersionsResponse = ListObjectVersionsResponse
-    { _lovrCommonPrefixes      :: List "CommonPrefixes" CommonPrefix
-    , _lovrDeleteMarkers       :: List "DeleteMarker" DeleteMarkerEntry
-    , _lovrDelimiter           :: Maybe Text
-    , _lovrEncodingType        :: Maybe EncodingType
-    , _lovrIsTruncated         :: Maybe Bool
-    , _lovrKeyMarker           :: Maybe Text
-    , _lovrMaxKeys             :: Maybe Int
-    , _lovrName                :: Maybe Text
-    , _lovrNextKeyMarker       :: Maybe Text
-    , _lovrNextVersionIdMarker :: Maybe Text
-    , _lovrPrefix              :: Maybe Text
-    , _lovrVersionIdMarker     :: Maybe Text
-    , _lovrVersions            :: List "Version" ObjectVersion
-    } deriving (Eq, Read, Show)
+-- | Sets the maximum number of keys returned in the response. The response
+-- might contain fewer keys but will never contain more.
+lovMaxKeys :: Lens' ListObjectVersions (Maybe Int)
+lovMaxKeys = lens _lovMaxKeys (\ s a -> s{_lovMaxKeys = a});
 
--- | 'ListObjectVersionsResponse' constructor.
+-- | A delimiter is a character you use to group keys.
+lovDelimiter :: Lens' ListObjectVersions (Maybe Delimiter)
+lovDelimiter = lens _lovDelimiter (\ s a -> s{_lovDelimiter = a});
+
+-- | Undocumented member.
+lovBucket :: Lens' ListObjectVersions BucketName
+lovBucket = lens _lovBucket (\ s a -> s{_lovBucket = a});
+
+instance AWSPager ListObjectVersions where
+        page rq rs
+          | stop (rs ^. lovrsIsTruncated) = Nothing
+          | isNothing (rs ^. lovrsNextKeyMarker) &&
+              isNothing (rs ^. lovrsNextVersionIdMarker)
+            = Nothing
+          | otherwise =
+            Just $ rq & lovKeyMarker .~ rs ^. lovrsNextKeyMarker
+              &
+              lovVersionIdMarker .~ rs ^. lovrsNextVersionIdMarker
+
+instance AWSRequest ListObjectVersions where
+        type Sv ListObjectVersions = S3
+        type Rs ListObjectVersions =
+             ListObjectVersionsResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListObjectVersionsResponse' <$>
+                   (x .@? "NextVersionIdMarker") <*> (x .@? "KeyMarker")
+                     <*> (x .@? "Prefix")
+                     <*> (may (parseXMLList "DeleteMarker") x)
+                     <*> (x .@? "EncodingType")
+                     <*> (may (parseXMLList "CommonPrefixes") x)
+                     <*> (may (parseXMLList "Version") x)
+                     <*> (x .@? "Name")
+                     <*> (x .@? "NextKeyMarker")
+                     <*> (x .@? "VersionIdMarker")
+                     <*> (x .@? "MaxKeys")
+                     <*> (x .@? "IsTruncated")
+                     <*> (x .@? "Delimiter")
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders ListObjectVersions where
+        toHeaders = const mempty
+
+instance ToPath ListObjectVersions where
+        toPath ListObjectVersions'{..}
+          = mconcat ["/", toBS _lovBucket]
+
+instance ToQuery ListObjectVersions where
+        toQuery ListObjectVersions'{..}
+          = mconcat
+              ["key-marker" =: _lovKeyMarker,
+               "prefix" =: _lovPrefix,
+               "encoding-type" =: _lovEncodingType,
+               "version-id-marker" =: _lovVersionIdMarker,
+               "max-keys" =: _lovMaxKeys,
+               "delimiter" =: _lovDelimiter, "versions"]
+
+-- | /See:/ 'listObjectVersionsResponse' smart constructor.
+data ListObjectVersionsResponse = ListObjectVersionsResponse'
+    { _lovrsNextVersionIdMarker :: !(Maybe Text)
+    , _lovrsKeyMarker           :: !(Maybe Text)
+    , _lovrsPrefix              :: !(Maybe Text)
+    , _lovrsDeleteMarkers       :: !(Maybe [DeleteMarkerEntry])
+    , _lovrsEncodingType        :: !(Maybe EncodingType)
+    , _lovrsCommonPrefixes      :: !(Maybe [CommonPrefix])
+    , _lovrsVersions            :: !(Maybe [ObjectVersion])
+    , _lovrsName                :: !(Maybe BucketName)
+    , _lovrsNextKeyMarker       :: !(Maybe Text)
+    , _lovrsVersionIdMarker     :: !(Maybe Text)
+    , _lovrsMaxKeys             :: !(Maybe Int)
+    , _lovrsIsTruncated         :: !(Maybe Bool)
+    , _lovrsDelimiter           :: !(Maybe Delimiter)
+    , _lovrsStatus              :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListObjectVersionsResponse' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lovrCommonPrefixes' @::@ ['CommonPrefix']
+-- * 'lovrsNextVersionIdMarker'
 --
--- * 'lovrDeleteMarkers' @::@ ['DeleteMarkerEntry']
+-- * 'lovrsKeyMarker'
 --
--- * 'lovrDelimiter' @::@ 'Maybe' 'Text'
+-- * 'lovrsPrefix'
 --
--- * 'lovrEncodingType' @::@ 'Maybe' 'EncodingType'
+-- * 'lovrsDeleteMarkers'
 --
--- * 'lovrIsTruncated' @::@ 'Maybe' 'Bool'
+-- * 'lovrsEncodingType'
 --
--- * 'lovrKeyMarker' @::@ 'Maybe' 'Text'
+-- * 'lovrsCommonPrefixes'
 --
--- * 'lovrMaxKeys' @::@ 'Maybe' 'Int'
+-- * 'lovrsVersions'
 --
--- * 'lovrName' @::@ 'Maybe' 'Text'
+-- * 'lovrsName'
 --
--- * 'lovrNextKeyMarker' @::@ 'Maybe' 'Text'
+-- * 'lovrsNextKeyMarker'
 --
--- * 'lovrNextVersionIdMarker' @::@ 'Maybe' 'Text'
+-- * 'lovrsVersionIdMarker'
 --
--- * 'lovrPrefix' @::@ 'Maybe' 'Text'
+-- * 'lovrsMaxKeys'
 --
--- * 'lovrVersionIdMarker' @::@ 'Maybe' 'Text'
+-- * 'lovrsIsTruncated'
 --
--- * 'lovrVersions' @::@ ['ObjectVersion']
+-- * 'lovrsDelimiter'
 --
-listObjectVersionsResponse :: ListObjectVersionsResponse
-listObjectVersionsResponse = ListObjectVersionsResponse
-    { _lovrIsTruncated         = Nothing
-    , _lovrKeyMarker           = Nothing
-    , _lovrVersionIdMarker     = Nothing
-    , _lovrNextKeyMarker       = Nothing
-    , _lovrNextVersionIdMarker = Nothing
-    , _lovrVersions            = mempty
-    , _lovrDeleteMarkers       = mempty
-    , _lovrName                = Nothing
-    , _lovrPrefix              = Nothing
-    , _lovrDelimiter           = Nothing
-    , _lovrMaxKeys             = Nothing
-    , _lovrCommonPrefixes      = mempty
-    , _lovrEncodingType        = Nothing
+-- * 'lovrsStatus'
+listObjectVersionsResponse
+    :: Int -- ^ 'lovrsStatus'
+    -> ListObjectVersionsResponse
+listObjectVersionsResponse pStatus_ =
+    ListObjectVersionsResponse'
+    { _lovrsNextVersionIdMarker = Nothing
+    , _lovrsKeyMarker = Nothing
+    , _lovrsPrefix = Nothing
+    , _lovrsDeleteMarkers = Nothing
+    , _lovrsEncodingType = Nothing
+    , _lovrsCommonPrefixes = Nothing
+    , _lovrsVersions = Nothing
+    , _lovrsName = Nothing
+    , _lovrsNextKeyMarker = Nothing
+    , _lovrsVersionIdMarker = Nothing
+    , _lovrsMaxKeys = Nothing
+    , _lovrsIsTruncated = Nothing
+    , _lovrsDelimiter = Nothing
+    , _lovrsStatus = pStatus_
     }
 
-lovrCommonPrefixes :: Lens' ListObjectVersionsResponse [CommonPrefix]
-lovrCommonPrefixes =
-    lens _lovrCommonPrefixes (\s a -> s { _lovrCommonPrefixes = a })
-        . _List
-
-lovrDeleteMarkers :: Lens' ListObjectVersionsResponse [DeleteMarkerEntry]
-lovrDeleteMarkers =
-    lens _lovrDeleteMarkers (\s a -> s { _lovrDeleteMarkers = a })
-        . _List
-
-lovrDelimiter :: Lens' ListObjectVersionsResponse (Maybe Text)
-lovrDelimiter = lens _lovrDelimiter (\s a -> s { _lovrDelimiter = a })
-
--- | Encoding type used by Amazon S3 to encode object keys in the response.
-lovrEncodingType :: Lens' ListObjectVersionsResponse (Maybe EncodingType)
-lovrEncodingType = lens _lovrEncodingType (\s a -> s { _lovrEncodingType = a })
-
--- | A flag that indicates whether or not Amazon S3 returned all of the results
--- that satisfied the search criteria. If your results were truncated, you can
--- make a follow-up paginated request using the NextKeyMarker and
--- NextVersionIdMarker response parameters as a starting place in another
--- request to return the rest of the results.
-lovrIsTruncated :: Lens' ListObjectVersionsResponse (Maybe Bool)
-lovrIsTruncated = lens _lovrIsTruncated (\s a -> s { _lovrIsTruncated = a })
-
--- | Marks the last Key returned in a truncated response.
-lovrKeyMarker :: Lens' ListObjectVersionsResponse (Maybe Text)
-lovrKeyMarker = lens _lovrKeyMarker (\s a -> s { _lovrKeyMarker = a })
-
-lovrMaxKeys :: Lens' ListObjectVersionsResponse (Maybe Int)
-lovrMaxKeys = lens _lovrMaxKeys (\s a -> s { _lovrMaxKeys = a })
-
-lovrName :: Lens' ListObjectVersionsResponse (Maybe Text)
-lovrName = lens _lovrName (\s a -> s { _lovrName = a })
-
--- | Use this value for the key marker request parameter in a subsequent request.
-lovrNextKeyMarker :: Lens' ListObjectVersionsResponse (Maybe Text)
-lovrNextKeyMarker =
-    lens _lovrNextKeyMarker (\s a -> s { _lovrNextKeyMarker = a })
-
 -- | Use this value for the next version id marker parameter in a subsequent
 -- request.
-lovrNextVersionIdMarker :: Lens' ListObjectVersionsResponse (Maybe Text)
-lovrNextVersionIdMarker =
-    lens _lovrNextVersionIdMarker (\s a -> s { _lovrNextVersionIdMarker = a })
+lovrsNextVersionIdMarker :: Lens' ListObjectVersionsResponse (Maybe Text)
+lovrsNextVersionIdMarker = lens _lovrsNextVersionIdMarker (\ s a -> s{_lovrsNextVersionIdMarker = a});
 
-lovrPrefix :: Lens' ListObjectVersionsResponse (Maybe Text)
-lovrPrefix = lens _lovrPrefix (\s a -> s { _lovrPrefix = a })
+-- | Marks the last Key returned in a truncated response.
+lovrsKeyMarker :: Lens' ListObjectVersionsResponse (Maybe Text)
+lovrsKeyMarker = lens _lovrsKeyMarker (\ s a -> s{_lovrsKeyMarker = a});
 
-lovrVersionIdMarker :: Lens' ListObjectVersionsResponse (Maybe Text)
-lovrVersionIdMarker =
-    lens _lovrVersionIdMarker (\s a -> s { _lovrVersionIdMarker = a })
+-- | Undocumented member.
+lovrsPrefix :: Lens' ListObjectVersionsResponse (Maybe Text)
+lovrsPrefix = lens _lovrsPrefix (\ s a -> s{_lovrsPrefix = a});
 
-lovrVersions :: Lens' ListObjectVersionsResponse [ObjectVersion]
-lovrVersions = lens _lovrVersions (\s a -> s { _lovrVersions = a }) . _List
+-- | Undocumented member.
+lovrsDeleteMarkers :: Lens' ListObjectVersionsResponse [DeleteMarkerEntry]
+lovrsDeleteMarkers = lens _lovrsDeleteMarkers (\ s a -> s{_lovrsDeleteMarkers = a}) . _Default . _Coerce;
 
-instance ToPath ListObjectVersions where
-    toPath ListObjectVersions{..} = mconcat
-        [ "/"
-        , toText _lovBucket
-        ]
+-- | Encoding type used by Amazon S3 to encode object keys in the response.
+lovrsEncodingType :: Lens' ListObjectVersionsResponse (Maybe EncodingType)
+lovrsEncodingType = lens _lovrsEncodingType (\ s a -> s{_lovrsEncodingType = a});
 
-instance ToQuery ListObjectVersions where
-    toQuery ListObjectVersions{..} = mconcat
-        [ "versions"
-        , "delimiter"         =? _lovDelimiter
-        , "encoding-type"     =? _lovEncodingType
-        , "key-marker"        =? _lovKeyMarker
-        , "max-keys"          =? _lovMaxKeys
-        , "prefix"            =? _lovPrefix
-        , "version-id-marker" =? _lovVersionIdMarker
-        ]
+-- | Undocumented member.
+lovrsCommonPrefixes :: Lens' ListObjectVersionsResponse [CommonPrefix]
+lovrsCommonPrefixes = lens _lovrsCommonPrefixes (\ s a -> s{_lovrsCommonPrefixes = a}) . _Default . _Coerce;
 
-instance ToHeaders ListObjectVersions
+-- | Undocumented member.
+lovrsVersions :: Lens' ListObjectVersionsResponse [ObjectVersion]
+lovrsVersions = lens _lovrsVersions (\ s a -> s{_lovrsVersions = a}) . _Default . _Coerce;
 
-instance ToXMLRoot ListObjectVersions where
-    toXMLRoot = const (namespaced ns "ListObjectVersions" [])
+-- | Undocumented member.
+lovrsName :: Lens' ListObjectVersionsResponse (Maybe BucketName)
+lovrsName = lens _lovrsName (\ s a -> s{_lovrsName = a});
 
-instance ToXML ListObjectVersions
+-- | Use this value for the key marker request parameter in a subsequent
+-- request.
+lovrsNextKeyMarker :: Lens' ListObjectVersionsResponse (Maybe Text)
+lovrsNextKeyMarker = lens _lovrsNextKeyMarker (\ s a -> s{_lovrsNextKeyMarker = a});
 
-instance AWSRequest ListObjectVersions where
-    type Sv ListObjectVersions = S3
-    type Rs ListObjectVersions = ListObjectVersionsResponse
+-- | Undocumented member.
+lovrsVersionIdMarker :: Lens' ListObjectVersionsResponse (Maybe Text)
+lovrsVersionIdMarker = lens _lovrsVersionIdMarker (\ s a -> s{_lovrsVersionIdMarker = a});
 
-    request  = get
-    response = xmlResponse
+-- | Undocumented member.
+lovrsMaxKeys :: Lens' ListObjectVersionsResponse (Maybe Int)
+lovrsMaxKeys = lens _lovrsMaxKeys (\ s a -> s{_lovrsMaxKeys = a});
 
-instance FromXML ListObjectVersionsResponse where
-    parseXML x = ListObjectVersionsResponse
-        <$> parseXML x
-        <*> parseXML x
-        <*> x .@? "Delimiter"
-        <*> x .@? "EncodingType"
-        <*> x .@? "IsTruncated"
-        <*> x .@? "KeyMarker"
-        <*> x .@? "MaxKeys"
-        <*> x .@? "Name"
-        <*> x .@? "NextKeyMarker"
-        <*> x .@? "NextVersionIdMarker"
-        <*> x .@? "Prefix"
-        <*> x .@? "VersionIdMarker"
-        <*> parseXML x
+-- | A flag that indicates whether or not Amazon S3 returned all of the
+-- results that satisfied the search criteria. If your results were
+-- truncated, you can make a follow-up paginated request using the
+-- NextKeyMarker and NextVersionIdMarker response parameters as a starting
+-- place in another request to return the rest of the results.
+lovrsIsTruncated :: Lens' ListObjectVersionsResponse (Maybe Bool)
+lovrsIsTruncated = lens _lovrsIsTruncated (\ s a -> s{_lovrsIsTruncated = a});
 
-instance AWSPager ListObjectVersions where
-    page rq rs
-        | stop (rs ^. lovrIsTruncated) = Nothing
-        | isNothing p1 && isNothing p2 = Nothing
-        | otherwise = Just $ rq
-            & lovKeyMarker .~ p1
-            & lovVersionIdMarker .~ p2
-      where
-        p1 = rs ^. lovrNextKeyMarker
-        p2 = rs ^. lovrNextVersionIdMarker
+-- | Undocumented member.
+lovrsDelimiter :: Lens' ListObjectVersionsResponse (Maybe Delimiter)
+lovrsDelimiter = lens _lovrsDelimiter (\ s a -> s{_lovrsDelimiter = a});
+
+-- | The response status code.
+lovrsStatus :: Lens' ListObjectVersionsResponse Int
+lovrsStatus = lens _lovrsStatus (\ s a -> s{_lovrsStatus = a});
diff --git a/gen/Network/AWS/S3/ListObjects.hs b/gen/Network/AWS/S3/ListObjects.hs
--- a/gen/Network/AWS/S3/ListObjects.hs
+++ b/gen/Network/AWS/S3/ListObjects.hs
@@ -1,264 +1,286 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.ListObjects
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns some or all (up to 1000) of the objects in a bucket. You can use the
--- request parameters as selection criteria to return a subset of the objects in
--- a bucket.
+-- Returns some or all (up to 1000) of the objects in a bucket. You can use
+-- the request parameters as selection criteria to return a subset of the
+-- objects in a bucket.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/ListObjects.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/ListObjects.html AWS API Reference> for ListObjects.
+--
+-- This operation returns paginated results.
 module Network.AWS.S3.ListObjects
     (
-    -- * Request
-      ListObjects
-    -- ** Request constructor
-    , listObjects
-    -- ** Request lenses
-    , loBucket
-    , loDelimiter
+    -- * Creating a Request
+      listObjects
+    , ListObjects
+    -- * Request Lenses
+    , loPrefix
     , loEncodingType
     , loMarker
     , loMaxKeys
-    , loPrefix
+    , loDelimiter
+    , loBucket
 
-    -- * Response
-    , ListObjectsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listObjectsResponse
-    -- ** Response lenses
-    , lorCommonPrefixes
-    , lorContents
-    , lorDelimiter
-    , lorEncodingType
-    , lorIsTruncated
-    , lorMarker
-    , lorMaxKeys
-    , lorName
-    , lorNextMarker
-    , lorPrefix
+    , ListObjectsResponse
+    -- * Response Lenses
+    , lorsContents
+    , lorsPrefix
+    , lorsEncodingType
+    , lorsCommonPrefixes
+    , lorsName
+    , lorsMarker
+    , lorsNextMarker
+    , lorsMaxKeys
+    , lorsIsTruncated
+    , lorsDelimiter
+    , lorsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data ListObjects = ListObjects
-    { _loBucket       :: Text
-    , _loDelimiter    :: Maybe Text
-    , _loEncodingType :: Maybe EncodingType
-    , _loMarker       :: Maybe Text
-    , _loMaxKeys      :: Maybe Int
-    , _loPrefix       :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'listObjects' smart constructor.
+data ListObjects = ListObjects'
+    { _loPrefix       :: !(Maybe Text)
+    , _loEncodingType :: !(Maybe EncodingType)
+    , _loMarker       :: !(Maybe Text)
+    , _loMaxKeys      :: !(Maybe Int)
+    , _loDelimiter    :: !(Maybe Delimiter)
+    , _loBucket       :: !BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListObjects' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ListObjects' with the minimum fields required to make a request.
 --
--- * 'loBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'loDelimiter' @::@ 'Maybe' 'Text'
+-- * 'loPrefix'
 --
--- * 'loEncodingType' @::@ 'Maybe' 'EncodingType'
+-- * 'loEncodingType'
 --
--- * 'loMarker' @::@ 'Maybe' 'Text'
+-- * 'loMarker'
 --
--- * 'loMaxKeys' @::@ 'Maybe' 'Int'
+-- * 'loMaxKeys'
 --
--- * 'loPrefix' @::@ 'Maybe' 'Text'
+-- * 'loDelimiter'
 --
-listObjects :: Text -- ^ 'loBucket'
-            -> ListObjects
-listObjects p1 = ListObjects
-    { _loBucket       = p1
-    , _loDelimiter    = Nothing
+-- * 'loBucket'
+listObjects
+    :: BucketName -- ^ 'loBucket'
+    -> ListObjects
+listObjects pBucket_ =
+    ListObjects'
+    { _loPrefix = Nothing
     , _loEncodingType = Nothing
-    , _loMarker       = Nothing
-    , _loMaxKeys      = Nothing
-    , _loPrefix       = Nothing
+    , _loMarker = Nothing
+    , _loMaxKeys = Nothing
+    , _loDelimiter = Nothing
+    , _loBucket = pBucket_
     }
 
-loBucket :: Lens' ListObjects Text
-loBucket = lens _loBucket (\s a -> s { _loBucket = a })
-
--- | A delimiter is a character you use to group keys.
-loDelimiter :: Lens' ListObjects (Maybe Text)
-loDelimiter = lens _loDelimiter (\s a -> s { _loDelimiter = a })
+-- | Limits the response to keys that begin with the specified prefix.
+loPrefix :: Lens' ListObjects (Maybe Text)
+loPrefix = lens _loPrefix (\ s a -> s{_loPrefix = a});
 
+-- | Undocumented member.
 loEncodingType :: Lens' ListObjects (Maybe EncodingType)
-loEncodingType = lens _loEncodingType (\s a -> s { _loEncodingType = a })
+loEncodingType = lens _loEncodingType (\ s a -> s{_loEncodingType = a});
 
 -- | Specifies the key to start with when listing objects in a bucket.
 loMarker :: Lens' ListObjects (Maybe Text)
-loMarker = lens _loMarker (\s a -> s { _loMarker = a })
+loMarker = lens _loMarker (\ s a -> s{_loMarker = a});
 
--- | Sets the maximum number of keys returned in the response. The response might
--- contain fewer keys but will never contain more.
+-- | Sets the maximum number of keys returned in the response. The response
+-- might contain fewer keys but will never contain more.
 loMaxKeys :: Lens' ListObjects (Maybe Int)
-loMaxKeys = lens _loMaxKeys (\s a -> s { _loMaxKeys = a })
+loMaxKeys = lens _loMaxKeys (\ s a -> s{_loMaxKeys = a});
 
--- | Limits the response to keys that begin with the specified prefix.
-loPrefix :: Lens' ListObjects (Maybe Text)
-loPrefix = lens _loPrefix (\s a -> s { _loPrefix = a })
+-- | A delimiter is a character you use to group keys.
+loDelimiter :: Lens' ListObjects (Maybe Delimiter)
+loDelimiter = lens _loDelimiter (\ s a -> s{_loDelimiter = a});
 
-data ListObjectsResponse = ListObjectsResponse
-    { _lorCommonPrefixes :: List "CommonPrefixes" CommonPrefix
-    , _lorContents       :: List "Contents" Object
-    , _lorDelimiter      :: Maybe Text
-    , _lorEncodingType   :: Maybe EncodingType
-    , _lorIsTruncated    :: Maybe Bool
-    , _lorMarker         :: Maybe Text
-    , _lorMaxKeys        :: Maybe Int
-    , _lorName           :: Maybe Text
-    , _lorNextMarker     :: Maybe Text
-    , _lorPrefix         :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | Undocumented member.
+loBucket :: Lens' ListObjects BucketName
+loBucket = lens _loBucket (\ s a -> s{_loBucket = a});
 
--- | 'ListObjectsResponse' constructor.
+instance AWSPager ListObjects where
+        page rq rs
+          | stop (rs ^. lorsIsTruncated) = Nothing
+          | isNothing
+              (rs ^.
+                 choice (^. lorsNextMarker)
+                   (^? (lorsContents . _last . oKey)))
+            = Nothing
+          | otherwise =
+            Just $ rq &
+              loMarker .~
+                rs ^.
+                  choice (^. lorsNextMarker)
+                    (^? (lorsContents . _last . oKey))
+
+instance AWSRequest ListObjects where
+        type Sv ListObjects = S3
+        type Rs ListObjects = ListObjectsResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListObjectsResponse' <$>
+                   (may (parseXMLList "Contents") x) <*>
+                     (x .@? "Prefix")
+                     <*> (x .@? "EncodingType")
+                     <*> (may (parseXMLList "CommonPrefixes") x)
+                     <*> (x .@? "Name")
+                     <*> (x .@? "Marker")
+                     <*> (x .@? "NextMarker")
+                     <*> (x .@? "MaxKeys")
+                     <*> (x .@? "IsTruncated")
+                     <*> (x .@? "Delimiter")
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders ListObjects where
+        toHeaders = const mempty
+
+instance ToPath ListObjects where
+        toPath ListObjects'{..}
+          = mconcat ["/", toBS _loBucket]
+
+instance ToQuery ListObjects where
+        toQuery ListObjects'{..}
+          = mconcat
+              ["prefix" =: _loPrefix,
+               "encoding-type" =: _loEncodingType,
+               "marker" =: _loMarker, "max-keys" =: _loMaxKeys,
+               "delimiter" =: _loDelimiter]
+
+-- | /See:/ 'listObjectsResponse' smart constructor.
+data ListObjectsResponse = ListObjectsResponse'
+    { _lorsContents       :: !(Maybe [Object])
+    , _lorsPrefix         :: !(Maybe Text)
+    , _lorsEncodingType   :: !(Maybe EncodingType)
+    , _lorsCommonPrefixes :: !(Maybe [CommonPrefix])
+    , _lorsName           :: !(Maybe BucketName)
+    , _lorsMarker         :: !(Maybe Text)
+    , _lorsNextMarker     :: !(Maybe Text)
+    , _lorsMaxKeys        :: !(Maybe Int)
+    , _lorsIsTruncated    :: !(Maybe Bool)
+    , _lorsDelimiter      :: !(Maybe Delimiter)
+    , _lorsStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListObjectsResponse' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lorCommonPrefixes' @::@ ['CommonPrefix']
+-- * 'lorsContents'
 --
--- * 'lorContents' @::@ ['Object']
+-- * 'lorsPrefix'
 --
--- * 'lorDelimiter' @::@ 'Maybe' 'Text'
+-- * 'lorsEncodingType'
 --
--- * 'lorEncodingType' @::@ 'Maybe' 'EncodingType'
+-- * 'lorsCommonPrefixes'
 --
--- * 'lorIsTruncated' @::@ 'Maybe' 'Bool'
+-- * 'lorsName'
 --
--- * 'lorMarker' @::@ 'Maybe' 'Text'
+-- * 'lorsMarker'
 --
--- * 'lorMaxKeys' @::@ 'Maybe' 'Int'
+-- * 'lorsNextMarker'
 --
--- * 'lorName' @::@ 'Maybe' 'Text'
+-- * 'lorsMaxKeys'
 --
--- * 'lorNextMarker' @::@ 'Maybe' 'Text'
+-- * 'lorsIsTruncated'
 --
--- * 'lorPrefix' @::@ 'Maybe' 'Text'
+-- * 'lorsDelimiter'
 --
-listObjectsResponse :: ListObjectsResponse
-listObjectsResponse = ListObjectsResponse
-    { _lorIsTruncated    = Nothing
-    , _lorMarker         = Nothing
-    , _lorNextMarker     = Nothing
-    , _lorContents       = mempty
-    , _lorName           = Nothing
-    , _lorPrefix         = Nothing
-    , _lorDelimiter      = Nothing
-    , _lorMaxKeys        = Nothing
-    , _lorCommonPrefixes = mempty
-    , _lorEncodingType   = Nothing
+-- * 'lorsStatus'
+listObjectsResponse
+    :: Int -- ^ 'lorsStatus'
+    -> ListObjectsResponse
+listObjectsResponse pStatus_ =
+    ListObjectsResponse'
+    { _lorsContents = Nothing
+    , _lorsPrefix = Nothing
+    , _lorsEncodingType = Nothing
+    , _lorsCommonPrefixes = Nothing
+    , _lorsName = Nothing
+    , _lorsMarker = Nothing
+    , _lorsNextMarker = Nothing
+    , _lorsMaxKeys = Nothing
+    , _lorsIsTruncated = Nothing
+    , _lorsDelimiter = Nothing
+    , _lorsStatus = pStatus_
     }
 
-lorCommonPrefixes :: Lens' ListObjectsResponse [CommonPrefix]
-lorCommonPrefixes =
-    lens _lorCommonPrefixes (\s a -> s { _lorCommonPrefixes = a })
-        . _List
-
-lorContents :: Lens' ListObjectsResponse [Object]
-lorContents = lens _lorContents (\s a -> s { _lorContents = a }) . _List
+-- | Undocumented member.
+lorsContents :: Lens' ListObjectsResponse [Object]
+lorsContents = lens _lorsContents (\ s a -> s{_lorsContents = a}) . _Default . _Coerce;
 
-lorDelimiter :: Lens' ListObjectsResponse (Maybe Text)
-lorDelimiter = lens _lorDelimiter (\s a -> s { _lorDelimiter = a })
+-- | Undocumented member.
+lorsPrefix :: Lens' ListObjectsResponse (Maybe Text)
+lorsPrefix = lens _lorsPrefix (\ s a -> s{_lorsPrefix = a});
 
 -- | Encoding type used by Amazon S3 to encode object keys in the response.
-lorEncodingType :: Lens' ListObjectsResponse (Maybe EncodingType)
-lorEncodingType = lens _lorEncodingType (\s a -> s { _lorEncodingType = a })
-
--- | A flag that indicates whether or not Amazon S3 returned all of the results
--- that satisfied the search criteria.
-lorIsTruncated :: Lens' ListObjectsResponse (Maybe Bool)
-lorIsTruncated = lens _lorIsTruncated (\s a -> s { _lorIsTruncated = a })
-
-lorMarker :: Lens' ListObjectsResponse (Maybe Text)
-lorMarker = lens _lorMarker (\s a -> s { _lorMarker = a })
-
-lorMaxKeys :: Lens' ListObjectsResponse (Maybe Int)
-lorMaxKeys = lens _lorMaxKeys (\s a -> s { _lorMaxKeys = a })
-
-lorName :: Lens' ListObjectsResponse (Maybe Text)
-lorName = lens _lorName (\s a -> s { _lorName = a })
-
--- | When response is truncated (the IsTruncated element value in the response is
--- true), you can use the key name in this field as marker in the subsequent
--- request to get next set of objects. Amazon S3 lists objects in alphabetical
--- order Note: This element is returned only if you have delimiter request
--- parameter specified. If response does not include the NextMaker and it is
--- truncated, you can use the value of the last Key in the response as the
--- marker in the subsequent request to get the next set of object keys.
-lorNextMarker :: Lens' ListObjectsResponse (Maybe Text)
-lorNextMarker = lens _lorNextMarker (\s a -> s { _lorNextMarker = a })
-
-lorPrefix :: Lens' ListObjectsResponse (Maybe Text)
-lorPrefix = lens _lorPrefix (\s a -> s { _lorPrefix = a })
-
-instance ToPath ListObjects where
-    toPath ListObjects{..} = mconcat
-        [ "/"
-        , toText _loBucket
-        ]
+lorsEncodingType :: Lens' ListObjectsResponse (Maybe EncodingType)
+lorsEncodingType = lens _lorsEncodingType (\ s a -> s{_lorsEncodingType = a});
 
-instance ToQuery ListObjects where
-    toQuery ListObjects{..} = mconcat
-        [ "delimiter"     =? _loDelimiter
-        , "encoding-type" =? _loEncodingType
-        , "marker"        =? _loMarker
-        , "max-keys"      =? _loMaxKeys
-        , "prefix"        =? _loPrefix
-        ]
+-- | Undocumented member.
+lorsCommonPrefixes :: Lens' ListObjectsResponse [CommonPrefix]
+lorsCommonPrefixes = lens _lorsCommonPrefixes (\ s a -> s{_lorsCommonPrefixes = a}) . _Default . _Coerce;
 
-instance ToHeaders ListObjects
+-- | Undocumented member.
+lorsName :: Lens' ListObjectsResponse (Maybe BucketName)
+lorsName = lens _lorsName (\ s a -> s{_lorsName = a});
 
-instance ToXMLRoot ListObjects where
-    toXMLRoot = const (namespaced ns "ListObjects" [])
+-- | Undocumented member.
+lorsMarker :: Lens' ListObjectsResponse (Maybe Text)
+lorsMarker = lens _lorsMarker (\ s a -> s{_lorsMarker = a});
 
-instance ToXML ListObjects
+-- | When response is truncated (the IsTruncated element value in the
+-- response is true), you can use the key name in this field as marker in
+-- the subsequent request to get next set of objects. Amazon S3 lists
+-- objects in alphabetical order Note: This element is returned only if you
+-- have delimiter request parameter specified. If response does not include
+-- the NextMaker and it is truncated, you can use the value of the last Key
+-- in the response as the marker in the subsequent request to get the next
+-- set of object keys.
+lorsNextMarker :: Lens' ListObjectsResponse (Maybe Text)
+lorsNextMarker = lens _lorsNextMarker (\ s a -> s{_lorsNextMarker = a});
 
-instance AWSRequest ListObjects where
-    type Sv ListObjects = S3
-    type Rs ListObjects = ListObjectsResponse
+-- | Undocumented member.
+lorsMaxKeys :: Lens' ListObjectsResponse (Maybe Int)
+lorsMaxKeys = lens _lorsMaxKeys (\ s a -> s{_lorsMaxKeys = a});
 
-    request  = get
-    response = xmlResponse
+-- | A flag that indicates whether or not Amazon S3 returned all of the
+-- results that satisfied the search criteria.
+lorsIsTruncated :: Lens' ListObjectsResponse (Maybe Bool)
+lorsIsTruncated = lens _lorsIsTruncated (\ s a -> s{_lorsIsTruncated = a});
 
-instance FromXML ListObjectsResponse where
-    parseXML x = ListObjectsResponse
-        <$> parseXML x
-        <*> parseXML x
-        <*> x .@? "Delimiter"
-        <*> x .@? "EncodingType"
-        <*> x .@? "IsTruncated"
-        <*> x .@? "Marker"
-        <*> x .@? "MaxKeys"
-        <*> x .@? "Name"
-        <*> x .@? "NextMarker"
-        <*> x .@? "Prefix"
+-- | Undocumented member.
+lorsDelimiter :: Lens' ListObjectsResponse (Maybe Delimiter)
+lorsDelimiter = lens _lorsDelimiter (\ s a -> s{_lorsDelimiter = a});
 
-instance AWSPager ListObjects where
-    page rq rs
-        | stop (rs ^. lorIsTruncated) = Nothing
-        | otherwise = Just $ rq
-            & loMarker .~ rs ^. lorNextMarker
+-- | The response status code.
+lorsStatus :: Lens' ListObjectsResponse Int
+lorsStatus = lens _lorsStatus (\ s a -> s{_lorsStatus = a});
diff --git a/gen/Network/AWS/S3/ListParts.hs b/gen/Network/AWS/S3/ListParts.hs
--- a/gen/Network/AWS/S3/ListParts.hs
+++ b/gen/Network/AWS/S3/ListParts.hs
@@ -1,284 +1,294 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.ListParts
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Lists the parts that have been uploaded for a specific multipart upload.
+-- Lists the parts that have been uploaded for a specific multipart upload.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/ListParts.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/ListParts.html AWS API Reference> for ListParts.
+--
+-- This operation returns paginated results.
 module Network.AWS.S3.ListParts
     (
-    -- * Request
-      ListParts
-    -- ** Request constructor
-    , listParts
-    -- ** Request lenses
-    , lpBucket
-    , lpKey
+    -- * Creating a Request
+      listParts
+    , ListParts
+    -- * Request Lenses
     , lpMaxParts
-    , lpPartNumberMarker
     , lpRequestPayer
+    , lpPartNumberMarker
+    , lpBucket
+    , lpKey
     , lpUploadId
 
-    -- * Response
-    , ListPartsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listPartsResponse
-    -- ** Response lenses
-    , lprBucket
-    , lprInitiator
-    , lprIsTruncated
-    , lprKey
-    , lprMaxParts
-    , lprNextPartNumberMarker
-    , lprOwner
-    , lprPartNumberMarker
-    , lprParts
-    , lprRequestCharged
-    , lprStorageClass
-    , lprUploadId
+    , ListPartsResponse
+    -- * Response Lenses
+    , lprsParts
+    , lprsRequestCharged
+    , lprsMaxParts
+    , lprsInitiator
+    , lprsBucket
+    , lprsNextPartNumberMarker
+    , lprsOwner
+    , lprsKey
+    , lprsStorageClass
+    , lprsIsTruncated
+    , lprsPartNumberMarker
+    , lprsUploadId
+    , lprsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data ListParts = ListParts
-    { _lpBucket           :: Text
-    , _lpKey              :: Text
-    , _lpMaxParts         :: Maybe Int
-    , _lpPartNumberMarker :: Maybe Int
-    , _lpRequestPayer     :: Maybe RequestPayer
-    , _lpUploadId         :: Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'listParts' smart constructor.
+data ListParts = ListParts'
+    { _lpMaxParts         :: !(Maybe Int)
+    , _lpRequestPayer     :: !(Maybe RequestPayer)
+    , _lpPartNumberMarker :: !(Maybe Int)
+    , _lpBucket           :: !BucketName
+    , _lpKey              :: !ObjectKey
+    , _lpUploadId         :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListParts' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ListParts' with the minimum fields required to make a request.
 --
--- * 'lpBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lpKey' @::@ 'Text'
+-- * 'lpMaxParts'
 --
--- * 'lpMaxParts' @::@ 'Maybe' 'Int'
+-- * 'lpRequestPayer'
 --
--- * 'lpPartNumberMarker' @::@ 'Maybe' 'Int'
+-- * 'lpPartNumberMarker'
 --
--- * 'lpRequestPayer' @::@ 'Maybe' 'RequestPayer'
+-- * 'lpBucket'
 --
--- * 'lpUploadId' @::@ 'Text'
+-- * 'lpKey'
 --
-listParts :: Text -- ^ 'lpBucket'
-          -> Text -- ^ 'lpKey'
-          -> Text -- ^ 'lpUploadId'
-          -> ListParts
-listParts p1 p2 p3 = ListParts
-    { _lpBucket           = p1
-    , _lpKey              = p2
-    , _lpUploadId         = p3
-    , _lpMaxParts         = Nothing
+-- * 'lpUploadId'
+listParts
+    :: BucketName -- ^ 'lpBucket'
+    -> ObjectKey -- ^ 'lpKey'
+    -> Text -- ^ 'lpUploadId'
+    -> ListParts
+listParts pBucket_ pKey_ pUploadId_ =
+    ListParts'
+    { _lpMaxParts = Nothing
+    , _lpRequestPayer = Nothing
     , _lpPartNumberMarker = Nothing
-    , _lpRequestPayer     = Nothing
+    , _lpBucket = pBucket_
+    , _lpKey = pKey_
+    , _lpUploadId = pUploadId_
     }
 
-lpBucket :: Lens' ListParts Text
-lpBucket = lens _lpBucket (\s a -> s { _lpBucket = a })
-
-lpKey :: Lens' ListParts Text
-lpKey = lens _lpKey (\s a -> s { _lpKey = a })
-
 -- | Sets the maximum number of parts to return.
 lpMaxParts :: Lens' ListParts (Maybe Int)
-lpMaxParts = lens _lpMaxParts (\s a -> s { _lpMaxParts = a })
+lpMaxParts = lens _lpMaxParts (\ s a -> s{_lpMaxParts = a});
 
--- | Specifies the part after which listing should begin. Only parts with higher
--- part numbers will be listed.
+-- | Undocumented member.
+lpRequestPayer :: Lens' ListParts (Maybe RequestPayer)
+lpRequestPayer = lens _lpRequestPayer (\ s a -> s{_lpRequestPayer = a});
+
+-- | Specifies the part after which listing should begin. Only parts with
+-- higher part numbers will be listed.
 lpPartNumberMarker :: Lens' ListParts (Maybe Int)
-lpPartNumberMarker =
-    lens _lpPartNumberMarker (\s a -> s { _lpPartNumberMarker = a })
+lpPartNumberMarker = lens _lpPartNumberMarker (\ s a -> s{_lpPartNumberMarker = a});
 
-lpRequestPayer :: Lens' ListParts (Maybe RequestPayer)
-lpRequestPayer = lens _lpRequestPayer (\s a -> s { _lpRequestPayer = a })
+-- | Undocumented member.
+lpBucket :: Lens' ListParts BucketName
+lpBucket = lens _lpBucket (\ s a -> s{_lpBucket = a});
 
+-- | Undocumented member.
+lpKey :: Lens' ListParts ObjectKey
+lpKey = lens _lpKey (\ s a -> s{_lpKey = a});
+
 -- | Upload ID identifying the multipart upload whose parts are being listed.
 lpUploadId :: Lens' ListParts Text
-lpUploadId = lens _lpUploadId (\s a -> s { _lpUploadId = a })
+lpUploadId = lens _lpUploadId (\ s a -> s{_lpUploadId = a});
 
-data ListPartsResponse = ListPartsResponse
-    { _lprBucket               :: Maybe Text
-    , _lprInitiator            :: Maybe Initiator
-    , _lprIsTruncated          :: Maybe Bool
-    , _lprKey                  :: Maybe Text
-    , _lprMaxParts             :: Maybe Int
-    , _lprNextPartNumberMarker :: Maybe Int
-    , _lprOwner                :: Maybe Owner
-    , _lprPartNumberMarker     :: Maybe Int
-    , _lprParts                :: List "Part" Part
-    , _lprRequestCharged       :: Maybe RequestCharged
-    , _lprStorageClass         :: Maybe StorageClass
-    , _lprUploadId             :: Maybe Text
-    } deriving (Eq, Read, Show)
+instance AWSPager ListParts where
+        page rq rs
+          | stop (rs ^. lprsIsTruncated) = Nothing
+          | isNothing (rs ^. lprsNextPartNumberMarker) =
+            Nothing
+          | otherwise =
+            Just $ rq &
+              lpPartNumberMarker .~ rs ^. lprsNextPartNumberMarker
 
--- | 'ListPartsResponse' constructor.
+instance AWSRequest ListParts where
+        type Sv ListParts = S3
+        type Rs ListParts = ListPartsResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListPartsResponse' <$>
+                   (may (parseXMLList "Part") x) <*>
+                     (h .#? "x-amz-request-charged")
+                     <*> (x .@? "MaxParts")
+                     <*> (x .@? "Initiator")
+                     <*> (x .@? "Bucket")
+                     <*> (x .@? "NextPartNumberMarker")
+                     <*> (x .@? "Owner")
+                     <*> (x .@? "Key")
+                     <*> (x .@? "StorageClass")
+                     <*> (x .@? "IsTruncated")
+                     <*> (x .@? "PartNumberMarker")
+                     <*> (x .@? "UploadId")
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders ListParts where
+        toHeaders ListParts'{..}
+          = mconcat ["x-amz-request-payer" =# _lpRequestPayer]
+
+instance ToPath ListParts where
+        toPath ListParts'{..}
+          = mconcat ["/", toBS _lpBucket, "/", toBS _lpKey]
+
+instance ToQuery ListParts where
+        toQuery ListParts'{..}
+          = mconcat
+              ["max-parts" =: _lpMaxParts,
+               "part-number-marker" =: _lpPartNumberMarker,
+               "uploadId" =: _lpUploadId]
+
+-- | /See:/ 'listPartsResponse' smart constructor.
+data ListPartsResponse = ListPartsResponse'
+    { _lprsParts                :: !(Maybe [Part])
+    , _lprsRequestCharged       :: !(Maybe RequestCharged)
+    , _lprsMaxParts             :: !(Maybe Int)
+    , _lprsInitiator            :: !(Maybe Initiator)
+    , _lprsBucket               :: !(Maybe BucketName)
+    , _lprsNextPartNumberMarker :: !(Maybe Int)
+    , _lprsOwner                :: !(Maybe Owner)
+    , _lprsKey                  :: !(Maybe ObjectKey)
+    , _lprsStorageClass         :: !(Maybe StorageClass)
+    , _lprsIsTruncated          :: !(Maybe Bool)
+    , _lprsPartNumberMarker     :: !(Maybe Int)
+    , _lprsUploadId             :: !(Maybe Text)
+    , _lprsStatus               :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListPartsResponse' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lprBucket' @::@ 'Maybe' 'Text'
+-- * 'lprsParts'
 --
--- * 'lprInitiator' @::@ 'Maybe' 'Initiator'
+-- * 'lprsRequestCharged'
 --
--- * 'lprIsTruncated' @::@ 'Maybe' 'Bool'
+-- * 'lprsMaxParts'
 --
--- * 'lprKey' @::@ 'Maybe' 'Text'
+-- * 'lprsInitiator'
 --
--- * 'lprMaxParts' @::@ 'Maybe' 'Int'
+-- * 'lprsBucket'
 --
--- * 'lprNextPartNumberMarker' @::@ 'Maybe' 'Int'
+-- * 'lprsNextPartNumberMarker'
 --
--- * 'lprOwner' @::@ 'Maybe' 'Owner'
+-- * 'lprsOwner'
 --
--- * 'lprPartNumberMarker' @::@ 'Maybe' 'Int'
+-- * 'lprsKey'
 --
--- * 'lprParts' @::@ ['Part']
+-- * 'lprsStorageClass'
 --
--- * 'lprRequestCharged' @::@ 'Maybe' 'RequestCharged'
+-- * 'lprsIsTruncated'
 --
--- * 'lprStorageClass' @::@ 'Maybe' 'StorageClass'
+-- * 'lprsPartNumberMarker'
 --
--- * 'lprUploadId' @::@ 'Maybe' 'Text'
+-- * 'lprsUploadId'
 --
-listPartsResponse :: ListPartsResponse
-listPartsResponse = ListPartsResponse
-    { _lprBucket               = Nothing
-    , _lprKey                  = Nothing
-    , _lprUploadId             = Nothing
-    , _lprPartNumberMarker     = Nothing
-    , _lprNextPartNumberMarker = Nothing
-    , _lprMaxParts             = Nothing
-    , _lprIsTruncated          = Nothing
-    , _lprParts                = mempty
-    , _lprInitiator            = Nothing
-    , _lprOwner                = Nothing
-    , _lprStorageClass         = Nothing
-    , _lprRequestCharged       = Nothing
+-- * 'lprsStatus'
+listPartsResponse
+    :: Int -- ^ 'lprsStatus'
+    -> ListPartsResponse
+listPartsResponse pStatus_ =
+    ListPartsResponse'
+    { _lprsParts = Nothing
+    , _lprsRequestCharged = Nothing
+    , _lprsMaxParts = Nothing
+    , _lprsInitiator = Nothing
+    , _lprsBucket = Nothing
+    , _lprsNextPartNumberMarker = Nothing
+    , _lprsOwner = Nothing
+    , _lprsKey = Nothing
+    , _lprsStorageClass = Nothing
+    , _lprsIsTruncated = Nothing
+    , _lprsPartNumberMarker = Nothing
+    , _lprsUploadId = Nothing
+    , _lprsStatus = pStatus_
     }
 
--- | Name of the bucket to which the multipart upload was initiated.
-lprBucket :: Lens' ListPartsResponse (Maybe Text)
-lprBucket = lens _lprBucket (\s a -> s { _lprBucket = a })
-
--- | Identifies who initiated the multipart upload.
-lprInitiator :: Lens' ListPartsResponse (Maybe Initiator)
-lprInitiator = lens _lprInitiator (\s a -> s { _lprInitiator = a })
-
--- | Indicates whether the returned list of parts is truncated.
-lprIsTruncated :: Lens' ListPartsResponse (Maybe Bool)
-lprIsTruncated = lens _lprIsTruncated (\s a -> s { _lprIsTruncated = a })
+-- | Undocumented member.
+lprsParts :: Lens' ListPartsResponse [Part]
+lprsParts = lens _lprsParts (\ s a -> s{_lprsParts = a}) . _Default . _Coerce;
 
--- | Object key for which the multipart upload was initiated.
-lprKey :: Lens' ListPartsResponse (Maybe Text)
-lprKey = lens _lprKey (\s a -> s { _lprKey = a })
+-- | Undocumented member.
+lprsRequestCharged :: Lens' ListPartsResponse (Maybe RequestCharged)
+lprsRequestCharged = lens _lprsRequestCharged (\ s a -> s{_lprsRequestCharged = a});
 
 -- | Maximum number of parts that were allowed in the response.
-lprMaxParts :: Lens' ListPartsResponse (Maybe Int)
-lprMaxParts = lens _lprMaxParts (\s a -> s { _lprMaxParts = a })
+lprsMaxParts :: Lens' ListPartsResponse (Maybe Int)
+lprsMaxParts = lens _lprsMaxParts (\ s a -> s{_lprsMaxParts = a});
 
--- | When a list is truncated, this element specifies the last part in the list,
--- as well as the value to use for the part-number-marker request parameter in a
--- subsequent request.
-lprNextPartNumberMarker :: Lens' ListPartsResponse (Maybe Int)
-lprNextPartNumberMarker =
-    lens _lprNextPartNumberMarker (\s a -> s { _lprNextPartNumberMarker = a })
+-- | Identifies who initiated the multipart upload.
+lprsInitiator :: Lens' ListPartsResponse (Maybe Initiator)
+lprsInitiator = lens _lprsInitiator (\ s a -> s{_lprsInitiator = a});
 
-lprOwner :: Lens' ListPartsResponse (Maybe Owner)
-lprOwner = lens _lprOwner (\s a -> s { _lprOwner = a })
+-- | Name of the bucket to which the multipart upload was initiated.
+lprsBucket :: Lens' ListPartsResponse (Maybe BucketName)
+lprsBucket = lens _lprsBucket (\ s a -> s{_lprsBucket = a});
 
--- | Part number after which listing begins.
-lprPartNumberMarker :: Lens' ListPartsResponse (Maybe Int)
-lprPartNumberMarker =
-    lens _lprPartNumberMarker (\s a -> s { _lprPartNumberMarker = a })
+-- | When a list is truncated, this element specifies the last part in the
+-- list, as well as the value to use for the part-number-marker request
+-- parameter in a subsequent request.
+lprsNextPartNumberMarker :: Lens' ListPartsResponse (Maybe Int)
+lprsNextPartNumberMarker = lens _lprsNextPartNumberMarker (\ s a -> s{_lprsNextPartNumberMarker = a});
 
-lprParts :: Lens' ListPartsResponse [Part]
-lprParts = lens _lprParts (\s a -> s { _lprParts = a }) . _List
+-- | Undocumented member.
+lprsOwner :: Lens' ListPartsResponse (Maybe Owner)
+lprsOwner = lens _lprsOwner (\ s a -> s{_lprsOwner = a});
 
-lprRequestCharged :: Lens' ListPartsResponse (Maybe RequestCharged)
-lprRequestCharged =
-    lens _lprRequestCharged (\s a -> s { _lprRequestCharged = a })
+-- | Object key for which the multipart upload was initiated.
+lprsKey :: Lens' ListPartsResponse (Maybe ObjectKey)
+lprsKey = lens _lprsKey (\ s a -> s{_lprsKey = a});
 
 -- | The class of storage used to store the object.
-lprStorageClass :: Lens' ListPartsResponse (Maybe StorageClass)
-lprStorageClass = lens _lprStorageClass (\s a -> s { _lprStorageClass = a })
-
--- | Upload ID identifying the multipart upload whose parts are being listed.
-lprUploadId :: Lens' ListPartsResponse (Maybe Text)
-lprUploadId = lens _lprUploadId (\s a -> s { _lprUploadId = a })
-
-instance ToPath ListParts where
-    toPath ListParts{..} = mconcat
-        [ "/"
-        , toText _lpBucket
-        , "/"
-        , toText _lpKey
-        ]
-
-instance ToQuery ListParts where
-    toQuery ListParts{..} = mconcat
-        [ "max-parts"          =? _lpMaxParts
-        , "part-number-marker" =? _lpPartNumberMarker
-        , "uploadId"           =? _lpUploadId
-        ]
-
-instance ToHeaders ListParts where
-    toHeaders ListParts{..} = mconcat
-        [ "x-amz-request-payer" =: _lpRequestPayer
-        ]
-
-instance ToXMLRoot ListParts where
-    toXMLRoot = const (namespaced ns "ListParts" [])
+lprsStorageClass :: Lens' ListPartsResponse (Maybe StorageClass)
+lprsStorageClass = lens _lprsStorageClass (\ s a -> s{_lprsStorageClass = a});
 
-instance ToXML ListParts
+-- | Indicates whether the returned list of parts is truncated.
+lprsIsTruncated :: Lens' ListPartsResponse (Maybe Bool)
+lprsIsTruncated = lens _lprsIsTruncated (\ s a -> s{_lprsIsTruncated = a});
 
-instance AWSRequest ListParts where
-    type Sv ListParts = S3
-    type Rs ListParts = ListPartsResponse
+-- | Part number after which listing begins.
+lprsPartNumberMarker :: Lens' ListPartsResponse (Maybe Int)
+lprsPartNumberMarker = lens _lprsPartNumberMarker (\ s a -> s{_lprsPartNumberMarker = a});
 
-    request  = get
-    response = xmlHeaderResponse $ \h x -> ListPartsResponse
-        <$> x .@? "Bucket"
-        <*> x .@? "Initiator"
-        <*> x .@? "IsTruncated"
-        <*> x .@? "Key"
-        <*> x .@? "MaxParts"
-        <*> x .@? "NextPartNumberMarker"
-        <*> x .@? "Owner"
-        <*> x .@? "PartNumberMarker"
-        <*> x .@? "Part" .!@ mempty
-        <*> h ~:? "x-amz-request-charged"
-        <*> x .@? "StorageClass"
-        <*> x .@? "UploadId"
+-- | Upload ID identifying the multipart upload whose parts are being listed.
+lprsUploadId :: Lens' ListPartsResponse (Maybe Text)
+lprsUploadId = lens _lprsUploadId (\ s a -> s{_lprsUploadId = a});
 
-instance AWSPager ListParts where
-    page rq rs
-        | stop (rs ^. lprIsTruncated) = Nothing
-        | otherwise = Just $ rq
-            & lpPartNumberMarker .~ rs ^. lprNextPartNumberMarker
+-- | The response status code.
+lprsStatus :: Lens' ListPartsResponse Int
+lprsStatus = lens _lprsStatus (\ s a -> s{_lprsStatus = a});
diff --git a/gen/Network/AWS/S3/PutBucketACL.hs b/gen/Network/AWS/S3/PutBucketACL.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/PutBucketACL.hs
@@ -0,0 +1,179 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.S3.PutBucketACL
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sets the permissions on a bucket using access control lists (ACL).
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketACL.html AWS API Reference> for PutBucketACL.
+module Network.AWS.S3.PutBucketACL
+    (
+    -- * Creating a Request
+      putBucketACL
+    , PutBucketACL
+    -- * Request Lenses
+    , pbaGrantReadACP
+    , pbaGrantWriteACP
+    , pbaGrantRead
+    , pbaGrantFullControl
+    , pbaContentMD5
+    , pbaAccessControlPolicy
+    , pbaGrantWrite
+    , pbaACL
+    , pbaBucket
+
+    -- * Destructuring the Response
+    , putBucketACLResponse
+    , PutBucketACLResponse
+    ) where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'putBucketACL' smart constructor.
+data PutBucketACL = PutBucketACL'
+    { _pbaGrantReadACP        :: !(Maybe Text)
+    , _pbaGrantWriteACP       :: !(Maybe Text)
+    , _pbaGrantRead           :: !(Maybe Text)
+    , _pbaGrantFullControl    :: !(Maybe Text)
+    , _pbaContentMD5          :: !(Maybe Text)
+    , _pbaAccessControlPolicy :: !(Maybe AccessControlPolicy)
+    , _pbaGrantWrite          :: !(Maybe Text)
+    , _pbaACL                 :: !(Maybe BucketCannedACL)
+    , _pbaBucket              :: !BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutBucketACL' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pbaGrantReadACP'
+--
+-- * 'pbaGrantWriteACP'
+--
+-- * 'pbaGrantRead'
+--
+-- * 'pbaGrantFullControl'
+--
+-- * 'pbaContentMD5'
+--
+-- * 'pbaAccessControlPolicy'
+--
+-- * 'pbaGrantWrite'
+--
+-- * 'pbaACL'
+--
+-- * 'pbaBucket'
+putBucketACL
+    :: BucketName -- ^ 'pbaBucket'
+    -> PutBucketACL
+putBucketACL pBucket_ =
+    PutBucketACL'
+    { _pbaGrantReadACP = Nothing
+    , _pbaGrantWriteACP = Nothing
+    , _pbaGrantRead = Nothing
+    , _pbaGrantFullControl = Nothing
+    , _pbaContentMD5 = Nothing
+    , _pbaAccessControlPolicy = Nothing
+    , _pbaGrantWrite = Nothing
+    , _pbaACL = Nothing
+    , _pbaBucket = pBucket_
+    }
+
+-- | Allows grantee to read the bucket ACL.
+pbaGrantReadACP :: Lens' PutBucketACL (Maybe Text)
+pbaGrantReadACP = lens _pbaGrantReadACP (\ s a -> s{_pbaGrantReadACP = a});
+
+-- | Allows grantee to write the ACL for the applicable bucket.
+pbaGrantWriteACP :: Lens' PutBucketACL (Maybe Text)
+pbaGrantWriteACP = lens _pbaGrantWriteACP (\ s a -> s{_pbaGrantWriteACP = a});
+
+-- | Allows grantee to list the objects in the bucket.
+pbaGrantRead :: Lens' PutBucketACL (Maybe Text)
+pbaGrantRead = lens _pbaGrantRead (\ s a -> s{_pbaGrantRead = a});
+
+-- | Allows grantee the read, write, read ACP, and write ACP permissions on
+-- the bucket.
+pbaGrantFullControl :: Lens' PutBucketACL (Maybe Text)
+pbaGrantFullControl = lens _pbaGrantFullControl (\ s a -> s{_pbaGrantFullControl = a});
+
+-- | Undocumented member.
+pbaContentMD5 :: Lens' PutBucketACL (Maybe Text)
+pbaContentMD5 = lens _pbaContentMD5 (\ s a -> s{_pbaContentMD5 = a});
+
+-- | Undocumented member.
+pbaAccessControlPolicy :: Lens' PutBucketACL (Maybe AccessControlPolicy)
+pbaAccessControlPolicy = lens _pbaAccessControlPolicy (\ s a -> s{_pbaAccessControlPolicy = a});
+
+-- | Allows grantee to create, overwrite, and delete any object in the
+-- bucket.
+pbaGrantWrite :: Lens' PutBucketACL (Maybe Text)
+pbaGrantWrite = lens _pbaGrantWrite (\ s a -> s{_pbaGrantWrite = a});
+
+-- | The canned ACL to apply to the bucket.
+pbaACL :: Lens' PutBucketACL (Maybe BucketCannedACL)
+pbaACL = lens _pbaACL (\ s a -> s{_pbaACL = a});
+
+-- | Undocumented member.
+pbaBucket :: Lens' PutBucketACL BucketName
+pbaBucket = lens _pbaBucket (\ s a -> s{_pbaBucket = a});
+
+instance AWSRequest PutBucketACL where
+        type Sv PutBucketACL = S3
+        type Rs PutBucketACL = PutBucketACLResponse
+        request = putXML
+        response = receiveNull PutBucketACLResponse'
+
+instance ToElement PutBucketACL where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}AccessControlPolicy"
+              .
+              _pbaAccessControlPolicy
+
+instance ToHeaders PutBucketACL where
+        toHeaders PutBucketACL'{..}
+          = mconcat
+              ["x-amz-grant-read-acp" =# _pbaGrantReadACP,
+               "x-amz-grant-write-acp" =# _pbaGrantWriteACP,
+               "x-amz-grant-read" =# _pbaGrantRead,
+               "x-amz-grant-full-control" =# _pbaGrantFullControl,
+               "Content-MD5" =# _pbaContentMD5,
+               "x-amz-grant-write" =# _pbaGrantWrite,
+               "x-amz-acl" =# _pbaACL]
+
+instance ToPath PutBucketACL where
+        toPath PutBucketACL'{..}
+          = mconcat ["/", toBS _pbaBucket]
+
+instance ToQuery PutBucketACL where
+        toQuery = const (mconcat ["acl"])
+
+-- | /See:/ 'putBucketACLResponse' smart constructor.
+data PutBucketACLResponse =
+    PutBucketACLResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutBucketACLResponse' with the minimum fields required to make a request.
+--
+putBucketACLResponse
+    :: PutBucketACLResponse
+putBucketACLResponse = PutBucketACLResponse'
diff --git a/gen/Network/AWS/S3/PutBucketAcl.hs b/gen/Network/AWS/S3/PutBucketAcl.hs
deleted file mode 100644
--- a/gen/Network/AWS/S3/PutBucketAcl.hs
+++ /dev/null
@@ -1,177 +0,0 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.S3.PutBucketAcl
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Sets the permissions on a bucket using access control lists (ACL).
---
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketAcl.html>
-module Network.AWS.S3.PutBucketAcl
-    (
-    -- * Request
-      PutBucketAcl
-    -- ** Request constructor
-    , putBucketAcl
-    -- ** Request lenses
-    , pbaACL
-    , pbaAccessControlPolicy
-    , pbaBucket
-    , pbaContentMD5
-    , pbaGrantFullControl
-    , pbaGrantRead
-    , pbaGrantReadACP
-    , pbaGrantWrite
-    , pbaGrantWriteACP
-
-    -- * Response
-    , PutBucketAclResponse
-    -- ** Response constructor
-    , putBucketAclResponse
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
-
-data PutBucketAcl = PutBucketAcl
-    { _pbaACL                 :: Maybe BucketCannedACL
-    , _pbaAccessControlPolicy :: Maybe AccessControlPolicy
-    , _pbaBucket              :: Text
-    , _pbaContentMD5          :: Maybe Text
-    , _pbaGrantFullControl    :: Maybe Text
-    , _pbaGrantRead           :: Maybe Text
-    , _pbaGrantReadACP        :: Maybe Text
-    , _pbaGrantWrite          :: Maybe Text
-    , _pbaGrantWriteACP       :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'PutBucketAcl' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'pbaACL' @::@ 'Maybe' 'BucketCannedACL'
---
--- * 'pbaAccessControlPolicy' @::@ 'Maybe' 'AccessControlPolicy'
---
--- * 'pbaBucket' @::@ 'Text'
---
--- * 'pbaContentMD5' @::@ 'Maybe' 'Text'
---
--- * 'pbaGrantFullControl' @::@ 'Maybe' 'Text'
---
--- * 'pbaGrantRead' @::@ 'Maybe' 'Text'
---
--- * 'pbaGrantReadACP' @::@ 'Maybe' 'Text'
---
--- * 'pbaGrantWrite' @::@ 'Maybe' 'Text'
---
--- * 'pbaGrantWriteACP' @::@ 'Maybe' 'Text'
---
-putBucketAcl :: Text -- ^ 'pbaBucket'
-             -> PutBucketAcl
-putBucketAcl p1 = PutBucketAcl
-    { _pbaBucket              = p1
-    , _pbaACL                 = Nothing
-    , _pbaAccessControlPolicy = Nothing
-    , _pbaContentMD5          = Nothing
-    , _pbaGrantFullControl    = Nothing
-    , _pbaGrantRead           = Nothing
-    , _pbaGrantReadACP        = Nothing
-    , _pbaGrantWrite          = Nothing
-    , _pbaGrantWriteACP       = Nothing
-    }
-
--- | The canned ACL to apply to the bucket.
-pbaACL :: Lens' PutBucketAcl (Maybe BucketCannedACL)
-pbaACL = lens _pbaACL (\s a -> s { _pbaACL = a })
-
-pbaAccessControlPolicy :: Lens' PutBucketAcl (Maybe AccessControlPolicy)
-pbaAccessControlPolicy =
-    lens _pbaAccessControlPolicy (\s a -> s { _pbaAccessControlPolicy = a })
-
-pbaBucket :: Lens' PutBucketAcl Text
-pbaBucket = lens _pbaBucket (\s a -> s { _pbaBucket = a })
-
-pbaContentMD5 :: Lens' PutBucketAcl (Maybe Text)
-pbaContentMD5 = lens _pbaContentMD5 (\s a -> s { _pbaContentMD5 = a })
-
--- | Allows grantee the read, write, read ACP, and write ACP permissions on the
--- bucket.
-pbaGrantFullControl :: Lens' PutBucketAcl (Maybe Text)
-pbaGrantFullControl =
-    lens _pbaGrantFullControl (\s a -> s { _pbaGrantFullControl = a })
-
--- | Allows grantee to list the objects in the bucket.
-pbaGrantRead :: Lens' PutBucketAcl (Maybe Text)
-pbaGrantRead = lens _pbaGrantRead (\s a -> s { _pbaGrantRead = a })
-
--- | Allows grantee to read the bucket ACL.
-pbaGrantReadACP :: Lens' PutBucketAcl (Maybe Text)
-pbaGrantReadACP = lens _pbaGrantReadACP (\s a -> s { _pbaGrantReadACP = a })
-
--- | Allows grantee to create, overwrite, and delete any object in the bucket.
-pbaGrantWrite :: Lens' PutBucketAcl (Maybe Text)
-pbaGrantWrite = lens _pbaGrantWrite (\s a -> s { _pbaGrantWrite = a })
-
--- | Allows grantee to write the ACL for the applicable bucket.
-pbaGrantWriteACP :: Lens' PutBucketAcl (Maybe Text)
-pbaGrantWriteACP = lens _pbaGrantWriteACP (\s a -> s { _pbaGrantWriteACP = a })
-
-data PutBucketAclResponse = PutBucketAclResponse
-    deriving (Eq, Ord, Read, Show, Generic)
-
--- | 'PutBucketAclResponse' constructor.
-putBucketAclResponse :: PutBucketAclResponse
-putBucketAclResponse = PutBucketAclResponse
-
-instance ToPath PutBucketAcl where
-    toPath PutBucketAcl{..} = mconcat
-        [ "/"
-        , toText _pbaBucket
-        ]
-
-instance ToQuery PutBucketAcl where
-    toQuery = const "acl"
-
-instance ToHeaders PutBucketAcl where
-    toHeaders PutBucketAcl{..} = mconcat
-        [ "x-amz-acl"                =: _pbaACL
-        , "Content-MD5"              =: _pbaContentMD5
-        , "x-amz-grant-full-control" =: _pbaGrantFullControl
-        , "x-amz-grant-read"         =: _pbaGrantRead
-        , "x-amz-grant-read-acp"     =: _pbaGrantReadACP
-        , "x-amz-grant-write"        =: _pbaGrantWrite
-        , "x-amz-grant-write-acp"    =: _pbaGrantWriteACP
-        ]
-
-instance ToXMLRoot PutBucketAcl where
-    toXMLRoot = extractRoot ns . toXML . _pbaAccessControlPolicy
-
-instance ToXML PutBucketAcl
-
-instance AWSRequest PutBucketAcl where
-    type Sv PutBucketAcl = S3
-    type Rs PutBucketAcl = PutBucketAclResponse
-
-    request  = put
-    response = nullResponse PutBucketAclResponse
diff --git a/gen/Network/AWS/S3/PutBucketCORS.hs b/gen/Network/AWS/S3/PutBucketCORS.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/PutBucketCORS.hs
@@ -0,0 +1,116 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.S3.PutBucketCORS
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sets the cors configuration for a bucket.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketCORS.html AWS API Reference> for PutBucketCORS.
+module Network.AWS.S3.PutBucketCORS
+    (
+    -- * Creating a Request
+      putBucketCORS
+    , PutBucketCORS
+    -- * Request Lenses
+    , pbcContentMD5
+    , pbcCORSConfiguration
+    , pbcBucket
+
+    -- * Destructuring the Response
+    , putBucketCORSResponse
+    , PutBucketCORSResponse
+    ) where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'putBucketCORS' smart constructor.
+data PutBucketCORS = PutBucketCORS'
+    { _pbcContentMD5        :: !(Maybe Text)
+    , _pbcCORSConfiguration :: !(Maybe CORSConfiguration)
+    , _pbcBucket            :: !BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutBucketCORS' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pbcContentMD5'
+--
+-- * 'pbcCORSConfiguration'
+--
+-- * 'pbcBucket'
+putBucketCORS
+    :: BucketName -- ^ 'pbcBucket'
+    -> PutBucketCORS
+putBucketCORS pBucket_ =
+    PutBucketCORS'
+    { _pbcContentMD5 = Nothing
+    , _pbcCORSConfiguration = Nothing
+    , _pbcBucket = pBucket_
+    }
+
+-- | Undocumented member.
+pbcContentMD5 :: Lens' PutBucketCORS (Maybe Text)
+pbcContentMD5 = lens _pbcContentMD5 (\ s a -> s{_pbcContentMD5 = a});
+
+-- | Undocumented member.
+pbcCORSConfiguration :: Lens' PutBucketCORS (Maybe CORSConfiguration)
+pbcCORSConfiguration = lens _pbcCORSConfiguration (\ s a -> s{_pbcCORSConfiguration = a});
+
+-- | Undocumented member.
+pbcBucket :: Lens' PutBucketCORS BucketName
+pbcBucket = lens _pbcBucket (\ s a -> s{_pbcBucket = a});
+
+instance AWSRequest PutBucketCORS where
+        type Sv PutBucketCORS = S3
+        type Rs PutBucketCORS = PutBucketCORSResponse
+        request = contentMD5 . putXML
+        response = receiveNull PutBucketCORSResponse'
+
+instance ToElement PutBucketCORS where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}CORSConfiguration"
+              .
+              _pbcCORSConfiguration
+
+instance ToHeaders PutBucketCORS where
+        toHeaders PutBucketCORS'{..}
+          = mconcat ["Content-MD5" =# _pbcContentMD5]
+
+instance ToPath PutBucketCORS where
+        toPath PutBucketCORS'{..}
+          = mconcat ["/", toBS _pbcBucket]
+
+instance ToQuery PutBucketCORS where
+        toQuery = const (mconcat ["cors"])
+
+-- | /See:/ 'putBucketCORSResponse' smart constructor.
+data PutBucketCORSResponse =
+    PutBucketCORSResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutBucketCORSResponse' with the minimum fields required to make a request.
+--
+putBucketCORSResponse
+    :: PutBucketCORSResponse
+putBucketCORSResponse = PutBucketCORSResponse'
diff --git a/gen/Network/AWS/S3/PutBucketCors.hs b/gen/Network/AWS/S3/PutBucketCors.hs
deleted file mode 100644
--- a/gen/Network/AWS/S3/PutBucketCors.hs
+++ /dev/null
@@ -1,115 +0,0 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.S3.PutBucketCors
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Sets the cors configuration for a bucket.
---
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketCors.html>
-module Network.AWS.S3.PutBucketCors
-    (
-    -- * Request
-      PutBucketCors
-    -- ** Request constructor
-    , putBucketCors
-    -- ** Request lenses
-    , pbcBucket
-    , pbcCORSConfiguration
-    , pbcContentMD5
-
-    -- * Response
-    , PutBucketCorsResponse
-    -- ** Response constructor
-    , putBucketCorsResponse
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
-
-data PutBucketCors = PutBucketCors
-    { _pbcBucket            :: Text
-    , _pbcCORSConfiguration :: Maybe CORSConfiguration
-    , _pbcContentMD5        :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'PutBucketCors' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'pbcBucket' @::@ 'Text'
---
--- * 'pbcCORSConfiguration' @::@ 'Maybe' 'CORSConfiguration'
---
--- * 'pbcContentMD5' @::@ 'Maybe' 'Text'
---
-putBucketCors :: Text -- ^ 'pbcBucket'
-              -> PutBucketCors
-putBucketCors p1 = PutBucketCors
-    { _pbcBucket            = p1
-    , _pbcCORSConfiguration = Nothing
-    , _pbcContentMD5        = Nothing
-    }
-
-pbcBucket :: Lens' PutBucketCors Text
-pbcBucket = lens _pbcBucket (\s a -> s { _pbcBucket = a })
-
-pbcCORSConfiguration :: Lens' PutBucketCors (Maybe CORSConfiguration)
-pbcCORSConfiguration =
-    lens _pbcCORSConfiguration (\s a -> s { _pbcCORSConfiguration = a })
-
-pbcContentMD5 :: Lens' PutBucketCors (Maybe Text)
-pbcContentMD5 = lens _pbcContentMD5 (\s a -> s { _pbcContentMD5 = a })
-
-data PutBucketCorsResponse = PutBucketCorsResponse
-    deriving (Eq, Ord, Read, Show, Generic)
-
--- | 'PutBucketCorsResponse' constructor.
-putBucketCorsResponse :: PutBucketCorsResponse
-putBucketCorsResponse = PutBucketCorsResponse
-
-instance ToPath PutBucketCors where
-    toPath PutBucketCors{..} = mconcat
-        [ "/"
-        , toText _pbcBucket
-        ]
-
-instance ToQuery PutBucketCors where
-    toQuery = const "cors"
-
-instance ToHeaders PutBucketCors where
-    toHeaders PutBucketCors{..} = mconcat
-        [ "Content-MD5" =: _pbcContentMD5
-        ]
-
-instance ToXMLRoot PutBucketCors where
-    toXMLRoot = extractRoot ns . toXML . _pbcCORSConfiguration
-
-instance ToXML PutBucketCors
-
-instance AWSRequest PutBucketCors where
-    type Sv PutBucketCors = S3
-    type Rs PutBucketCors = PutBucketCorsResponse
-
-    request  = put
-    response = nullResponse PutBucketCorsResponse
diff --git a/gen/Network/AWS/S3/PutBucketLifecycle.hs b/gen/Network/AWS/S3/PutBucketLifecycle.hs
--- a/gen/Network/AWS/S3/PutBucketLifecycle.hs
+++ b/gen/Network/AWS/S3/PutBucketLifecycle.hs
@@ -1,117 +1,118 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.PutBucketLifecycle
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Sets lifecycle configuration for your bucket. If a lifecycle configuration
--- exists, it replaces it.
+-- Sets lifecycle configuration for your bucket. If a lifecycle
+-- configuration exists, it replaces it.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketLifecycle.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketLifecycle.html AWS API Reference> for PutBucketLifecycle.
 module Network.AWS.S3.PutBucketLifecycle
     (
-    -- * Request
-      PutBucketLifecycle
-    -- ** Request constructor
-    , putBucketLifecycle
-    -- ** Request lenses
-    , pbl1Bucket
-    , pbl1ContentMD5
-    , pbl1LifecycleConfiguration
+    -- * Creating a Request
+      putBucketLifecycle
+    , PutBucketLifecycle
+    -- * Request Lenses
+    , pContentMD5
+    , pLifecycleConfiguration
+    , pBucket
 
-    -- * Response
-    , PutBucketLifecycleResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , putBucketLifecycleResponse
+    , PutBucketLifecycleResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data PutBucketLifecycle = PutBucketLifecycle
-    { _pbl1Bucket                 :: Text
-    , _pbl1ContentMD5             :: Maybe Text
-    , _pbl1LifecycleConfiguration :: Maybe LifecycleConfiguration
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'putBucketLifecycle' smart constructor.
+data PutBucketLifecycle = PutBucketLifecycle'
+    { _pContentMD5             :: !(Maybe Text)
+    , _pLifecycleConfiguration :: !(Maybe LifecycleConfiguration)
+    , _pBucket                 :: !BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'PutBucketLifecycle' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'PutBucketLifecycle' with the minimum fields required to make a request.
 --
--- * 'pbl1Bucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pbl1ContentMD5' @::@ 'Maybe' 'Text'
+-- * 'pContentMD5'
 --
--- * 'pbl1LifecycleConfiguration' @::@ 'Maybe' 'LifecycleConfiguration'
+-- * 'pLifecycleConfiguration'
 --
-putBucketLifecycle :: Text -- ^ 'pbl1Bucket'
-                   -> PutBucketLifecycle
-putBucketLifecycle p1 = PutBucketLifecycle
-    { _pbl1Bucket                 = p1
-    , _pbl1ContentMD5             = Nothing
-    , _pbl1LifecycleConfiguration = Nothing
+-- * 'pBucket'
+putBucketLifecycle
+    :: BucketName -- ^ 'pBucket'
+    -> PutBucketLifecycle
+putBucketLifecycle pBucket_ =
+    PutBucketLifecycle'
+    { _pContentMD5 = Nothing
+    , _pLifecycleConfiguration = Nothing
+    , _pBucket = pBucket_
     }
 
-pbl1Bucket :: Lens' PutBucketLifecycle Text
-pbl1Bucket = lens _pbl1Bucket (\s a -> s { _pbl1Bucket = a })
-
-pbl1ContentMD5 :: Lens' PutBucketLifecycle (Maybe Text)
-pbl1ContentMD5 = lens _pbl1ContentMD5 (\s a -> s { _pbl1ContentMD5 = a })
-
-pbl1LifecycleConfiguration :: Lens' PutBucketLifecycle (Maybe LifecycleConfiguration)
-pbl1LifecycleConfiguration =
-    lens _pbl1LifecycleConfiguration
-        (\s a -> s { _pbl1LifecycleConfiguration = a })
+-- | Undocumented member.
+pContentMD5 :: Lens' PutBucketLifecycle (Maybe Text)
+pContentMD5 = lens _pContentMD5 (\ s a -> s{_pContentMD5 = a});
 
-data PutBucketLifecycleResponse = PutBucketLifecycleResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+-- | Undocumented member.
+pLifecycleConfiguration :: Lens' PutBucketLifecycle (Maybe LifecycleConfiguration)
+pLifecycleConfiguration = lens _pLifecycleConfiguration (\ s a -> s{_pLifecycleConfiguration = a});
 
--- | 'PutBucketLifecycleResponse' constructor.
-putBucketLifecycleResponse :: PutBucketLifecycleResponse
-putBucketLifecycleResponse = PutBucketLifecycleResponse
+-- | Undocumented member.
+pBucket :: Lens' PutBucketLifecycle BucketName
+pBucket = lens _pBucket (\ s a -> s{_pBucket = a});
 
-instance ToPath PutBucketLifecycle where
-    toPath PutBucketLifecycle{..} = mconcat
-        [ "/"
-        , toText _pbl1Bucket
-        ]
+instance AWSRequest PutBucketLifecycle where
+        type Sv PutBucketLifecycle = S3
+        type Rs PutBucketLifecycle =
+             PutBucketLifecycleResponse
+        request = contentMD5 . putXML
+        response = receiveNull PutBucketLifecycleResponse'
 
-instance ToQuery PutBucketLifecycle where
-    toQuery = const "lifecycle"
+instance ToElement PutBucketLifecycle where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}LifecycleConfiguration"
+              .
+              _pLifecycleConfiguration
 
 instance ToHeaders PutBucketLifecycle where
-    toHeaders PutBucketLifecycle{..} = mconcat
-        [ "Content-MD5" =: _pbl1ContentMD5
-        ]
+        toHeaders PutBucketLifecycle'{..}
+          = mconcat ["Content-MD5" =# _pContentMD5]
 
-instance ToXMLRoot PutBucketLifecycle where
-    toXMLRoot = extractRoot ns . toXML . _pbl1LifecycleConfiguration
+instance ToPath PutBucketLifecycle where
+        toPath PutBucketLifecycle'{..}
+          = mconcat ["/", toBS _pBucket]
 
-instance ToXML PutBucketLifecycle
+instance ToQuery PutBucketLifecycle where
+        toQuery = const (mconcat ["lifecycle"])
 
-instance AWSRequest PutBucketLifecycle where
-    type Sv PutBucketLifecycle = S3
-    type Rs PutBucketLifecycle = PutBucketLifecycleResponse
+-- | /See:/ 'putBucketLifecycleResponse' smart constructor.
+data PutBucketLifecycleResponse =
+    PutBucketLifecycleResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = put
-    response = nullResponse PutBucketLifecycleResponse
+-- | Creates a value of 'PutBucketLifecycleResponse' with the minimum fields required to make a request.
+--
+putBucketLifecycleResponse
+    :: PutBucketLifecycleResponse
+putBucketLifecycleResponse = PutBucketLifecycleResponse'
diff --git a/gen/Network/AWS/S3/PutBucketLogging.hs b/gen/Network/AWS/S3/PutBucketLogging.hs
--- a/gen/Network/AWS/S3/PutBucketLogging.hs
+++ b/gen/Network/AWS/S3/PutBucketLogging.hs
@@ -1,118 +1,119 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.PutBucketLogging
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Set the logging parameters for a bucket and to specify permissions for who
--- can view and modify the logging parameters. To set the logging status of a
--- bucket, you must be the bucket owner.
+-- Set the logging parameters for a bucket and to specify permissions for
+-- who can view and modify the logging parameters. To set the logging
+-- status of a bucket, you must be the bucket owner.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketLogging.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketLogging.html AWS API Reference> for PutBucketLogging.
 module Network.AWS.S3.PutBucketLogging
     (
-    -- * Request
-      PutBucketLogging
-    -- ** Request constructor
-    , putBucketLogging
-    -- ** Request lenses
+    -- * Creating a Request
+      putBucketLogging
+    , PutBucketLogging
+    -- * Request Lenses
+    , pblContentMD5
     , pblBucket
     , pblBucketLoggingStatus
-    , pblContentMD5
 
-    -- * Response
-    , PutBucketLoggingResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , putBucketLoggingResponse
+    , PutBucketLoggingResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data PutBucketLogging = PutBucketLogging
-    { _pblBucket              :: Text
-    , _pblBucketLoggingStatus :: BucketLoggingStatus
-    , _pblContentMD5          :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'putBucketLogging' smart constructor.
+data PutBucketLogging = PutBucketLogging'
+    { _pblContentMD5          :: !(Maybe Text)
+    , _pblBucket              :: !BucketName
+    , _pblBucketLoggingStatus :: !BucketLoggingStatus
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'PutBucketLogging' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'PutBucketLogging' with the minimum fields required to make a request.
 --
--- * 'pblBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pblBucketLoggingStatus' @::@ 'BucketLoggingStatus'
+-- * 'pblContentMD5'
 --
--- * 'pblContentMD5' @::@ 'Maybe' 'Text'
+-- * 'pblBucket'
 --
-putBucketLogging :: Text -- ^ 'pblBucket'
-                 -> BucketLoggingStatus -- ^ 'pblBucketLoggingStatus'
-                 -> PutBucketLogging
-putBucketLogging p1 p2 = PutBucketLogging
-    { _pblBucket              = p1
-    , _pblBucketLoggingStatus = p2
-    , _pblContentMD5          = Nothing
+-- * 'pblBucketLoggingStatus'
+putBucketLogging
+    :: BucketName -- ^ 'pblBucket'
+    -> BucketLoggingStatus -- ^ 'pblBucketLoggingStatus'
+    -> PutBucketLogging
+putBucketLogging pBucket_ pBucketLoggingStatus_ =
+    PutBucketLogging'
+    { _pblContentMD5 = Nothing
+    , _pblBucket = pBucket_
+    , _pblBucketLoggingStatus = pBucketLoggingStatus_
     }
 
-pblBucket :: Lens' PutBucketLogging Text
-pblBucket = lens _pblBucket (\s a -> s { _pblBucket = a })
-
-pblBucketLoggingStatus :: Lens' PutBucketLogging BucketLoggingStatus
-pblBucketLoggingStatus =
-    lens _pblBucketLoggingStatus (\s a -> s { _pblBucketLoggingStatus = a })
-
+-- | Undocumented member.
 pblContentMD5 :: Lens' PutBucketLogging (Maybe Text)
-pblContentMD5 = lens _pblContentMD5 (\s a -> s { _pblContentMD5 = a })
+pblContentMD5 = lens _pblContentMD5 (\ s a -> s{_pblContentMD5 = a});
 
-data PutBucketLoggingResponse = PutBucketLoggingResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+-- | Undocumented member.
+pblBucket :: Lens' PutBucketLogging BucketName
+pblBucket = lens _pblBucket (\ s a -> s{_pblBucket = a});
 
--- | 'PutBucketLoggingResponse' constructor.
-putBucketLoggingResponse :: PutBucketLoggingResponse
-putBucketLoggingResponse = PutBucketLoggingResponse
+-- | Undocumented member.
+pblBucketLoggingStatus :: Lens' PutBucketLogging BucketLoggingStatus
+pblBucketLoggingStatus = lens _pblBucketLoggingStatus (\ s a -> s{_pblBucketLoggingStatus = a});
 
-instance ToPath PutBucketLogging where
-    toPath PutBucketLogging{..} = mconcat
-        [ "/"
-        , toText _pblBucket
-        ]
+instance AWSRequest PutBucketLogging where
+        type Sv PutBucketLogging = S3
+        type Rs PutBucketLogging = PutBucketLoggingResponse
+        request = putXML
+        response = receiveNull PutBucketLoggingResponse'
 
-instance ToQuery PutBucketLogging where
-    toQuery = const "logging"
+instance ToElement PutBucketLogging where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}BucketLoggingStatus"
+              .
+              _pblBucketLoggingStatus
 
 instance ToHeaders PutBucketLogging where
-    toHeaders PutBucketLogging{..} = mconcat
-        [ "Content-MD5" =: _pblContentMD5
-        ]
+        toHeaders PutBucketLogging'{..}
+          = mconcat ["Content-MD5" =# _pblContentMD5]
 
-instance ToXMLRoot PutBucketLogging where
-    toXMLRoot = extractRoot ns . toXML . _pblBucketLoggingStatus
+instance ToPath PutBucketLogging where
+        toPath PutBucketLogging'{..}
+          = mconcat ["/", toBS _pblBucket]
 
-instance ToXML PutBucketLogging
+instance ToQuery PutBucketLogging where
+        toQuery = const (mconcat ["logging"])
 
-instance AWSRequest PutBucketLogging where
-    type Sv PutBucketLogging = S3
-    type Rs PutBucketLogging = PutBucketLoggingResponse
+-- | /See:/ 'putBucketLoggingResponse' smart constructor.
+data PutBucketLoggingResponse =
+    PutBucketLoggingResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = put
-    response = nullResponse PutBucketLoggingResponse
+-- | Creates a value of 'PutBucketLoggingResponse' with the minimum fields required to make a request.
+--
+putBucketLoggingResponse
+    :: PutBucketLoggingResponse
+putBucketLoggingResponse = PutBucketLoggingResponse'
diff --git a/gen/Network/AWS/S3/PutBucketNotification.hs b/gen/Network/AWS/S3/PutBucketNotification.hs
deleted file mode 100644
--- a/gen/Network/AWS/S3/PutBucketNotification.hs
+++ /dev/null
@@ -1,117 +0,0 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.S3.PutBucketNotification
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deprecated, see the PutBucketNotificationConfiguraiton operation.
---
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketNotification.html>
-module Network.AWS.S3.PutBucketNotification
-    (
-    -- * Request
-      PutBucketNotification
-    -- ** Request constructor
-    , putBucketNotification
-    -- ** Request lenses
-    , pbnBucket
-    , pbnContentMD5
-    , pbnNotificationConfiguration
-
-    -- * Response
-    , PutBucketNotificationResponse
-    -- ** Response constructor
-    , putBucketNotificationResponse
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
-
-data PutBucketNotification = PutBucketNotification
-    { _pbnBucket                    :: Text
-    , _pbnContentMD5                :: Maybe Text
-    , _pbnNotificationConfiguration :: NotificationConfigurationDeprecated
-    } deriving (Eq, Read, Show)
-
--- | 'PutBucketNotification' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'pbnBucket' @::@ 'Text'
---
--- * 'pbnContentMD5' @::@ 'Maybe' 'Text'
---
--- * 'pbnNotificationConfiguration' @::@ 'NotificationConfigurationDeprecated'
---
-putBucketNotification :: Text -- ^ 'pbnBucket'
-                      -> NotificationConfigurationDeprecated -- ^ 'pbnNotificationConfiguration'
-                      -> PutBucketNotification
-putBucketNotification p1 p2 = PutBucketNotification
-    { _pbnBucket                    = p1
-    , _pbnNotificationConfiguration = p2
-    , _pbnContentMD5                = Nothing
-    }
-
-pbnBucket :: Lens' PutBucketNotification Text
-pbnBucket = lens _pbnBucket (\s a -> s { _pbnBucket = a })
-
-pbnContentMD5 :: Lens' PutBucketNotification (Maybe Text)
-pbnContentMD5 = lens _pbnContentMD5 (\s a -> s { _pbnContentMD5 = a })
-
-pbnNotificationConfiguration :: Lens' PutBucketNotification NotificationConfigurationDeprecated
-pbnNotificationConfiguration =
-    lens _pbnNotificationConfiguration
-        (\s a -> s { _pbnNotificationConfiguration = a })
-
-data PutBucketNotificationResponse = PutBucketNotificationResponse
-    deriving (Eq, Ord, Read, Show, Generic)
-
--- | 'PutBucketNotificationResponse' constructor.
-putBucketNotificationResponse :: PutBucketNotificationResponse
-putBucketNotificationResponse = PutBucketNotificationResponse
-
-instance ToPath PutBucketNotification where
-    toPath PutBucketNotification{..} = mconcat
-        [ "/"
-        , toText _pbnBucket
-        ]
-
-instance ToQuery PutBucketNotification where
-    toQuery = const "notification"
-
-instance ToHeaders PutBucketNotification where
-    toHeaders PutBucketNotification{..} = mconcat
-        [ "Content-MD5" =: _pbnContentMD5
-        ]
-
-instance ToXMLRoot PutBucketNotification where
-    toXMLRoot = extractRoot ns . toXML . _pbnNotificationConfiguration
-
-instance ToXML PutBucketNotification
-
-instance AWSRequest PutBucketNotification where
-    type Sv PutBucketNotification = S3
-    type Rs PutBucketNotification = PutBucketNotificationResponse
-
-    request  = put
-    response = nullResponse PutBucketNotificationResponse
diff --git a/gen/Network/AWS/S3/PutBucketNotificationConfiguration.hs b/gen/Network/AWS/S3/PutBucketNotificationConfiguration.hs
--- a/gen/Network/AWS/S3/PutBucketNotificationConfiguration.hs
+++ b/gen/Network/AWS/S3/PutBucketNotificationConfiguration.hs
@@ -1,108 +1,116 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.PutBucketNotificationConfiguration
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Enables notifications of specified events for a bucket.
+-- Enables notifications of specified events for a bucket.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketNotificationConfiguration.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketNotificationConfiguration.html AWS API Reference> for PutBucketNotificationConfiguration.
 module Network.AWS.S3.PutBucketNotificationConfiguration
     (
-    -- * Request
-      PutBucketNotificationConfiguration
-    -- ** Request constructor
-    , putBucketNotificationConfiguration
-    -- ** Request lenses
+    -- * Creating a Request
+      putBucketNotificationConfiguration
+    , PutBucketNotificationConfiguration
+    -- * Request Lenses
     , pbncBucket
     , pbncNotificationConfiguration
 
-    -- * Response
-    , PutBucketNotificationConfigurationResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , putBucketNotificationConfigurationResponse
+    , PutBucketNotificationConfigurationResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data PutBucketNotificationConfiguration = PutBucketNotificationConfiguration
-    { _pbncBucket                    :: Text
-    , _pbncNotificationConfiguration :: NotificationConfiguration
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'putBucketNotificationConfiguration' smart constructor.
+data PutBucketNotificationConfiguration = PutBucketNotificationConfiguration'
+    { _pbncBucket                    :: !BucketName
+    , _pbncNotificationConfiguration :: !NotificationConfiguration
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'PutBucketNotificationConfiguration' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'PutBucketNotificationConfiguration' with the minimum fields required to make a request.
 --
--- * 'pbncBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pbncNotificationConfiguration' @::@ 'NotificationConfiguration'
+-- * 'pbncBucket'
 --
-putBucketNotificationConfiguration :: Text -- ^ 'pbncBucket'
-                                   -> NotificationConfiguration -- ^ 'pbncNotificationConfiguration'
-                                   -> PutBucketNotificationConfiguration
-putBucketNotificationConfiguration p1 p2 = PutBucketNotificationConfiguration
-    { _pbncBucket                    = p1
-    , _pbncNotificationConfiguration = p2
+-- * 'pbncNotificationConfiguration'
+putBucketNotificationConfiguration
+    :: BucketName -- ^ 'pbncBucket'
+    -> NotificationConfiguration -- ^ 'pbncNotificationConfiguration'
+    -> PutBucketNotificationConfiguration
+putBucketNotificationConfiguration pBucket_ pNotificationConfiguration_ =
+    PutBucketNotificationConfiguration'
+    { _pbncBucket = pBucket_
+    , _pbncNotificationConfiguration = pNotificationConfiguration_
     }
 
-pbncBucket :: Lens' PutBucketNotificationConfiguration Text
-pbncBucket = lens _pbncBucket (\s a -> s { _pbncBucket = a })
+-- | Undocumented member.
+pbncBucket :: Lens' PutBucketNotificationConfiguration BucketName
+pbncBucket = lens _pbncBucket (\ s a -> s{_pbncBucket = a});
 
+-- | Undocumented member.
 pbncNotificationConfiguration :: Lens' PutBucketNotificationConfiguration NotificationConfiguration
-pbncNotificationConfiguration =
-    lens _pbncNotificationConfiguration
-        (\s a -> s { _pbncNotificationConfiguration = a })
-
-data PutBucketNotificationConfigurationResponse = PutBucketNotificationConfigurationResponse
-    deriving (Eq, Ord, Read, Show, Generic)
-
--- | 'PutBucketNotificationConfigurationResponse' constructor.
-putBucketNotificationConfigurationResponse :: PutBucketNotificationConfigurationResponse
-putBucketNotificationConfigurationResponse = PutBucketNotificationConfigurationResponse
+pbncNotificationConfiguration = lens _pbncNotificationConfiguration (\ s a -> s{_pbncNotificationConfiguration = a});
 
-instance ToPath PutBucketNotificationConfiguration where
-    toPath PutBucketNotificationConfiguration{..} = mconcat
-        [ "/"
-        , toText _pbncBucket
-        ]
+instance AWSRequest
+         PutBucketNotificationConfiguration where
+        type Sv PutBucketNotificationConfiguration = S3
+        type Rs PutBucketNotificationConfiguration =
+             PutBucketNotificationConfigurationResponse
+        request = putXML
+        response
+          = receiveNull
+              PutBucketNotificationConfigurationResponse'
 
-instance ToQuery PutBucketNotificationConfiguration where
-    toQuery = const "notification"
+instance ToElement PutBucketNotificationConfiguration
+         where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}NotificationConfiguration"
+              .
+              _pbncNotificationConfiguration
 
 instance ToHeaders PutBucketNotificationConfiguration
+         where
+        toHeaders = const mempty
 
-instance ToXMLRoot PutBucketNotificationConfiguration where
-    toXMLRoot PutBucketNotificationConfiguration{..} = namespaced ns "PutBucketNotificationConfiguration"
-        [ "NotificationConfiguration" =@ _pbncNotificationConfiguration
-        ]
+instance ToPath PutBucketNotificationConfiguration
+         where
+        toPath PutBucketNotificationConfiguration'{..}
+          = mconcat ["/", toBS _pbncBucket]
 
-instance ToXML PutBucketNotificationConfiguration
+instance ToQuery PutBucketNotificationConfiguration
+         where
+        toQuery = const (mconcat ["notification"])
 
-instance AWSRequest PutBucketNotificationConfiguration where
-    type Sv PutBucketNotificationConfiguration = S3
-    type Rs PutBucketNotificationConfiguration = PutBucketNotificationConfigurationResponse
+-- | /See:/ 'putBucketNotificationConfigurationResponse' smart constructor.
+data PutBucketNotificationConfigurationResponse =
+    PutBucketNotificationConfigurationResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = put
-    response = nullResponse PutBucketNotificationConfigurationResponse
+-- | Creates a value of 'PutBucketNotificationConfigurationResponse' with the minimum fields required to make a request.
+--
+putBucketNotificationConfigurationResponse
+    :: PutBucketNotificationConfigurationResponse
+putBucketNotificationConfigurationResponse =
+    PutBucketNotificationConfigurationResponse'
diff --git a/gen/Network/AWS/S3/PutBucketPolicy.hs b/gen/Network/AWS/S3/PutBucketPolicy.hs
--- a/gen/Network/AWS/S3/PutBucketPolicy.hs
+++ b/gen/Network/AWS/S3/PutBucketPolicy.hs
@@ -1,117 +1,114 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.PutBucketPolicy
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Replaces a policy on a bucket. If the bucket already has a policy, the one in
--- this request completely replaces it.
+-- Replaces a policy on a bucket. If the bucket already has a policy, the
+-- one in this request completely replaces it.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketPolicy.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketPolicy.html AWS API Reference> for PutBucketPolicy.
 module Network.AWS.S3.PutBucketPolicy
     (
-    -- * Request
-      PutBucketPolicy
-    -- ** Request constructor
-    , putBucketPolicy
-    -- ** Request lenses
-    , pbpBucket
+    -- * Creating a Request
+      putBucketPolicy
+    , PutBucketPolicy
+    -- * Request Lenses
     , pbpContentMD5
+    , pbpBucket
     , pbpPolicy
 
-    -- * Response
-    , PutBucketPolicyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , putBucketPolicyResponse
+    , PutBucketPolicyResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data PutBucketPolicy = PutBucketPolicy
-    { _pbpBucket     :: Text
-    , _pbpContentMD5 :: Maybe Text
-    , _pbpPolicy     :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'putBucketPolicy' smart constructor.
+data PutBucketPolicy = PutBucketPolicy'
+    { _pbpContentMD5 :: !(Maybe Text)
+    , _pbpBucket     :: !BucketName
+    , _pbpPolicy     :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'PutBucketPolicy' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'PutBucketPolicy' with the minimum fields required to make a request.
 --
--- * 'pbpBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pbpContentMD5' @::@ 'Maybe' 'Text'
+-- * 'pbpContentMD5'
 --
--- * 'pbpPolicy' @::@ 'Text'
+-- * 'pbpBucket'
 --
-putBucketPolicy :: Text -- ^ 'pbpBucket'
-                -> Text -- ^ 'pbpPolicy'
-                -> PutBucketPolicy
-putBucketPolicy p1 p2 = PutBucketPolicy
-    { _pbpBucket     = p1
-    , _pbpPolicy     = p2
-    , _pbpContentMD5 = Nothing
+-- * 'pbpPolicy'
+putBucketPolicy
+    :: BucketName -- ^ 'pbpBucket'
+    -> Text -- ^ 'pbpPolicy'
+    -> PutBucketPolicy
+putBucketPolicy pBucket_ pPolicy_ =
+    PutBucketPolicy'
+    { _pbpContentMD5 = Nothing
+    , _pbpBucket = pBucket_
+    , _pbpPolicy = pPolicy_
     }
 
-pbpBucket :: Lens' PutBucketPolicy Text
-pbpBucket = lens _pbpBucket (\s a -> s { _pbpBucket = a })
-
+-- | Undocumented member.
 pbpContentMD5 :: Lens' PutBucketPolicy (Maybe Text)
-pbpContentMD5 = lens _pbpContentMD5 (\s a -> s { _pbpContentMD5 = a })
+pbpContentMD5 = lens _pbpContentMD5 (\ s a -> s{_pbpContentMD5 = a});
 
+-- | Undocumented member.
+pbpBucket :: Lens' PutBucketPolicy BucketName
+pbpBucket = lens _pbpBucket (\ s a -> s{_pbpBucket = a});
+
 -- | The bucket policy as a JSON document.
 pbpPolicy :: Lens' PutBucketPolicy Text
-pbpPolicy = lens _pbpPolicy (\s a -> s { _pbpPolicy = a })
-
-data PutBucketPolicyResponse = PutBucketPolicyResponse
-    deriving (Eq, Ord, Read, Show, Generic)
-
--- | 'PutBucketPolicyResponse' constructor.
-putBucketPolicyResponse :: PutBucketPolicyResponse
-putBucketPolicyResponse = PutBucketPolicyResponse
+pbpPolicy = lens _pbpPolicy (\ s a -> s{_pbpPolicy = a});
 
-instance ToPath PutBucketPolicy where
-    toPath PutBucketPolicy{..} = mconcat
-        [ "/"
-        , toText _pbpBucket
-        ]
+instance AWSRequest PutBucketPolicy where
+        type Sv PutBucketPolicy = S3
+        type Rs PutBucketPolicy = PutBucketPolicyResponse
+        request = contentMD5 . putXML
+        response = receiveNull PutBucketPolicyResponse'
 
-instance ToQuery PutBucketPolicy where
-    toQuery = const "policy"
+instance ToElement PutBucketPolicy where
+        toElement = mkElement "Policy" . _pbpPolicy
 
 instance ToHeaders PutBucketPolicy where
-    toHeaders PutBucketPolicy{..} = mconcat
-        [ "Content-MD5" =: _pbpContentMD5
-        ]
+        toHeaders PutBucketPolicy'{..}
+          = mconcat ["Content-MD5" =# _pbpContentMD5]
 
-instance ToXMLRoot PutBucketPolicy where
-    toXMLRoot = extractRoot ns . toXML . _pbpPolicy
+instance ToPath PutBucketPolicy where
+        toPath PutBucketPolicy'{..}
+          = mconcat ["/", toBS _pbpBucket]
 
-instance ToXML PutBucketPolicy
+instance ToQuery PutBucketPolicy where
+        toQuery = const (mconcat ["policy"])
 
-instance AWSRequest PutBucketPolicy where
-    type Sv PutBucketPolicy = S3
-    type Rs PutBucketPolicy = PutBucketPolicyResponse
+-- | /See:/ 'putBucketPolicyResponse' smart constructor.
+data PutBucketPolicyResponse =
+    PutBucketPolicyResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = put
-    response = nullResponse PutBucketPolicyResponse
+-- | Creates a value of 'PutBucketPolicyResponse' with the minimum fields required to make a request.
+--
+putBucketPolicyResponse
+    :: PutBucketPolicyResponse
+putBucketPolicyResponse = PutBucketPolicyResponse'
diff --git a/gen/Network/AWS/S3/PutBucketReplication.hs b/gen/Network/AWS/S3/PutBucketReplication.hs
--- a/gen/Network/AWS/S3/PutBucketReplication.hs
+++ b/gen/Network/AWS/S3/PutBucketReplication.hs
@@ -1,118 +1,119 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.PutBucketReplication
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Creates a new replication configuration (or replaces an existing one, if
+-- Creates a new replication configuration (or replaces an existing one, if
 -- present).
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketReplication.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketReplication.html AWS API Reference> for PutBucketReplication.
 module Network.AWS.S3.PutBucketReplication
     (
-    -- * Request
-      PutBucketReplication
-    -- ** Request constructor
-    , putBucketReplication
-    -- ** Request lenses
-    , pbrBucket
+    -- * Creating a Request
+      putBucketReplication
+    , PutBucketReplication
+    -- * Request Lenses
     , pbrContentMD5
+    , pbrBucket
     , pbrReplicationConfiguration
 
-    -- * Response
-    , PutBucketReplicationResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , putBucketReplicationResponse
+    , PutBucketReplicationResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data PutBucketReplication = PutBucketReplication
-    { _pbrBucket                   :: Text
-    , _pbrContentMD5               :: Maybe Text
-    , _pbrReplicationConfiguration :: ReplicationConfiguration
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'putBucketReplication' smart constructor.
+data PutBucketReplication = PutBucketReplication'
+    { _pbrContentMD5               :: !(Maybe Text)
+    , _pbrBucket                   :: !BucketName
+    , _pbrReplicationConfiguration :: !ReplicationConfiguration
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'PutBucketReplication' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'PutBucketReplication' with the minimum fields required to make a request.
 --
--- * 'pbrBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pbrContentMD5' @::@ 'Maybe' 'Text'
+-- * 'pbrContentMD5'
 --
--- * 'pbrReplicationConfiguration' @::@ 'ReplicationConfiguration'
+-- * 'pbrBucket'
 --
-putBucketReplication :: Text -- ^ 'pbrBucket'
-                     -> ReplicationConfiguration -- ^ 'pbrReplicationConfiguration'
-                     -> PutBucketReplication
-putBucketReplication p1 p2 = PutBucketReplication
-    { _pbrBucket                   = p1
-    , _pbrReplicationConfiguration = p2
-    , _pbrContentMD5               = Nothing
+-- * 'pbrReplicationConfiguration'
+putBucketReplication
+    :: BucketName -- ^ 'pbrBucket'
+    -> ReplicationConfiguration -- ^ 'pbrReplicationConfiguration'
+    -> PutBucketReplication
+putBucketReplication pBucket_ pReplicationConfiguration_ =
+    PutBucketReplication'
+    { _pbrContentMD5 = Nothing
+    , _pbrBucket = pBucket_
+    , _pbrReplicationConfiguration = pReplicationConfiguration_
     }
 
-pbrBucket :: Lens' PutBucketReplication Text
-pbrBucket = lens _pbrBucket (\s a -> s { _pbrBucket = a })
-
+-- | Undocumented member.
 pbrContentMD5 :: Lens' PutBucketReplication (Maybe Text)
-pbrContentMD5 = lens _pbrContentMD5 (\s a -> s { _pbrContentMD5 = a })
-
-pbrReplicationConfiguration :: Lens' PutBucketReplication ReplicationConfiguration
-pbrReplicationConfiguration =
-    lens _pbrReplicationConfiguration
-        (\s a -> s { _pbrReplicationConfiguration = a })
+pbrContentMD5 = lens _pbrContentMD5 (\ s a -> s{_pbrContentMD5 = a});
 
-data PutBucketReplicationResponse = PutBucketReplicationResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+-- | Undocumented member.
+pbrBucket :: Lens' PutBucketReplication BucketName
+pbrBucket = lens _pbrBucket (\ s a -> s{_pbrBucket = a});
 
--- | 'PutBucketReplicationResponse' constructor.
-putBucketReplicationResponse :: PutBucketReplicationResponse
-putBucketReplicationResponse = PutBucketReplicationResponse
+-- | Undocumented member.
+pbrReplicationConfiguration :: Lens' PutBucketReplication ReplicationConfiguration
+pbrReplicationConfiguration = lens _pbrReplicationConfiguration (\ s a -> s{_pbrReplicationConfiguration = a});
 
-instance ToPath PutBucketReplication where
-    toPath PutBucketReplication{..} = mconcat
-        [ "/"
-        , toText _pbrBucket
-        ]
+instance AWSRequest PutBucketReplication where
+        type Sv PutBucketReplication = S3
+        type Rs PutBucketReplication =
+             PutBucketReplicationResponse
+        request = putXML
+        response = receiveNull PutBucketReplicationResponse'
 
-instance ToQuery PutBucketReplication where
-    toQuery = const "replication"
+instance ToElement PutBucketReplication where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}ReplicationConfiguration"
+              .
+              _pbrReplicationConfiguration
 
 instance ToHeaders PutBucketReplication where
-    toHeaders PutBucketReplication{..} = mconcat
-        [ "Content-MD5" =: _pbrContentMD5
-        ]
+        toHeaders PutBucketReplication'{..}
+          = mconcat ["Content-MD5" =# _pbrContentMD5]
 
-instance ToXMLRoot PutBucketReplication where
-    toXMLRoot = extractRoot ns . toXML . _pbrReplicationConfiguration
+instance ToPath PutBucketReplication where
+        toPath PutBucketReplication'{..}
+          = mconcat ["/", toBS _pbrBucket]
 
-instance ToXML PutBucketReplication
+instance ToQuery PutBucketReplication where
+        toQuery = const (mconcat ["replication"])
 
-instance AWSRequest PutBucketReplication where
-    type Sv PutBucketReplication = S3
-    type Rs PutBucketReplication = PutBucketReplicationResponse
+-- | /See:/ 'putBucketReplicationResponse' smart constructor.
+data PutBucketReplicationResponse =
+    PutBucketReplicationResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = put
-    response = nullResponse PutBucketReplicationResponse
+-- | Creates a value of 'PutBucketReplicationResponse' with the minimum fields required to make a request.
+--
+putBucketReplicationResponse
+    :: PutBucketReplicationResponse
+putBucketReplicationResponse = PutBucketReplicationResponse'
diff --git a/gen/Network/AWS/S3/PutBucketRequestPayment.hs b/gen/Network/AWS/S3/PutBucketRequestPayment.hs
--- a/gen/Network/AWS/S3/PutBucketRequestPayment.hs
+++ b/gen/Network/AWS/S3/PutBucketRequestPayment.hs
@@ -1,122 +1,124 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.PutBucketRequestPayment
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Sets the request payment configuration for a bucket. By default, the bucket
--- owner pays for downloads from the bucket. This configuration parameter
--- enables the bucket owner (only) to specify that the person requesting the
--- download will be charged for the download. Documentation on requester pays
--- buckets can be found at
--- http://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html
+-- Sets the request payment configuration for a bucket. By default, the
+-- bucket owner pays for downloads from the bucket. This configuration
+-- parameter enables the bucket owner (only) to specify that the person
+-- requesting the download will be charged for the download. Documentation
+-- on requester pays buckets can be found at
+-- http:\/\/docs.aws.amazon.com\/AmazonS3\/latest\/dev\/RequesterPaysBuckets.html
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketRequestPayment.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketRequestPayment.html AWS API Reference> for PutBucketRequestPayment.
 module Network.AWS.S3.PutBucketRequestPayment
     (
-    -- * Request
-      PutBucketRequestPayment
-    -- ** Request constructor
-    , putBucketRequestPayment
-    -- ** Request lenses
-    , pbrpBucket
+    -- * Creating a Request
+      putBucketRequestPayment
+    , PutBucketRequestPayment
+    -- * Request Lenses
     , pbrpContentMD5
+    , pbrpBucket
     , pbrpRequestPaymentConfiguration
 
-    -- * Response
-    , PutBucketRequestPaymentResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , putBucketRequestPaymentResponse
+    , PutBucketRequestPaymentResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data PutBucketRequestPayment = PutBucketRequestPayment
-    { _pbrpBucket                      :: Text
-    , _pbrpContentMD5                  :: Maybe Text
-    , _pbrpRequestPaymentConfiguration :: RequestPaymentConfiguration
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'putBucketRequestPayment' smart constructor.
+data PutBucketRequestPayment = PutBucketRequestPayment'
+    { _pbrpContentMD5                  :: !(Maybe Text)
+    , _pbrpBucket                      :: !BucketName
+    , _pbrpRequestPaymentConfiguration :: !RequestPaymentConfiguration
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'PutBucketRequestPayment' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'PutBucketRequestPayment' with the minimum fields required to make a request.
 --
--- * 'pbrpBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pbrpContentMD5' @::@ 'Maybe' 'Text'
+-- * 'pbrpContentMD5'
 --
--- * 'pbrpRequestPaymentConfiguration' @::@ 'RequestPaymentConfiguration'
+-- * 'pbrpBucket'
 --
-putBucketRequestPayment :: Text -- ^ 'pbrpBucket'
-                        -> RequestPaymentConfiguration -- ^ 'pbrpRequestPaymentConfiguration'
-                        -> PutBucketRequestPayment
-putBucketRequestPayment p1 p2 = PutBucketRequestPayment
-    { _pbrpBucket                      = p1
-    , _pbrpRequestPaymentConfiguration = p2
-    , _pbrpContentMD5                  = Nothing
+-- * 'pbrpRequestPaymentConfiguration'
+putBucketRequestPayment
+    :: BucketName -- ^ 'pbrpBucket'
+    -> RequestPaymentConfiguration -- ^ 'pbrpRequestPaymentConfiguration'
+    -> PutBucketRequestPayment
+putBucketRequestPayment pBucket_ pRequestPaymentConfiguration_ =
+    PutBucketRequestPayment'
+    { _pbrpContentMD5 = Nothing
+    , _pbrpBucket = pBucket_
+    , _pbrpRequestPaymentConfiguration = pRequestPaymentConfiguration_
     }
 
-pbrpBucket :: Lens' PutBucketRequestPayment Text
-pbrpBucket = lens _pbrpBucket (\s a -> s { _pbrpBucket = a })
-
+-- | Undocumented member.
 pbrpContentMD5 :: Lens' PutBucketRequestPayment (Maybe Text)
-pbrpContentMD5 = lens _pbrpContentMD5 (\s a -> s { _pbrpContentMD5 = a })
-
-pbrpRequestPaymentConfiguration :: Lens' PutBucketRequestPayment RequestPaymentConfiguration
-pbrpRequestPaymentConfiguration =
-    lens _pbrpRequestPaymentConfiguration
-        (\s a -> s { _pbrpRequestPaymentConfiguration = a })
+pbrpContentMD5 = lens _pbrpContentMD5 (\ s a -> s{_pbrpContentMD5 = a});
 
-data PutBucketRequestPaymentResponse = PutBucketRequestPaymentResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+-- | Undocumented member.
+pbrpBucket :: Lens' PutBucketRequestPayment BucketName
+pbrpBucket = lens _pbrpBucket (\ s a -> s{_pbrpBucket = a});
 
--- | 'PutBucketRequestPaymentResponse' constructor.
-putBucketRequestPaymentResponse :: PutBucketRequestPaymentResponse
-putBucketRequestPaymentResponse = PutBucketRequestPaymentResponse
+-- | Undocumented member.
+pbrpRequestPaymentConfiguration :: Lens' PutBucketRequestPayment RequestPaymentConfiguration
+pbrpRequestPaymentConfiguration = lens _pbrpRequestPaymentConfiguration (\ s a -> s{_pbrpRequestPaymentConfiguration = a});
 
-instance ToPath PutBucketRequestPayment where
-    toPath PutBucketRequestPayment{..} = mconcat
-        [ "/"
-        , toText _pbrpBucket
-        ]
+instance AWSRequest PutBucketRequestPayment where
+        type Sv PutBucketRequestPayment = S3
+        type Rs PutBucketRequestPayment =
+             PutBucketRequestPaymentResponse
+        request = putXML
+        response
+          = receiveNull PutBucketRequestPaymentResponse'
 
-instance ToQuery PutBucketRequestPayment where
-    toQuery = const "requestPayment"
+instance ToElement PutBucketRequestPayment where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}RequestPaymentConfiguration"
+              .
+              _pbrpRequestPaymentConfiguration
 
 instance ToHeaders PutBucketRequestPayment where
-    toHeaders PutBucketRequestPayment{..} = mconcat
-        [ "Content-MD5" =: _pbrpContentMD5
-        ]
+        toHeaders PutBucketRequestPayment'{..}
+          = mconcat ["Content-MD5" =# _pbrpContentMD5]
 
-instance ToXMLRoot PutBucketRequestPayment where
-    toXMLRoot = extractRoot ns . toXML . _pbrpRequestPaymentConfiguration
+instance ToPath PutBucketRequestPayment where
+        toPath PutBucketRequestPayment'{..}
+          = mconcat ["/", toBS _pbrpBucket]
 
-instance ToXML PutBucketRequestPayment
+instance ToQuery PutBucketRequestPayment where
+        toQuery = const (mconcat ["requestPayment"])
 
-instance AWSRequest PutBucketRequestPayment where
-    type Sv PutBucketRequestPayment = S3
-    type Rs PutBucketRequestPayment = PutBucketRequestPaymentResponse
+-- | /See:/ 'putBucketRequestPaymentResponse' smart constructor.
+data PutBucketRequestPaymentResponse =
+    PutBucketRequestPaymentResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = put
-    response = nullResponse PutBucketRequestPaymentResponse
+-- | Creates a value of 'PutBucketRequestPaymentResponse' with the minimum fields required to make a request.
+--
+putBucketRequestPaymentResponse
+    :: PutBucketRequestPaymentResponse
+putBucketRequestPaymentResponse = PutBucketRequestPaymentResponse'
diff --git a/gen/Network/AWS/S3/PutBucketTagging.hs b/gen/Network/AWS/S3/PutBucketTagging.hs
--- a/gen/Network/AWS/S3/PutBucketTagging.hs
+++ b/gen/Network/AWS/S3/PutBucketTagging.hs
@@ -1,115 +1,117 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.PutBucketTagging
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Sets the tags for a bucket.
+-- Sets the tags for a bucket.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketTagging.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketTagging.html AWS API Reference> for PutBucketTagging.
 module Network.AWS.S3.PutBucketTagging
     (
-    -- * Request
-      PutBucketTagging
-    -- ** Request constructor
-    , putBucketTagging
-    -- ** Request lenses
-    , pbtBucket
+    -- * Creating a Request
+      putBucketTagging
+    , PutBucketTagging
+    -- * Request Lenses
     , pbtContentMD5
+    , pbtBucket
     , pbtTagging
 
-    -- * Response
-    , PutBucketTaggingResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , putBucketTaggingResponse
+    , PutBucketTaggingResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data PutBucketTagging = PutBucketTagging
-    { _pbtBucket     :: Text
-    , _pbtContentMD5 :: Maybe Text
-    , _pbtTagging    :: Tagging
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'putBucketTagging' smart constructor.
+data PutBucketTagging = PutBucketTagging'
+    { _pbtContentMD5 :: !(Maybe Text)
+    , _pbtBucket     :: !BucketName
+    , _pbtTagging    :: !Tagging
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'PutBucketTagging' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'PutBucketTagging' with the minimum fields required to make a request.
 --
--- * 'pbtBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pbtContentMD5' @::@ 'Maybe' 'Text'
+-- * 'pbtContentMD5'
 --
--- * 'pbtTagging' @::@ 'Tagging'
+-- * 'pbtBucket'
 --
-putBucketTagging :: Text -- ^ 'pbtBucket'
-                 -> Tagging -- ^ 'pbtTagging'
-                 -> PutBucketTagging
-putBucketTagging p1 p2 = PutBucketTagging
-    { _pbtBucket     = p1
-    , _pbtTagging    = p2
-    , _pbtContentMD5 = Nothing
+-- * 'pbtTagging'
+putBucketTagging
+    :: BucketName -- ^ 'pbtBucket'
+    -> Tagging -- ^ 'pbtTagging'
+    -> PutBucketTagging
+putBucketTagging pBucket_ pTagging_ =
+    PutBucketTagging'
+    { _pbtContentMD5 = Nothing
+    , _pbtBucket = pBucket_
+    , _pbtTagging = pTagging_
     }
 
-pbtBucket :: Lens' PutBucketTagging Text
-pbtBucket = lens _pbtBucket (\s a -> s { _pbtBucket = a })
-
+-- | Undocumented member.
 pbtContentMD5 :: Lens' PutBucketTagging (Maybe Text)
-pbtContentMD5 = lens _pbtContentMD5 (\s a -> s { _pbtContentMD5 = a })
-
-pbtTagging :: Lens' PutBucketTagging Tagging
-pbtTagging = lens _pbtTagging (\s a -> s { _pbtTagging = a })
+pbtContentMD5 = lens _pbtContentMD5 (\ s a -> s{_pbtContentMD5 = a});
 
-data PutBucketTaggingResponse = PutBucketTaggingResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+-- | Undocumented member.
+pbtBucket :: Lens' PutBucketTagging BucketName
+pbtBucket = lens _pbtBucket (\ s a -> s{_pbtBucket = a});
 
--- | 'PutBucketTaggingResponse' constructor.
-putBucketTaggingResponse :: PutBucketTaggingResponse
-putBucketTaggingResponse = PutBucketTaggingResponse
+-- | Undocumented member.
+pbtTagging :: Lens' PutBucketTagging Tagging
+pbtTagging = lens _pbtTagging (\ s a -> s{_pbtTagging = a});
 
-instance ToPath PutBucketTagging where
-    toPath PutBucketTagging{..} = mconcat
-        [ "/"
-        , toText _pbtBucket
-        ]
+instance AWSRequest PutBucketTagging where
+        type Sv PutBucketTagging = S3
+        type Rs PutBucketTagging = PutBucketTaggingResponse
+        request = contentMD5 . putXML
+        response = receiveNull PutBucketTaggingResponse'
 
-instance ToQuery PutBucketTagging where
-    toQuery = const "tagging"
+instance ToElement PutBucketTagging where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}Tagging"
+              .
+              _pbtTagging
 
 instance ToHeaders PutBucketTagging where
-    toHeaders PutBucketTagging{..} = mconcat
-        [ "Content-MD5" =: _pbtContentMD5
-        ]
+        toHeaders PutBucketTagging'{..}
+          = mconcat ["Content-MD5" =# _pbtContentMD5]
 
-instance ToXMLRoot PutBucketTagging where
-    toXMLRoot = extractRoot ns . toXML . _pbtTagging
+instance ToPath PutBucketTagging where
+        toPath PutBucketTagging'{..}
+          = mconcat ["/", toBS _pbtBucket]
 
-instance ToXML PutBucketTagging
+instance ToQuery PutBucketTagging where
+        toQuery = const (mconcat ["tagging"])
 
-instance AWSRequest PutBucketTagging where
-    type Sv PutBucketTagging = S3
-    type Rs PutBucketTagging = PutBucketTaggingResponse
+-- | /See:/ 'putBucketTaggingResponse' smart constructor.
+data PutBucketTaggingResponse =
+    PutBucketTaggingResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = put
-    response = nullResponse PutBucketTaggingResponse
+-- | Creates a value of 'PutBucketTaggingResponse' with the minimum fields required to make a request.
+--
+putBucketTaggingResponse
+    :: PutBucketTaggingResponse
+putBucketTaggingResponse = PutBucketTaggingResponse'
diff --git a/gen/Network/AWS/S3/PutBucketVersioning.hs b/gen/Network/AWS/S3/PutBucketVersioning.hs
--- a/gen/Network/AWS/S3/PutBucketVersioning.hs
+++ b/gen/Network/AWS/S3/PutBucketVersioning.hs
@@ -1,129 +1,131 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.PutBucketVersioning
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Sets the versioning state of an existing bucket. To set the versioning state,
--- you must be the bucket owner.
+-- Sets the versioning state of an existing bucket. To set the versioning
+-- state, you must be the bucket owner.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketVersioning.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketVersioning.html AWS API Reference> for PutBucketVersioning.
 module Network.AWS.S3.PutBucketVersioning
     (
-    -- * Request
-      PutBucketVersioning
-    -- ** Request constructor
-    , putBucketVersioning
-    -- ** Request lenses
-    , pbvBucket
-    , pbvContentMD5
+    -- * Creating a Request
+      putBucketVersioning
+    , PutBucketVersioning
+    -- * Request Lenses
     , pbvMFA
+    , pbvContentMD5
+    , pbvBucket
     , pbvVersioningConfiguration
 
-    -- * Response
-    , PutBucketVersioningResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , putBucketVersioningResponse
+    , PutBucketVersioningResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data PutBucketVersioning = PutBucketVersioning
-    { _pbvBucket                  :: Text
-    , _pbvContentMD5              :: Maybe Text
-    , _pbvMFA                     :: Maybe Text
-    , _pbvVersioningConfiguration :: VersioningConfiguration
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'putBucketVersioning' smart constructor.
+data PutBucketVersioning = PutBucketVersioning'
+    { _pbvMFA                     :: !(Maybe Text)
+    , _pbvContentMD5              :: !(Maybe Text)
+    , _pbvBucket                  :: !BucketName
+    , _pbvVersioningConfiguration :: !VersioningConfiguration
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'PutBucketVersioning' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'PutBucketVersioning' with the minimum fields required to make a request.
 --
--- * 'pbvBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pbvContentMD5' @::@ 'Maybe' 'Text'
+-- * 'pbvMFA'
 --
--- * 'pbvMFA' @::@ 'Maybe' 'Text'
+-- * 'pbvContentMD5'
 --
--- * 'pbvVersioningConfiguration' @::@ 'VersioningConfiguration'
+-- * 'pbvBucket'
 --
-putBucketVersioning :: Text -- ^ 'pbvBucket'
-                    -> VersioningConfiguration -- ^ 'pbvVersioningConfiguration'
-                    -> PutBucketVersioning
-putBucketVersioning p1 p2 = PutBucketVersioning
-    { _pbvBucket                  = p1
-    , _pbvVersioningConfiguration = p2
-    , _pbvContentMD5              = Nothing
-    , _pbvMFA                     = Nothing
+-- * 'pbvVersioningConfiguration'
+putBucketVersioning
+    :: BucketName -- ^ 'pbvBucket'
+    -> VersioningConfiguration -- ^ 'pbvVersioningConfiguration'
+    -> PutBucketVersioning
+putBucketVersioning pBucket_ pVersioningConfiguration_ =
+    PutBucketVersioning'
+    { _pbvMFA = Nothing
+    , _pbvContentMD5 = Nothing
+    , _pbvBucket = pBucket_
+    , _pbvVersioningConfiguration = pVersioningConfiguration_
     }
 
-pbvBucket :: Lens' PutBucketVersioning Text
-pbvBucket = lens _pbvBucket (\s a -> s { _pbvBucket = a })
+-- | The concatenation of the authentication device\'s serial number, a
+-- space, and the value that is displayed on your authentication device.
+pbvMFA :: Lens' PutBucketVersioning (Maybe Text)
+pbvMFA = lens _pbvMFA (\ s a -> s{_pbvMFA = a});
 
+-- | Undocumented member.
 pbvContentMD5 :: Lens' PutBucketVersioning (Maybe Text)
-pbvContentMD5 = lens _pbvContentMD5 (\s a -> s { _pbvContentMD5 = a })
+pbvContentMD5 = lens _pbvContentMD5 (\ s a -> s{_pbvContentMD5 = a});
 
--- | The concatenation of the authentication device's serial number, a space, and
--- the value that is displayed on your authentication device.
-pbvMFA :: Lens' PutBucketVersioning (Maybe Text)
-pbvMFA = lens _pbvMFA (\s a -> s { _pbvMFA = a })
+-- | Undocumented member.
+pbvBucket :: Lens' PutBucketVersioning BucketName
+pbvBucket = lens _pbvBucket (\ s a -> s{_pbvBucket = a});
 
+-- | Undocumented member.
 pbvVersioningConfiguration :: Lens' PutBucketVersioning VersioningConfiguration
-pbvVersioningConfiguration =
-    lens _pbvVersioningConfiguration
-        (\s a -> s { _pbvVersioningConfiguration = a })
-
-data PutBucketVersioningResponse = PutBucketVersioningResponse
-    deriving (Eq, Ord, Read, Show, Generic)
-
--- | 'PutBucketVersioningResponse' constructor.
-putBucketVersioningResponse :: PutBucketVersioningResponse
-putBucketVersioningResponse = PutBucketVersioningResponse
+pbvVersioningConfiguration = lens _pbvVersioningConfiguration (\ s a -> s{_pbvVersioningConfiguration = a});
 
-instance ToPath PutBucketVersioning where
-    toPath PutBucketVersioning{..} = mconcat
-        [ "/"
-        , toText _pbvBucket
-        ]
+instance AWSRequest PutBucketVersioning where
+        type Sv PutBucketVersioning = S3
+        type Rs PutBucketVersioning =
+             PutBucketVersioningResponse
+        request = putXML
+        response = receiveNull PutBucketVersioningResponse'
 
-instance ToQuery PutBucketVersioning where
-    toQuery = const "versioning"
+instance ToElement PutBucketVersioning where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}VersioningConfiguration"
+              .
+              _pbvVersioningConfiguration
 
 instance ToHeaders PutBucketVersioning where
-    toHeaders PutBucketVersioning{..} = mconcat
-        [ "Content-MD5" =: _pbvContentMD5
-        , "x-amz-mfa"   =: _pbvMFA
-        ]
+        toHeaders PutBucketVersioning'{..}
+          = mconcat
+              ["x-amz-mfa" =# _pbvMFA,
+               "Content-MD5" =# _pbvContentMD5]
 
-instance ToXMLRoot PutBucketVersioning where
-    toXMLRoot = extractRoot ns . toXML . _pbvVersioningConfiguration
+instance ToPath PutBucketVersioning where
+        toPath PutBucketVersioning'{..}
+          = mconcat ["/", toBS _pbvBucket]
 
-instance ToXML PutBucketVersioning
+instance ToQuery PutBucketVersioning where
+        toQuery = const (mconcat ["versioning"])
 
-instance AWSRequest PutBucketVersioning where
-    type Sv PutBucketVersioning = S3
-    type Rs PutBucketVersioning = PutBucketVersioningResponse
+-- | /See:/ 'putBucketVersioningResponse' smart constructor.
+data PutBucketVersioningResponse =
+    PutBucketVersioningResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = put
-    response = nullResponse PutBucketVersioningResponse
+-- | Creates a value of 'PutBucketVersioningResponse' with the minimum fields required to make a request.
+--
+putBucketVersioningResponse
+    :: PutBucketVersioningResponse
+putBucketVersioningResponse = PutBucketVersioningResponse'
diff --git a/gen/Network/AWS/S3/PutBucketWebsite.hs b/gen/Network/AWS/S3/PutBucketWebsite.hs
--- a/gen/Network/AWS/S3/PutBucketWebsite.hs
+++ b/gen/Network/AWS/S3/PutBucketWebsite.hs
@@ -1,116 +1,117 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.PutBucketWebsite
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Set the website configuration for a bucket.
+-- Set the website configuration for a bucket.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketWebsite.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketWebsite.html AWS API Reference> for PutBucketWebsite.
 module Network.AWS.S3.PutBucketWebsite
     (
-    -- * Request
-      PutBucketWebsite
-    -- ** Request constructor
-    , putBucketWebsite
-    -- ** Request lenses
-    , pbwBucket
+    -- * Creating a Request
+      putBucketWebsite
+    , PutBucketWebsite
+    -- * Request Lenses
     , pbwContentMD5
+    , pbwBucket
     , pbwWebsiteConfiguration
 
-    -- * Response
-    , PutBucketWebsiteResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , putBucketWebsiteResponse
+    , PutBucketWebsiteResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data PutBucketWebsite = PutBucketWebsite
-    { _pbwBucket               :: Text
-    , _pbwContentMD5           :: Maybe Text
-    , _pbwWebsiteConfiguration :: WebsiteConfiguration
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'putBucketWebsite' smart constructor.
+data PutBucketWebsite = PutBucketWebsite'
+    { _pbwContentMD5           :: !(Maybe Text)
+    , _pbwBucket               :: !BucketName
+    , _pbwWebsiteConfiguration :: !WebsiteConfiguration
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'PutBucketWebsite' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'PutBucketWebsite' with the minimum fields required to make a request.
 --
--- * 'pbwBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pbwContentMD5' @::@ 'Maybe' 'Text'
+-- * 'pbwContentMD5'
 --
--- * 'pbwWebsiteConfiguration' @::@ 'WebsiteConfiguration'
+-- * 'pbwBucket'
 --
-putBucketWebsite :: Text -- ^ 'pbwBucket'
-                 -> WebsiteConfiguration -- ^ 'pbwWebsiteConfiguration'
-                 -> PutBucketWebsite
-putBucketWebsite p1 p2 = PutBucketWebsite
-    { _pbwBucket               = p1
-    , _pbwWebsiteConfiguration = p2
-    , _pbwContentMD5           = Nothing
+-- * 'pbwWebsiteConfiguration'
+putBucketWebsite
+    :: BucketName -- ^ 'pbwBucket'
+    -> WebsiteConfiguration -- ^ 'pbwWebsiteConfiguration'
+    -> PutBucketWebsite
+putBucketWebsite pBucket_ pWebsiteConfiguration_ =
+    PutBucketWebsite'
+    { _pbwContentMD5 = Nothing
+    , _pbwBucket = pBucket_
+    , _pbwWebsiteConfiguration = pWebsiteConfiguration_
     }
 
-pbwBucket :: Lens' PutBucketWebsite Text
-pbwBucket = lens _pbwBucket (\s a -> s { _pbwBucket = a })
-
+-- | Undocumented member.
 pbwContentMD5 :: Lens' PutBucketWebsite (Maybe Text)
-pbwContentMD5 = lens _pbwContentMD5 (\s a -> s { _pbwContentMD5 = a })
-
-pbwWebsiteConfiguration :: Lens' PutBucketWebsite WebsiteConfiguration
-pbwWebsiteConfiguration =
-    lens _pbwWebsiteConfiguration (\s a -> s { _pbwWebsiteConfiguration = a })
+pbwContentMD5 = lens _pbwContentMD5 (\ s a -> s{_pbwContentMD5 = a});
 
-data PutBucketWebsiteResponse = PutBucketWebsiteResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+-- | Undocumented member.
+pbwBucket :: Lens' PutBucketWebsite BucketName
+pbwBucket = lens _pbwBucket (\ s a -> s{_pbwBucket = a});
 
--- | 'PutBucketWebsiteResponse' constructor.
-putBucketWebsiteResponse :: PutBucketWebsiteResponse
-putBucketWebsiteResponse = PutBucketWebsiteResponse
+-- | Undocumented member.
+pbwWebsiteConfiguration :: Lens' PutBucketWebsite WebsiteConfiguration
+pbwWebsiteConfiguration = lens _pbwWebsiteConfiguration (\ s a -> s{_pbwWebsiteConfiguration = a});
 
-instance ToPath PutBucketWebsite where
-    toPath PutBucketWebsite{..} = mconcat
-        [ "/"
-        , toText _pbwBucket
-        ]
+instance AWSRequest PutBucketWebsite where
+        type Sv PutBucketWebsite = S3
+        type Rs PutBucketWebsite = PutBucketWebsiteResponse
+        request = putXML
+        response = receiveNull PutBucketWebsiteResponse'
 
-instance ToQuery PutBucketWebsite where
-    toQuery = const "website"
+instance ToElement PutBucketWebsite where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}WebsiteConfiguration"
+              .
+              _pbwWebsiteConfiguration
 
 instance ToHeaders PutBucketWebsite where
-    toHeaders PutBucketWebsite{..} = mconcat
-        [ "Content-MD5" =: _pbwContentMD5
-        ]
+        toHeaders PutBucketWebsite'{..}
+          = mconcat ["Content-MD5" =# _pbwContentMD5]
 
-instance ToXMLRoot PutBucketWebsite where
-    toXMLRoot = extractRoot ns . toXML . _pbwWebsiteConfiguration
+instance ToPath PutBucketWebsite where
+        toPath PutBucketWebsite'{..}
+          = mconcat ["/", toBS _pbwBucket]
 
-instance ToXML PutBucketWebsite
+instance ToQuery PutBucketWebsite where
+        toQuery = const (mconcat ["website"])
 
-instance AWSRequest PutBucketWebsite where
-    type Sv PutBucketWebsite = S3
-    type Rs PutBucketWebsite = PutBucketWebsiteResponse
+-- | /See:/ 'putBucketWebsiteResponse' smart constructor.
+data PutBucketWebsiteResponse =
+    PutBucketWebsiteResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = put
-    response = nullResponse PutBucketWebsiteResponse
+-- | Creates a value of 'PutBucketWebsiteResponse' with the minimum fields required to make a request.
+--
+putBucketWebsiteResponse
+    :: PutBucketWebsiteResponse
+putBucketWebsiteResponse = PutBucketWebsiteResponse'
diff --git a/gen/Network/AWS/S3/PutObject.hs b/gen/Network/AWS/S3/PutObject.hs
--- a/gen/Network/AWS/S3/PutObject.hs
+++ b/gen/Network/AWS/S3/PutObject.hs
@@ -1,455 +1,467 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.PutObject
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Adds an object to a bucket.
+-- Adds an object to a bucket.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/PutObject.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/PutObject.html AWS API Reference> for PutObject.
 module Network.AWS.S3.PutObject
     (
-    -- * Request
-      PutObject
-    -- ** Request constructor
-    , putObject
-    -- ** Request lenses
-    , poACL
-    , poBody
-    , poBucket
-    , poCacheControl
-    , poContentDisposition
-    , poContentEncoding
-    , poContentLanguage
+    -- * Creating a Request
+      putObject
+    , PutObject
+    -- * Request Lenses
     , poContentLength
-    , poContentMD5
-    , poContentType
     , poExpires
-    , poGrantFullControl
-    , poGrantRead
-    , poGrantReadACP
-    , poGrantWriteACP
-    , poKey
-    , poMetadata
-    , poRequestPayer
     , poSSECustomerAlgorithm
+    , poGrantReadACP
     , poSSECustomerKey
-    , poSSECustomerKeyMD5
+    , poRequestPayer
+    , poGrantWriteACP
+    , poWebsiteRedirectLocation
+    , poGrantRead
+    , poStorageClass
+    , poContentEncoding
     , poSSEKMSKeyId
+    , poGrantFullControl
+    , poSSECustomerKeyMD5
+    , poMetadata
+    , poContentMD5
+    , poCacheControl
+    , poContentLanguage
+    , poACL
+    , poContentDisposition
     , poServerSideEncryption
-    , poStorageClass
-    , poWebsiteRedirectLocation
+    , poContentType
+    , poBucket
+    , poKey
+    , poBody
 
-    -- * Response
-    , PutObjectResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , putObjectResponse
-    -- ** Response lenses
-    , porETag
-    , porExpiration
-    , porRequestCharged
-    , porSSECustomerAlgorithm
-    , porSSECustomerKeyMD5
-    , porSSEKMSKeyId
-    , porServerSideEncryption
-    , porVersionId
+    , PutObjectResponse
+    -- * Response Lenses
+    , porsVersionId
+    , porsETag
+    , porsRequestCharged
+    , porsExpiration
+    , porsSSECustomerAlgorithm
+    , porsSSEKMSKeyId
+    , porsSSECustomerKeyMD5
+    , porsServerSideEncryption
+    , porsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data PutObject = PutObject
-    { _poACL                     :: Maybe ObjectCannedACL
-    , _poBody                    :: RqBody
-    , _poBucket                  :: Text
-    , _poCacheControl            :: Maybe Text
-    , _poContentDisposition      :: Maybe Text
-    , _poContentEncoding         :: Maybe Text
-    , _poContentLanguage         :: Maybe Text
-    , _poContentLength           :: Maybe Int
-    , _poContentMD5              :: Maybe Text
-    , _poContentType             :: Maybe Text
-    , _poExpires                 :: Maybe RFC822
-    , _poGrantFullControl        :: Maybe Text
-    , _poGrantRead               :: Maybe Text
-    , _poGrantReadACP            :: Maybe Text
-    , _poGrantWriteACP           :: Maybe Text
-    , _poKey                     :: Text
-    , _poMetadata                :: Map (CI Text) Text
-    , _poRequestPayer            :: Maybe RequestPayer
-    , _poSSECustomerAlgorithm    :: Maybe Text
-    , _poSSECustomerKey          :: Maybe (Sensitive Text)
-    , _poSSECustomerKeyMD5       :: Maybe Text
-    , _poSSEKMSKeyId             :: Maybe (Sensitive Text)
-    , _poServerSideEncryption    :: Maybe ServerSideEncryption
-    , _poStorageClass            :: Maybe StorageClass
-    , _poWebsiteRedirectLocation :: Maybe Text
-    } deriving (Show)
+-- | /See:/ 'putObject' smart constructor.
+data PutObject = PutObject'
+    { _poContentLength           :: !(Maybe Int)
+    , _poExpires                 :: !(Maybe RFC822)
+    , _poSSECustomerAlgorithm    :: !(Maybe Text)
+    , _poGrantReadACP            :: !(Maybe Text)
+    , _poSSECustomerKey          :: !(Maybe (Sensitive Text))
+    , _poRequestPayer            :: !(Maybe RequestPayer)
+    , _poGrantWriteACP           :: !(Maybe Text)
+    , _poWebsiteRedirectLocation :: !(Maybe Text)
+    , _poGrantRead               :: !(Maybe Text)
+    , _poStorageClass            :: !(Maybe StorageClass)
+    , _poContentEncoding         :: !(Maybe Text)
+    , _poSSEKMSKeyId             :: !(Maybe (Sensitive Text))
+    , _poGrantFullControl        :: !(Maybe Text)
+    , _poSSECustomerKeyMD5       :: !(Maybe Text)
+    , _poMetadata                :: !(Map Text Text)
+    , _poContentMD5              :: !(Maybe Text)
+    , _poCacheControl            :: !(Maybe Text)
+    , _poContentLanguage         :: !(Maybe Text)
+    , _poACL                     :: !(Maybe ObjectCannedACL)
+    , _poContentDisposition      :: !(Maybe Text)
+    , _poServerSideEncryption    :: !(Maybe ServerSideEncryption)
+    , _poContentType             :: !(Maybe Text)
+    , _poBucket                  :: !BucketName
+    , _poKey                     :: !ObjectKey
+    , _poBody                    :: !RqBody
+    } deriving (Show,Generic)
 
--- | 'PutObject' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'PutObject' with the minimum fields required to make a request.
 --
--- * 'poACL' @::@ 'Maybe' 'ObjectCannedACL'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'poBody' @::@ 'RqBody'
+-- * 'poContentLength'
 --
--- * 'poBucket' @::@ 'Text'
+-- * 'poExpires'
 --
--- * 'poCacheControl' @::@ 'Maybe' 'Text'
+-- * 'poSSECustomerAlgorithm'
 --
--- * 'poContentDisposition' @::@ 'Maybe' 'Text'
+-- * 'poGrantReadACP'
 --
--- * 'poContentEncoding' @::@ 'Maybe' 'Text'
+-- * 'poSSECustomerKey'
 --
--- * 'poContentLanguage' @::@ 'Maybe' 'Text'
+-- * 'poRequestPayer'
 --
--- * 'poContentLength' @::@ 'Maybe' 'Int'
+-- * 'poGrantWriteACP'
 --
--- * 'poContentMD5' @::@ 'Maybe' 'Text'
+-- * 'poWebsiteRedirectLocation'
 --
--- * 'poContentType' @::@ 'Maybe' 'Text'
+-- * 'poGrantRead'
 --
--- * 'poExpires' @::@ 'Maybe' 'UTCTime'
+-- * 'poStorageClass'
 --
--- * 'poGrantFullControl' @::@ 'Maybe' 'Text'
+-- * 'poContentEncoding'
 --
--- * 'poGrantRead' @::@ 'Maybe' 'Text'
+-- * 'poSSEKMSKeyId'
 --
--- * 'poGrantReadACP' @::@ 'Maybe' 'Text'
+-- * 'poGrantFullControl'
 --
--- * 'poGrantWriteACP' @::@ 'Maybe' 'Text'
+-- * 'poSSECustomerKeyMD5'
 --
--- * 'poKey' @::@ 'Text'
+-- * 'poMetadata'
 --
--- * 'poMetadata' @::@ 'HashMap' ('CI' 'Text') 'Text'
+-- * 'poContentMD5'
 --
--- * 'poRequestPayer' @::@ 'Maybe' 'RequestPayer'
+-- * 'poCacheControl'
 --
--- * 'poSSECustomerAlgorithm' @::@ 'Maybe' 'Text'
+-- * 'poContentLanguage'
 --
--- * 'poSSECustomerKey' @::@ 'Maybe' 'Text'
+-- * 'poACL'
 --
--- * 'poSSECustomerKeyMD5' @::@ 'Maybe' 'Text'
+-- * 'poContentDisposition'
 --
--- * 'poSSEKMSKeyId' @::@ 'Maybe' 'Text'
+-- * 'poServerSideEncryption'
 --
--- * 'poServerSideEncryption' @::@ 'Maybe' 'ServerSideEncryption'
+-- * 'poContentType'
 --
--- * 'poStorageClass' @::@ 'Maybe' 'StorageClass'
+-- * 'poBucket'
 --
--- * 'poWebsiteRedirectLocation' @::@ 'Maybe' 'Text'
+-- * 'poKey'
 --
-putObject :: RqBody -- ^ 'poBody'
-          -> Text -- ^ 'poBucket'
-          -> Text -- ^ 'poKey'
-          -> PutObject
-putObject p1 p2 p3 = PutObject
-    { _poBody                    = p1
-    , _poBucket                  = p2
-    , _poKey                     = p3
-    , _poACL                     = Nothing
-    , _poCacheControl            = Nothing
-    , _poContentDisposition      = Nothing
-    , _poContentEncoding         = Nothing
-    , _poContentLanguage         = Nothing
-    , _poContentLength           = Nothing
-    , _poContentMD5              = Nothing
-    , _poContentType             = Nothing
-    , _poExpires                 = Nothing
-    , _poGrantFullControl        = Nothing
-    , _poGrantRead               = Nothing
-    , _poGrantReadACP            = Nothing
-    , _poGrantWriteACP           = Nothing
-    , _poMetadata                = mempty
-    , _poServerSideEncryption    = Nothing
-    , _poStorageClass            = Nothing
+-- * 'poBody'
+putObject
+    :: BucketName -- ^ 'poBucket'
+    -> ObjectKey -- ^ 'poKey'
+    -> RqBody -- ^ 'poBody'
+    -> PutObject
+putObject pBucket_ pKey_ pBody_ =
+    PutObject'
+    { _poContentLength = Nothing
+    , _poExpires = Nothing
+    , _poSSECustomerAlgorithm = Nothing
+    , _poGrantReadACP = Nothing
+    , _poSSECustomerKey = Nothing
+    , _poRequestPayer = Nothing
+    , _poGrantWriteACP = Nothing
     , _poWebsiteRedirectLocation = Nothing
-    , _poSSECustomerAlgorithm    = Nothing
-    , _poSSECustomerKey          = Nothing
-    , _poSSECustomerKeyMD5       = Nothing
-    , _poSSEKMSKeyId             = Nothing
-    , _poRequestPayer            = Nothing
+    , _poGrantRead = Nothing
+    , _poStorageClass = Nothing
+    , _poContentEncoding = Nothing
+    , _poSSEKMSKeyId = Nothing
+    , _poGrantFullControl = Nothing
+    , _poSSECustomerKeyMD5 = Nothing
+    , _poMetadata = mempty
+    , _poContentMD5 = Nothing
+    , _poCacheControl = Nothing
+    , _poContentLanguage = Nothing
+    , _poACL = Nothing
+    , _poContentDisposition = Nothing
+    , _poServerSideEncryption = Nothing
+    , _poContentType = Nothing
+    , _poBucket = pBucket_
+    , _poKey = pKey_
+    , _poBody = pBody_
     }
 
--- | The canned ACL to apply to the object.
-poACL :: Lens' PutObject (Maybe ObjectCannedACL)
-poACL = lens _poACL (\s a -> s { _poACL = a })
-
--- | Object data.
-poBody :: Lens' PutObject RqBody
-poBody = lens _poBody (\s a -> s { _poBody = a })
-
-poBucket :: Lens' PutObject Text
-poBucket = lens _poBucket (\s a -> s { _poBucket = a })
-
--- | Specifies caching behavior along the request/reply chain.
-poCacheControl :: Lens' PutObject (Maybe Text)
-poCacheControl = lens _poCacheControl (\s a -> s { _poCacheControl = a })
-
--- | Specifies presentational information for the object.
-poContentDisposition :: Lens' PutObject (Maybe Text)
-poContentDisposition =
-    lens _poContentDisposition (\s a -> s { _poContentDisposition = a })
+-- | Size of the body in bytes. This parameter is useful when the size of the
+-- body cannot be determined automatically.
+poContentLength :: Lens' PutObject (Maybe Int)
+poContentLength = lens _poContentLength (\ s a -> s{_poContentLength = a});
 
--- | Specifies what content encodings have been applied to the object and thus
--- what decoding mechanisms must be applied to obtain the media-type referenced
--- by the Content-Type header field.
-poContentEncoding :: Lens' PutObject (Maybe Text)
-poContentEncoding =
-    lens _poContentEncoding (\s a -> s { _poContentEncoding = a })
+-- | The date and time at which the object is no longer cacheable.
+poExpires :: Lens' PutObject (Maybe UTCTime)
+poExpires = lens _poExpires (\ s a -> s{_poExpires = a}) . mapping _Time;
 
--- | The language the content is in.
-poContentLanguage :: Lens' PutObject (Maybe Text)
-poContentLanguage =
-    lens _poContentLanguage (\s a -> s { _poContentLanguage = a })
+-- | Specifies the algorithm to use to when encrypting the object (e.g.,
+-- AES256).
+poSSECustomerAlgorithm :: Lens' PutObject (Maybe Text)
+poSSECustomerAlgorithm = lens _poSSECustomerAlgorithm (\ s a -> s{_poSSECustomerAlgorithm = a});
 
--- | Size of the body in bytes. This parameter is useful when the size of the body
--- cannot be determined automatically.
-poContentLength :: Lens' PutObject (Maybe Int)
-poContentLength = lens _poContentLength (\s a -> s { _poContentLength = a })
+-- | Allows grantee to read the object ACL.
+poGrantReadACP :: Lens' PutObject (Maybe Text)
+poGrantReadACP = lens _poGrantReadACP (\ s a -> s{_poGrantReadACP = a});
 
-poContentMD5 :: Lens' PutObject (Maybe Text)
-poContentMD5 = lens _poContentMD5 (\s a -> s { _poContentMD5 = a })
+-- | Specifies the customer-provided encryption key for Amazon S3 to use in
+-- encrypting data. This value is used to store the object and then it is
+-- discarded; Amazon does not store the encryption key. The key must be
+-- appropriate for use with the algorithm specified in the
+-- x-amz-server-side​-encryption​-customer-algorithm header.
+poSSECustomerKey :: Lens' PutObject (Maybe Text)
+poSSECustomerKey = lens _poSSECustomerKey (\ s a -> s{_poSSECustomerKey = a}) . mapping _Sensitive;
 
--- | A standard MIME type describing the format of the object data.
-poContentType :: Lens' PutObject (Maybe Text)
-poContentType = lens _poContentType (\s a -> s { _poContentType = a })
+-- | Undocumented member.
+poRequestPayer :: Lens' PutObject (Maybe RequestPayer)
+poRequestPayer = lens _poRequestPayer (\ s a -> s{_poRequestPayer = a});
 
--- | The date and time at which the object is no longer cacheable.
-poExpires :: Lens' PutObject (Maybe UTCTime)
-poExpires = lens _poExpires (\s a -> s { _poExpires = a }) . mapping _Time
+-- | Allows grantee to write the ACL for the applicable object.
+poGrantWriteACP :: Lens' PutObject (Maybe Text)
+poGrantWriteACP = lens _poGrantWriteACP (\ s a -> s{_poGrantWriteACP = a});
 
--- | Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.
-poGrantFullControl :: Lens' PutObject (Maybe Text)
-poGrantFullControl =
-    lens _poGrantFullControl (\s a -> s { _poGrantFullControl = a })
+-- | If the bucket is configured as a website, redirects requests for this
+-- object to another object in the same bucket or to an external URL.
+-- Amazon S3 stores the value of this header in the object metadata.
+poWebsiteRedirectLocation :: Lens' PutObject (Maybe Text)
+poWebsiteRedirectLocation = lens _poWebsiteRedirectLocation (\ s a -> s{_poWebsiteRedirectLocation = a});
 
 -- | Allows grantee to read the object data and its metadata.
 poGrantRead :: Lens' PutObject (Maybe Text)
-poGrantRead = lens _poGrantRead (\s a -> s { _poGrantRead = a })
+poGrantRead = lens _poGrantRead (\ s a -> s{_poGrantRead = a});
 
--- | Allows grantee to read the object ACL.
-poGrantReadACP :: Lens' PutObject (Maybe Text)
-poGrantReadACP = lens _poGrantReadACP (\s a -> s { _poGrantReadACP = a })
+-- | The type of storage to use for the object. Defaults to \'STANDARD\'.
+poStorageClass :: Lens' PutObject (Maybe StorageClass)
+poStorageClass = lens _poStorageClass (\ s a -> s{_poStorageClass = a});
 
--- | Allows grantee to write the ACL for the applicable object.
-poGrantWriteACP :: Lens' PutObject (Maybe Text)
-poGrantWriteACP = lens _poGrantWriteACP (\s a -> s { _poGrantWriteACP = a })
+-- | Specifies what content encodings have been applied to the object and
+-- thus what decoding mechanisms must be applied to obtain the media-type
+-- referenced by the Content-Type header field.
+poContentEncoding :: Lens' PutObject (Maybe Text)
+poContentEncoding = lens _poContentEncoding (\ s a -> s{_poContentEncoding = a});
 
-poKey :: Lens' PutObject Text
-poKey = lens _poKey (\s a -> s { _poKey = a })
+-- | Specifies the AWS KMS key ID to use for object encryption. All GET and
+-- PUT requests for an object protected by AWS KMS will fail if not made
+-- via SSL or using SigV4. Documentation on configuring any of the
+-- officially supported AWS SDKs and CLI can be found at
+-- http:\/\/docs.aws.amazon.com\/AmazonS3\/latest\/dev\/UsingAWSSDK.html#specify-signature-version
+poSSEKMSKeyId :: Lens' PutObject (Maybe Text)
+poSSEKMSKeyId = lens _poSSEKMSKeyId (\ s a -> s{_poSSEKMSKeyId = a}) . mapping _Sensitive;
 
+-- | Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
+-- object.
+poGrantFullControl :: Lens' PutObject (Maybe Text)
+poGrantFullControl = lens _poGrantFullControl (\ s a -> s{_poGrantFullControl = a});
+
+-- | Specifies the 128-bit MD5 digest of the encryption key according to RFC
+-- 1321. Amazon S3 uses this header for a message integrity check to ensure
+-- the encryption key was transmitted without error.
+poSSECustomerKeyMD5 :: Lens' PutObject (Maybe Text)
+poSSECustomerKeyMD5 = lens _poSSECustomerKeyMD5 (\ s a -> s{_poSSECustomerKeyMD5 = a});
+
 -- | A map of metadata to store with the object in S3.
-poMetadata :: Lens' PutObject (HashMap (CI Text) Text)
-poMetadata = lens _poMetadata (\s a -> s { _poMetadata = a }) . _Map
+poMetadata :: Lens' PutObject (HashMap Text Text)
+poMetadata = lens _poMetadata (\ s a -> s{_poMetadata = a}) . _Map;
 
-poRequestPayer :: Lens' PutObject (Maybe RequestPayer)
-poRequestPayer = lens _poRequestPayer (\s a -> s { _poRequestPayer = a })
+-- | Undocumented member.
+poContentMD5 :: Lens' PutObject (Maybe Text)
+poContentMD5 = lens _poContentMD5 (\ s a -> s{_poContentMD5 = a});
 
--- | Specifies the algorithm to use to when encrypting the object (e.g., AES256,
--- aws:kms).
-poSSECustomerAlgorithm :: Lens' PutObject (Maybe Text)
-poSSECustomerAlgorithm =
-    lens _poSSECustomerAlgorithm (\s a -> s { _poSSECustomerAlgorithm = a })
+-- | Specifies caching behavior along the request\/reply chain.
+poCacheControl :: Lens' PutObject (Maybe Text)
+poCacheControl = lens _poCacheControl (\ s a -> s{_poCacheControl = a});
 
--- | Specifies the customer-provided encryption key for Amazon S3 to use in
--- encrypting data. This value is used to store the object and then it is
--- discarded; Amazon does not store the encryption key. The key must be
--- appropriate for use with the algorithm specified in the
--- x-amz-server-side​-encryption​-customer-algorithm header.
-poSSECustomerKey :: Lens' PutObject (Maybe Text)
-poSSECustomerKey = lens _poSSECustomerKey (\s a -> s { _poSSECustomerKey = a }) . mapping _Sensitive
+-- | The language the content is in.
+poContentLanguage :: Lens' PutObject (Maybe Text)
+poContentLanguage = lens _poContentLanguage (\ s a -> s{_poContentLanguage = a});
 
--- | Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
--- Amazon S3 uses this header for a message integrity check to ensure the
--- encryption key was transmitted without error.
-poSSECustomerKeyMD5 :: Lens' PutObject (Maybe Text)
-poSSECustomerKeyMD5 =
-    lens _poSSECustomerKeyMD5 (\s a -> s { _poSSECustomerKeyMD5 = a })
+-- | The canned ACL to apply to the object.
+poACL :: Lens' PutObject (Maybe ObjectCannedACL)
+poACL = lens _poACL (\ s a -> s{_poACL = a});
 
--- | Specifies the AWS KMS key ID to use for object encryption. All GET and PUT
--- requests for an object protected by AWS KMS will fail if not made via SSL or
--- using SigV4. Documentation on configuring any of the officially supported AWS
--- SDKs and CLI can be found at
--- http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version
-poSSEKMSKeyId :: Lens' PutObject (Maybe Text)
-poSSEKMSKeyId = lens _poSSEKMSKeyId (\s a -> s { _poSSEKMSKeyId = a }) . mapping _Sensitive
+-- | Specifies presentational information for the object.
+poContentDisposition :: Lens' PutObject (Maybe Text)
+poContentDisposition = lens _poContentDisposition (\ s a -> s{_poContentDisposition = a});
 
 -- | The Server-side encryption algorithm used when storing this object in S3
 -- (e.g., AES256, aws:kms).
 poServerSideEncryption :: Lens' PutObject (Maybe ServerSideEncryption)
-poServerSideEncryption =
-    lens _poServerSideEncryption (\s a -> s { _poServerSideEncryption = a })
+poServerSideEncryption = lens _poServerSideEncryption (\ s a -> s{_poServerSideEncryption = a});
 
--- | The type of storage to use for the object. Defaults to 'STANDARD'.
-poStorageClass :: Lens' PutObject (Maybe StorageClass)
-poStorageClass = lens _poStorageClass (\s a -> s { _poStorageClass = a })
+-- | A standard MIME type describing the format of the object data.
+poContentType :: Lens' PutObject (Maybe Text)
+poContentType = lens _poContentType (\ s a -> s{_poContentType = a});
 
--- | If the bucket is configured as a website, redirects requests for this object
--- to another object in the same bucket or to an external URL. Amazon S3 stores
--- the value of this header in the object metadata.
-poWebsiteRedirectLocation :: Lens' PutObject (Maybe Text)
-poWebsiteRedirectLocation =
-    lens _poWebsiteRedirectLocation
-        (\s a -> s { _poWebsiteRedirectLocation = a })
+-- | Undocumented member.
+poBucket :: Lens' PutObject BucketName
+poBucket = lens _poBucket (\ s a -> s{_poBucket = a});
 
-data PutObjectResponse = PutObjectResponse
-    { _porETag                 :: Maybe Text
-    , _porExpiration           :: Maybe Text
-    , _porRequestCharged       :: Maybe RequestCharged
-    , _porSSECustomerAlgorithm :: Maybe Text
-    , _porSSECustomerKeyMD5    :: Maybe Text
-    , _porSSEKMSKeyId          :: Maybe (Sensitive Text)
-    , _porServerSideEncryption :: Maybe ServerSideEncryption
-    , _porVersionId            :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | Undocumented member.
+poKey :: Lens' PutObject ObjectKey
+poKey = lens _poKey (\ s a -> s{_poKey = a});
 
--- | 'PutObjectResponse' constructor.
+-- | Object data.
+poBody :: Lens' PutObject RqBody
+poBody = lens _poBody (\ s a -> s{_poBody = a});
+
+instance AWSRequest PutObject where
+        type Sv PutObject = S3
+        type Rs PutObject = PutObjectResponse
+        request = putBody
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 PutObjectResponse' <$>
+                   (h .#? "x-amz-version-id") <*> (h .#? "ETag") <*>
+                     (h .#? "x-amz-request-charged")
+                     <*> (h .#? "x-amz-expiration")
+                     <*>
+                     (h .#?
+                        "x-amz-server-side-encryption-customer-algorithm")
+                     <*>
+                     (h .#? "x-amz-server-side-encryption-aws-kms-key-id")
+                     <*>
+                     (h .#?
+                        "x-amz-server-side-encryption-customer-key-MD5")
+                     <*> (h .#? "x-amz-server-side-encryption")
+                     <*> (pure (fromEnum s)))
+
+instance ToBody PutObject where
+        toBody = _poBody
+
+instance ToHeaders PutObject where
+        toHeaders PutObject'{..}
+          = mconcat
+              ["Content-Length" =# _poContentLength,
+               "Expires" =# _poExpires,
+               "x-amz-server-side-encryption-customer-algorithm" =#
+                 _poSSECustomerAlgorithm,
+               "x-amz-grant-read-acp" =# _poGrantReadACP,
+               "x-amz-server-side-encryption-customer-key" =#
+                 _poSSECustomerKey,
+               "x-amz-request-payer" =# _poRequestPayer,
+               "x-amz-grant-write-acp" =# _poGrantWriteACP,
+               "x-amz-website-redirect-location" =#
+                 _poWebsiteRedirectLocation,
+               "x-amz-grant-read" =# _poGrantRead,
+               "x-amz-storage-class" =# _poStorageClass,
+               "Content-Encoding" =# _poContentEncoding,
+               "x-amz-server-side-encryption-aws-kms-key-id" =#
+                 _poSSEKMSKeyId,
+               "x-amz-grant-full-control" =# _poGrantFullControl,
+               "x-amz-server-side-encryption-customer-key-MD5" =#
+                 _poSSECustomerKeyMD5,
+               "x-amz-meta-" =# _poMetadata,
+               "Content-MD5" =# _poContentMD5,
+               "Cache-Control" =# _poCacheControl,
+               "Content-Language" =# _poContentLanguage,
+               "x-amz-acl" =# _poACL,
+               "Content-Disposition" =# _poContentDisposition,
+               "x-amz-server-side-encryption" =#
+                 _poServerSideEncryption,
+               "Content-Type" =# _poContentType]
+
+instance ToPath PutObject where
+        toPath PutObject'{..}
+          = mconcat ["/", toBS _poBucket, "/", toBS _poKey]
+
+instance ToQuery PutObject where
+        toQuery = const mempty
+
+-- | /See:/ 'putObjectResponse' smart constructor.
+data PutObjectResponse = PutObjectResponse'
+    { _porsVersionId            :: !(Maybe ObjectVersionId)
+    , _porsETag                 :: !(Maybe ETag)
+    , _porsRequestCharged       :: !(Maybe RequestCharged)
+    , _porsExpiration           :: !(Maybe Text)
+    , _porsSSECustomerAlgorithm :: !(Maybe Text)
+    , _porsSSEKMSKeyId          :: !(Maybe (Sensitive Text))
+    , _porsSSECustomerKeyMD5    :: !(Maybe Text)
+    , _porsServerSideEncryption :: !(Maybe ServerSideEncryption)
+    , _porsStatus               :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutObjectResponse' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'porETag' @::@ 'Maybe' 'Text'
+-- * 'porsVersionId'
 --
--- * 'porExpiration' @::@ 'Maybe' 'Text'
+-- * 'porsETag'
 --
--- * 'porRequestCharged' @::@ 'Maybe' 'RequestCharged'
+-- * 'porsRequestCharged'
 --
--- * 'porSSECustomerAlgorithm' @::@ 'Maybe' 'Text'
+-- * 'porsExpiration'
 --
--- * 'porSSECustomerKeyMD5' @::@ 'Maybe' 'Text'
+-- * 'porsSSECustomerAlgorithm'
 --
--- * 'porSSEKMSKeyId' @::@ 'Maybe' 'Text'
+-- * 'porsSSEKMSKeyId'
 --
--- * 'porServerSideEncryption' @::@ 'Maybe' 'ServerSideEncryption'
+-- * 'porsSSECustomerKeyMD5'
 --
--- * 'porVersionId' @::@ 'Maybe' 'Text'
+-- * 'porsServerSideEncryption'
 --
-putObjectResponse :: PutObjectResponse
-putObjectResponse = PutObjectResponse
-    { _porExpiration           = Nothing
-    , _porETag                 = Nothing
-    , _porServerSideEncryption = Nothing
-    , _porVersionId            = Nothing
-    , _porSSECustomerAlgorithm = Nothing
-    , _porSSECustomerKeyMD5    = Nothing
-    , _porSSEKMSKeyId          = Nothing
-    , _porRequestCharged       = Nothing
+-- * 'porsStatus'
+putObjectResponse
+    :: Int -- ^ 'porsStatus'
+    -> PutObjectResponse
+putObjectResponse pStatus_ =
+    PutObjectResponse'
+    { _porsVersionId = Nothing
+    , _porsETag = Nothing
+    , _porsRequestCharged = Nothing
+    , _porsExpiration = Nothing
+    , _porsSSECustomerAlgorithm = Nothing
+    , _porsSSEKMSKeyId = Nothing
+    , _porsSSECustomerKeyMD5 = Nothing
+    , _porsServerSideEncryption = Nothing
+    , _porsStatus = pStatus_
     }
 
+-- | Version of the object.
+porsVersionId :: Lens' PutObjectResponse (Maybe ObjectVersionId)
+porsVersionId = lens _porsVersionId (\ s a -> s{_porsVersionId = a});
+
 -- | Entity tag for the uploaded object.
-porETag :: Lens' PutObjectResponse (Maybe Text)
-porETag = lens _porETag (\s a -> s { _porETag = a })
+porsETag :: Lens' PutObjectResponse (Maybe ETag)
+porsETag = lens _porsETag (\ s a -> s{_porsETag = a});
 
--- | If the object expiration is configured, this will contain the expiration date
--- (expiry-date) and rule ID (rule-id). The value of rule-id is URL encoded.
-porExpiration :: Lens' PutObjectResponse (Maybe Text)
-porExpiration = lens _porExpiration (\s a -> s { _porExpiration = a })
+-- | Undocumented member.
+porsRequestCharged :: Lens' PutObjectResponse (Maybe RequestCharged)
+porsRequestCharged = lens _porsRequestCharged (\ s a -> s{_porsRequestCharged = a});
 
-porRequestCharged :: Lens' PutObjectResponse (Maybe RequestCharged)
-porRequestCharged =
-    lens _porRequestCharged (\s a -> s { _porRequestCharged = a })
+-- | If the object expiration is configured, this will contain the expiration
+-- date (expiry-date) and rule ID (rule-id). The value of rule-id is URL
+-- encoded.
+porsExpiration :: Lens' PutObjectResponse (Maybe Text)
+porsExpiration = lens _porsExpiration (\ s a -> s{_porsExpiration = a});
 
 -- | If server-side encryption with a customer-provided encryption key was
--- requested, the response will include this header confirming the encryption
--- algorithm used.
-porSSECustomerAlgorithm :: Lens' PutObjectResponse (Maybe Text)
-porSSECustomerAlgorithm =
-    lens _porSSECustomerAlgorithm (\s a -> s { _porSSECustomerAlgorithm = a })
+-- requested, the response will include this header confirming the
+-- encryption algorithm used.
+porsSSECustomerAlgorithm :: Lens' PutObjectResponse (Maybe Text)
+porsSSECustomerAlgorithm = lens _porsSSECustomerAlgorithm (\ s a -> s{_porsSSECustomerAlgorithm = a});
 
+-- | If present, specifies the ID of the AWS Key Management Service (KMS)
+-- master encryption key that was used for the object.
+porsSSEKMSKeyId :: Lens' PutObjectResponse (Maybe Text)
+porsSSEKMSKeyId = lens _porsSSEKMSKeyId (\ s a -> s{_porsSSEKMSKeyId = a}) . mapping _Sensitive;
+
 -- | If server-side encryption with a customer-provided encryption key was
 -- requested, the response will include this header to provide round trip
 -- message integrity verification of the customer-provided encryption key.
-porSSECustomerKeyMD5 :: Lens' PutObjectResponse (Maybe Text)
-porSSECustomerKeyMD5 =
-    lens _porSSECustomerKeyMD5 (\s a -> s { _porSSECustomerKeyMD5 = a })
-
--- | If present, specifies the ID of the AWS Key Management Service (KMS) master
--- encryption key that was used for the object.
-porSSEKMSKeyId :: Lens' PutObjectResponse (Maybe Text)
-porSSEKMSKeyId = lens _porSSEKMSKeyId (\s a -> s { _porSSEKMSKeyId = a }) . mapping _Sensitive
+porsSSECustomerKeyMD5 :: Lens' PutObjectResponse (Maybe Text)
+porsSSECustomerKeyMD5 = lens _porsSSECustomerKeyMD5 (\ s a -> s{_porsSSECustomerKeyMD5 = a});
 
 -- | The Server-side encryption algorithm used when storing this object in S3
 -- (e.g., AES256, aws:kms).
-porServerSideEncryption :: Lens' PutObjectResponse (Maybe ServerSideEncryption)
-porServerSideEncryption =
-    lens _porServerSideEncryption (\s a -> s { _porServerSideEncryption = a })
-
--- | Version of the object.
-porVersionId :: Lens' PutObjectResponse (Maybe Text)
-porVersionId = lens _porVersionId (\s a -> s { _porVersionId = a })
-
-instance ToPath PutObject where
-    toPath PutObject{..} = mconcat
-        [ "/"
-        , toText _poBucket
-        , "/"
-        , toText _poKey
-        ]
-
-instance ToQuery PutObject where
-    toQuery = const mempty
-
-instance ToHeaders PutObject where
-    toHeaders PutObject{..} = mconcat
-        [ "x-amz-acl"                                       =: _poACL
-        , "Cache-Control"                                   =: _poCacheControl
-        , "Content-Disposition"                             =: _poContentDisposition
-        , "Content-Encoding"                                =: _poContentEncoding
-        , "Content-Language"                                =: _poContentLanguage
-        , "Content-Length"                                  =: _poContentLength
-        , "Content-MD5"                                     =: _poContentMD5
-        , "Content-Type"                                    =: _poContentType
-        , "Expires"                                         =: _poExpires
-        , "x-amz-grant-full-control"                        =: _poGrantFullControl
-        , "x-amz-grant-read"                                =: _poGrantRead
-        , "x-amz-grant-read-acp"                            =: _poGrantReadACP
-        , "x-amz-grant-write-acp"                           =: _poGrantWriteACP
-        , "x-amz-meta-"                                     =: _poMetadata
-        , "x-amz-server-side-encryption"                    =: _poServerSideEncryption
-        , "x-amz-storage-class"                             =: _poStorageClass
-        , "x-amz-website-redirect-location"                 =: _poWebsiteRedirectLocation
-        , "x-amz-server-side-encryption-customer-algorithm" =: _poSSECustomerAlgorithm
-        , "x-amz-server-side-encryption-customer-key"       =: _poSSECustomerKey
-        , "x-amz-server-side-encryption-customer-key-MD5"   =: _poSSECustomerKeyMD5
-        , "x-amz-server-side-encryption-aws-kms-key-id"     =: _poSSEKMSKeyId
-        , "x-amz-request-payer"                             =: _poRequestPayer
-        ]
-
-instance ToBody PutObject where
-    toBody = toBody . _poBody
-
-instance AWSRequest PutObject where
-    type Sv PutObject = S3
-    type Rs PutObject = PutObjectResponse
+porsServerSideEncryption :: Lens' PutObjectResponse (Maybe ServerSideEncryption)
+porsServerSideEncryption = lens _porsServerSideEncryption (\ s a -> s{_porsServerSideEncryption = a});
 
-    request  = stream PUT
-    response = headerResponse $ \h -> PutObjectResponse
-        <$> h ~:? "ETag"
-        <*> h ~:? "x-amz-expiration"
-        <*> h ~:? "x-amz-request-charged"
-        <*> h ~:? "x-amz-server-side-encryption-customer-algorithm"
-        <*> h ~:? "x-amz-server-side-encryption-customer-key-MD5"
-        <*> h ~:? "x-amz-server-side-encryption-aws-kms-key-id"
-        <*> h ~:? "x-amz-server-side-encryption"
-        <*> h ~:? "x-amz-version-id"
+-- | The response status code.
+porsStatus :: Lens' PutObjectResponse Int
+porsStatus = lens _porsStatus (\ s a -> s{_porsStatus = a});
diff --git a/gen/Network/AWS/S3/PutObjectACL.hs b/gen/Network/AWS/S3/PutObjectACL.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/PutObjectACL.hs
@@ -0,0 +1,227 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.S3.PutObjectACL
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- uses the acl subresource to set the access control list (ACL)
+-- permissions for an object that already exists in a bucket
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/PutObjectACL.html AWS API Reference> for PutObjectACL.
+module Network.AWS.S3.PutObjectACL
+    (
+    -- * Creating a Request
+      putObjectACL
+    , PutObjectACL
+    -- * Request Lenses
+    , poaGrantReadACP
+    , poaRequestPayer
+    , poaGrantWriteACP
+    , poaGrantRead
+    , poaGrantFullControl
+    , poaContentMD5
+    , poaAccessControlPolicy
+    , poaGrantWrite
+    , poaACL
+    , poaBucket
+    , poaKey
+
+    -- * Destructuring the Response
+    , putObjectACLResponse
+    , PutObjectACLResponse
+    -- * Response Lenses
+    , poarsRequestCharged
+    , poarsStatus
+    ) where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'putObjectACL' smart constructor.
+data PutObjectACL = PutObjectACL'
+    { _poaGrantReadACP        :: !(Maybe Text)
+    , _poaRequestPayer        :: !(Maybe RequestPayer)
+    , _poaGrantWriteACP       :: !(Maybe Text)
+    , _poaGrantRead           :: !(Maybe Text)
+    , _poaGrantFullControl    :: !(Maybe Text)
+    , _poaContentMD5          :: !(Maybe Text)
+    , _poaAccessControlPolicy :: !(Maybe AccessControlPolicy)
+    , _poaGrantWrite          :: !(Maybe Text)
+    , _poaACL                 :: !(Maybe ObjectCannedACL)
+    , _poaBucket              :: !BucketName
+    , _poaKey                 :: !ObjectKey
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutObjectACL' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'poaGrantReadACP'
+--
+-- * 'poaRequestPayer'
+--
+-- * 'poaGrantWriteACP'
+--
+-- * 'poaGrantRead'
+--
+-- * 'poaGrantFullControl'
+--
+-- * 'poaContentMD5'
+--
+-- * 'poaAccessControlPolicy'
+--
+-- * 'poaGrantWrite'
+--
+-- * 'poaACL'
+--
+-- * 'poaBucket'
+--
+-- * 'poaKey'
+putObjectACL
+    :: BucketName -- ^ 'poaBucket'
+    -> ObjectKey -- ^ 'poaKey'
+    -> PutObjectACL
+putObjectACL pBucket_ pKey_ =
+    PutObjectACL'
+    { _poaGrantReadACP = Nothing
+    , _poaRequestPayer = Nothing
+    , _poaGrantWriteACP = Nothing
+    , _poaGrantRead = Nothing
+    , _poaGrantFullControl = Nothing
+    , _poaContentMD5 = Nothing
+    , _poaAccessControlPolicy = Nothing
+    , _poaGrantWrite = Nothing
+    , _poaACL = Nothing
+    , _poaBucket = pBucket_
+    , _poaKey = pKey_
+    }
+
+-- | Allows grantee to read the bucket ACL.
+poaGrantReadACP :: Lens' PutObjectACL (Maybe Text)
+poaGrantReadACP = lens _poaGrantReadACP (\ s a -> s{_poaGrantReadACP = a});
+
+-- | Undocumented member.
+poaRequestPayer :: Lens' PutObjectACL (Maybe RequestPayer)
+poaRequestPayer = lens _poaRequestPayer (\ s a -> s{_poaRequestPayer = a});
+
+-- | Allows grantee to write the ACL for the applicable bucket.
+poaGrantWriteACP :: Lens' PutObjectACL (Maybe Text)
+poaGrantWriteACP = lens _poaGrantWriteACP (\ s a -> s{_poaGrantWriteACP = a});
+
+-- | Allows grantee to list the objects in the bucket.
+poaGrantRead :: Lens' PutObjectACL (Maybe Text)
+poaGrantRead = lens _poaGrantRead (\ s a -> s{_poaGrantRead = a});
+
+-- | Allows grantee the read, write, read ACP, and write ACP permissions on
+-- the bucket.
+poaGrantFullControl :: Lens' PutObjectACL (Maybe Text)
+poaGrantFullControl = lens _poaGrantFullControl (\ s a -> s{_poaGrantFullControl = a});
+
+-- | Undocumented member.
+poaContentMD5 :: Lens' PutObjectACL (Maybe Text)
+poaContentMD5 = lens _poaContentMD5 (\ s a -> s{_poaContentMD5 = a});
+
+-- | Undocumented member.
+poaAccessControlPolicy :: Lens' PutObjectACL (Maybe AccessControlPolicy)
+poaAccessControlPolicy = lens _poaAccessControlPolicy (\ s a -> s{_poaAccessControlPolicy = a});
+
+-- | Allows grantee to create, overwrite, and delete any object in the
+-- bucket.
+poaGrantWrite :: Lens' PutObjectACL (Maybe Text)
+poaGrantWrite = lens _poaGrantWrite (\ s a -> s{_poaGrantWrite = a});
+
+-- | The canned ACL to apply to the object.
+poaACL :: Lens' PutObjectACL (Maybe ObjectCannedACL)
+poaACL = lens _poaACL (\ s a -> s{_poaACL = a});
+
+-- | Undocumented member.
+poaBucket :: Lens' PutObjectACL BucketName
+poaBucket = lens _poaBucket (\ s a -> s{_poaBucket = a});
+
+-- | Undocumented member.
+poaKey :: Lens' PutObjectACL ObjectKey
+poaKey = lens _poaKey (\ s a -> s{_poaKey = a});
+
+instance AWSRequest PutObjectACL where
+        type Sv PutObjectACL = S3
+        type Rs PutObjectACL = PutObjectACLResponse
+        request = putXML
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 PutObjectACLResponse' <$>
+                   (h .#? "x-amz-request-charged") <*>
+                     (pure (fromEnum s)))
+
+instance ToElement PutObjectACL where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}AccessControlPolicy"
+              .
+              _poaAccessControlPolicy
+
+instance ToHeaders PutObjectACL where
+        toHeaders PutObjectACL'{..}
+          = mconcat
+              ["x-amz-grant-read-acp" =# _poaGrantReadACP,
+               "x-amz-request-payer" =# _poaRequestPayer,
+               "x-amz-grant-write-acp" =# _poaGrantWriteACP,
+               "x-amz-grant-read" =# _poaGrantRead,
+               "x-amz-grant-full-control" =# _poaGrantFullControl,
+               "Content-MD5" =# _poaContentMD5,
+               "x-amz-grant-write" =# _poaGrantWrite,
+               "x-amz-acl" =# _poaACL]
+
+instance ToPath PutObjectACL where
+        toPath PutObjectACL'{..}
+          = mconcat ["/", toBS _poaBucket, "/", toBS _poaKey]
+
+instance ToQuery PutObjectACL where
+        toQuery = const (mconcat ["acl"])
+
+-- | /See:/ 'putObjectACLResponse' smart constructor.
+data PutObjectACLResponse = PutObjectACLResponse'
+    { _poarsRequestCharged :: !(Maybe RequestCharged)
+    , _poarsStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutObjectACLResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'poarsRequestCharged'
+--
+-- * 'poarsStatus'
+putObjectACLResponse
+    :: Int -- ^ 'poarsStatus'
+    -> PutObjectACLResponse
+putObjectACLResponse pStatus_ =
+    PutObjectACLResponse'
+    { _poarsRequestCharged = Nothing
+    , _poarsStatus = pStatus_
+    }
+
+-- | Undocumented member.
+poarsRequestCharged :: Lens' PutObjectACLResponse (Maybe RequestCharged)
+poarsRequestCharged = lens _poarsRequestCharged (\ s a -> s{_poarsRequestCharged = a});
+
+-- | The response status code.
+poarsStatus :: Lens' PutObjectACLResponse Int
+poarsStatus = lens _poarsStatus (\ s a -> s{_poarsStatus = a});
diff --git a/gen/Network/AWS/S3/PutObjectAcl.hs b/gen/Network/AWS/S3/PutObjectAcl.hs
deleted file mode 100644
--- a/gen/Network/AWS/S3/PutObjectAcl.hs
+++ /dev/null
@@ -1,213 +0,0 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.S3.PutObjectAcl
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | uses the acl subresource to set the access control list (ACL) permissions for
--- an object that already exists in a bucket
---
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/PutObjectAcl.html>
-module Network.AWS.S3.PutObjectAcl
-    (
-    -- * Request
-      PutObjectAcl
-    -- ** Request constructor
-    , putObjectAcl
-    -- ** Request lenses
-    , poaACL
-    , poaAccessControlPolicy
-    , poaBucket
-    , poaContentMD5
-    , poaGrantFullControl
-    , poaGrantRead
-    , poaGrantReadACP
-    , poaGrantWrite
-    , poaGrantWriteACP
-    , poaKey
-    , poaRequestPayer
-
-    -- * Response
-    , PutObjectAclResponse
-    -- ** Response constructor
-    , putObjectAclResponse
-    -- ** Response lenses
-    , poarRequestCharged
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
-
-data PutObjectAcl = PutObjectAcl
-    { _poaACL                 :: Maybe ObjectCannedACL
-    , _poaAccessControlPolicy :: Maybe AccessControlPolicy
-    , _poaBucket              :: Text
-    , _poaContentMD5          :: Maybe Text
-    , _poaGrantFullControl    :: Maybe Text
-    , _poaGrantRead           :: Maybe Text
-    , _poaGrantReadACP        :: Maybe Text
-    , _poaGrantWrite          :: Maybe Text
-    , _poaGrantWriteACP       :: Maybe Text
-    , _poaKey                 :: Text
-    , _poaRequestPayer        :: Maybe RequestPayer
-    } deriving (Eq, Read, Show)
-
--- | 'PutObjectAcl' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'poaACL' @::@ 'Maybe' 'ObjectCannedACL'
---
--- * 'poaAccessControlPolicy' @::@ 'Maybe' 'AccessControlPolicy'
---
--- * 'poaBucket' @::@ 'Text'
---
--- * 'poaContentMD5' @::@ 'Maybe' 'Text'
---
--- * 'poaGrantFullControl' @::@ 'Maybe' 'Text'
---
--- * 'poaGrantRead' @::@ 'Maybe' 'Text'
---
--- * 'poaGrantReadACP' @::@ 'Maybe' 'Text'
---
--- * 'poaGrantWrite' @::@ 'Maybe' 'Text'
---
--- * 'poaGrantWriteACP' @::@ 'Maybe' 'Text'
---
--- * 'poaKey' @::@ 'Text'
---
--- * 'poaRequestPayer' @::@ 'Maybe' 'RequestPayer'
---
-putObjectAcl :: Text -- ^ 'poaBucket'
-             -> Text -- ^ 'poaKey'
-             -> PutObjectAcl
-putObjectAcl p1 p2 = PutObjectAcl
-    { _poaBucket              = p1
-    , _poaKey                 = p2
-    , _poaACL                 = Nothing
-    , _poaAccessControlPolicy = Nothing
-    , _poaContentMD5          = Nothing
-    , _poaGrantFullControl    = Nothing
-    , _poaGrantRead           = Nothing
-    , _poaGrantReadACP        = Nothing
-    , _poaGrantWrite          = Nothing
-    , _poaGrantWriteACP       = Nothing
-    , _poaRequestPayer        = Nothing
-    }
-
--- | The canned ACL to apply to the object.
-poaACL :: Lens' PutObjectAcl (Maybe ObjectCannedACL)
-poaACL = lens _poaACL (\s a -> s { _poaACL = a })
-
-poaAccessControlPolicy :: Lens' PutObjectAcl (Maybe AccessControlPolicy)
-poaAccessControlPolicy =
-    lens _poaAccessControlPolicy (\s a -> s { _poaAccessControlPolicy = a })
-
-poaBucket :: Lens' PutObjectAcl Text
-poaBucket = lens _poaBucket (\s a -> s { _poaBucket = a })
-
-poaContentMD5 :: Lens' PutObjectAcl (Maybe Text)
-poaContentMD5 = lens _poaContentMD5 (\s a -> s { _poaContentMD5 = a })
-
--- | Allows grantee the read, write, read ACP, and write ACP permissions on the
--- bucket.
-poaGrantFullControl :: Lens' PutObjectAcl (Maybe Text)
-poaGrantFullControl =
-    lens _poaGrantFullControl (\s a -> s { _poaGrantFullControl = a })
-
--- | Allows grantee to list the objects in the bucket.
-poaGrantRead :: Lens' PutObjectAcl (Maybe Text)
-poaGrantRead = lens _poaGrantRead (\s a -> s { _poaGrantRead = a })
-
--- | Allows grantee to read the bucket ACL.
-poaGrantReadACP :: Lens' PutObjectAcl (Maybe Text)
-poaGrantReadACP = lens _poaGrantReadACP (\s a -> s { _poaGrantReadACP = a })
-
--- | Allows grantee to create, overwrite, and delete any object in the bucket.
-poaGrantWrite :: Lens' PutObjectAcl (Maybe Text)
-poaGrantWrite = lens _poaGrantWrite (\s a -> s { _poaGrantWrite = a })
-
--- | Allows grantee to write the ACL for the applicable bucket.
-poaGrantWriteACP :: Lens' PutObjectAcl (Maybe Text)
-poaGrantWriteACP = lens _poaGrantWriteACP (\s a -> s { _poaGrantWriteACP = a })
-
-poaKey :: Lens' PutObjectAcl Text
-poaKey = lens _poaKey (\s a -> s { _poaKey = a })
-
-poaRequestPayer :: Lens' PutObjectAcl (Maybe RequestPayer)
-poaRequestPayer = lens _poaRequestPayer (\s a -> s { _poaRequestPayer = a })
-
-newtype PutObjectAclResponse = PutObjectAclResponse
-    { _poarRequestCharged :: Maybe RequestCharged
-    } deriving (Eq, Read, Show)
-
--- | 'PutObjectAclResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'poarRequestCharged' @::@ 'Maybe' 'RequestCharged'
---
-putObjectAclResponse :: PutObjectAclResponse
-putObjectAclResponse = PutObjectAclResponse
-    { _poarRequestCharged = Nothing
-    }
-
-poarRequestCharged :: Lens' PutObjectAclResponse (Maybe RequestCharged)
-poarRequestCharged =
-    lens _poarRequestCharged (\s a -> s { _poarRequestCharged = a })
-
-instance ToPath PutObjectAcl where
-    toPath PutObjectAcl{..} = mconcat
-        [ "/"
-        , toText _poaBucket
-        , "/"
-        , toText _poaKey
-        ]
-
-instance ToQuery PutObjectAcl where
-    toQuery = const "acl"
-
-instance ToHeaders PutObjectAcl where
-    toHeaders PutObjectAcl{..} = mconcat
-        [ "x-amz-acl"                =: _poaACL
-        , "Content-MD5"              =: _poaContentMD5
-        , "x-amz-grant-full-control" =: _poaGrantFullControl
-        , "x-amz-grant-read"         =: _poaGrantRead
-        , "x-amz-grant-read-acp"     =: _poaGrantReadACP
-        , "x-amz-grant-write"        =: _poaGrantWrite
-        , "x-amz-grant-write-acp"    =: _poaGrantWriteACP
-        , "x-amz-request-payer"      =: _poaRequestPayer
-        ]
-
-instance ToXMLRoot PutObjectAcl where
-    toXMLRoot = extractRoot ns . toXML . _poaAccessControlPolicy
-
-instance ToXML PutObjectAcl
-
-instance AWSRequest PutObjectAcl where
-    type Sv PutObjectAcl = S3
-    type Rs PutObjectAcl = PutObjectAclResponse
-
-    request  = put
-    response = headerResponse $ \h -> PutObjectAclResponse
-        <$> h ~:? "x-amz-request-charged"
diff --git a/gen/Network/AWS/S3/RestoreObject.hs b/gen/Network/AWS/S3/RestoreObject.hs
--- a/gen/Network/AWS/S3/RestoreObject.hs
+++ b/gen/Network/AWS/S3/RestoreObject.hs
@@ -1,151 +1,163 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.RestoreObject
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Restores an archived copy of an object back into Amazon S3
+-- Restores an archived copy of an object back into Amazon S3
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/RestoreObject.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/RestoreObject.html AWS API Reference> for RestoreObject.
 module Network.AWS.S3.RestoreObject
     (
-    -- * Request
-      RestoreObject
-    -- ** Request constructor
-    , restoreObject
-    -- ** Request lenses
-    , roBucket
-    , roKey
+    -- * Creating a Request
+      restoreObject
+    , RestoreObject
+    -- * Request Lenses
+    , roVersionId
     , roRequestPayer
     , roRestoreRequest
-    , roVersionId
+    , roBucket
+    , roKey
 
-    -- * Response
-    , RestoreObjectResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , restoreObjectResponse
-    -- ** Response lenses
-    , rorRequestCharged
+    , RestoreObjectResponse
+    -- * Response Lenses
+    , rorsRequestCharged
+    , rorsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data RestoreObject = RestoreObject
-    { _roBucket         :: Text
-    , _roKey            :: Text
-    , _roRequestPayer   :: Maybe RequestPayer
-    , _roRestoreRequest :: Maybe RestoreRequest
-    , _roVersionId      :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'restoreObject' smart constructor.
+data RestoreObject = RestoreObject'
+    { _roVersionId      :: !(Maybe ObjectVersionId)
+    , _roRequestPayer   :: !(Maybe RequestPayer)
+    , _roRestoreRequest :: !(Maybe RestoreRequest)
+    , _roBucket         :: !BucketName
+    , _roKey            :: !ObjectKey
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'RestoreObject' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'RestoreObject' with the minimum fields required to make a request.
 --
--- * 'roBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'roKey' @::@ 'Text'
+-- * 'roVersionId'
 --
--- * 'roRequestPayer' @::@ 'Maybe' 'RequestPayer'
+-- * 'roRequestPayer'
 --
--- * 'roRestoreRequest' @::@ 'Maybe' 'RestoreRequest'
+-- * 'roRestoreRequest'
 --
--- * 'roVersionId' @::@ 'Maybe' 'Text'
+-- * 'roBucket'
 --
-restoreObject :: Text -- ^ 'roBucket'
-              -> Text -- ^ 'roKey'
-              -> RestoreObject
-restoreObject p1 p2 = RestoreObject
-    { _roBucket         = p1
-    , _roKey            = p2
-    , _roVersionId      = Nothing
+-- * 'roKey'
+restoreObject
+    :: BucketName -- ^ 'roBucket'
+    -> ObjectKey -- ^ 'roKey'
+    -> RestoreObject
+restoreObject pBucket_ pKey_ =
+    RestoreObject'
+    { _roVersionId = Nothing
+    , _roRequestPayer = Nothing
     , _roRestoreRequest = Nothing
-    , _roRequestPayer   = Nothing
+    , _roBucket = pBucket_
+    , _roKey = pKey_
     }
 
-roBucket :: Lens' RestoreObject Text
-roBucket = lens _roBucket (\s a -> s { _roBucket = a })
-
-roKey :: Lens' RestoreObject Text
-roKey = lens _roKey (\s a -> s { _roKey = a })
+-- | Undocumented member.
+roVersionId :: Lens' RestoreObject (Maybe ObjectVersionId)
+roVersionId = lens _roVersionId (\ s a -> s{_roVersionId = a});
 
+-- | Undocumented member.
 roRequestPayer :: Lens' RestoreObject (Maybe RequestPayer)
-roRequestPayer = lens _roRequestPayer (\s a -> s { _roRequestPayer = a })
+roRequestPayer = lens _roRequestPayer (\ s a -> s{_roRequestPayer = a});
 
+-- | Undocumented member.
 roRestoreRequest :: Lens' RestoreObject (Maybe RestoreRequest)
-roRestoreRequest = lens _roRestoreRequest (\s a -> s { _roRestoreRequest = a })
+roRestoreRequest = lens _roRestoreRequest (\ s a -> s{_roRestoreRequest = a});
 
-roVersionId :: Lens' RestoreObject (Maybe Text)
-roVersionId = lens _roVersionId (\s a -> s { _roVersionId = a })
+-- | Undocumented member.
+roBucket :: Lens' RestoreObject BucketName
+roBucket = lens _roBucket (\ s a -> s{_roBucket = a});
 
-newtype RestoreObjectResponse = RestoreObjectResponse
-    { _rorRequestCharged :: Maybe RequestCharged
-    } deriving (Eq, Read, Show)
+-- | Undocumented member.
+roKey :: Lens' RestoreObject ObjectKey
+roKey = lens _roKey (\ s a -> s{_roKey = a});
 
--- | 'RestoreObjectResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'rorRequestCharged' @::@ 'Maybe' 'RequestCharged'
---
-restoreObjectResponse :: RestoreObjectResponse
-restoreObjectResponse = RestoreObjectResponse
-    { _rorRequestCharged = Nothing
-    }
+instance AWSRequest RestoreObject where
+        type Sv RestoreObject = S3
+        type Rs RestoreObject = RestoreObjectResponse
+        request = postXML
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 RestoreObjectResponse' <$>
+                   (h .#? "x-amz-request-charged") <*>
+                     (pure (fromEnum s)))
 
-rorRequestCharged :: Lens' RestoreObjectResponse (Maybe RequestCharged)
-rorRequestCharged =
-    lens _rorRequestCharged (\s a -> s { _rorRequestCharged = a })
+instance ToElement RestoreObject where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}RestoreRequest"
+              .
+              _roRestoreRequest
 
+instance ToHeaders RestoreObject where
+        toHeaders RestoreObject'{..}
+          = mconcat ["x-amz-request-payer" =# _roRequestPayer]
+
 instance ToPath RestoreObject where
-    toPath RestoreObject{..} = mconcat
-        [ "/"
-        , toText _roBucket
-        , "/"
-        , toText _roKey
-        ]
+        toPath RestoreObject'{..}
+          = mconcat ["/", toBS _roBucket, "/", toBS _roKey]
 
 instance ToQuery RestoreObject where
-    toQuery RestoreObject{..} = mconcat
-        [ "restore"
-        , "versionId" =? _roVersionId
-        ]
-
-instance ToHeaders RestoreObject where
-    toHeaders RestoreObject{..} = mconcat
-        [ "x-amz-request-payer" =: _roRequestPayer
-        ]
+        toQuery RestoreObject'{..}
+          = mconcat ["versionId" =: _roVersionId, "restore"]
 
-instance ToXMLRoot RestoreObject where
-    toXMLRoot = extractRoot ns . toXML . _roRestoreRequest
+-- | /See:/ 'restoreObjectResponse' smart constructor.
+data RestoreObjectResponse = RestoreObjectResponse'
+    { _rorsRequestCharged :: !(Maybe RequestCharged)
+    , _rorsStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToXML RestoreObject
+-- | Creates a value of 'RestoreObjectResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rorsRequestCharged'
+--
+-- * 'rorsStatus'
+restoreObjectResponse
+    :: Int -- ^ 'rorsStatus'
+    -> RestoreObjectResponse
+restoreObjectResponse pStatus_ =
+    RestoreObjectResponse'
+    { _rorsRequestCharged = Nothing
+    , _rorsStatus = pStatus_
+    }
 
-instance AWSRequest RestoreObject where
-    type Sv RestoreObject = S3
-    type Rs RestoreObject = RestoreObjectResponse
+-- | Undocumented member.
+rorsRequestCharged :: Lens' RestoreObjectResponse (Maybe RequestCharged)
+rorsRequestCharged = lens _rorsRequestCharged (\ s a -> s{_rorsRequestCharged = a});
 
-    request  = post
-    response = headerResponse $ \h -> RestoreObjectResponse
-        <$> h ~:? "x-amz-request-charged"
+-- | The response status code.
+rorsStatus :: Lens' RestoreObjectResponse Int
+rorsStatus = lens _rorsStatus (\ s a -> s{_rorsStatus = a});
diff --git a/gen/Network/AWS/S3/Types.hs b/gen/Network/AWS/S3/Types.hs
--- a/gen/Network/AWS/S3/Types.hs
+++ b/gen/Network/AWS/S3/Types.hs
@@ -1,3860 +1,509 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-{-# LANGUAGE ViewPatterns                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.S3.Types
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
-module Network.AWS.S3.Types
-    (
-    -- * Service
-      S3
-    -- ** Error
-    , RESTError
-    -- ** XML
-    , ns
-
-    -- * GetBucketNotificationConfigurationRequest
-    , GetBucketNotificationConfigurationRequest
-    , getBucketNotificationConfigurationRequest
-    , gbncBucket
-
-    -- * ReplicationConfiguration
-    , ReplicationConfiguration
-    , replicationConfiguration
-    , rcRole
-    , rcRules
-
-    -- * Destination
-    , Destination
-    , destination
-    , dBucket
-
-    -- * Event
-    , Event (..)
-
-    -- * RequestCharged
-    , RequestCharged (..)
-
-    -- * NoncurrentVersionExpiration
-    , NoncurrentVersionExpiration
-    , noncurrentVersionExpiration
-    , nveNoncurrentDays
-
-    -- * Transition
-    , Transition
-    , transition
-    , tDate
-    , tDays
-    , tStorageClass
-
-    -- * DeleteMarkerEntry
-    , DeleteMarkerEntry
-    , deleteMarkerEntry
-    , dmeIsLatest
-    , dmeKey
-    , dmeLastModified
-    , dmeOwner
-    , dmeVersionId
-
-    -- * ExpirationStatus
-    , ExpirationStatus (..)
-
-    -- * Part
-    , Part
-    , part
-    , pETag
-    , pLastModified
-    , pPartNumber
-    , pSize
-
-    -- * VersioningConfiguration
-    , VersioningConfiguration
-    , versioningConfiguration
-    , vcMFADelete
-    , vcStatus
-
-    -- * Tag
-    , Tag
-    , tag
-    , tagKey
-    , tagValue
-
-    -- * ObjectStorageClass
-    , ObjectStorageClass (..)
-
-    -- * MetadataDirective
-    , MetadataDirective (..)
-
-    -- * ReplicationRule
-    , ReplicationRule
-    , replicationRule
-    , rrDestination
-    , rrID
-    , rrPrefix
-    , rrStatus
-
-    -- * RedirectAllRequestsTo
-    , RedirectAllRequestsTo
-    , redirectAllRequestsTo
-    , rartHostName
-    , rartProtocol
-
-    -- * RoutingRule
-    , RoutingRule
-    , routingRule
-    , rrCondition
-    , rrRedirect
-
-    -- * NotificationConfiguration
-    , NotificationConfiguration
-    , notificationConfiguration
-    , ncLambdaFunctionConfigurations
-    , ncQueueConfigurations
-    , ncTopicConfigurations
-
-    -- * S3ServiceError
-    , S3ServiceError
-    , s3ServiceError
-    , sseCode
-    , sseKey
-    , sseMessage
-    , sseVersionId
-
-    -- * ObjectCannedACL
-    , ObjectCannedACL (..)
-
-    -- * BucketVersioningStatus
-    , BucketVersioningStatus (..)
-
-    -- * DeletedObject
-    , DeletedObject
-    , deletedObject
-    , do1DeleteMarker
-    , do1DeleteMarkerVersionId
-    , do1Key
-    , do1VersionId
-
-    -- * ObjectVersionStorageClass
-    , ObjectVersionStorageClass (..)
-
-    -- * CopyPartResult
-    , CopyPartResult
-    , copyPartResult
-    , cprETag
-    , cprLastModified
-
-    -- * EncodingType
-    , EncodingType (..)
-
-    -- * RequestPaymentConfiguration
-    , RequestPaymentConfiguration
-    , requestPaymentConfiguration
-    , rpcPayer
-
-    -- * CORSRule
-    , CORSRule
-    , corsrule
-    , corsrAllowedHeaders
-    , corsrAllowedMethods
-    , corsrAllowedOrigins
-    , corsrExposeHeaders
-    , corsrMaxAgeSeconds
-
-    -- * WebsiteConfiguration
-    , WebsiteConfiguration
-    , websiteConfiguration
-    , wcErrorDocument
-    , wcIndexDocument
-    , wcRedirectAllRequestsTo
-    , wcRoutingRules
-
-    -- * NoncurrentVersionTransition
-    , NoncurrentVersionTransition
-    , noncurrentVersionTransition
-    , nvtNoncurrentDays
-    , nvtStorageClass
-
-    -- * Initiator
-    , Initiator
-    , initiator
-    , iDisplayName
-    , iID
-
-    -- * ObjectIdentifier
-    , ObjectIdentifier
-    , objectIdentifier
-    , oiKey
-    , oiVersionId
-
-    -- * Bucket
-    , Bucket
-    , bucket
-    , bCreationDate
-    , bName
-
-    -- * Protocol
-    , Protocol (..)
-
-    -- * Grant
-    , Grant
-    , grant
-    , gGrantee
-    , gPermission
-
-    -- * Rule
-    , Rule
-    , rule
-    , rExpiration
-    , rID
-    , rNoncurrentVersionExpiration
-    , rNoncurrentVersionTransition
-    , rPrefix
-    , rStatus
-    , rTransition
-
-    -- * RequestPayer
-    , RequestPayer (..)
-
-    -- * TopicConfiguration
-    , TopicConfiguration
-    , topicConfiguration
-    , tcEvents
-    , tcId
-    , tcTopicArn
-
-    -- * QueueConfiguration
-    , QueueConfiguration
-    , queueConfiguration
-    , qcEvents
-    , qcId
-    , qcQueueArn
-
-    -- * Owner
-    , Owner
-    , owner
-    , oDisplayName
-    , oID
-
-    -- * BucketLoggingStatus
-    , BucketLoggingStatus
-    , bucketLoggingStatus
-    , blsLoggingEnabled
-
-    -- * NotificationConfigurationDeprecated
-    , NotificationConfigurationDeprecated
-    , notificationConfigurationDeprecated
-    , ncdCloudFunctionConfiguration
-    , ncdQueueConfiguration
-    , ncdTopicConfiguration
-
-    -- * ErrorDocument
-    , ErrorDocument
-    , errorDocument
-    , edKey
-
-    -- * StorageClass
-    , StorageClass (..)
-
-    -- * ObjectVersion
-    , ObjectVersion
-    , objectVersion
-    , ovETag
-    , ovIsLatest
-    , ovKey
-    , ovLastModified
-    , ovOwner
-    , ovSize
-    , ovStorageClass
-    , ovVersionId
-
-    -- * TargetGrant
-    , TargetGrant
-    , targetGrant
-    , tgGrantee
-    , tgPermission
-
-    -- * MFADeleteStatus
-    , MFADeleteStatus (..)
-
-    -- * Payer
-    , Payer (..)
-
-    -- * Redirect
-    , Redirect
-    , redirect
-    , rHostName
-    , rHttpRedirectCode
-    , rProtocol
-    , rReplaceKeyPrefixWith
-    , rReplaceKeyWith
-
-    -- * BucketLogsPermission
-    , BucketLogsPermission (..)
-
-    -- * CompletedPart
-    , CompletedPart
-    , completedPart
-    , cpETag
-    , cpPartNumber
-
-    -- * CreateBucketConfiguration
-    , CreateBucketConfiguration
-    , createBucketConfiguration
-    , cbcLocationConstraint
-
-    -- * Tagging
-    , Tagging
-    , tagging
-    , tTagSet
-
-    -- * LifecycleExpiration
-    , LifecycleExpiration
-    , lifecycleExpiration
-    , leDate
-    , leDays
-
-    -- * CORSConfiguration
-    , CORSConfiguration
-    , corsconfiguration
-    , corscCORSRules
-
-    -- * Object
-    , Object
-    , object'
-    , oETag
-    , oKey
-    , oLastModified
-    , oOwner
-    , oSize
-    , oStorageClass
-
-    -- * CommonPrefix
-    , CommonPrefix
-    , commonPrefix
-    , cpPrefix
-
-    -- * MultipartUpload
-    , MultipartUpload
-    , multipartUpload
-    , muInitiated
-    , muInitiator
-    , muKey
-    , muOwner
-    , muStorageClass
-    , muUploadId
-
-    -- * LambdaFunctionConfiguration
-    , LambdaFunctionConfiguration
-    , lambdaFunctionConfiguration
-    , lfcEvents
-    , lfcId
-    , lfcLambdaFunctionArn
-
-    -- * QueueConfigurationDeprecated
-    , QueueConfigurationDeprecated
-    , queueConfigurationDeprecated
-    , qcdEvent
-    , qcdEvents
-    , qcdId
-    , qcdQueue
-
-    -- * TopicConfigurationDeprecated
-    , TopicConfigurationDeprecated
-    , topicConfigurationDeprecated
-    , tcdEvent
-    , tcdEvents
-    , tcdId
-    , tcdTopic
-
-    -- * Type
-    , Type (..)
-
-    -- * ReplicationStatus
-    , ReplicationStatus (..)
-
-    -- * TransitionStorageClass
-    , TransitionStorageClass (..)
-
-    -- * CompletedMultipartUpload
-    , CompletedMultipartUpload
-    , completedMultipartUpload
-    , cmuParts
-
-    -- * Condition
-    , Condition
-    , condition
-    , cHttpErrorCodeReturnedEquals
-    , cKeyPrefixEquals
-
-    -- * Permission
-    , Permission (..)
-
-    -- * AccessControlPolicy
-    , AccessControlPolicy
-    , accessControlPolicy
-    , acpGrants
-    , acpOwner
-
-    -- * BucketCannedACL
-    , BucketCannedACL (..)
-
-    -- * MFADelete
-    , MFADelete (..)
-
-    -- * CloudFunctionConfiguration
-    , CloudFunctionConfiguration
-    , cloudFunctionConfiguration
-    , cfcCloudFunction
-    , cfcEvent
-    , cfcEvents
-    , cfcId
-    , cfcInvocationRole
-
-    -- * Grantee
-    , Grantee
-    , grantee
-    , gDisplayName
-    , gEmailAddress
-    , gID
-    , gType
-    , gURI
-
-    -- * LifecycleConfiguration
-    , LifecycleConfiguration
-    , lifecycleConfiguration
-    , lcRules
-
-    -- * LoggingEnabled
-    , LoggingEnabled
-    , loggingEnabled
-    , leTargetBucket
-    , leTargetGrants
-    , leTargetPrefix
-
-    -- * ReplicationRuleStatus
-    , ReplicationRuleStatus (..)
-
-    -- * ServerSideEncryption
-    , ServerSideEncryption (..)
-
-    -- * IndexDocument
-    , IndexDocument
-    , indexDocument
-    , idSuffix
-
-    -- * CopyObjectResult
-    , CopyObjectResult
-    , copyObjectResult
-    , corETag
-    , corLastModified
-
-    -- * Delete
-    , Delete
-    , delete'
-    , dObjects
-    , dQuiet
-
-    -- * RestoreRequest
-    , RestoreRequest
-    , restoreRequest
-    , rDays
-
-    -- * Common
-    , module Network.AWS.S3.Internal
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Signing
-import Network.AWS.S3.Internal
-import qualified GHC.Exts
-
--- | Version @2006-03-01@ of the Amazon Simple Storage Service service.
-data S3
-
-instance AWSService S3 where
-    type Sg S3 = V4
-    type Er S3 = RESTError
-
-    service = service'
-      where
-        service' :: Service S3
-        service' = Service
-            { _svcAbbrev       = "S3"
-            , _svcPrefix       = "s3"
-            , _svcVersion      = "2006-03-01"
-            , _svcTargetPrefix = Nothing
-            , _svcJSONVersion  = Nothing
-            , _svcHandle       = handle
-            , _svcRetry        = retry
-            }
-
-        handle :: Status
-               -> Maybe (LazyByteString -> ServiceError RESTError)
-        handle = restError statusSuccess service'
-
-        retry :: Retry S3
-        retry = Exponential
-            { _retryBase     = 0.05
-            , _retryGrowth   = 2
-            , _retryAttempts = 5
-            , _retryCheck    = check
-            }
-
-        check :: Status
-              -> RESTError
-              -> Bool
-        check (statusCode -> s) (awsErrorCode -> e)
-            | s == 400 && (Just "RequestTimeout") == e = True -- Timeouts
-            | s == 500  = True -- General Server Error
-            | s == 509  = True -- Limit Exceeded
-            | s == 503  = True -- Service Unavailable
-            | otherwise = False
-
-ns :: Text
-ns = "http://s3.amazonaws.com/doc/2006-03-01/"
-{-# INLINE ns #-}
-
-newtype GetBucketNotificationConfigurationRequest = GetBucketNotificationConfigurationRequest
-    { _gbncBucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
-
--- | 'GetBucketNotificationConfigurationRequest' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gbncBucket' @::@ 'Text'
---
-getBucketNotificationConfigurationRequest :: Text -- ^ 'gbncBucket'
-                                          -> GetBucketNotificationConfigurationRequest
-getBucketNotificationConfigurationRequest p1 = GetBucketNotificationConfigurationRequest
-    { _gbncBucket = p1
-    }
-
--- | Name of the buket to get the notification configuration for.
-gbncBucket :: Lens' GetBucketNotificationConfigurationRequest Text
-gbncBucket = lens _gbncBucket (\s a -> s { _gbncBucket = a })
-
-instance FromXML GetBucketNotificationConfigurationRequest where
-    parseXML x = GetBucketNotificationConfigurationRequest
-        <$> x .@  "Bucket"
-
-instance ToXMLRoot GetBucketNotificationConfigurationRequest where
-    toXMLRoot = const (namespaced ns "GetBucketNotificationConfigurationRequest" [])
-
-instance ToXML GetBucketNotificationConfigurationRequest
-
-data ReplicationConfiguration = ReplicationConfiguration
-    { _rcRole  :: Text
-    , _rcRules :: List "Rule" ReplicationRule
-    } deriving (Eq, Read, Show)
-
--- | 'ReplicationConfiguration' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'rcRole' @::@ 'Text'
---
--- * 'rcRules' @::@ ['ReplicationRule']
---
-replicationConfiguration :: Text -- ^ 'rcRole'
-                         -> ReplicationConfiguration
-replicationConfiguration p1 = ReplicationConfiguration
-    { _rcRole  = p1
-    , _rcRules = mempty
-    }
-
--- | Amazon Resource Name (ARN) of an IAM role for Amazon S3 to assume when
--- replicating the objects.
-rcRole :: Lens' ReplicationConfiguration Text
-rcRole = lens _rcRole (\s a -> s { _rcRole = a })
-
--- | Container for information about a particular replication rule. Replication
--- configuration must have at least one rule and can contain up to 1,000 rules.
-rcRules :: Lens' ReplicationConfiguration [ReplicationRule]
-rcRules = lens _rcRules (\s a -> s { _rcRules = a }) . _List
-
-instance FromXML ReplicationConfiguration where
-    parseXML x = ReplicationConfiguration
-        <$> x .@  "Role"
-        <*> parseXML x
-
-instance ToXMLRoot ReplicationConfiguration where
-    toXMLRoot ReplicationConfiguration{..} = namespaced ns "ReplicationConfiguration"
-        [ "Role" =@ _rcRole
-        , "Rule" =@ _rcRules
-        ]
-
-instance ToXML ReplicationConfiguration
-
-newtype Destination = Destination
-    { _dBucket :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
-
--- | 'Destination' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dBucket' @::@ 'Text'
---
-destination :: Text -- ^ 'dBucket'
-            -> Destination
-destination p1 = Destination
-    { _dBucket = p1
-    }
-
--- | Amazon resource name (ARN) of the bucket where you want Amazon S3 to store
--- replicas of the object identified by the rule.
-dBucket :: Lens' Destination Text
-dBucket = lens _dBucket (\s a -> s { _dBucket = a })
-
-instance FromXML Destination where
-    parseXML x = Destination
-        <$> x .@  "Bucket"
-
-instance ToXML Destination where
-    toXML Destination{..} = nodes "Destination"
-        [ "Bucket" =@ _dBucket
-        ]
-
-data Event
-    = S3ObjectCreatedCompleteMultipartUpload -- ^ s3:ObjectCreated:CompleteMultipartUpload
-    | S3ObjectCreatedCopy                    -- ^ s3:ObjectCreated:Copy
-    | S3ObjectCreatedPost                    -- ^ s3:ObjectCreated:Post
-    | S3ObjectCreatedPut                     -- ^ s3:ObjectCreated:Put
-    | S3ReducedRedundancyLostObject          -- ^ s3:ReducedRedundancyLostObject
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable Event
-
-instance FromText Event where
-    parser = takeLowerText >>= \case
-        "s3:objectcreated:completemultipartupload" -> pure S3ObjectCreatedCompleteMultipartUpload
-        "s3:objectcreated:copy"                    -> pure S3ObjectCreatedCopy
-        "s3:objectcreated:post"                    -> pure S3ObjectCreatedPost
-        "s3:objectcreated:put"                     -> pure S3ObjectCreatedPut
-        "s3:reducedredundancylostobject"           -> pure S3ReducedRedundancyLostObject
-        e                                          -> fail $
-            "Failure parsing Event from " ++ show e
-
-instance ToText Event where
-    toText = \case
-        S3ObjectCreatedCompleteMultipartUpload -> "s3:ObjectCreated:CompleteMultipartUpload"
-        S3ObjectCreatedCopy                    -> "s3:ObjectCreated:Copy"
-        S3ObjectCreatedPost                    -> "s3:ObjectCreated:Post"
-        S3ObjectCreatedPut                     -> "s3:ObjectCreated:Put"
-        S3ReducedRedundancyLostObject          -> "s3:ReducedRedundancyLostObject"
-
-instance ToByteString Event
-instance ToHeader     Event
-instance ToQuery      Event
-
-instance FromXML Event where
-    parseXML = parseXMLText "Event"
-
-instance ToXML Event where
-    toXML = toXMLText
-
-data RequestCharged
-    = Requester -- ^ requester
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable RequestCharged
-
-instance FromText RequestCharged where
-    parser = takeLowerText >>= \case
-        "requester" -> pure Requester
-        e           -> fail $
-            "Failure parsing RequestCharged from " ++ show e
-
-instance ToText RequestCharged where
-    toText Requester = "requester"
-
-instance ToByteString RequestCharged
-instance ToHeader     RequestCharged
-instance ToQuery      RequestCharged
-
-instance FromXML RequestCharged where
-    parseXML = parseXMLText "RequestCharged"
-
-instance ToXML RequestCharged where
-    toXML = toXMLText
-
-newtype NoncurrentVersionExpiration = NoncurrentVersionExpiration
-    { _nveNoncurrentDays :: Int
-    } deriving (Eq, Ord, Read, Show, Enum, Num, Integral, Real)
-
--- | 'NoncurrentVersionExpiration' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'nveNoncurrentDays' @::@ 'Int'
---
-noncurrentVersionExpiration :: Int -- ^ 'nveNoncurrentDays'
-                            -> NoncurrentVersionExpiration
-noncurrentVersionExpiration p1 = NoncurrentVersionExpiration
-    { _nveNoncurrentDays = p1
-    }
-
--- | Specifies the number of days an object is noncurrent before Amazon S3 can
--- perform the associated action. For information about the noncurrent days
--- calculations, see </AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
--- in the Amazon Simple Storage Service Developer Guide.
-nveNoncurrentDays :: Lens' NoncurrentVersionExpiration Int
-nveNoncurrentDays =
-    lens _nveNoncurrentDays (\s a -> s { _nveNoncurrentDays = a })
-
-instance FromXML NoncurrentVersionExpiration where
-    parseXML x = NoncurrentVersionExpiration
-        <$> x .@  "NoncurrentDays"
-
-instance ToXML NoncurrentVersionExpiration where
-    toXML NoncurrentVersionExpiration{..} = nodes "NoncurrentVersionExpiration"
-        [ "NoncurrentDays" =@ _nveNoncurrentDays
-        ]
-
-data Transition = Transition
-    { _tDate         :: Maybe ISO8601
-    , _tDays         :: Maybe Int
-    , _tStorageClass :: Maybe TransitionStorageClass
-    } deriving (Eq, Read, Show)
-
--- | 'Transition' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'tDate' @::@ 'Maybe' 'UTCTime'
---
--- * 'tDays' @::@ 'Maybe' 'Int'
---
--- * 'tStorageClass' @::@ 'Maybe' 'TransitionStorageClass'
---
-transition :: Transition
-transition = Transition
-    { _tDate         = Nothing
-    , _tDays         = Nothing
-    , _tStorageClass = Nothing
-    }
-
--- | Indicates at what date the object is to be moved or deleted. Should be in GMT
--- ISO 8601 Format.
-tDate :: Lens' Transition (Maybe UTCTime)
-tDate = lens _tDate (\s a -> s { _tDate = a }) . mapping _Time
-
--- | Indicates the lifetime, in days, of the objects that are subject to the rule.
--- The value must be a non-zero positive integer.
-tDays :: Lens' Transition (Maybe Int)
-tDays = lens _tDays (\s a -> s { _tDays = a })
-
--- | The class of storage used to store the object.
-tStorageClass :: Lens' Transition (Maybe TransitionStorageClass)
-tStorageClass = lens _tStorageClass (\s a -> s { _tStorageClass = a })
-
-instance FromXML Transition where
-    parseXML x = Transition
-        <$> x .@? "Date"
-        <*> x .@? "Days"
-        <*> x .@? "StorageClass"
-
-instance ToXML Transition where
-    toXML Transition{..} = nodes "Transition"
-        [ "Date"         =@ _tDate
-        , "Days"         =@ _tDays
-        , "StorageClass" =@ _tStorageClass
-        ]
-
-data DeleteMarkerEntry = DeleteMarkerEntry
-    { _dmeIsLatest     :: Maybe Bool
-    , _dmeKey          :: Maybe Text
-    , _dmeLastModified :: Maybe RFC822
-    , _dmeOwner        :: Maybe Owner
-    , _dmeVersionId    :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'DeleteMarkerEntry' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dmeIsLatest' @::@ 'Maybe' 'Bool'
---
--- * 'dmeKey' @::@ 'Maybe' 'Text'
---
--- * 'dmeLastModified' @::@ 'Maybe' 'UTCTime'
---
--- * 'dmeOwner' @::@ 'Maybe' 'Owner'
---
--- * 'dmeVersionId' @::@ 'Maybe' 'Text'
---
-deleteMarkerEntry :: DeleteMarkerEntry
-deleteMarkerEntry = DeleteMarkerEntry
-    { _dmeOwner        = Nothing
-    , _dmeKey          = Nothing
-    , _dmeVersionId    = Nothing
-    , _dmeIsLatest     = Nothing
-    , _dmeLastModified = Nothing
-    }
-
--- | Specifies whether the object is (true) or is not (false) the latest version
--- of an object.
-dmeIsLatest :: Lens' DeleteMarkerEntry (Maybe Bool)
-dmeIsLatest = lens _dmeIsLatest (\s a -> s { _dmeIsLatest = a })
-
--- | The object key.
-dmeKey :: Lens' DeleteMarkerEntry (Maybe Text)
-dmeKey = lens _dmeKey (\s a -> s { _dmeKey = a })
-
--- | Date and time the object was last modified.
-dmeLastModified :: Lens' DeleteMarkerEntry (Maybe UTCTime)
-dmeLastModified = lens _dmeLastModified (\s a -> s { _dmeLastModified = a }) . mapping _Time
-
-dmeOwner :: Lens' DeleteMarkerEntry (Maybe Owner)
-dmeOwner = lens _dmeOwner (\s a -> s { _dmeOwner = a })
-
--- | Version ID of an object.
-dmeVersionId :: Lens' DeleteMarkerEntry (Maybe Text)
-dmeVersionId = lens _dmeVersionId (\s a -> s { _dmeVersionId = a })
-
-instance FromXML DeleteMarkerEntry where
-    parseXML x = DeleteMarkerEntry
-        <$> x .@? "IsLatest"
-        <*> x .@? "Key"
-        <*> x .@? "LastModified"
-        <*> x .@? "Owner"
-        <*> x .@? "VersionId"
-
-instance ToXML DeleteMarkerEntry where
-    toXML DeleteMarkerEntry{..} = nodes "DeleteMarkerEntry"
-        [ "Owner"        =@ _dmeOwner
-        , "Key"          =@ _dmeKey
-        , "VersionId"    =@ _dmeVersionId
-        , "IsLatest"     =@ _dmeIsLatest
-        , "LastModified" =@ _dmeLastModified
-        ]
-
-data ExpirationStatus
-    = Disabled -- ^ Disabled
-    | Enabled  -- ^ Enabled
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable ExpirationStatus
-
-instance FromText ExpirationStatus where
-    parser = takeLowerText >>= \case
-        "disabled" -> pure Disabled
-        "enabled"  -> pure Enabled
-        e          -> fail $
-            "Failure parsing ExpirationStatus from " ++ show e
-
-instance ToText ExpirationStatus where
-    toText = \case
-        Disabled -> "Disabled"
-        Enabled  -> "Enabled"
-
-instance ToByteString ExpirationStatus
-instance ToHeader     ExpirationStatus
-instance ToQuery      ExpirationStatus
-
-instance FromXML ExpirationStatus where
-    parseXML = parseXMLText "ExpirationStatus"
-
-instance ToXML ExpirationStatus where
-    toXML = toXMLText
-
-data Part = Part
-    { _pETag         :: Maybe Text
-    , _pLastModified :: Maybe RFC822
-    , _pPartNumber   :: Maybe Int
-    , _pSize         :: Maybe Int
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'Part' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'pETag' @::@ 'Maybe' 'Text'
---
--- * 'pLastModified' @::@ 'Maybe' 'UTCTime'
---
--- * 'pPartNumber' @::@ 'Maybe' 'Int'
---
--- * 'pSize' @::@ 'Maybe' 'Int'
---
-part :: Part
-part = Part
-    { _pPartNumber   = Nothing
-    , _pLastModified = Nothing
-    , _pETag         = Nothing
-    , _pSize         = Nothing
-    }
-
--- | Entity tag returned when the part was uploaded.
-pETag :: Lens' Part (Maybe Text)
-pETag = lens _pETag (\s a -> s { _pETag = a })
-
--- | Date and time at which the part was uploaded.
-pLastModified :: Lens' Part (Maybe UTCTime)
-pLastModified = lens _pLastModified (\s a -> s { _pLastModified = a }) . mapping _Time
-
--- | Part number identifying the part.
-pPartNumber :: Lens' Part (Maybe Int)
-pPartNumber = lens _pPartNumber (\s a -> s { _pPartNumber = a })
-
--- | Size of the uploaded part data.
-pSize :: Lens' Part (Maybe Int)
-pSize = lens _pSize (\s a -> s { _pSize = a })
-
-instance FromXML Part where
-    parseXML x = Part
-        <$> x .@? "ETag"
-        <*> x .@? "LastModified"
-        <*> x .@? "PartNumber"
-        <*> x .@? "Size"
-
-instance ToXML Part where
-    toXML Part{..} = nodes "Part"
-        [ "PartNumber"   =@ _pPartNumber
-        , "LastModified" =@ _pLastModified
-        , "ETag"         =@ _pETag
-        , "Size"         =@ _pSize
-        ]
-
-data VersioningConfiguration = VersioningConfiguration
-    { _vcMFADelete :: Maybe MFADelete
-    , _vcStatus    :: Maybe BucketVersioningStatus
-    } deriving (Eq, Read, Show)
-
--- | 'VersioningConfiguration' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'vcMFADelete' @::@ 'Maybe' 'MFADelete'
---
--- * 'vcStatus' @::@ 'Maybe' 'BucketVersioningStatus'
---
-versioningConfiguration :: VersioningConfiguration
-versioningConfiguration = VersioningConfiguration
-    { _vcMFADelete = Nothing
-    , _vcStatus    = Nothing
-    }
-
--- | Specifies whether MFA delete is enabled in the bucket versioning
--- configuration. This element is only returned if the bucket has been
--- configured with MFA delete. If the bucket has never been so configured, this
--- element is not returned.
-vcMFADelete :: Lens' VersioningConfiguration (Maybe MFADelete)
-vcMFADelete = lens _vcMFADelete (\s a -> s { _vcMFADelete = a })
-
--- | The versioning state of the bucket.
-vcStatus :: Lens' VersioningConfiguration (Maybe BucketVersioningStatus)
-vcStatus = lens _vcStatus (\s a -> s { _vcStatus = a })
-
-instance FromXML VersioningConfiguration where
-    parseXML x = VersioningConfiguration
-        <$> x .@? "MfaDelete"
-        <*> x .@? "Status"
-
-instance ToXML VersioningConfiguration where
-    toXML VersioningConfiguration{..} = nodes "VersioningConfiguration"
-        [ "MfaDelete" =@ _vcMFADelete
-        , "Status"    =@ _vcStatus
-        ]
-
-data Tag = Tag
-    { _tagKey   :: Text
-    , _tagValue :: Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'Tag' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'tagKey' @::@ 'Text'
---
--- * 'tagValue' @::@ 'Text'
---
-tag :: Text -- ^ 'tagKey'
-    -> Text -- ^ 'tagValue'
-    -> Tag
-tag p1 p2 = Tag
-    { _tagKey   = p1
-    , _tagValue = p2
-    }
-
--- | Name of the tag.
-tagKey :: Lens' Tag Text
-tagKey = lens _tagKey (\s a -> s { _tagKey = a })
-
--- | Value of the tag.
-tagValue :: Lens' Tag Text
-tagValue = lens _tagValue (\s a -> s { _tagValue = a })
-
-instance FromXML Tag where
-    parseXML x = Tag
-        <$> x .@  "Key"
-        <*> x .@  "Value"
-
-instance ToXML Tag where
-    toXML Tag{..} = nodes "Tag"
-        [ "Key"   =@ _tagKey
-        , "Value" =@ _tagValue
-        ]
-
-data ObjectStorageClass
-    = Glacier           -- ^ GLACIER
-    | ReducedRedundancy -- ^ REDUCED_REDUNDANCY
-    | Standard          -- ^ STANDARD
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable ObjectStorageClass
-
-instance FromText ObjectStorageClass where
-    parser = takeLowerText >>= \case
-        "glacier"            -> pure Glacier
-        "reduced_redundancy" -> pure ReducedRedundancy
-        "standard"           -> pure Standard
-        e                    -> fail $
-            "Failure parsing ObjectStorageClass from " ++ show e
-
-instance ToText ObjectStorageClass where
-    toText = \case
-        Glacier           -> "GLACIER"
-        ReducedRedundancy -> "REDUCED_REDUNDANCY"
-        Standard          -> "STANDARD"
-
-instance ToByteString ObjectStorageClass
-instance ToHeader     ObjectStorageClass
-instance ToQuery      ObjectStorageClass
-
-instance FromXML ObjectStorageClass where
-    parseXML = parseXMLText "ObjectStorageClass"
-
-instance ToXML ObjectStorageClass where
-    toXML = toXMLText
-
-data MetadataDirective
-    = Copy    -- ^ COPY
-    | Replace -- ^ REPLACE
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable MetadataDirective
-
-instance FromText MetadataDirective where
-    parser = takeLowerText >>= \case
-        "copy"    -> pure Copy
-        "replace" -> pure Replace
-        e         -> fail $
-            "Failure parsing MetadataDirective from " ++ show e
-
-instance ToText MetadataDirective where
-    toText = \case
-        Copy    -> "COPY"
-        Replace -> "REPLACE"
-
-instance ToByteString MetadataDirective
-instance ToHeader     MetadataDirective
-instance ToQuery      MetadataDirective
-
-instance FromXML MetadataDirective where
-    parseXML = parseXMLText "MetadataDirective"
-
-instance ToXML MetadataDirective where
-    toXML = toXMLText
-
-data ReplicationRule = ReplicationRule
-    { _rrDestination :: Destination
-    , _rrID          :: Maybe Text
-    , _rrPrefix      :: Text
-    , _rrStatus      :: ReplicationRuleStatus
-    } deriving (Eq, Read, Show)
-
--- | 'ReplicationRule' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'rrDestination' @::@ 'Destination'
---
--- * 'rrID' @::@ 'Maybe' 'Text'
---
--- * 'rrPrefix' @::@ 'Text'
---
--- * 'rrStatus' @::@ 'ReplicationRuleStatus'
---
-replicationRule :: Text -- ^ 'rrPrefix'
-                -> ReplicationRuleStatus -- ^ 'rrStatus'
-                -> Destination -- ^ 'rrDestination'
-                -> ReplicationRule
-replicationRule p1 p2 p3 = ReplicationRule
-    { _rrPrefix      = p1
-    , _rrStatus      = p2
-    , _rrDestination = p3
-    , _rrID          = Nothing
-    }
-
-rrDestination :: Lens' ReplicationRule Destination
-rrDestination = lens _rrDestination (\s a -> s { _rrDestination = a })
-
--- | Unique identifier for the rule. The value cannot be longer than 255
--- characters.
-rrID :: Lens' ReplicationRule (Maybe Text)
-rrID = lens _rrID (\s a -> s { _rrID = a })
-
--- | Object keyname prefix identifying one or more objects to which the rule
--- applies. Maximum prefix length can be up to 1,024 characters. Overlapping
--- prefixes are not supported.
-rrPrefix :: Lens' ReplicationRule Text
-rrPrefix = lens _rrPrefix (\s a -> s { _rrPrefix = a })
-
--- | The rule is ignored if status is not Enabled.
-rrStatus :: Lens' ReplicationRule ReplicationRuleStatus
-rrStatus = lens _rrStatus (\s a -> s { _rrStatus = a })
-
-instance FromXML ReplicationRule where
-    parseXML x = ReplicationRule
-        <$> x .@  "Destination"
-        <*> x .@? "ID"
-        <*> x .@  "Prefix"
-        <*> x .@  "Status"
-
-instance ToXML ReplicationRule where
-    toXML ReplicationRule{..} = nodes "ReplicationRule"
-        [ "ID"          =@ _rrID
-        , "Prefix"      =@ _rrPrefix
-        , "Status"      =@ _rrStatus
-        , "Destination" =@ _rrDestination
-        ]
-
-data RedirectAllRequestsTo = RedirectAllRequestsTo
-    { _rartHostName :: Text
-    , _rartProtocol :: Maybe Protocol
-    } deriving (Eq, Read, Show)
-
--- | 'RedirectAllRequestsTo' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'rartHostName' @::@ 'Text'
---
--- * 'rartProtocol' @::@ 'Maybe' 'Protocol'
---
-redirectAllRequestsTo :: Text -- ^ 'rartHostName'
-                      -> RedirectAllRequestsTo
-redirectAllRequestsTo p1 = RedirectAllRequestsTo
-    { _rartHostName = p1
-    , _rartProtocol = Nothing
-    }
-
--- | Name of the host where requests will be redirected.
-rartHostName :: Lens' RedirectAllRequestsTo Text
-rartHostName = lens _rartHostName (\s a -> s { _rartHostName = a })
-
--- | Protocol to use (http, https) when redirecting requests. The default is the
--- protocol that is used in the original request.
-rartProtocol :: Lens' RedirectAllRequestsTo (Maybe Protocol)
-rartProtocol = lens _rartProtocol (\s a -> s { _rartProtocol = a })
-
-instance FromXML RedirectAllRequestsTo where
-    parseXML x = RedirectAllRequestsTo
-        <$> x .@  "HostName"
-        <*> x .@? "Protocol"
-
-instance ToXML RedirectAllRequestsTo where
-    toXML RedirectAllRequestsTo{..} = nodes "RedirectAllRequestsTo"
-        [ "HostName" =@ _rartHostName
-        , "Protocol" =@ _rartProtocol
-        ]
-
-data RoutingRule = RoutingRule
-    { _rrCondition :: Maybe Condition
-    , _rrRedirect  :: Redirect
-    } deriving (Eq, Read, Show)
-
--- | 'RoutingRule' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'rrCondition' @::@ 'Maybe' 'Condition'
---
--- * 'rrRedirect' @::@ 'Redirect'
---
-routingRule :: Redirect -- ^ 'rrRedirect'
-            -> RoutingRule
-routingRule p1 = RoutingRule
-    { _rrRedirect  = p1
-    , _rrCondition = Nothing
-    }
-
--- | A container for describing a condition that must be met for the specified
--- redirect to apply. For example, 1. If request is for pages in the /docs
--- folder, redirect to the /documents folder. 2. If request results in HTTP
--- error 4xx, redirect request to another host where you might process the error.
-rrCondition :: Lens' RoutingRule (Maybe Condition)
-rrCondition = lens _rrCondition (\s a -> s { _rrCondition = a })
-
--- | Container for redirect information. You can redirect requests to another
--- host, to another page, or with another protocol. In the event of an error,
--- you can can specify a different error code to return.
-rrRedirect :: Lens' RoutingRule Redirect
-rrRedirect = lens _rrRedirect (\s a -> s { _rrRedirect = a })
-
-instance FromXML RoutingRule where
-    parseXML x = RoutingRule
-        <$> x .@? "Condition"
-        <*> x .@  "Redirect"
-
-instance ToXML RoutingRule where
-    toXML RoutingRule{..} = nodes "RoutingRule"
-        [ "Condition" =@ _rrCondition
-        , "Redirect"  =@ _rrRedirect
-        ]
-
-data NotificationConfiguration = NotificationConfiguration
-    { _ncLambdaFunctionConfigurations :: List "CloudFunctionConfiguration" LambdaFunctionConfiguration
-    , _ncQueueConfigurations          :: List "QueueConfiguration" QueueConfiguration
-    , _ncTopicConfigurations          :: List "TopicConfiguration" TopicConfiguration
-    } deriving (Eq, Read, Show)
-
--- | 'NotificationConfiguration' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ncLambdaFunctionConfigurations' @::@ ['LambdaFunctionConfiguration']
---
--- * 'ncQueueConfigurations' @::@ ['QueueConfiguration']
---
--- * 'ncTopicConfigurations' @::@ ['TopicConfiguration']
---
-notificationConfiguration :: NotificationConfiguration
-notificationConfiguration = NotificationConfiguration
-    { _ncTopicConfigurations          = mempty
-    , _ncQueueConfigurations          = mempty
-    , _ncLambdaFunctionConfigurations = mempty
-    }
-
-ncLambdaFunctionConfigurations :: Lens' NotificationConfiguration [LambdaFunctionConfiguration]
-ncLambdaFunctionConfigurations =
-    lens _ncLambdaFunctionConfigurations
-        (\s a -> s { _ncLambdaFunctionConfigurations = a })
-            . _List
-
-ncQueueConfigurations :: Lens' NotificationConfiguration [QueueConfiguration]
-ncQueueConfigurations =
-    lens _ncQueueConfigurations (\s a -> s { _ncQueueConfigurations = a })
-        . _List
-
-ncTopicConfigurations :: Lens' NotificationConfiguration [TopicConfiguration]
-ncTopicConfigurations =
-    lens _ncTopicConfigurations (\s a -> s { _ncTopicConfigurations = a })
-        . _List
-
-instance FromXML NotificationConfiguration where
-    parseXML x = NotificationConfiguration
-        <$> parseXML x
-        <*> parseXML x
-        <*> parseXML x
-
-instance ToXMLRoot NotificationConfiguration where
-    toXMLRoot NotificationConfiguration{..} = namespaced ns "NotificationConfiguration"
-        [ "TopicConfiguration"         =@ _ncTopicConfigurations
-        , "QueueConfiguration"         =@ _ncQueueConfigurations
-        , "CloudFunctionConfiguration" =@ _ncLambdaFunctionConfigurations
-        ]
-
-instance ToXML NotificationConfiguration
-
-data S3ServiceError = S3ServiceError
-    { _sseCode      :: Maybe Text
-    , _sseKey       :: Maybe Text
-    , _sseMessage   :: Maybe Text
-    , _sseVersionId :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'S3ServiceError' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'sseCode' @::@ 'Maybe' 'Text'
---
--- * 'sseKey' @::@ 'Maybe' 'Text'
---
--- * 'sseMessage' @::@ 'Maybe' 'Text'
---
--- * 'sseVersionId' @::@ 'Maybe' 'Text'
---
-s3ServiceError :: S3ServiceError
-s3ServiceError = S3ServiceError
-    { _sseKey       = Nothing
-    , _sseVersionId = Nothing
-    , _sseCode      = Nothing
-    , _sseMessage   = Nothing
-    }
-
-sseCode :: Lens' S3ServiceError (Maybe Text)
-sseCode = lens _sseCode (\s a -> s { _sseCode = a })
-
-sseKey :: Lens' S3ServiceError (Maybe Text)
-sseKey = lens _sseKey (\s a -> s { _sseKey = a })
-
-sseMessage :: Lens' S3ServiceError (Maybe Text)
-sseMessage = lens _sseMessage (\s a -> s { _sseMessage = a })
-
-sseVersionId :: Lens' S3ServiceError (Maybe Text)
-sseVersionId = lens _sseVersionId (\s a -> s { _sseVersionId = a })
-
-instance FromXML S3ServiceError where
-    parseXML x = S3ServiceError
-        <$> x .@? "Code"
-        <*> x .@? "Key"
-        <*> x .@? "Message"
-        <*> x .@? "VersionId"
-
-instance ToXML S3ServiceError where
-    toXML S3ServiceError{..} = nodes "S3ServiceError"
-        [ "Key"       =@ _sseKey
-        , "VersionId" =@ _sseVersionId
-        , "Code"      =@ _sseCode
-        , "Message"   =@ _sseMessage
-        ]
-
-data ObjectCannedACL
-    = AuthenticatedRead      -- ^ authenticated-read
-    | BucketOwnerFullControl -- ^ bucket-owner-full-control
-    | BucketOwnerRead        -- ^ bucket-owner-read
-    | Private                -- ^ private
-    | PublicRead             -- ^ public-read
-    | PublicReadWrite        -- ^ public-read-write
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable ObjectCannedACL
-
-instance FromText ObjectCannedACL where
-    parser = takeLowerText >>= \case
-        "authenticated-read"        -> pure AuthenticatedRead
-        "bucket-owner-full-control" -> pure BucketOwnerFullControl
-        "bucket-owner-read"         -> pure BucketOwnerRead
-        "private"                   -> pure Private
-        "public-read"               -> pure PublicRead
-        "public-read-write"         -> pure PublicReadWrite
-        e                           -> fail $
-            "Failure parsing ObjectCannedACL from " ++ show e
-
-instance ToText ObjectCannedACL where
-    toText = \case
-        AuthenticatedRead      -> "authenticated-read"
-        BucketOwnerFullControl -> "bucket-owner-full-control"
-        BucketOwnerRead        -> "bucket-owner-read"
-        Private                -> "private"
-        PublicRead             -> "public-read"
-        PublicReadWrite        -> "public-read-write"
-
-instance ToByteString ObjectCannedACL
-instance ToHeader     ObjectCannedACL
-instance ToQuery      ObjectCannedACL
-
-instance FromXML ObjectCannedACL where
-    parseXML = parseXMLText "ObjectCannedACL"
-
-instance ToXML ObjectCannedACL where
-    toXML = toXMLText
-
-data BucketVersioningStatus
-    = BVSEnabled   -- ^ Enabled
-    | BVSSuspended -- ^ Suspended
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable BucketVersioningStatus
-
-instance FromText BucketVersioningStatus where
-    parser = takeLowerText >>= \case
-        "enabled"   -> pure BVSEnabled
-        "suspended" -> pure BVSSuspended
-        e           -> fail $
-            "Failure parsing BucketVersioningStatus from " ++ show e
-
-instance ToText BucketVersioningStatus where
-    toText = \case
-        BVSEnabled   -> "Enabled"
-        BVSSuspended -> "Suspended"
-
-instance ToByteString BucketVersioningStatus
-instance ToHeader     BucketVersioningStatus
-instance ToQuery      BucketVersioningStatus
-
-instance FromXML BucketVersioningStatus where
-    parseXML = parseXMLText "BucketVersioningStatus"
-
-instance ToXML BucketVersioningStatus where
-    toXML = toXMLText
-
-data DeletedObject = DeletedObject
-    { _do1DeleteMarker          :: Maybe Bool
-    , _do1DeleteMarkerVersionId :: Maybe Text
-    , _do1Key                   :: Maybe Text
-    , _do1VersionId             :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'DeletedObject' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'do1DeleteMarker' @::@ 'Maybe' 'Bool'
---
--- * 'do1DeleteMarkerVersionId' @::@ 'Maybe' 'Text'
---
--- * 'do1Key' @::@ 'Maybe' 'Text'
---
--- * 'do1VersionId' @::@ 'Maybe' 'Text'
---
-deletedObject :: DeletedObject
-deletedObject = DeletedObject
-    { _do1Key                   = Nothing
-    , _do1VersionId             = Nothing
-    , _do1DeleteMarker          = Nothing
-    , _do1DeleteMarkerVersionId = Nothing
-    }
-
-do1DeleteMarker :: Lens' DeletedObject (Maybe Bool)
-do1DeleteMarker = lens _do1DeleteMarker (\s a -> s { _do1DeleteMarker = a })
-
-do1DeleteMarkerVersionId :: Lens' DeletedObject (Maybe Text)
-do1DeleteMarkerVersionId =
-    lens _do1DeleteMarkerVersionId
-        (\s a -> s { _do1DeleteMarkerVersionId = a })
-
-do1Key :: Lens' DeletedObject (Maybe Text)
-do1Key = lens _do1Key (\s a -> s { _do1Key = a })
-
-do1VersionId :: Lens' DeletedObject (Maybe Text)
-do1VersionId = lens _do1VersionId (\s a -> s { _do1VersionId = a })
-
-instance FromXML DeletedObject where
-    parseXML x = DeletedObject
-        <$> x .@? "DeleteMarker"
-        <*> x .@? "DeleteMarkerVersionId"
-        <*> x .@? "Key"
-        <*> x .@? "VersionId"
-
-instance ToXML DeletedObject where
-    toXML DeletedObject{..} = nodes "DeletedObject"
-        [ "Key"                   =@ _do1Key
-        , "VersionId"             =@ _do1VersionId
-        , "DeleteMarker"          =@ _do1DeleteMarker
-        , "DeleteMarkerVersionId" =@ _do1DeleteMarkerVersionId
-        ]
-
-data ObjectVersionStorageClass
-    = OVSCStandard -- ^ STANDARD
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable ObjectVersionStorageClass
-
-instance FromText ObjectVersionStorageClass where
-    parser = takeLowerText >>= \case
-        "standard" -> pure OVSCStandard
-        e          -> fail $
-            "Failure parsing ObjectVersionStorageClass from " ++ show e
-
-instance ToText ObjectVersionStorageClass where
-    toText OVSCStandard = "STANDARD"
-
-instance ToByteString ObjectVersionStorageClass
-instance ToHeader     ObjectVersionStorageClass
-instance ToQuery      ObjectVersionStorageClass
-
-instance FromXML ObjectVersionStorageClass where
-    parseXML = parseXMLText "ObjectVersionStorageClass"
-
-instance ToXML ObjectVersionStorageClass where
-    toXML = toXMLText
-
-data CopyPartResult = CopyPartResult
-    { _cprETag         :: Maybe Text
-    , _cprLastModified :: Maybe RFC822
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'CopyPartResult' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cprETag' @::@ 'Maybe' 'Text'
---
--- * 'cprLastModified' @::@ 'Maybe' 'UTCTime'
---
-copyPartResult :: CopyPartResult
-copyPartResult = CopyPartResult
-    { _cprETag         = Nothing
-    , _cprLastModified = Nothing
-    }
-
--- | Entity tag of the object.
-cprETag :: Lens' CopyPartResult (Maybe Text)
-cprETag = lens _cprETag (\s a -> s { _cprETag = a })
-
--- | Date and time at which the object was uploaded.
-cprLastModified :: Lens' CopyPartResult (Maybe UTCTime)
-cprLastModified = lens _cprLastModified (\s a -> s { _cprLastModified = a }) . mapping _Time
-
-instance FromXML CopyPartResult where
-    parseXML x = CopyPartResult
-        <$> x .@? "ETag"
-        <*> x .@? "LastModified"
-
-instance ToXML CopyPartResult where
-    toXML CopyPartResult{..} = nodes "CopyPartResult"
-        [ "ETag"         =@ _cprETag
-        , "LastModified" =@ _cprLastModified
-        ]
-
-data EncodingType
-    = Url -- ^ url
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable EncodingType
-
-instance FromText EncodingType where
-    parser = takeLowerText >>= \case
-        "url" -> pure Url
-        e     -> fail $
-            "Failure parsing EncodingType from " ++ show e
-
-instance ToText EncodingType where
-    toText Url = "url"
-
-instance ToByteString EncodingType
-instance ToHeader     EncodingType
-instance ToQuery      EncodingType
-
-instance FromXML EncodingType where
-    parseXML = parseXMLText "EncodingType"
-
-instance ToXML EncodingType where
-    toXML = toXMLText
-
-newtype RequestPaymentConfiguration = RequestPaymentConfiguration
-    { _rpcPayer :: Payer
-    } deriving (Eq, Read, Show)
-
--- | 'RequestPaymentConfiguration' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'rpcPayer' @::@ 'Payer'
---
-requestPaymentConfiguration :: Payer -- ^ 'rpcPayer'
-                            -> RequestPaymentConfiguration
-requestPaymentConfiguration p1 = RequestPaymentConfiguration
-    { _rpcPayer = p1
-    }
-
--- | Specifies who pays for the download and request fees.
-rpcPayer :: Lens' RequestPaymentConfiguration Payer
-rpcPayer = lens _rpcPayer (\s a -> s { _rpcPayer = a })
-
-instance FromXML RequestPaymentConfiguration where
-    parseXML x = RequestPaymentConfiguration
-        <$> x .@  "Payer"
-
-instance ToXML RequestPaymentConfiguration where
-    toXML RequestPaymentConfiguration{..} = nodes "RequestPaymentConfiguration"
-        [ "Payer" =@ _rpcPayer
-        ]
-
-data CORSRule = CORSRule
-    { _corsrAllowedHeaders :: List "AllowedHeader" Text
-    , _corsrAllowedMethods :: List "AllowedMethod" Text
-    , _corsrAllowedOrigins :: List "AllowedOrigin" Text
-    , _corsrExposeHeaders  :: List "ExposeHeader" Text
-    , _corsrMaxAgeSeconds  :: Maybe Int
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'CORSRule' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'corsrAllowedHeaders' @::@ ['Text']
---
--- * 'corsrAllowedMethods' @::@ ['Text']
---
--- * 'corsrAllowedOrigins' @::@ ['Text']
---
--- * 'corsrExposeHeaders' @::@ ['Text']
---
--- * 'corsrMaxAgeSeconds' @::@ 'Maybe' 'Int'
---
-corsrule :: CORSRule
-corsrule = CORSRule
-    { _corsrAllowedHeaders = mempty
-    , _corsrAllowedMethods = mempty
-    , _corsrAllowedOrigins = mempty
-    , _corsrExposeHeaders  = mempty
-    , _corsrMaxAgeSeconds  = Nothing
-    }
-
--- | Specifies which headers are allowed in a pre-flight OPTIONS request.
-corsrAllowedHeaders :: Lens' CORSRule [Text]
-corsrAllowedHeaders =
-    lens _corsrAllowedHeaders (\s a -> s { _corsrAllowedHeaders = a })
-        . _List
-
--- | Identifies HTTP methods that the domain/origin specified in the rule is
--- allowed to execute.
-corsrAllowedMethods :: Lens' CORSRule [Text]
-corsrAllowedMethods =
-    lens _corsrAllowedMethods (\s a -> s { _corsrAllowedMethods = a })
-        . _List
-
--- | One or more origins you want customers to be able to access the bucket from.
-corsrAllowedOrigins :: Lens' CORSRule [Text]
-corsrAllowedOrigins =
-    lens _corsrAllowedOrigins (\s a -> s { _corsrAllowedOrigins = a })
-        . _List
-
--- | One or more headers in the response that you want customers to be able to
--- access from their applications (for example, from a JavaScript XMLHttpRequest
--- object).
-corsrExposeHeaders :: Lens' CORSRule [Text]
-corsrExposeHeaders =
-    lens _corsrExposeHeaders (\s a -> s { _corsrExposeHeaders = a })
-        . _List
-
--- | The time in seconds that your browser is to cache the preflight response for
--- the specified resource.
-corsrMaxAgeSeconds :: Lens' CORSRule (Maybe Int)
-corsrMaxAgeSeconds =
-    lens _corsrMaxAgeSeconds (\s a -> s { _corsrMaxAgeSeconds = a })
-
-instance FromXML CORSRule where
-    parseXML x = CORSRule
-        <$> parseXML x
-        <*> parseXML x
-        <*> parseXML x
-        <*> parseXML x
-        <*> x .@? "MaxAgeSeconds"
-
-instance ToXML CORSRule where
-    toXML CORSRule{..} = nodes "CORSRule"
-        [ unsafeToXML        _corsrAllowedHeaders
-        , unsafeToXML        _corsrAllowedMethods
-        , unsafeToXML        _corsrAllowedOrigins
-        , unsafeToXML        _corsrExposeHeaders
-        , "MaxAgeSeconds" =@ _corsrMaxAgeSeconds
-        ]
-
-data WebsiteConfiguration = WebsiteConfiguration
-    { _wcErrorDocument         :: Maybe ErrorDocument
-    , _wcIndexDocument         :: Maybe IndexDocument
-    , _wcRedirectAllRequestsTo :: Maybe RedirectAllRequestsTo
-    , _wcRoutingRules          :: List "RoutingRule" RoutingRule
-    } deriving (Eq, Read, Show)
-
--- | 'WebsiteConfiguration' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'wcErrorDocument' @::@ 'Maybe' 'ErrorDocument'
---
--- * 'wcIndexDocument' @::@ 'Maybe' 'IndexDocument'
---
--- * 'wcRedirectAllRequestsTo' @::@ 'Maybe' 'RedirectAllRequestsTo'
---
--- * 'wcRoutingRules' @::@ ['RoutingRule']
---
-websiteConfiguration :: WebsiteConfiguration
-websiteConfiguration = WebsiteConfiguration
-    { _wcErrorDocument         = Nothing
-    , _wcIndexDocument         = Nothing
-    , _wcRedirectAllRequestsTo = Nothing
-    , _wcRoutingRules          = mempty
-    }
-
-wcErrorDocument :: Lens' WebsiteConfiguration (Maybe ErrorDocument)
-wcErrorDocument = lens _wcErrorDocument (\s a -> s { _wcErrorDocument = a })
-
-wcIndexDocument :: Lens' WebsiteConfiguration (Maybe IndexDocument)
-wcIndexDocument = lens _wcIndexDocument (\s a -> s { _wcIndexDocument = a })
-
-wcRedirectAllRequestsTo :: Lens' WebsiteConfiguration (Maybe RedirectAllRequestsTo)
-wcRedirectAllRequestsTo =
-    lens _wcRedirectAllRequestsTo (\s a -> s { _wcRedirectAllRequestsTo = a })
-
-wcRoutingRules :: Lens' WebsiteConfiguration [RoutingRule]
-wcRoutingRules = lens _wcRoutingRules (\s a -> s { _wcRoutingRules = a }) . _List
-
-instance FromXML WebsiteConfiguration where
-    parseXML x = WebsiteConfiguration
-        <$> x .@? "ErrorDocument"
-        <*> x .@? "IndexDocument"
-        <*> x .@? "RedirectAllRequestsTo"
-        <*> x .@? "RoutingRules" .!@ mempty
-
-instance ToXML WebsiteConfiguration where
-    toXML WebsiteConfiguration{..} = nodes "WebsiteConfiguration"
-        [ "ErrorDocument"         =@ _wcErrorDocument
-        , "IndexDocument"         =@ _wcIndexDocument
-        , "RedirectAllRequestsTo" =@ _wcRedirectAllRequestsTo
-        , "RoutingRules"          =@ _wcRoutingRules
-        ]
-
-data NoncurrentVersionTransition = NoncurrentVersionTransition
-    { _nvtNoncurrentDays :: Int
-    , _nvtStorageClass   :: TransitionStorageClass
-    } deriving (Eq, Read, Show)
-
--- | 'NoncurrentVersionTransition' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'nvtNoncurrentDays' @::@ 'Int'
---
--- * 'nvtStorageClass' @::@ 'TransitionStorageClass'
---
-noncurrentVersionTransition :: Int -- ^ 'nvtNoncurrentDays'
-                            -> TransitionStorageClass -- ^ 'nvtStorageClass'
-                            -> NoncurrentVersionTransition
-noncurrentVersionTransition p1 p2 = NoncurrentVersionTransition
-    { _nvtNoncurrentDays = p1
-    , _nvtStorageClass   = p2
-    }
-
--- | Specifies the number of days an object is noncurrent before Amazon S3 can
--- perform the associated action. For information about the noncurrent days
--- calculations, see </AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
--- in the Amazon Simple Storage Service Developer Guide.
-nvtNoncurrentDays :: Lens' NoncurrentVersionTransition Int
-nvtNoncurrentDays =
-    lens _nvtNoncurrentDays (\s a -> s { _nvtNoncurrentDays = a })
-
--- | The class of storage used to store the object.
-nvtStorageClass :: Lens' NoncurrentVersionTransition TransitionStorageClass
-nvtStorageClass = lens _nvtStorageClass (\s a -> s { _nvtStorageClass = a })
-
-instance FromXML NoncurrentVersionTransition where
-    parseXML x = NoncurrentVersionTransition
-        <$> x .@  "NoncurrentDays"
-        <*> x .@  "StorageClass"
-
-instance ToXML NoncurrentVersionTransition where
-    toXML NoncurrentVersionTransition{..} = nodes "NoncurrentVersionTransition"
-        [ "NoncurrentDays" =@ _nvtNoncurrentDays
-        , "StorageClass"   =@ _nvtStorageClass
-        ]
-
-data Initiator = Initiator
-    { _iDisplayName :: Maybe Text
-    , _iID          :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'Initiator' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'iDisplayName' @::@ 'Maybe' 'Text'
---
--- * 'iID' @::@ 'Maybe' 'Text'
---
-initiator :: Initiator
-initiator = Initiator
-    { _iID          = Nothing
-    , _iDisplayName = Nothing
-    }
-
--- | Name of the Principal.
-iDisplayName :: Lens' Initiator (Maybe Text)
-iDisplayName = lens _iDisplayName (\s a -> s { _iDisplayName = a })
-
--- | If the principal is an AWS account, it provides the Canonical User ID. If the
--- principal is an IAM User, it provides a user ARN value.
-iID :: Lens' Initiator (Maybe Text)
-iID = lens _iID (\s a -> s { _iID = a })
-
-instance FromXML Initiator where
-    parseXML x = Initiator
-        <$> x .@? "DisplayName"
-        <*> x .@? "ID"
-
-instance ToXML Initiator where
-    toXML Initiator{..} = nodes "Initiator"
-        [ "ID"          =@ _iID
-        , "DisplayName" =@ _iDisplayName
-        ]
-
-data ObjectIdentifier = ObjectIdentifier
-    { _oiKey       :: Text
-    , _oiVersionId :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'ObjectIdentifier' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'oiKey' @::@ 'Text'
---
--- * 'oiVersionId' @::@ 'Maybe' 'Text'
---
-objectIdentifier :: Text -- ^ 'oiKey'
-                 -> ObjectIdentifier
-objectIdentifier p1 = ObjectIdentifier
-    { _oiKey       = p1
-    , _oiVersionId = Nothing
-    }
-
--- | Key name of the object to delete.
-oiKey :: Lens' ObjectIdentifier Text
-oiKey = lens _oiKey (\s a -> s { _oiKey = a })
-
--- | VersionId for the specific version of the object to delete.
-oiVersionId :: Lens' ObjectIdentifier (Maybe Text)
-oiVersionId = lens _oiVersionId (\s a -> s { _oiVersionId = a })
-
-instance FromXML ObjectIdentifier where
-    parseXML x = ObjectIdentifier
-        <$> x .@  "Key"
-        <*> x .@? "VersionId"
-
-instance ToXML ObjectIdentifier where
-    toXML ObjectIdentifier{..} = nodes "ObjectIdentifier"
-        [ "Key"       =@ _oiKey
-        , "VersionId" =@ _oiVersionId
-        ]
-
-data Bucket = Bucket
-    { _bCreationDate :: RFC822
-    , _bName         :: Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'Bucket' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'bCreationDate' @::@ 'UTCTime'
---
--- * 'bName' @::@ 'Text'
---
-bucket :: Text -- ^ 'bName'
-       -> UTCTime -- ^ 'bCreationDate'
-       -> Bucket
-bucket p1 p2 = Bucket
-    { _bName         = p1
-    , _bCreationDate = withIso _Time (const id) p2
-    }
-
--- | Date the bucket was created.
-bCreationDate :: Lens' Bucket UTCTime
-bCreationDate = lens _bCreationDate (\s a -> s { _bCreationDate = a }) . _Time
-
--- | The name of the bucket.
-bName :: Lens' Bucket Text
-bName = lens _bName (\s a -> s { _bName = a })
-
-instance FromXML Bucket where
-    parseXML x = Bucket
-        <$> x .@  "CreationDate"
-        <*> x .@  "Name"
-
-instance ToXML Bucket where
-    toXML Bucket{..} = nodes "Bucket"
-        [ "Name"         =@ _bName
-        , "CreationDate" =@ _bCreationDate
-        ]
-
-data Protocol
-    = Http  -- ^ http
-    | Https -- ^ https
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable Protocol
-
-instance FromText Protocol where
-    parser = takeLowerText >>= \case
-        "http"  -> pure Http
-        "https" -> pure Https
-        e       -> fail $
-            "Failure parsing Protocol from " ++ show e
-
-instance ToText Protocol where
-    toText = \case
-        Http  -> "http"
-        Https -> "https"
-
-instance ToByteString Protocol
-instance ToHeader     Protocol
-instance ToQuery      Protocol
-
-instance FromXML Protocol where
-    parseXML = parseXMLText "Protocol"
-
-instance ToXML Protocol where
-    toXML = toXMLText
-
-data Grant = Grant
-    { _gGrantee    :: Maybe Grantee
-    , _gPermission :: Maybe Permission
-    } deriving (Eq, Read, Show)
-
--- | 'Grant' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gGrantee' @::@ 'Maybe' 'Grantee'
---
--- * 'gPermission' @::@ 'Maybe' 'Permission'
---
-grant :: Grant
-grant = Grant
-    { _gGrantee    = Nothing
-    , _gPermission = Nothing
-    }
-
-gGrantee :: Lens' Grant (Maybe Grantee)
-gGrantee = lens _gGrantee (\s a -> s { _gGrantee = a })
-
--- | Specifies the permission given to the grantee.
-gPermission :: Lens' Grant (Maybe Permission)
-gPermission = lens _gPermission (\s a -> s { _gPermission = a })
-
-instance FromXML Grant where
-    parseXML x = Grant
-        <$> x .@? "Grantee"
-        <*> x .@? "Permission"
-
-instance ToXMLRoot Grant where
-    toXMLRoot Grant{..} = namespaced ns "Grant"
-        [ "Grantee"    =@ _gGrantee
-        , "Permission" =@ _gPermission
-        ]
-
-instance ToXML Grant
-
-data Rule = Rule
-    { _rExpiration                  :: Maybe LifecycleExpiration
-    , _rID                          :: Maybe Text
-    , _rNoncurrentVersionExpiration :: Maybe NoncurrentVersionExpiration
-    , _rNoncurrentVersionTransition :: Maybe NoncurrentVersionTransition
-    , _rPrefix                      :: Text
-    , _rStatus                      :: ExpirationStatus
-    , _rTransition                  :: Maybe Transition
-    } deriving (Eq, Read, Show)
-
--- | 'Rule' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'rExpiration' @::@ 'Maybe' 'LifecycleExpiration'
---
--- * 'rID' @::@ 'Maybe' 'Text'
---
--- * 'rNoncurrentVersionExpiration' @::@ 'Maybe' 'NoncurrentVersionExpiration'
---
--- * 'rNoncurrentVersionTransition' @::@ 'Maybe' 'NoncurrentVersionTransition'
---
--- * 'rPrefix' @::@ 'Text'
---
--- * 'rStatus' @::@ 'ExpirationStatus'
---
--- * 'rTransition' @::@ 'Maybe' 'Transition'
---
-rule :: Text -- ^ 'rPrefix'
-     -> ExpirationStatus -- ^ 'rStatus'
-     -> Rule
-rule p1 p2 = Rule
-    { _rPrefix                      = p1
-    , _rStatus                      = p2
-    , _rExpiration                  = Nothing
-    , _rID                          = Nothing
-    , _rTransition                  = Nothing
-    , _rNoncurrentVersionTransition = Nothing
-    , _rNoncurrentVersionExpiration = Nothing
-    }
-
-rExpiration :: Lens' Rule (Maybe LifecycleExpiration)
-rExpiration = lens _rExpiration (\s a -> s { _rExpiration = a })
-
--- | Unique identifier for the rule. The value cannot be longer than 255
--- characters.
-rID :: Lens' Rule (Maybe Text)
-rID = lens _rID (\s a -> s { _rID = a })
-
-rNoncurrentVersionExpiration :: Lens' Rule (Maybe NoncurrentVersionExpiration)
-rNoncurrentVersionExpiration =
-    lens _rNoncurrentVersionExpiration
-        (\s a -> s { _rNoncurrentVersionExpiration = a })
-
-rNoncurrentVersionTransition :: Lens' Rule (Maybe NoncurrentVersionTransition)
-rNoncurrentVersionTransition =
-    lens _rNoncurrentVersionTransition
-        (\s a -> s { _rNoncurrentVersionTransition = a })
-
--- | Prefix identifying one or more objects to which the rule applies.
-rPrefix :: Lens' Rule Text
-rPrefix = lens _rPrefix (\s a -> s { _rPrefix = a })
-
--- | If 'Enabled', the rule is currently being applied. If 'Disabled', the rule is
--- not currently being applied.
-rStatus :: Lens' Rule ExpirationStatus
-rStatus = lens _rStatus (\s a -> s { _rStatus = a })
-
-rTransition :: Lens' Rule (Maybe Transition)
-rTransition = lens _rTransition (\s a -> s { _rTransition = a })
-
-instance FromXML Rule where
-    parseXML x = Rule
-        <$> x .@? "Expiration"
-        <*> x .@? "ID"
-        <*> x .@? "NoncurrentVersionExpiration"
-        <*> x .@? "NoncurrentVersionTransition"
-        <*> x .@  "Prefix"
-        <*> x .@  "Status"
-        <*> x .@? "Transition"
-
-instance ToXML Rule where
-    toXML Rule{..} = nodes "Rule"
-        [ "Expiration"                  =@ _rExpiration
-        , "ID"                          =@ _rID
-        , "Prefix"                      =@ _rPrefix
-        , "Status"                      =@ _rStatus
-        , "Transition"                  =@ _rTransition
-        , "NoncurrentVersionTransition" =@ _rNoncurrentVersionTransition
-        , "NoncurrentVersionExpiration" =@ _rNoncurrentVersionExpiration
-        ]
-
-data RequestPayer
-    = RPRequester -- ^ requester
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable RequestPayer
-
-instance FromText RequestPayer where
-    parser = takeLowerText >>= \case
-        "requester" -> pure RPRequester
-        e           -> fail $
-            "Failure parsing RequestPayer from " ++ show e
-
-instance ToText RequestPayer where
-    toText RPRequester = "requester"
-
-instance ToByteString RequestPayer
-instance ToHeader     RequestPayer
-instance ToQuery      RequestPayer
-
-instance FromXML RequestPayer where
-    parseXML = parseXMLText "RequestPayer"
-
-instance ToXML RequestPayer where
-    toXML = toXMLText
-
-data TopicConfiguration = TopicConfiguration
-    { _tcEvents   :: List "Event" Event
-    , _tcId       :: Maybe Text
-    , _tcTopicArn :: Text
-    } deriving (Eq, Read, Show)
-
--- | 'TopicConfiguration' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'tcEvents' @::@ ['Event']
---
--- * 'tcId' @::@ 'Maybe' 'Text'
---
--- * 'tcTopicArn' @::@ 'Text'
---
-topicConfiguration :: Text -- ^ 'tcTopicArn'
-                   -> TopicConfiguration
-topicConfiguration p1 = TopicConfiguration
-    { _tcTopicArn = p1
-    , _tcId       = Nothing
-    , _tcEvents   = mempty
-    }
-
-tcEvents :: Lens' TopicConfiguration [Event]
-tcEvents = lens _tcEvents (\s a -> s { _tcEvents = a }) . _List
-
-tcId :: Lens' TopicConfiguration (Maybe Text)
-tcId = lens _tcId (\s a -> s { _tcId = a })
-
--- | Amazon SNS topic ARN to which Amazon S3 will publish a message when it
--- detects events of specified type.
-tcTopicArn :: Lens' TopicConfiguration Text
-tcTopicArn = lens _tcTopicArn (\s a -> s { _tcTopicArn = a })
-
-instance FromXML TopicConfiguration where
-    parseXML x = TopicConfiguration
-        <$> parseXML x
-        <*> x .@? "Id"
-        <*> x .@  "Topic"
-
-instance ToXML TopicConfiguration where
-    toXML TopicConfiguration{..} = nodes "TopicConfiguration"
-        [ "Id"    =@ _tcId
-        , "Topic" =@ _tcTopicArn
-        , unsafeToXML     _tcEvents
-        ]
-
-data QueueConfiguration = QueueConfiguration
-    { _qcEvents   :: List "Event" Event
-    , _qcId       :: Maybe Text
-    , _qcQueueArn :: Text
-    } deriving (Eq, Read, Show)
-
--- | 'QueueConfiguration' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'qcEvents' @::@ ['Event']
---
--- * 'qcId' @::@ 'Maybe' 'Text'
---
--- * 'qcQueueArn' @::@ 'Text'
---
-queueConfiguration :: Text -- ^ 'qcQueueArn'
-                   -> QueueConfiguration
-queueConfiguration p1 = QueueConfiguration
-    { _qcQueueArn = p1
-    , _qcId       = Nothing
-    , _qcEvents   = mempty
-    }
-
-qcEvents :: Lens' QueueConfiguration [Event]
-qcEvents = lens _qcEvents (\s a -> s { _qcEvents = a }) . _List
-
-qcId :: Lens' QueueConfiguration (Maybe Text)
-qcId = lens _qcId (\s a -> s { _qcId = a })
-
--- | Amazon SQS queue ARN to which Amazon S3 will publish a message when it
--- detects events of specified type.
-qcQueueArn :: Lens' QueueConfiguration Text
-qcQueueArn = lens _qcQueueArn (\s a -> s { _qcQueueArn = a })
-
-instance FromXML QueueConfiguration where
-    parseXML x = QueueConfiguration
-        <$> parseXML x
-        <*> x .@? "Id"
-        <*> x .@  "Queue"
-
-instance ToXML QueueConfiguration where
-    toXML QueueConfiguration{..} = nodes "QueueConfiguration"
-        [ "Id"    =@ _qcId
-        , "Queue" =@ _qcQueueArn
-        , unsafeToXML     _qcEvents
-        ]
-
-data Owner = Owner
-    { _oDisplayName :: Maybe Text
-    , _oID          :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'Owner' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'oDisplayName' @::@ 'Maybe' 'Text'
---
--- * 'oID' @::@ 'Maybe' 'Text'
---
-owner :: Owner
-owner = Owner
-    { _oDisplayName = Nothing
-    , _oID          = Nothing
-    }
-
-oDisplayName :: Lens' Owner (Maybe Text)
-oDisplayName = lens _oDisplayName (\s a -> s { _oDisplayName = a })
-
-oID :: Lens' Owner (Maybe Text)
-oID = lens _oID (\s a -> s { _oID = a })
-
-instance FromXML Owner where
-    parseXML x = Owner
-        <$> x .@? "DisplayName"
-        <*> x .@? "ID"
-
-instance ToXMLRoot Owner where
-    toXMLRoot Owner{..} = namespaced ns "Owner"
-        [ "DisplayName" =@ _oDisplayName
-        , "ID"          =@ _oID
-        ]
-
-instance ToXML Owner
-
-newtype BucketLoggingStatus = BucketLoggingStatus
-    { _blsLoggingEnabled :: Maybe LoggingEnabled
-    } deriving (Eq, Read, Show)
-
--- | 'BucketLoggingStatus' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'blsLoggingEnabled' @::@ 'Maybe' 'LoggingEnabled'
---
-bucketLoggingStatus :: BucketLoggingStatus
-bucketLoggingStatus = BucketLoggingStatus
-    { _blsLoggingEnabled = Nothing
-    }
-
-blsLoggingEnabled :: Lens' BucketLoggingStatus (Maybe LoggingEnabled)
-blsLoggingEnabled =
-    lens _blsLoggingEnabled (\s a -> s { _blsLoggingEnabled = a })
-
-instance FromXML BucketLoggingStatus where
-    parseXML x = BucketLoggingStatus
-        <$> x .@? "LoggingEnabled"
-
-instance ToXML BucketLoggingStatus where
-    toXML BucketLoggingStatus{..} = nodes "BucketLoggingStatus"
-        [ "LoggingEnabled" =@ _blsLoggingEnabled
-        ]
-
-data NotificationConfigurationDeprecated = NotificationConfigurationDeprecated
-    { _ncdCloudFunctionConfiguration :: Maybe CloudFunctionConfiguration
-    , _ncdQueueConfiguration         :: Maybe QueueConfigurationDeprecated
-    , _ncdTopicConfiguration         :: Maybe TopicConfigurationDeprecated
-    } deriving (Eq, Read, Show)
-
--- | 'NotificationConfigurationDeprecated' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ncdCloudFunctionConfiguration' @::@ 'Maybe' 'CloudFunctionConfiguration'
---
--- * 'ncdQueueConfiguration' @::@ 'Maybe' 'QueueConfigurationDeprecated'
---
--- * 'ncdTopicConfiguration' @::@ 'Maybe' 'TopicConfigurationDeprecated'
---
-notificationConfigurationDeprecated :: NotificationConfigurationDeprecated
-notificationConfigurationDeprecated = NotificationConfigurationDeprecated
-    { _ncdTopicConfiguration         = Nothing
-    , _ncdQueueConfiguration         = Nothing
-    , _ncdCloudFunctionConfiguration = Nothing
-    }
-
-ncdCloudFunctionConfiguration :: Lens' NotificationConfigurationDeprecated (Maybe CloudFunctionConfiguration)
-ncdCloudFunctionConfiguration =
-    lens _ncdCloudFunctionConfiguration
-        (\s a -> s { _ncdCloudFunctionConfiguration = a })
-
-ncdQueueConfiguration :: Lens' NotificationConfigurationDeprecated (Maybe QueueConfigurationDeprecated)
-ncdQueueConfiguration =
-    lens _ncdQueueConfiguration (\s a -> s { _ncdQueueConfiguration = a })
-
-ncdTopicConfiguration :: Lens' NotificationConfigurationDeprecated (Maybe TopicConfigurationDeprecated)
-ncdTopicConfiguration =
-    lens _ncdTopicConfiguration (\s a -> s { _ncdTopicConfiguration = a })
-
-instance FromXML NotificationConfigurationDeprecated where
-    parseXML x = NotificationConfigurationDeprecated
-        <$> x .@? "CloudFunctionConfiguration"
-        <*> x .@? "QueueConfiguration"
-        <*> x .@? "TopicConfiguration"
-
-instance ToXMLRoot NotificationConfigurationDeprecated where
-    toXMLRoot NotificationConfigurationDeprecated{..} = namespaced ns "NotificationConfigurationDeprecated"
-        [ "TopicConfiguration"         =@ _ncdTopicConfiguration
-        , "QueueConfiguration"         =@ _ncdQueueConfiguration
-        , "CloudFunctionConfiguration" =@ _ncdCloudFunctionConfiguration
-        ]
-
-instance ToXML NotificationConfigurationDeprecated
-
-newtype ErrorDocument = ErrorDocument
-    { _edKey :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
-
--- | 'ErrorDocument' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'edKey' @::@ 'Text'
---
-errorDocument :: Text -- ^ 'edKey'
-              -> ErrorDocument
-errorDocument p1 = ErrorDocument
-    { _edKey = p1
-    }
-
--- | The object key name to use when a 4XX class error occurs.
-edKey :: Lens' ErrorDocument Text
-edKey = lens _edKey (\s a -> s { _edKey = a })
-
-instance FromXML ErrorDocument where
-    parseXML x = ErrorDocument
-        <$> x .@  "Key"
-
-instance ToXML ErrorDocument where
-    toXML ErrorDocument{..} = nodes "ErrorDocument"
-        [ "Key" =@ _edKey
-        ]
-
-data StorageClass
-    = SCReducedRedundancy -- ^ REDUCED_REDUNDANCY
-    | SCStandard          -- ^ STANDARD
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable StorageClass
-
-instance FromText StorageClass where
-    parser = takeLowerText >>= \case
-        "reduced_redundancy" -> pure SCReducedRedundancy
-        "standard"           -> pure SCStandard
-        e                    -> fail $
-            "Failure parsing StorageClass from " ++ show e
-
-instance ToText StorageClass where
-    toText = \case
-        SCReducedRedundancy -> "REDUCED_REDUNDANCY"
-        SCStandard          -> "STANDARD"
-
-instance ToByteString StorageClass
-instance ToHeader     StorageClass
-instance ToQuery      StorageClass
-
-instance FromXML StorageClass where
-    parseXML = parseXMLText "StorageClass"
-
-instance ToXML StorageClass where
-    toXML = toXMLText
-
-data ObjectVersion = ObjectVersion
-    { _ovETag         :: Maybe Text
-    , _ovIsLatest     :: Maybe Bool
-    , _ovKey          :: Maybe Text
-    , _ovLastModified :: Maybe RFC822
-    , _ovOwner        :: Maybe Owner
-    , _ovSize         :: Maybe Int
-    , _ovStorageClass :: Maybe ObjectVersionStorageClass
-    , _ovVersionId    :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'ObjectVersion' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ovETag' @::@ 'Maybe' 'Text'
---
--- * 'ovIsLatest' @::@ 'Maybe' 'Bool'
---
--- * 'ovKey' @::@ 'Maybe' 'Text'
---
--- * 'ovLastModified' @::@ 'Maybe' 'UTCTime'
---
--- * 'ovOwner' @::@ 'Maybe' 'Owner'
---
--- * 'ovSize' @::@ 'Maybe' 'Int'
---
--- * 'ovStorageClass' @::@ 'Maybe' 'ObjectVersionStorageClass'
---
--- * 'ovVersionId' @::@ 'Maybe' 'Text'
---
-objectVersion :: ObjectVersion
-objectVersion = ObjectVersion
-    { _ovETag         = Nothing
-    , _ovSize         = Nothing
-    , _ovStorageClass = Nothing
-    , _ovKey          = Nothing
-    , _ovVersionId    = Nothing
-    , _ovIsLatest     = Nothing
-    , _ovLastModified = Nothing
-    , _ovOwner        = Nothing
-    }
-
-ovETag :: Lens' ObjectVersion (Maybe Text)
-ovETag = lens _ovETag (\s a -> s { _ovETag = a })
-
--- | Specifies whether the object is (true) or is not (false) the latest version
--- of an object.
-ovIsLatest :: Lens' ObjectVersion (Maybe Bool)
-ovIsLatest = lens _ovIsLatest (\s a -> s { _ovIsLatest = a })
-
--- | The object key.
-ovKey :: Lens' ObjectVersion (Maybe Text)
-ovKey = lens _ovKey (\s a -> s { _ovKey = a })
-
--- | Date and time the object was last modified.
-ovLastModified :: Lens' ObjectVersion (Maybe UTCTime)
-ovLastModified = lens _ovLastModified (\s a -> s { _ovLastModified = a }) . mapping _Time
-
-ovOwner :: Lens' ObjectVersion (Maybe Owner)
-ovOwner = lens _ovOwner (\s a -> s { _ovOwner = a })
-
--- | Size in bytes of the object.
-ovSize :: Lens' ObjectVersion (Maybe Int)
-ovSize = lens _ovSize (\s a -> s { _ovSize = a })
-
--- | The class of storage used to store the object.
-ovStorageClass :: Lens' ObjectVersion (Maybe ObjectVersionStorageClass)
-ovStorageClass = lens _ovStorageClass (\s a -> s { _ovStorageClass = a })
-
--- | Version ID of an object.
-ovVersionId :: Lens' ObjectVersion (Maybe Text)
-ovVersionId = lens _ovVersionId (\s a -> s { _ovVersionId = a })
-
-instance FromXML ObjectVersion where
-    parseXML x = ObjectVersion
-        <$> x .@? "ETag"
-        <*> x .@? "IsLatest"
-        <*> x .@? "Key"
-        <*> x .@? "LastModified"
-        <*> x .@? "Owner"
-        <*> x .@? "Size"
-        <*> x .@? "StorageClass"
-        <*> x .@? "VersionId"
-
-instance ToXML ObjectVersion where
-    toXML ObjectVersion{..} = nodes "ObjectVersion"
-        [ "ETag"         =@ _ovETag
-        , "Size"         =@ _ovSize
-        , "StorageClass" =@ _ovStorageClass
-        , "Key"          =@ _ovKey
-        , "VersionId"    =@ _ovVersionId
-        , "IsLatest"     =@ _ovIsLatest
-        , "LastModified" =@ _ovLastModified
-        , "Owner"        =@ _ovOwner
-        ]
-
-data TargetGrant = TargetGrant
-    { _tgGrantee    :: Maybe Grantee
-    , _tgPermission :: Maybe BucketLogsPermission
-    } deriving (Eq, Read, Show)
-
--- | 'TargetGrant' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'tgGrantee' @::@ 'Maybe' 'Grantee'
---
--- * 'tgPermission' @::@ 'Maybe' 'BucketLogsPermission'
---
-targetGrant :: TargetGrant
-targetGrant = TargetGrant
-    { _tgGrantee    = Nothing
-    , _tgPermission = Nothing
-    }
-
-tgGrantee :: Lens' TargetGrant (Maybe Grantee)
-tgGrantee = lens _tgGrantee (\s a -> s { _tgGrantee = a })
-
--- | Logging permissions assigned to the Grantee for the bucket.
-tgPermission :: Lens' TargetGrant (Maybe BucketLogsPermission)
-tgPermission = lens _tgPermission (\s a -> s { _tgPermission = a })
-
-instance FromXML TargetGrant where
-    parseXML x = TargetGrant
-        <$> x .@? "Grantee"
-        <*> x .@? "Permission"
-
-instance ToXML TargetGrant where
-    toXML TargetGrant{..} = nodes "TargetGrant"
-        [ "Grantee"    =@ _tgGrantee
-        , "Permission" =@ _tgPermission
-        ]
-
-data MFADeleteStatus
-    = MFADSDisabled -- ^ Disabled
-    | MFADSEnabled  -- ^ Enabled
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable MFADeleteStatus
-
-instance FromText MFADeleteStatus where
-    parser = takeLowerText >>= \case
-        "disabled" -> pure MFADSDisabled
-        "enabled"  -> pure MFADSEnabled
-        e          -> fail $
-            "Failure parsing MFADeleteStatus from " ++ show e
-
-instance ToText MFADeleteStatus where
-    toText = \case
-        MFADSDisabled -> "Disabled"
-        MFADSEnabled  -> "Enabled"
-
-instance ToByteString MFADeleteStatus
-instance ToHeader     MFADeleteStatus
-instance ToQuery      MFADeleteStatus
-
-instance FromXML MFADeleteStatus where
-    parseXML = parseXMLText "MFADeleteStatus"
-
-instance ToXML MFADeleteStatus where
-    toXML = toXMLText
-
-data Payer
-    = PBucketOwner -- ^ BucketOwner
-    | PRequester   -- ^ Requester
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable Payer
-
-instance FromText Payer where
-    parser = takeLowerText >>= \case
-        "bucketowner" -> pure PBucketOwner
-        "requester"   -> pure PRequester
-        e             -> fail $
-            "Failure parsing Payer from " ++ show e
-
-instance ToText Payer where
-    toText = \case
-        PBucketOwner -> "BucketOwner"
-        PRequester   -> "Requester"
-
-instance ToByteString Payer
-instance ToHeader     Payer
-instance ToQuery      Payer
-
-instance FromXML Payer where
-    parseXML = parseXMLText "Payer"
-
-instance ToXML Payer where
-    toXML = toXMLText
-
-data Redirect = Redirect
-    { _rHostName             :: Maybe Text
-    , _rHttpRedirectCode     :: Maybe Text
-    , _rProtocol             :: Maybe Protocol
-    , _rReplaceKeyPrefixWith :: Maybe Text
-    , _rReplaceKeyWith       :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'Redirect' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'rHostName' @::@ 'Maybe' 'Text'
---
--- * 'rHttpRedirectCode' @::@ 'Maybe' 'Text'
---
--- * 'rProtocol' @::@ 'Maybe' 'Protocol'
---
--- * 'rReplaceKeyPrefixWith' @::@ 'Maybe' 'Text'
---
--- * 'rReplaceKeyWith' @::@ 'Maybe' 'Text'
---
-redirect :: Redirect
-redirect = Redirect
-    { _rHostName             = Nothing
-    , _rHttpRedirectCode     = Nothing
-    , _rProtocol             = Nothing
-    , _rReplaceKeyPrefixWith = Nothing
-    , _rReplaceKeyWith       = Nothing
-    }
-
--- | The host name to use in the redirect request.
-rHostName :: Lens' Redirect (Maybe Text)
-rHostName = lens _rHostName (\s a -> s { _rHostName = a })
-
--- | The HTTP redirect code to use on the response. Not required if one of the
--- siblings is present.
-rHttpRedirectCode :: Lens' Redirect (Maybe Text)
-rHttpRedirectCode =
-    lens _rHttpRedirectCode (\s a -> s { _rHttpRedirectCode = a })
-
--- | Protocol to use (http, https) when redirecting requests. The default is the
--- protocol that is used in the original request.
-rProtocol :: Lens' Redirect (Maybe Protocol)
-rProtocol = lens _rProtocol (\s a -> s { _rProtocol = a })
-
--- | The object key prefix to use in the redirect request. For example, to
--- redirect requests for all pages with prefix docs/ (objects in the docs/
--- folder) to documents/, you can set a condition block with KeyPrefixEquals set
--- to docs/ and in the Redirect set ReplaceKeyPrefixWith to /documents. Not
--- required if one of the siblings is present. Can be present only if
--- ReplaceKeyWith is not provided.
-rReplaceKeyPrefixWith :: Lens' Redirect (Maybe Text)
-rReplaceKeyPrefixWith =
-    lens _rReplaceKeyPrefixWith (\s a -> s { _rReplaceKeyPrefixWith = a })
-
--- | The specific object key to use in the redirect request. For example, redirect
--- request to error.html. Not required if one of the sibling is present. Can be
--- present only if ReplaceKeyPrefixWith is not provided.
-rReplaceKeyWith :: Lens' Redirect (Maybe Text)
-rReplaceKeyWith = lens _rReplaceKeyWith (\s a -> s { _rReplaceKeyWith = a })
-
-instance FromXML Redirect where
-    parseXML x = Redirect
-        <$> x .@? "HostName"
-        <*> x .@? "HttpRedirectCode"
-        <*> x .@? "Protocol"
-        <*> x .@? "ReplaceKeyPrefixWith"
-        <*> x .@? "ReplaceKeyWith"
-
-instance ToXML Redirect where
-    toXML Redirect{..} = nodes "Redirect"
-        [ "HostName"             =@ _rHostName
-        , "HttpRedirectCode"     =@ _rHttpRedirectCode
-        , "Protocol"             =@ _rProtocol
-        , "ReplaceKeyPrefixWith" =@ _rReplaceKeyPrefixWith
-        , "ReplaceKeyWith"       =@ _rReplaceKeyWith
-        ]
-
-data BucketLogsPermission
-    = FullControl -- ^ FULL_CONTROL
-    | Read        -- ^ READ
-    | Write       -- ^ WRITE
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable BucketLogsPermission
-
-instance FromText BucketLogsPermission where
-    parser = takeLowerText >>= \case
-        "full_control" -> pure FullControl
-        "read"         -> pure Read
-        "write"        -> pure Write
-        e              -> fail $
-            "Failure parsing BucketLogsPermission from " ++ show e
-
-instance ToText BucketLogsPermission where
-    toText = \case
-        FullControl -> "FULL_CONTROL"
-        Read        -> "READ"
-        Write       -> "WRITE"
-
-instance ToByteString BucketLogsPermission
-instance ToHeader     BucketLogsPermission
-instance ToQuery      BucketLogsPermission
-
-instance FromXML BucketLogsPermission where
-    parseXML = parseXMLText "BucketLogsPermission"
-
-instance ToXML BucketLogsPermission where
-    toXML = toXMLText
-
-data CompletedPart = CompletedPart
-    { _cpETag       :: Maybe Text
-    , _cpPartNumber :: Maybe Int
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'CompletedPart' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cpETag' @::@ 'Maybe' 'Text'
---
--- * 'cpPartNumber' @::@ 'Maybe' 'Int'
---
-completedPart :: CompletedPart
-completedPart = CompletedPart
-    { _cpETag       = Nothing
-    , _cpPartNumber = Nothing
-    }
-
--- | Entity tag returned when the part was uploaded.
-cpETag :: Lens' CompletedPart (Maybe Text)
-cpETag = lens _cpETag (\s a -> s { _cpETag = a })
-
--- | Part number that identifies the part.
-cpPartNumber :: Lens' CompletedPart (Maybe Int)
-cpPartNumber = lens _cpPartNumber (\s a -> s { _cpPartNumber = a })
-
-instance FromXML CompletedPart where
-    parseXML x = CompletedPart
-        <$> x .@? "ETag"
-        <*> x .@? "PartNumber"
-
-instance ToXML CompletedPart where
-    toXML CompletedPart{..} = nodes "CompletedPart"
-        [ "ETag"       =@ _cpETag
-        , "PartNumber" =@ _cpPartNumber
-        ]
-
-newtype CreateBucketConfiguration = CreateBucketConfiguration
-    { _cbcLocationConstraint :: Maybe Region
-    } deriving (Eq, Read, Show)
-
--- | 'CreateBucketConfiguration' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cbcLocationConstraint' @::@ 'Maybe' 'Region'
---
-createBucketConfiguration :: CreateBucketConfiguration
-createBucketConfiguration = CreateBucketConfiguration
-    { _cbcLocationConstraint = Nothing
-    }
-
--- | Specifies the region where the bucket will be created. If you don't specify a
--- region, the bucket will be created in US Standard.
-cbcLocationConstraint :: Lens' CreateBucketConfiguration (Maybe Region)
-cbcLocationConstraint =
-    lens _cbcLocationConstraint (\s a -> s { _cbcLocationConstraint = a })
-
-instance FromXML CreateBucketConfiguration where
-    parseXML x = CreateBucketConfiguration
-        <$> x .@? "LocationConstraint"
-
-instance ToXML CreateBucketConfiguration where
-    toXML CreateBucketConfiguration{..} = nodes "CreateBucketConfiguration"
-        [ "LocationConstraint" =@ _cbcLocationConstraint
-        ]
-
-newtype Tagging = Tagging
-    { _tTagSet :: List "Tag" Tag
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
-
-instance GHC.Exts.IsList Tagging where
-    type Item Tagging = Tag
-
-    fromList = Tagging . GHC.Exts.fromList
-    toList   = GHC.Exts.toList . _tTagSet
-
--- | 'Tagging' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'tTagSet' @::@ ['Tag']
---
-tagging :: Tagging
-tagging = Tagging
-    { _tTagSet = mempty
-    }
-
-tTagSet :: Lens' Tagging [Tag]
-tTagSet = lens _tTagSet (\s a -> s { _tTagSet = a }) . _List
-
-instance FromXML Tagging where
-    parseXML x = Tagging
-        <$> x .@? "TagSet" .!@ mempty
-
-instance ToXML Tagging where
-    toXML Tagging{..} = nodes "Tagging"
-        [ "TagSet" =@ _tTagSet
-        ]
-
-data LifecycleExpiration = LifecycleExpiration
-    { _leDate :: Maybe ISO8601
-    , _leDays :: Maybe Int
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'LifecycleExpiration' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'leDate' @::@ 'Maybe' 'UTCTime'
---
--- * 'leDays' @::@ 'Maybe' 'Int'
---
-lifecycleExpiration :: LifecycleExpiration
-lifecycleExpiration = LifecycleExpiration
-    { _leDate = Nothing
-    , _leDays = Nothing
-    }
-
--- | Indicates at what date the object is to be moved or deleted. Should be in GMT
--- ISO 8601 Format.
-leDate :: Lens' LifecycleExpiration (Maybe UTCTime)
-leDate = lens _leDate (\s a -> s { _leDate = a }) . mapping _Time
-
--- | Indicates the lifetime, in days, of the objects that are subject to the rule.
--- The value must be a non-zero positive integer.
-leDays :: Lens' LifecycleExpiration (Maybe Int)
-leDays = lens _leDays (\s a -> s { _leDays = a })
-
-instance FromXML LifecycleExpiration where
-    parseXML x = LifecycleExpiration
-        <$> x .@? "Date"
-        <*> x .@? "Days"
-
-instance ToXML LifecycleExpiration where
-    toXML LifecycleExpiration{..} = nodes "LifecycleExpiration"
-        [ "Date" =@ _leDate
-        , "Days" =@ _leDays
-        ]
-
-newtype CORSConfiguration = CORSConfiguration
-    { _corscCORSRules :: List "CORSRule" CORSRule
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
-
--- | 'CORSConfiguration' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'corscCORSRules' @::@ ['CORSRule']
---
-corsconfiguration :: CORSConfiguration
-corsconfiguration = CORSConfiguration
-    { _corscCORSRules = mempty
-    }
-
-corscCORSRules :: Lens' CORSConfiguration [CORSRule]
-corscCORSRules = lens _corscCORSRules (\s a -> s { _corscCORSRules = a }) . _List
-
-instance FromXML CORSConfiguration where
-    parseXML x = CORSConfiguration
-        <$> parseXML x
-
-instance ToXML CORSConfiguration where
-    toXML CORSConfiguration{..} = nodes "CORSConfiguration"
-        [ unsafeToXML     _corscCORSRules
-        ]
-
-data Object = Object
-    { _oETag         :: Text
-    , _oKey          :: Text
-    , _oLastModified :: RFC822
-    , _oOwner        :: Owner
-    , _oSize         :: Int
-    , _oStorageClass :: ObjectStorageClass
-    } deriving (Eq, Read, Show)
-
--- | 'Object' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'oETag' @::@ 'Text'
---
--- * 'oKey' @::@ 'Text'
---
--- * 'oLastModified' @::@ 'UTCTime'
---
--- * 'oOwner' @::@ 'Owner'
---
--- * 'oSize' @::@ 'Int'
---
--- * 'oStorageClass' @::@ 'ObjectStorageClass'
---
-object' :: Text -- ^ 'oKey'
-        -> UTCTime -- ^ 'oLastModified'
-        -> Text -- ^ 'oETag'
-        -> Int -- ^ 'oSize'
-        -> ObjectStorageClass -- ^ 'oStorageClass'
-        -> Owner -- ^ 'oOwner'
-        -> Object
-object' p1 p2 p3 p4 p5 p6 = Object
-    { _oKey          = p1
-    , _oLastModified = withIso _Time (const id) p2
-    , _oETag         = p3
-    , _oSize         = p4
-    , _oStorageClass = p5
-    , _oOwner        = p6
-    }
-
-oETag :: Lens' Object Text
-oETag = lens _oETag (\s a -> s { _oETag = a })
-
-oKey :: Lens' Object Text
-oKey = lens _oKey (\s a -> s { _oKey = a })
-
-oLastModified :: Lens' Object UTCTime
-oLastModified = lens _oLastModified (\s a -> s { _oLastModified = a }) . _Time
-
-oOwner :: Lens' Object Owner
-oOwner = lens _oOwner (\s a -> s { _oOwner = a })
-
-oSize :: Lens' Object Int
-oSize = lens _oSize (\s a -> s { _oSize = a })
-
--- | The class of storage used to store the object.
-oStorageClass :: Lens' Object ObjectStorageClass
-oStorageClass = lens _oStorageClass (\s a -> s { _oStorageClass = a })
-
-instance FromXML Object where
-    parseXML x = Object
-        <$> x .@  "ETag"
-        <*> x .@  "Key"
-        <*> x .@  "LastModified"
-        <*> x .@  "Owner"
-        <*> x .@  "Size"
-        <*> x .@  "StorageClass"
-
-instance ToXML Object where
-    toXML Object{..} = nodes "Object"
-        [ "Key"          =@ _oKey
-        , "LastModified" =@ _oLastModified
-        , "ETag"         =@ _oETag
-        , "Size"         =@ _oSize
-        , "StorageClass" =@ _oStorageClass
-        , "Owner"        =@ _oOwner
-        ]
-
-newtype CommonPrefix = CommonPrefix
-    { _cpPrefix :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
-
--- | 'CommonPrefix' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cpPrefix' @::@ 'Maybe' 'Text'
---
-commonPrefix :: CommonPrefix
-commonPrefix = CommonPrefix
-    { _cpPrefix = Nothing
-    }
-
-cpPrefix :: Lens' CommonPrefix (Maybe Text)
-cpPrefix = lens _cpPrefix (\s a -> s { _cpPrefix = a })
-
-instance FromXML CommonPrefix where
-    parseXML x = CommonPrefix
-        <$> x .@? "Prefix"
-
-instance ToXMLRoot CommonPrefix where
-    toXMLRoot CommonPrefix{..} = namespaced ns "CommonPrefix"
-        [ "Prefix" =@ _cpPrefix
-        ]
-
-instance ToXML CommonPrefix
-
-data MultipartUpload = MultipartUpload
-    { _muInitiated    :: Maybe RFC822
-    , _muInitiator    :: Maybe Initiator
-    , _muKey          :: Maybe Text
-    , _muOwner        :: Maybe Owner
-    , _muStorageClass :: Maybe StorageClass
-    , _muUploadId     :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'MultipartUpload' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'muInitiated' @::@ 'Maybe' 'UTCTime'
---
--- * 'muInitiator' @::@ 'Maybe' 'Initiator'
---
--- * 'muKey' @::@ 'Maybe' 'Text'
---
--- * 'muOwner' @::@ 'Maybe' 'Owner'
---
--- * 'muStorageClass' @::@ 'Maybe' 'StorageClass'
---
--- * 'muUploadId' @::@ 'Maybe' 'Text'
---
-multipartUpload :: MultipartUpload
-multipartUpload = MultipartUpload
-    { _muUploadId     = Nothing
-    , _muKey          = Nothing
-    , _muInitiated    = Nothing
-    , _muStorageClass = Nothing
-    , _muOwner        = Nothing
-    , _muInitiator    = Nothing
-    }
-
--- | Date and time at which the multipart upload was initiated.
-muInitiated :: Lens' MultipartUpload (Maybe UTCTime)
-muInitiated = lens _muInitiated (\s a -> s { _muInitiated = a }) . mapping _Time
-
--- | Identifies who initiated the multipart upload.
-muInitiator :: Lens' MultipartUpload (Maybe Initiator)
-muInitiator = lens _muInitiator (\s a -> s { _muInitiator = a })
-
--- | Key of the object for which the multipart upload was initiated.
-muKey :: Lens' MultipartUpload (Maybe Text)
-muKey = lens _muKey (\s a -> s { _muKey = a })
-
-muOwner :: Lens' MultipartUpload (Maybe Owner)
-muOwner = lens _muOwner (\s a -> s { _muOwner = a })
-
--- | The class of storage used to store the object.
-muStorageClass :: Lens' MultipartUpload (Maybe StorageClass)
-muStorageClass = lens _muStorageClass (\s a -> s { _muStorageClass = a })
-
--- | Upload ID that identifies the multipart upload.
-muUploadId :: Lens' MultipartUpload (Maybe Text)
-muUploadId = lens _muUploadId (\s a -> s { _muUploadId = a })
-
-instance FromXML MultipartUpload where
-    parseXML x = MultipartUpload
-        <$> x .@? "Initiated"
-        <*> x .@? "Initiator"
-        <*> x .@? "Key"
-        <*> x .@? "Owner"
-        <*> x .@? "StorageClass"
-        <*> x .@? "UploadId"
-
-instance ToXML MultipartUpload where
-    toXML MultipartUpload{..} = nodes "MultipartUpload"
-        [ "UploadId"     =@ _muUploadId
-        , "Key"          =@ _muKey
-        , "Initiated"    =@ _muInitiated
-        , "StorageClass" =@ _muStorageClass
-        , "Owner"        =@ _muOwner
-        , "Initiator"    =@ _muInitiator
-        ]
-
-data LambdaFunctionConfiguration = LambdaFunctionConfiguration
-    { _lfcEvents            :: List "Event" Event
-    , _lfcId                :: Maybe Text
-    , _lfcLambdaFunctionArn :: Text
-    } deriving (Eq, Read, Show)
-
--- | 'LambdaFunctionConfiguration' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lfcEvents' @::@ ['Event']
---
--- * 'lfcId' @::@ 'Maybe' 'Text'
---
--- * 'lfcLambdaFunctionArn' @::@ 'Text'
---
-lambdaFunctionConfiguration :: Text -- ^ 'lfcLambdaFunctionArn'
-                            -> LambdaFunctionConfiguration
-lambdaFunctionConfiguration p1 = LambdaFunctionConfiguration
-    { _lfcLambdaFunctionArn = p1
-    , _lfcId                = Nothing
-    , _lfcEvents            = mempty
-    }
-
-lfcEvents :: Lens' LambdaFunctionConfiguration [Event]
-lfcEvents = lens _lfcEvents (\s a -> s { _lfcEvents = a }) . _List
-
-lfcId :: Lens' LambdaFunctionConfiguration (Maybe Text)
-lfcId = lens _lfcId (\s a -> s { _lfcId = a })
-
--- | Lambda cloud function ARN that Amazon S3 can invoke when it detects events of
--- the specified type.
-lfcLambdaFunctionArn :: Lens' LambdaFunctionConfiguration Text
-lfcLambdaFunctionArn =
-    lens _lfcLambdaFunctionArn (\s a -> s { _lfcLambdaFunctionArn = a })
-
-instance FromXML LambdaFunctionConfiguration where
-    parseXML x = LambdaFunctionConfiguration
-        <$> parseXML x
-        <*> x .@? "Id"
-        <*> x .@  "CloudFunction"
-
-instance ToXML LambdaFunctionConfiguration where
-    toXML LambdaFunctionConfiguration{..} = nodes "LambdaFunctionConfiguration"
-        [ "Id"            =@ _lfcId
-        , "CloudFunction" =@ _lfcLambdaFunctionArn
-        , unsafeToXML        _lfcEvents
-        ]
-
-data QueueConfigurationDeprecated = QueueConfigurationDeprecated
-    { _qcdEvent  :: Maybe Event
-    , _qcdEvents :: List "Event" Event
-    , _qcdId     :: Maybe Text
-    , _qcdQueue  :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'QueueConfigurationDeprecated' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'qcdEvent' @::@ 'Maybe' 'Event'
---
--- * 'qcdEvents' @::@ ['Event']
---
--- * 'qcdId' @::@ 'Maybe' 'Text'
---
--- * 'qcdQueue' @::@ 'Maybe' 'Text'
---
-queueConfigurationDeprecated :: QueueConfigurationDeprecated
-queueConfigurationDeprecated = QueueConfigurationDeprecated
-    { _qcdId     = Nothing
-    , _qcdEvent  = Nothing
-    , _qcdEvents = mempty
-    , _qcdQueue  = Nothing
-    }
-
-qcdEvent :: Lens' QueueConfigurationDeprecated (Maybe Event)
-qcdEvent = lens _qcdEvent (\s a -> s { _qcdEvent = a })
-
-qcdEvents :: Lens' QueueConfigurationDeprecated [Event]
-qcdEvents = lens _qcdEvents (\s a -> s { _qcdEvents = a }) . _List
-
-qcdId :: Lens' QueueConfigurationDeprecated (Maybe Text)
-qcdId = lens _qcdId (\s a -> s { _qcdId = a })
-
-qcdQueue :: Lens' QueueConfigurationDeprecated (Maybe Text)
-qcdQueue = lens _qcdQueue (\s a -> s { _qcdQueue = a })
-
-instance FromXML QueueConfigurationDeprecated where
-    parseXML x = QueueConfigurationDeprecated
-        <$> x .@? "Event"
-        <*> parseXML x
-        <*> x .@? "Id"
-        <*> x .@? "Queue"
-
-instance ToXML QueueConfigurationDeprecated where
-    toXML QueueConfigurationDeprecated{..} = nodes "QueueConfigurationDeprecated"
-        [ "Id"    =@ _qcdId
-        , "Event" =@ _qcdEvent
-        , unsafeToXML     _qcdEvents
-        , "Queue" =@ _qcdQueue
-        ]
-
-data TopicConfigurationDeprecated = TopicConfigurationDeprecated
-    { _tcdEvent  :: Maybe Event
-    , _tcdEvents :: List "Event" Event
-    , _tcdId     :: Maybe Text
-    , _tcdTopic  :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'TopicConfigurationDeprecated' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'tcdEvent' @::@ 'Maybe' 'Event'
---
--- * 'tcdEvents' @::@ ['Event']
---
--- * 'tcdId' @::@ 'Maybe' 'Text'
---
--- * 'tcdTopic' @::@ 'Maybe' 'Text'
---
-topicConfigurationDeprecated :: TopicConfigurationDeprecated
-topicConfigurationDeprecated = TopicConfigurationDeprecated
-    { _tcdId     = Nothing
-    , _tcdEvents = mempty
-    , _tcdEvent  = Nothing
-    , _tcdTopic  = Nothing
-    }
-
--- | Bucket event for which to send notifications.
-tcdEvent :: Lens' TopicConfigurationDeprecated (Maybe Event)
-tcdEvent = lens _tcdEvent (\s a -> s { _tcdEvent = a })
-
-tcdEvents :: Lens' TopicConfigurationDeprecated [Event]
-tcdEvents = lens _tcdEvents (\s a -> s { _tcdEvents = a }) . _List
-
-tcdId :: Lens' TopicConfigurationDeprecated (Maybe Text)
-tcdId = lens _tcdId (\s a -> s { _tcdId = a })
-
--- | Amazon SNS topic to which Amazon S3 will publish a message to report the
--- specified events for the bucket.
-tcdTopic :: Lens' TopicConfigurationDeprecated (Maybe Text)
-tcdTopic = lens _tcdTopic (\s a -> s { _tcdTopic = a })
-
-instance FromXML TopicConfigurationDeprecated where
-    parseXML x = TopicConfigurationDeprecated
-        <$> x .@? "Event"
-        <*> parseXML x
-        <*> x .@? "Id"
-        <*> x .@? "Topic"
-
-instance ToXML TopicConfigurationDeprecated where
-    toXML TopicConfigurationDeprecated{..} = nodes "TopicConfigurationDeprecated"
-        [ "Id"    =@ _tcdId
-        , unsafeToXML     _tcdEvents
-        , "Event" =@ _tcdEvent
-        , "Topic" =@ _tcdTopic
-        ]
-
-data Type
-    = AmazonCustomerByEmail -- ^ AmazonCustomerByEmail
-    | CanonicalUser         -- ^ CanonicalUser
-    | Group                 -- ^ Group
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable Type
-
-instance FromText Type where
-    parser = takeLowerText >>= \case
-        "amazoncustomerbyemail" -> pure AmazonCustomerByEmail
-        "canonicaluser"         -> pure CanonicalUser
-        "group"                 -> pure Group
-        e                       -> fail $
-            "Failure parsing Type from " ++ show e
-
-instance ToText Type where
-    toText = \case
-        AmazonCustomerByEmail -> "AmazonCustomerByEmail"
-        CanonicalUser         -> "CanonicalUser"
-        Group                 -> "Group"
-
-instance ToByteString Type
-instance ToHeader     Type
-instance ToQuery      Type
-
-instance FromXML Type where
-    parseXML = parseXMLText "Type"
-
-instance ToXML Type where
-    toXML = toXMLText
-
-data ReplicationStatus
-    = Complete -- ^ COMPLETE
-    | Failed   -- ^ FAILED
-    | Pending  -- ^ PENDING
-    | Replica  -- ^ REPLICA
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable ReplicationStatus
-
-instance FromText ReplicationStatus where
-    parser = takeLowerText >>= \case
-        "complete" -> pure Complete
-        "failed"   -> pure Failed
-        "pending"  -> pure Pending
-        "replica"  -> pure Replica
-        e          -> fail $
-            "Failure parsing ReplicationStatus from " ++ show e
-
-instance ToText ReplicationStatus where
-    toText = \case
-        Complete -> "COMPLETE"
-        Failed   -> "FAILED"
-        Pending  -> "PENDING"
-        Replica  -> "REPLICA"
-
-instance ToByteString ReplicationStatus
-instance ToHeader     ReplicationStatus
-instance ToQuery      ReplicationStatus
-
-instance FromXML ReplicationStatus where
-    parseXML = parseXMLText "ReplicationStatus"
-
-instance ToXML ReplicationStatus where
-    toXML = toXMLText
-
-data TransitionStorageClass
-    = TSCGlacier -- ^ GLACIER
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable TransitionStorageClass
-
-instance FromText TransitionStorageClass where
-    parser = takeLowerText >>= \case
-        "glacier" -> pure TSCGlacier
-        e         -> fail $
-            "Failure parsing TransitionStorageClass from " ++ show e
-
-instance ToText TransitionStorageClass where
-    toText TSCGlacier = "GLACIER"
-
-instance ToByteString TransitionStorageClass
-instance ToHeader     TransitionStorageClass
-instance ToQuery      TransitionStorageClass
-
-instance FromXML TransitionStorageClass where
-    parseXML = parseXMLText "TransitionStorageClass"
-
-instance ToXML TransitionStorageClass where
-    toXML = toXMLText
-
-newtype CompletedMultipartUpload = CompletedMultipartUpload
-    { _cmuParts :: List "Part" CompletedPart
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
-
--- | 'CompletedMultipartUpload' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cmuParts' @::@ ['CompletedPart']
---
-completedMultipartUpload :: CompletedMultipartUpload
-completedMultipartUpload = CompletedMultipartUpload
-    { _cmuParts = mempty
-    }
-
-cmuParts :: Lens' CompletedMultipartUpload [CompletedPart]
-cmuParts = lens _cmuParts (\s a -> s { _cmuParts = a }) . _List
-
-instance FromXML CompletedMultipartUpload where
-    parseXML x = CompletedMultipartUpload
-        <$> parseXML x
-
-instance ToXML CompletedMultipartUpload where
-    toXML CompletedMultipartUpload{..} = nodes "CompletedMultipartUpload"
-        [ unsafeToXML     _cmuParts
-        ]
-
-data Condition = Condition
-    { _cHttpErrorCodeReturnedEquals :: Maybe Text
-    , _cKeyPrefixEquals             :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'Condition' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cHttpErrorCodeReturnedEquals' @::@ 'Maybe' 'Text'
---
--- * 'cKeyPrefixEquals' @::@ 'Maybe' 'Text'
---
-condition :: Condition
-condition = Condition
-    { _cHttpErrorCodeReturnedEquals = Nothing
-    , _cKeyPrefixEquals             = Nothing
-    }
-
--- | The HTTP error code when the redirect is applied. In the event of an error,
--- if the error code equals this value, then the specified redirect is applied.
--- Required when parent element Condition is specified and sibling
--- KeyPrefixEquals is not specified. If both are specified, then both must be
--- true for the redirect to be applied.
-cHttpErrorCodeReturnedEquals :: Lens' Condition (Maybe Text)
-cHttpErrorCodeReturnedEquals =
-    lens _cHttpErrorCodeReturnedEquals
-        (\s a -> s { _cHttpErrorCodeReturnedEquals = a })
-
--- | The object key name prefix when the redirect is applied. For example, to
--- redirect requests for ExamplePage.html, the key prefix will be
--- ExamplePage.html. To redirect request for all pages with the prefix docs/,
--- the key prefix will be /docs, which identifies all objects in the docs/
--- folder. Required when the parent element Condition is specified and sibling
--- HttpErrorCodeReturnedEquals is not specified. If both conditions are
--- specified, both must be true for the redirect to be applied.
-cKeyPrefixEquals :: Lens' Condition (Maybe Text)
-cKeyPrefixEquals = lens _cKeyPrefixEquals (\s a -> s { _cKeyPrefixEquals = a })
-
-instance FromXML Condition where
-    parseXML x = Condition
-        <$> x .@? "HttpErrorCodeReturnedEquals"
-        <*> x .@? "KeyPrefixEquals"
-
-instance ToXML Condition where
-    toXML Condition{..} = nodes "Condition"
-        [ "HttpErrorCodeReturnedEquals" =@ _cHttpErrorCodeReturnedEquals
-        , "KeyPrefixEquals"             =@ _cKeyPrefixEquals
-        ]
-
-data Permission
-    = PFullControl -- ^ FULL_CONTROL
-    | PRead        -- ^ READ
-    | PReadAcp     -- ^ READ_ACP
-    | PWrite       -- ^ WRITE
-    | PWriteAcp    -- ^ WRITE_ACP
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable Permission
-
-instance FromText Permission where
-    parser = takeLowerText >>= \case
-        "full_control" -> pure PFullControl
-        "read"         -> pure PRead
-        "read_acp"     -> pure PReadAcp
-        "write"        -> pure PWrite
-        "write_acp"    -> pure PWriteAcp
-        e              -> fail $
-            "Failure parsing Permission from " ++ show e
-
-instance ToText Permission where
-    toText = \case
-        PFullControl -> "FULL_CONTROL"
-        PRead        -> "READ"
-        PReadAcp     -> "READ_ACP"
-        PWrite       -> "WRITE"
-        PWriteAcp    -> "WRITE_ACP"
-
-instance ToByteString Permission
-instance ToHeader     Permission
-instance ToQuery      Permission
-
-instance FromXML Permission where
-    parseXML = parseXMLText "Permission"
-
-instance ToXML Permission where
-    toXML = toXMLText
-
-data AccessControlPolicy = AccessControlPolicy
-    { _acpGrants :: List "Grant" Grant
-    , _acpOwner  :: Maybe Owner
-    } deriving (Eq, Read, Show)
-
--- | 'AccessControlPolicy' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'acpGrants' @::@ ['Grant']
---
--- * 'acpOwner' @::@ 'Maybe' 'Owner'
---
-accessControlPolicy :: AccessControlPolicy
-accessControlPolicy = AccessControlPolicy
-    { _acpGrants = mempty
-    , _acpOwner  = Nothing
-    }
-
--- | A list of grants.
-acpGrants :: Lens' AccessControlPolicy [Grant]
-acpGrants = lens _acpGrants (\s a -> s { _acpGrants = a }) . _List
-
-acpOwner :: Lens' AccessControlPolicy (Maybe Owner)
-acpOwner = lens _acpOwner (\s a -> s { _acpOwner = a })
-
-instance FromXML AccessControlPolicy where
-    parseXML x = AccessControlPolicy
-        <$> x .@? "AccessControlList" .!@ mempty
-        <*> x .@? "Owner"
-
-instance ToXMLRoot AccessControlPolicy where
-    toXMLRoot AccessControlPolicy{..} = namespaced ns "AccessControlPolicy"
-        [ "AccessControlList" =@ _acpGrants
-        , "Owner"             =@ _acpOwner
-        ]
-
-instance ToXML AccessControlPolicy
-
-data BucketCannedACL
-    = CannedAuthenticatedRead -- ^ authenticated-read
-    | CannedPrivate           -- ^ private
-    | CannedPublicRead        -- ^ public-read
-    | CannedPublicReadWrite   -- ^ public-read-write
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable BucketCannedACL
-
-instance FromText BucketCannedACL where
-    parser = takeLowerText >>= \case
-        "authenticated-read" -> pure CannedAuthenticatedRead
-        "private"            -> pure CannedPrivate
-        "public-read"        -> pure CannedPublicRead
-        "public-read-write"  -> pure CannedPublicReadWrite
-        e                    -> fail $
-            "Failure parsing BucketCannedACL from " ++ show e
-
-instance ToText BucketCannedACL where
-    toText = \case
-        CannedAuthenticatedRead -> "authenticated-read"
-        CannedPrivate           -> "private"
-        CannedPublicRead        -> "public-read"
-        CannedPublicReadWrite   -> "public-read-write"
-
-instance ToByteString BucketCannedACL
-instance ToHeader     BucketCannedACL
-instance ToQuery      BucketCannedACL
-
-instance FromXML BucketCannedACL where
-    parseXML = parseXMLText "BucketCannedACL"
-
-instance ToXML BucketCannedACL where
-    toXML = toXMLText
-
-data MFADelete
-    = MFADDisabled -- ^ Disabled
-    | MFADEnabled  -- ^ Enabled
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable MFADelete
-
-instance FromText MFADelete where
-    parser = takeLowerText >>= \case
-        "disabled" -> pure MFADDisabled
-        "enabled"  -> pure MFADEnabled
-        e          -> fail $
-            "Failure parsing MFADelete from " ++ show e
-
-instance ToText MFADelete where
-    toText = \case
-        MFADDisabled -> "Disabled"
-        MFADEnabled  -> "Enabled"
-
-instance ToByteString MFADelete
-instance ToHeader     MFADelete
-instance ToQuery      MFADelete
-
-instance FromXML MFADelete where
-    parseXML = parseXMLText "MFADelete"
-
-instance ToXML MFADelete where
-    toXML = toXMLText
-
-data CloudFunctionConfiguration = CloudFunctionConfiguration
-    { _cfcCloudFunction  :: Maybe Text
-    , _cfcEvent          :: Maybe Event
-    , _cfcEvents         :: List "Event" Event
-    , _cfcId             :: Maybe Text
-    , _cfcInvocationRole :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'CloudFunctionConfiguration' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cfcCloudFunction' @::@ 'Maybe' 'Text'
---
--- * 'cfcEvent' @::@ 'Maybe' 'Event'
---
--- * 'cfcEvents' @::@ ['Event']
---
--- * 'cfcId' @::@ 'Maybe' 'Text'
---
--- * 'cfcInvocationRole' @::@ 'Maybe' 'Text'
---
-cloudFunctionConfiguration :: CloudFunctionConfiguration
-cloudFunctionConfiguration = CloudFunctionConfiguration
-    { _cfcId             = Nothing
-    , _cfcEvent          = Nothing
-    , _cfcEvents         = mempty
-    , _cfcCloudFunction  = Nothing
-    , _cfcInvocationRole = Nothing
-    }
-
-cfcCloudFunction :: Lens' CloudFunctionConfiguration (Maybe Text)
-cfcCloudFunction = lens _cfcCloudFunction (\s a -> s { _cfcCloudFunction = a })
-
-cfcEvent :: Lens' CloudFunctionConfiguration (Maybe Event)
-cfcEvent = lens _cfcEvent (\s a -> s { _cfcEvent = a })
-
-cfcEvents :: Lens' CloudFunctionConfiguration [Event]
-cfcEvents = lens _cfcEvents (\s a -> s { _cfcEvents = a }) . _List
-
-cfcId :: Lens' CloudFunctionConfiguration (Maybe Text)
-cfcId = lens _cfcId (\s a -> s { _cfcId = a })
-
-cfcInvocationRole :: Lens' CloudFunctionConfiguration (Maybe Text)
-cfcInvocationRole =
-    lens _cfcInvocationRole (\s a -> s { _cfcInvocationRole = a })
-
-instance FromXML CloudFunctionConfiguration where
-    parseXML x = CloudFunctionConfiguration
-        <$> x .@? "CloudFunction"
-        <*> x .@? "Event"
-        <*> parseXML x
-        <*> x .@? "Id"
-        <*> x .@? "InvocationRole"
-
-instance ToXML CloudFunctionConfiguration where
-    toXML CloudFunctionConfiguration{..} = nodes "CloudFunctionConfiguration"
-        [ "Id"             =@ _cfcId
-        , "Event"          =@ _cfcEvent
-        , unsafeToXML         _cfcEvents
-        , "CloudFunction"  =@ _cfcCloudFunction
-        , "InvocationRole" =@ _cfcInvocationRole
-        ]
-
-data Grantee = Grantee
-    { _gDisplayName  :: Maybe Text
-    , _gEmailAddress :: Maybe Text
-    , _gID           :: Maybe Text
-    , _gType         :: Type
-    , _gURI          :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'Grantee' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gDisplayName' @::@ 'Maybe' 'Text'
---
--- * 'gEmailAddress' @::@ 'Maybe' 'Text'
---
--- * 'gID' @::@ 'Maybe' 'Text'
---
--- * 'gType' @::@ 'Type'
---
--- * 'gURI' @::@ 'Maybe' 'Text'
---
-grantee :: Type -- ^ 'gType'
-        -> Grantee
-grantee p1 = Grantee
-    { _gType         = p1
-    , _gDisplayName  = Nothing
-    , _gEmailAddress = Nothing
-    , _gID           = Nothing
-    , _gURI          = Nothing
-    }
-
--- | Screen name of the grantee.
-gDisplayName :: Lens' Grantee (Maybe Text)
-gDisplayName = lens _gDisplayName (\s a -> s { _gDisplayName = a })
-
--- | Email address of the grantee.
-gEmailAddress :: Lens' Grantee (Maybe Text)
-gEmailAddress = lens _gEmailAddress (\s a -> s { _gEmailAddress = a })
-
--- | The canonical user ID of the grantee.
-gID :: Lens' Grantee (Maybe Text)
-gID = lens _gID (\s a -> s { _gID = a })
-
--- | Type of grantee
-gType :: Lens' Grantee Type
-gType = lens _gType (\s a -> s { _gType = a })
-
--- | URI of the grantee group.
-gURI :: Lens' Grantee (Maybe Text)
-gURI = lens _gURI (\s a -> s { _gURI = a })
-
-instance FromXML Grantee where
-    parseXML x = Grantee
-        <$> x .@? "DisplayName"
-        <*> x .@? "EmailAddress"
-        <*> x .@? "ID"
-        <*> x .@  "xsi:type"
-        <*> x .@? "URI"
-
-instance ToXML Grantee where
-    toXML Grantee{..} = nodes "Grantee"
-        [ "DisplayName"  =@ _gDisplayName
-        , "EmailAddress" =@ _gEmailAddress
-        , "ID"           =@ _gID
-        , "xsi:type"     =@ _gType
-        , "URI"          =@ _gURI
-        ]
-
-newtype LifecycleConfiguration = LifecycleConfiguration
-    { _lcRules :: List "Rule" Rule
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
-
--- | 'LifecycleConfiguration' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lcRules' @::@ ['Rule']
---
-lifecycleConfiguration :: LifecycleConfiguration
-lifecycleConfiguration = LifecycleConfiguration
-    { _lcRules = mempty
-    }
-
-lcRules :: Lens' LifecycleConfiguration [Rule]
-lcRules = lens _lcRules (\s a -> s { _lcRules = a }) . _List
-
-instance FromXML LifecycleConfiguration where
-    parseXML x = LifecycleConfiguration
-        <$> parseXML x
-
-instance ToXML LifecycleConfiguration where
-    toXML LifecycleConfiguration{..} = nodes "LifecycleConfiguration"
-        [ unsafeToXML     _lcRules
-        ]
-
-data LoggingEnabled = LoggingEnabled
-    { _leTargetBucket :: Maybe Text
-    , _leTargetGrants :: List "Grant" TargetGrant
-    , _leTargetPrefix :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'LoggingEnabled' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'leTargetBucket' @::@ 'Maybe' 'Text'
---
--- * 'leTargetGrants' @::@ ['TargetGrant']
---
--- * 'leTargetPrefix' @::@ 'Maybe' 'Text'
---
-loggingEnabled :: LoggingEnabled
-loggingEnabled = LoggingEnabled
-    { _leTargetBucket = Nothing
-    , _leTargetGrants = mempty
-    , _leTargetPrefix = Nothing
-    }
-
--- | Specifies the bucket where you want Amazon S3 to store server access logs.
--- You can have your logs delivered to any bucket that you own, including the
--- same bucket that is being logged. You can also configure multiple buckets to
--- deliver their logs to the same target bucket. In this case you should choose
--- a different TargetPrefix for each source bucket so that the delivered log
--- files can be distinguished by key.
-leTargetBucket :: Lens' LoggingEnabled (Maybe Text)
-leTargetBucket = lens _leTargetBucket (\s a -> s { _leTargetBucket = a })
-
-leTargetGrants :: Lens' LoggingEnabled [TargetGrant]
-leTargetGrants = lens _leTargetGrants (\s a -> s { _leTargetGrants = a }) . _List
-
--- | This element lets you specify a prefix for the keys that the log files will
--- be stored under.
-leTargetPrefix :: Lens' LoggingEnabled (Maybe Text)
-leTargetPrefix = lens _leTargetPrefix (\s a -> s { _leTargetPrefix = a })
-
-instance FromXML LoggingEnabled where
-    parseXML x = LoggingEnabled
-        <$> x .@? "TargetBucket"
-        <*> x .@? "TargetGrants" .!@ mempty
-        <*> x .@? "TargetPrefix"
-
-instance ToXML LoggingEnabled where
-    toXML LoggingEnabled{..} = nodes "LoggingEnabled"
-        [ "TargetBucket" =@ _leTargetBucket
-        , "TargetGrants" =@ _leTargetGrants
-        , "TargetPrefix" =@ _leTargetPrefix
-        ]
-
-data ReplicationRuleStatus
-    = RRSDisabled -- ^ Disabled
-    | RRSEnabled  -- ^ Enabled
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable ReplicationRuleStatus
-
-instance FromText ReplicationRuleStatus where
-    parser = takeLowerText >>= \case
-        "disabled" -> pure RRSDisabled
-        "enabled"  -> pure RRSEnabled
-        e          -> fail $
-            "Failure parsing ReplicationRuleStatus from " ++ show e
-
-instance ToText ReplicationRuleStatus where
-    toText = \case
-        RRSDisabled -> "Disabled"
-        RRSEnabled  -> "Enabled"
-
-instance ToByteString ReplicationRuleStatus
-instance ToHeader     ReplicationRuleStatus
-instance ToQuery      ReplicationRuleStatus
-
-instance FromXML ReplicationRuleStatus where
-    parseXML = parseXMLText "ReplicationRuleStatus"
-
-instance ToXML ReplicationRuleStatus where
-    toXML = toXMLText
-
-data ServerSideEncryption
-    = AES256 -- ^ AES256
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable ServerSideEncryption
-
-instance FromText ServerSideEncryption where
-    parser = takeLowerText >>= \case
-        "aes256" -> pure AES256
-        e        -> fail $
-            "Failure parsing ServerSideEncryption from " ++ show e
-
-instance ToText ServerSideEncryption where
-    toText AES256 = "AES256"
-
-instance ToByteString ServerSideEncryption
-instance ToHeader     ServerSideEncryption
-instance ToQuery      ServerSideEncryption
-
-instance FromXML ServerSideEncryption where
-    parseXML = parseXMLText "ServerSideEncryption"
-
-instance ToXML ServerSideEncryption where
-    toXML = toXMLText
-
-newtype IndexDocument = IndexDocument
-    { _idSuffix :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
-
--- | 'IndexDocument' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'idSuffix' @::@ 'Text'
---
-indexDocument :: Text -- ^ 'idSuffix'
-              -> IndexDocument
-indexDocument p1 = IndexDocument
-    { _idSuffix = p1
-    }
-
--- | A suffix that is appended to a request that is for a directory on the website
--- endpoint (e.g. if the suffix is index.html and you make a request to
--- samplebucket/images/ the data that is returned will be for the object with
--- the key name images/index.html) The suffix must not be empty and must not
--- include a slash character.
-idSuffix :: Lens' IndexDocument Text
-idSuffix = lens _idSuffix (\s a -> s { _idSuffix = a })
-
-instance FromXML IndexDocument where
-    parseXML x = IndexDocument
-        <$> x .@  "Suffix"
-
-instance ToXML IndexDocument where
-    toXML IndexDocument{..} = nodes "IndexDocument"
-        [ "Suffix" =@ _idSuffix
-        ]
-
-data CopyObjectResult = CopyObjectResult
-    { _corETag         :: Maybe Text
-    , _corLastModified :: Maybe RFC822
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'CopyObjectResult' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'corETag' @::@ 'Maybe' 'Text'
---
--- * 'corLastModified' @::@ 'Maybe' 'UTCTime'
---
-copyObjectResult :: CopyObjectResult
-copyObjectResult = CopyObjectResult
-    { _corETag         = Nothing
-    , _corLastModified = Nothing
-    }
-
-corETag :: Lens' CopyObjectResult (Maybe Text)
-corETag = lens _corETag (\s a -> s { _corETag = a })
-
-corLastModified :: Lens' CopyObjectResult (Maybe UTCTime)
-corLastModified = lens _corLastModified (\s a -> s { _corLastModified = a }) . mapping _Time
-
-instance FromXML CopyObjectResult where
-    parseXML x = CopyObjectResult
-        <$> x .@? "ETag"
-        <*> x .@? "LastModified"
-
-instance ToXML CopyObjectResult where
-    toXML CopyObjectResult{..} = nodes "CopyObjectResult"
-        [ "ETag"         =@ _corETag
-        , "LastModified" =@ _corLastModified
-        ]
-
-data Delete = Delete
-    { _dObjects :: List "Object" ObjectIdentifier
-    , _dQuiet   :: Maybe Bool
-    } deriving (Eq, Read, Show)
-
--- | 'Delete' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dObjects' @::@ ['ObjectIdentifier']
---
--- * 'dQuiet' @::@ 'Maybe' 'Bool'
---
-delete' :: Delete
-delete' = Delete
-    { _dObjects = mempty
-    , _dQuiet   = Nothing
-    }
-
-dObjects :: Lens' Delete [ObjectIdentifier]
-dObjects = lens _dObjects (\s a -> s { _dObjects = a }) . _List
-
--- | Element to enable quiet mode for the request. When you add this element, you
--- must set its value to true.
-dQuiet :: Lens' Delete (Maybe Bool)
-dQuiet = lens _dQuiet (\s a -> s { _dQuiet = a })
-
-instance FromXML Delete where
-    parseXML x = Delete
-        <$> parseXML x
-        <*> x .@? "Quiet"
-
-instance ToXML Delete where
-    toXML Delete{..} = nodes "Delete"
-        [ unsafeToXML     _dObjects
-        , "Quiet"  =@ _dQuiet
-        ]
-
-newtype RestoreRequest = RestoreRequest
-    { _rDays :: Int
-    } deriving (Eq, Ord, Read, Show, Enum, Num, Integral, Real)
-
--- | 'RestoreRequest' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'rDays' @::@ 'Int'
---
-restoreRequest :: Int -- ^ 'rDays'
-               -> RestoreRequest
-restoreRequest p1 = RestoreRequest
-    { _rDays = p1
-    }
-
--- | Lifetime of the active copy in days
-rDays :: Lens' RestoreRequest Int
-rDays = lens _rDays (\s a -> s { _rDays = a })
-
-instance FromXML RestoreRequest where
-    parseXML x = RestoreRequest
-        <$> x .@  "Days"
-
-instance ToXML RestoreRequest where
-    toXML RestoreRequest{..} = nodes "RestoreRequest"
-        [ "Days" =@ _rDays
-        ]
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.S3.Types
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.S3.Types
+    (
+    -- * Service
+      S3
+
+    -- * Errors
+    , _ObjectAlreadyInActiveTierError
+    , _BucketAlreadyExists
+    , _ObjectNotInActiveTierError
+    , _NoSuchUpload
+    , _NoSuchBucket
+    , _NoSuchKey
+
+    -- * Re-exported Types
+    , module Network.AWS.S3.Internal
+
+    -- * BucketCannedACL
+    , BucketCannedACL (..)
+
+    -- * BucketLogsPermission
+    , BucketLogsPermission (..)
+
+    -- * BucketVersioningStatus
+    , BucketVersioningStatus (..)
+
+    -- * EncodingType
+    , EncodingType (..)
+
+    -- * Event
+    , Event (..)
+
+    -- * ExpirationStatus
+    , ExpirationStatus (..)
+
+    -- * MFADelete
+    , MFADelete (..)
+
+    -- * MFADeleteStatus
+    , MFADeleteStatus (..)
+
+    -- * MetadataDirective
+    , MetadataDirective (..)
+
+    -- * ObjectCannedACL
+    , ObjectCannedACL (..)
+
+    -- * ObjectStorageClass
+    , ObjectStorageClass (..)
+
+    -- * ObjectVersionStorageClass
+    , ObjectVersionStorageClass (..)
+
+    -- * Payer
+    , Payer (..)
+
+    -- * Permission
+    , Permission (..)
+
+    -- * Protocol
+    , Protocol (..)
+
+    -- * ReplicationRuleStatus
+    , ReplicationRuleStatus (..)
+
+    -- * ReplicationStatus
+    , ReplicationStatus (..)
+
+    -- * RequestCharged
+    , RequestCharged (..)
+
+    -- * RequestPayer
+    , RequestPayer (..)
+
+    -- * ServerSideEncryption
+    , ServerSideEncryption (..)
+
+    -- * StorageClass
+    , StorageClass (..)
+
+    -- * TransitionStorageClass
+    , TransitionStorageClass (..)
+
+    -- * Type
+    , Type (..)
+
+    -- * AccessControlPolicy
+    , AccessControlPolicy
+    , accessControlPolicy
+    , acpGrants
+    , acpOwner
+
+    -- * Bucket
+    , Bucket
+    , bucket
+    , bCreationDate
+    , bName
+
+    -- * BucketLoggingStatus
+    , BucketLoggingStatus
+    , bucketLoggingStatus
+    , blsLoggingEnabled
+
+    -- * CORSConfiguration
+    , CORSConfiguration
+    , corsConfiguration
+    , ccCORSRules
+
+    -- * CORSRule
+    , CORSRule
+    , corsRule
+    , crAllowedMethods
+    , crMaxAgeSeconds
+    , crAllowedHeaders
+    , crAllowedOrigins
+    , crExposeHeaders
+
+    -- * CommonPrefix
+    , CommonPrefix
+    , commonPrefix
+    , cpPrefix
+
+    -- * CompletedMultipartUpload
+    , CompletedMultipartUpload
+    , completedMultipartUpload
+    , cmuParts
+
+    -- * CompletedPart
+    , CompletedPart
+    , completedPart
+    , cpPartNumber
+    , cpETag
+
+    -- * Condition
+    , Condition
+    , condition
+    , cKeyPrefixEquals
+    , cHTTPErrorCodeReturnedEquals
+
+    -- * CopyObjectResult
+    , CopyObjectResult
+    , copyObjectResult
+    , corETag
+    , corLastModified
+
+    -- * CopyPartResult
+    , CopyPartResult
+    , copyPartResult
+    , cprETag
+    , cprLastModified
+
+    -- * CreateBucketConfiguration
+    , CreateBucketConfiguration
+    , createBucketConfiguration
+    , cbcLocationConstraint
+
+    -- * Delete
+    , Delete
+    , delete'
+    , dQuiet
+    , dObjects
+
+    -- * DeleteMarkerEntry
+    , DeleteMarkerEntry
+    , deleteMarkerEntry
+    , dmeVersionId
+    , dmeIsLatest
+    , dmeOwner
+    , dmeKey
+    , dmeLastModified
+
+    -- * DeletedObject
+    , DeletedObject
+    , deletedObject
+    , dVersionId
+    , dDeleteMarker
+    , dDeleteMarkerVersionId
+    , dKey
+
+    -- * Destination
+    , Destination
+    , destination
+    , dBucket
+
+    -- * ErrorDocument
+    , ErrorDocument
+    , errorDocument
+    , edKey
+
+    -- * Grant
+    , Grant
+    , grant
+    , gPermission
+    , gGrantee
+
+    -- * Grantee
+    , Grantee
+    , grantee
+    , gURI
+    , gEmailAddress
+    , gId
+    , gDisplayName
+    , gType
+
+    -- * IndexDocument
+    , IndexDocument
+    , indexDocument
+    , idSuffix
+
+    -- * Initiator
+    , Initiator
+    , initiator
+    , iId
+    , iDisplayName
+
+    -- * LambdaFunctionConfiguration
+    , LambdaFunctionConfiguration
+    , lambdaFunctionConfiguration
+    , lfcId
+    , lfcLambdaFunctionARN
+    , lfcEvents
+
+    -- * LifecycleConfiguration
+    , LifecycleConfiguration
+    , lifecycleConfiguration
+    , lcRules
+
+    -- * LifecycleExpiration
+    , LifecycleExpiration
+    , lifecycleExpiration
+    , leDays
+    , leDate
+
+    -- * LoggingEnabled
+    , LoggingEnabled
+    , loggingEnabled
+    , leTargetBucket
+    , leTargetGrants
+    , leTargetPrefix
+
+    -- * MultipartUpload
+    , MultipartUpload
+    , multipartUpload
+    , muInitiated
+    , muInitiator
+    , muOwner
+    , muKey
+    , muStorageClass
+    , muUploadId
+
+    -- * NoncurrentVersionExpiration
+    , NoncurrentVersionExpiration
+    , noncurrentVersionExpiration
+    , nveNoncurrentDays
+
+    -- * NoncurrentVersionTransition
+    , NoncurrentVersionTransition
+    , noncurrentVersionTransition
+    , nvtNoncurrentDays
+    , nvtStorageClass
+
+    -- * NotificationConfiguration
+    , NotificationConfiguration
+    , notificationConfiguration
+    , ncQueueConfigurations
+    , ncTopicConfigurations
+    , ncLambdaFunctionConfigurations
+
+    -- * Object
+    , Object
+    , object'
+    , oOwner
+    , oETag
+    , oSize
+    , oKey
+    , oStorageClass
+    , oLastModified
+
+    -- * ObjectIdentifier
+    , ObjectIdentifier
+    , objectIdentifier
+    , oiVersionId
+    , oiKey
+
+    -- * ObjectVersion
+    , ObjectVersion
+    , objectVersion
+    , ovVersionId
+    , ovETag
+    , ovSize
+    , ovIsLatest
+    , ovOwner
+    , ovKey
+    , ovStorageClass
+    , ovLastModified
+
+    -- * Owner
+    , Owner
+    , owner
+    , oId
+    , oDisplayName
+
+    -- * Part
+    , Part
+    , part
+    , pETag
+    , pSize
+    , pPartNumber
+    , pLastModified
+
+    -- * QueueConfiguration
+    , QueueConfiguration
+    , queueConfiguration
+    , qcId
+    , qcQueueARN
+    , qcEvents
+
+    -- * Redirect
+    , Redirect
+    , redirect
+    , rHostName
+    , rProtocol
+    , rHTTPRedirectCode
+    , rReplaceKeyWith
+    , rReplaceKeyPrefixWith
+
+    -- * RedirectAllRequestsTo
+    , RedirectAllRequestsTo
+    , redirectAllRequestsTo
+    , rartProtocol
+    , rartHostName
+
+    -- * ReplicationConfiguration
+    , ReplicationConfiguration
+    , replicationConfiguration
+    , rcRole
+    , rcRules
+
+    -- * ReplicationRule
+    , ReplicationRule
+    , replicationRule
+    , rrId
+    , rrPrefix
+    , rrStatus
+    , rrDestination
+
+    -- * RequestPaymentConfiguration
+    , RequestPaymentConfiguration
+    , requestPaymentConfiguration
+    , rpcPayer
+
+    -- * RestoreRequest
+    , RestoreRequest
+    , restoreRequest
+    , rrDays
+
+    -- * RoutingRule
+    , RoutingRule
+    , routingRule
+    , rrCondition
+    , rrRedirect
+
+    -- * Rule
+    , Rule
+    , rule
+    , rNoncurrentVersionExpiration
+    , rTransition
+    , rExpiration
+    , rNoncurrentVersionTransition
+    , rId
+    , rPrefix
+    , rStatus
+
+    -- * S3ServiceError
+    , S3ServiceError
+    , s3ServiceError
+    , sseVersionId
+    , sseKey
+    , sseCode
+    , sseMessage
+
+    -- * Tag
+    , Tag
+    , tag
+    , tagKey
+    , tagValue
+
+    -- * Tagging
+    , Tagging
+    , tagging
+    , tTagSet
+
+    -- * TargetGrant
+    , TargetGrant
+    , targetGrant
+    , tgPermission
+    , tgGrantee
+
+    -- * TopicConfiguration
+    , TopicConfiguration
+    , topicConfiguration
+    , tcId
+    , tcTopicARN
+    , tcEvents
+
+    -- * Transition
+    , Transition
+    , transition
+    , tDays
+    , tDate
+    , tStorageClass
+
+    -- * VersioningConfiguration
+    , VersioningConfiguration
+    , versioningConfiguration
+    , vcStatus
+    , vcMFADelete
+
+    -- * WebsiteConfiguration
+    , WebsiteConfiguration
+    , websiteConfiguration
+    , wcRedirectAllRequestsTo
+    , wcErrorDocument
+    , wcRoutingRules
+    , wcIndexDocument
+    ) where
+
+import           Network.AWS.Prelude
+import           Network.AWS.S3.Internal
+import           Network.AWS.S3.Types.Product
+import           Network.AWS.S3.Types.Sum
+import           Network.AWS.Sign.V4
+
+-- | Version @2006-03-01@ of the Amazon Simple Storage Service SDK.
+data S3
+
+instance AWSService S3 where
+    type Sg S3 = V4
+    service = const svc
+      where
+        svc =
+            Service
+            { _svcAbbrev = "S3"
+            , _svcPrefix = "s3"
+            , _svcVersion = "2006-03-01"
+            , _svcEndpoint = defaultEndpoint svc
+            , _svcTimeout = Just 70
+            , _svcStatus = statusSuccess
+            , _svcError = parseXMLError
+            , _svcRetry = retry
+            }
+        retry =
+            Exponential
+            { _retryBase = 5.0e-2
+            , _retryGrowth = 2
+            , _retryAttempts = 5
+            , _retryCheck = check
+            }
+        check e
+          | has (hasCode "ThrottlingException" . hasStatus 400) e =
+              Just "throttling_exception"
+          | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
+          | has (hasCode "BadDigest" . hasStatus 400) e = Just "contentmd5"
+          | has (hasStatus 503) e = Just "service_unavailable"
+          | has (hasCode "RequestTimeout" . hasStatus 400) e = Just "timeouts"
+          | has (hasStatus 500) e = Just "general_server_error"
+          | has (hasStatus 509) e = Just "limit_exceeded"
+          | otherwise = Nothing
+
+-- | This operation is not allowed against this storage tier
+_ObjectAlreadyInActiveTierError :: AsError a => Getting (First ServiceError) a ServiceError
+_ObjectAlreadyInActiveTierError =
+    _ServiceError . hasCode "ObjectAlreadyInActiveTierError"
+
+-- | The requested bucket name is not available. The bucket namespace is
+-- shared by all users of the system. Please select a different name and
+-- try again.
+_BucketAlreadyExists :: AsError a => Getting (First ServiceError) a ServiceError
+_BucketAlreadyExists = _ServiceError . hasCode "BucketAlreadyExists"
+
+-- | The source object of the COPY operation is not in the active tier and is
+-- only stored in Amazon Glacier.
+_ObjectNotInActiveTierError :: AsError a => Getting (First ServiceError) a ServiceError
+_ObjectNotInActiveTierError =
+    _ServiceError . hasCode "ObjectNotInActiveTierError"
+
+-- | The specified multipart upload does not exist.
+_NoSuchUpload :: AsError a => Getting (First ServiceError) a ServiceError
+_NoSuchUpload = _ServiceError . hasCode "NoSuchUpload"
+
+-- | The specified bucket does not exist.
+_NoSuchBucket :: AsError a => Getting (First ServiceError) a ServiceError
+_NoSuchBucket = _ServiceError . hasCode "NoSuchBucket"
+
+-- | The specified key does not exist.
+_NoSuchKey :: AsError a => Getting (First ServiceError) a ServiceError
+_NoSuchKey = _ServiceError . hasCode "NoSuchKey"
diff --git a/gen/Network/AWS/S3/Types/Product.hs b/gen/Network/AWS/S3/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/Types/Product.hs
@@ -0,0 +1,2365 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.S3.Types.Product
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.S3.Types.Product where
+
+import           Network.AWS.Prelude
+import           Network.AWS.S3.Internal
+import           Network.AWS.S3.Types.Sum
+
+-- | /See:/ 'accessControlPolicy' smart constructor.
+data AccessControlPolicy = AccessControlPolicy'
+    { _acpGrants :: !(Maybe [Grant])
+    , _acpOwner  :: !(Maybe Owner)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AccessControlPolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acpGrants'
+--
+-- * 'acpOwner'
+accessControlPolicy
+    :: AccessControlPolicy
+accessControlPolicy =
+    AccessControlPolicy'
+    { _acpGrants = Nothing
+    , _acpOwner = Nothing
+    }
+
+-- | A list of grants.
+acpGrants :: Lens' AccessControlPolicy [Grant]
+acpGrants = lens _acpGrants (\ s a -> s{_acpGrants = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+acpOwner :: Lens' AccessControlPolicy (Maybe Owner)
+acpOwner = lens _acpOwner (\ s a -> s{_acpOwner = a});
+
+instance ToXML AccessControlPolicy where
+        toXML AccessControlPolicy'{..}
+          = mconcat
+              ["AccessControlList" @=
+                 toXML (toXMLList "Grant" <$> _acpGrants),
+               "Owner" @= _acpOwner]
+
+-- | /See:/ 'bucket' smart constructor.
+data Bucket = Bucket'
+    { _bCreationDate :: !RFC822
+    , _bName         :: !BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Bucket' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bCreationDate'
+--
+-- * 'bName'
+bucket
+    :: UTCTime -- ^ 'bCreationDate'
+    -> BucketName -- ^ 'bName'
+    -> Bucket
+bucket pCreationDate_ pName_ =
+    Bucket'
+    { _bCreationDate = _Time # pCreationDate_
+    , _bName = pName_
+    }
+
+-- | Date the bucket was created.
+bCreationDate :: Lens' Bucket UTCTime
+bCreationDate = lens _bCreationDate (\ s a -> s{_bCreationDate = a}) . _Time;
+
+-- | The name of the bucket.
+bName :: Lens' Bucket BucketName
+bName = lens _bName (\ s a -> s{_bName = a});
+
+instance FromXML Bucket where
+        parseXML x
+          = Bucket' <$> (x .@ "CreationDate") <*> (x .@ "Name")
+
+-- | /See:/ 'bucketLoggingStatus' smart constructor.
+newtype BucketLoggingStatus = BucketLoggingStatus'
+    { _blsLoggingEnabled :: Maybe LoggingEnabled
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BucketLoggingStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'blsLoggingEnabled'
+bucketLoggingStatus
+    :: BucketLoggingStatus
+bucketLoggingStatus =
+    BucketLoggingStatus'
+    { _blsLoggingEnabled = Nothing
+    }
+
+-- | Undocumented member.
+blsLoggingEnabled :: Lens' BucketLoggingStatus (Maybe LoggingEnabled)
+blsLoggingEnabled = lens _blsLoggingEnabled (\ s a -> s{_blsLoggingEnabled = a});
+
+instance ToXML BucketLoggingStatus where
+        toXML BucketLoggingStatus'{..}
+          = mconcat ["LoggingEnabled" @= _blsLoggingEnabled]
+
+-- | /See:/ 'corsConfiguration' smart constructor.
+newtype CORSConfiguration = CORSConfiguration'
+    { _ccCORSRules :: Maybe [CORSRule]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CORSConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccCORSRules'
+corsConfiguration
+    :: CORSConfiguration
+corsConfiguration =
+    CORSConfiguration'
+    { _ccCORSRules = Nothing
+    }
+
+-- | Undocumented member.
+ccCORSRules :: Lens' CORSConfiguration [CORSRule]
+ccCORSRules = lens _ccCORSRules (\ s a -> s{_ccCORSRules = a}) . _Default . _Coerce;
+
+instance ToXML CORSConfiguration where
+        toXML CORSConfiguration'{..}
+          = mconcat
+              [toXML (toXMLList "CORSRule" <$> _ccCORSRules)]
+
+-- | /See:/ 'corsRule' smart constructor.
+data CORSRule = CORSRule'
+    { _crAllowedMethods :: !(Maybe [Text])
+    , _crMaxAgeSeconds  :: !(Maybe Int)
+    , _crAllowedHeaders :: !(Maybe [Text])
+    , _crAllowedOrigins :: !(Maybe [Text])
+    , _crExposeHeaders  :: !(Maybe [Text])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CORSRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crAllowedMethods'
+--
+-- * 'crMaxAgeSeconds'
+--
+-- * 'crAllowedHeaders'
+--
+-- * 'crAllowedOrigins'
+--
+-- * 'crExposeHeaders'
+corsRule
+    :: CORSRule
+corsRule =
+    CORSRule'
+    { _crAllowedMethods = Nothing
+    , _crMaxAgeSeconds = Nothing
+    , _crAllowedHeaders = Nothing
+    , _crAllowedOrigins = Nothing
+    , _crExposeHeaders = Nothing
+    }
+
+-- | Identifies HTTP methods that the domain\/origin specified in the rule is
+-- allowed to execute.
+crAllowedMethods :: Lens' CORSRule [Text]
+crAllowedMethods = lens _crAllowedMethods (\ s a -> s{_crAllowedMethods = a}) . _Default . _Coerce;
+
+-- | The time in seconds that your browser is to cache the preflight response
+-- for the specified resource.
+crMaxAgeSeconds :: Lens' CORSRule (Maybe Int)
+crMaxAgeSeconds = lens _crMaxAgeSeconds (\ s a -> s{_crMaxAgeSeconds = a});
+
+-- | Specifies which headers are allowed in a pre-flight OPTIONS request.
+crAllowedHeaders :: Lens' CORSRule [Text]
+crAllowedHeaders = lens _crAllowedHeaders (\ s a -> s{_crAllowedHeaders = a}) . _Default . _Coerce;
+
+-- | One or more origins you want customers to be able to access the bucket
+-- from.
+crAllowedOrigins :: Lens' CORSRule [Text]
+crAllowedOrigins = lens _crAllowedOrigins (\ s a -> s{_crAllowedOrigins = a}) . _Default . _Coerce;
+
+-- | One or more headers in the response that you want customers to be able
+-- to access from their applications (for example, from a JavaScript
+-- XMLHttpRequest object).
+crExposeHeaders :: Lens' CORSRule [Text]
+crExposeHeaders = lens _crExposeHeaders (\ s a -> s{_crExposeHeaders = a}) . _Default . _Coerce;
+
+instance FromXML CORSRule where
+        parseXML x
+          = CORSRule' <$>
+              (may (parseXMLList "AllowedMethod") x) <*>
+                (x .@? "MaxAgeSeconds")
+                <*> (may (parseXMLList "AllowedHeader") x)
+                <*> (may (parseXMLList "AllowedOrigin") x)
+                <*> (may (parseXMLList "ExposeHeader") x)
+
+instance ToXML CORSRule where
+        toXML CORSRule'{..}
+          = mconcat
+              [toXML
+                 (toXMLList "AllowedMethod" <$> _crAllowedMethods),
+               "MaxAgeSeconds" @= _crMaxAgeSeconds,
+               toXML
+                 (toXMLList "AllowedHeader" <$> _crAllowedHeaders),
+               toXML
+                 (toXMLList "AllowedOrigin" <$> _crAllowedOrigins),
+               toXML
+                 (toXMLList "ExposeHeader" <$> _crExposeHeaders)]
+
+-- | /See:/ 'commonPrefix' smart constructor.
+newtype CommonPrefix = CommonPrefix'
+    { _cpPrefix :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommonPrefix' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpPrefix'
+commonPrefix
+    :: CommonPrefix
+commonPrefix =
+    CommonPrefix'
+    { _cpPrefix = Nothing
+    }
+
+-- | Undocumented member.
+cpPrefix :: Lens' CommonPrefix (Maybe Text)
+cpPrefix = lens _cpPrefix (\ s a -> s{_cpPrefix = a});
+
+instance FromXML CommonPrefix where
+        parseXML x = CommonPrefix' <$> (x .@? "Prefix")
+
+-- | /See:/ 'completedMultipartUpload' smart constructor.
+newtype CompletedMultipartUpload = CompletedMultipartUpload'
+    { _cmuParts :: Maybe (List1 CompletedPart)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CompletedMultipartUpload' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cmuParts'
+completedMultipartUpload
+    :: CompletedMultipartUpload
+completedMultipartUpload =
+    CompletedMultipartUpload'
+    { _cmuParts = Nothing
+    }
+
+-- | Undocumented member.
+cmuParts :: Lens' CompletedMultipartUpload (Maybe (NonEmpty CompletedPart))
+cmuParts = lens _cmuParts (\ s a -> s{_cmuParts = a}) . mapping _List1;
+
+instance ToXML CompletedMultipartUpload where
+        toXML CompletedMultipartUpload'{..}
+          = mconcat [toXML (toXMLList "Part" <$> _cmuParts)]
+
+-- | /See:/ 'completedPart' smart constructor.
+data CompletedPart = CompletedPart'
+    { _cpPartNumber :: !Int
+    , _cpETag       :: !ETag
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CompletedPart' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpPartNumber'
+--
+-- * 'cpETag'
+completedPart
+    :: Int -- ^ 'cpPartNumber'
+    -> ETag -- ^ 'cpETag'
+    -> CompletedPart
+completedPart pPartNumber_ pETag_ =
+    CompletedPart'
+    { _cpPartNumber = pPartNumber_
+    , _cpETag = pETag_
+    }
+
+-- | Part number that identifies the part. This is a positive integer between
+-- 1 and 10,000.
+cpPartNumber :: Lens' CompletedPart Int
+cpPartNumber = lens _cpPartNumber (\ s a -> s{_cpPartNumber = a});
+
+-- | Entity tag returned when the part was uploaded.
+cpETag :: Lens' CompletedPart ETag
+cpETag = lens _cpETag (\ s a -> s{_cpETag = a});
+
+instance ToXML CompletedPart where
+        toXML CompletedPart'{..}
+          = mconcat
+              ["PartNumber" @= _cpPartNumber, "ETag" @= _cpETag]
+
+-- | /See:/ 'condition' smart constructor.
+data Condition = Condition'
+    { _cKeyPrefixEquals             :: !(Maybe Text)
+    , _cHTTPErrorCodeReturnedEquals :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Condition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cKeyPrefixEquals'
+--
+-- * 'cHTTPErrorCodeReturnedEquals'
+condition
+    :: Condition
+condition =
+    Condition'
+    { _cKeyPrefixEquals = Nothing
+    , _cHTTPErrorCodeReturnedEquals = Nothing
+    }
+
+-- | The object key name prefix when the redirect is applied. For example, to
+-- redirect requests for ExamplePage.html, the key prefix will be
+-- ExamplePage.html. To redirect request for all pages with the prefix
+-- docs\/, the key prefix will be \/docs, which identifies all objects in
+-- the docs\/ folder. Required when the parent element Condition is
+-- specified and sibling HttpErrorCodeReturnedEquals is not specified. If
+-- both conditions are specified, both must be true for the redirect to be
+-- applied.
+cKeyPrefixEquals :: Lens' Condition (Maybe Text)
+cKeyPrefixEquals = lens _cKeyPrefixEquals (\ s a -> s{_cKeyPrefixEquals = a});
+
+-- | The HTTP error code when the redirect is applied. In the event of an
+-- error, if the error code equals this value, then the specified redirect
+-- is applied. Required when parent element Condition is specified and
+-- sibling KeyPrefixEquals is not specified. If both are specified, then
+-- both must be true for the redirect to be applied.
+cHTTPErrorCodeReturnedEquals :: Lens' Condition (Maybe Text)
+cHTTPErrorCodeReturnedEquals = lens _cHTTPErrorCodeReturnedEquals (\ s a -> s{_cHTTPErrorCodeReturnedEquals = a});
+
+instance FromXML Condition where
+        parseXML x
+          = Condition' <$>
+              (x .@? "KeyPrefixEquals") <*>
+                (x .@? "HttpErrorCodeReturnedEquals")
+
+instance ToXML Condition where
+        toXML Condition'{..}
+          = mconcat
+              ["KeyPrefixEquals" @= _cKeyPrefixEquals,
+               "HttpErrorCodeReturnedEquals" @=
+                 _cHTTPErrorCodeReturnedEquals]
+
+-- | /See:/ 'copyObjectResult' smart constructor.
+data CopyObjectResult = CopyObjectResult'
+    { _corETag         :: !(Maybe ETag)
+    , _corLastModified :: !(Maybe RFC822)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CopyObjectResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'corETag'
+--
+-- * 'corLastModified'
+copyObjectResult
+    :: CopyObjectResult
+copyObjectResult =
+    CopyObjectResult'
+    { _corETag = Nothing
+    , _corLastModified = Nothing
+    }
+
+-- | Undocumented member.
+corETag :: Lens' CopyObjectResult (Maybe ETag)
+corETag = lens _corETag (\ s a -> s{_corETag = a});
+
+-- | Undocumented member.
+corLastModified :: Lens' CopyObjectResult (Maybe UTCTime)
+corLastModified = lens _corLastModified (\ s a -> s{_corLastModified = a}) . mapping _Time;
+
+instance FromXML CopyObjectResult where
+        parseXML x
+          = CopyObjectResult' <$>
+              (x .@? "ETag") <*> (x .@? "LastModified")
+
+-- | /See:/ 'copyPartResult' smart constructor.
+data CopyPartResult = CopyPartResult'
+    { _cprETag         :: !(Maybe ETag)
+    , _cprLastModified :: !(Maybe RFC822)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CopyPartResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cprETag'
+--
+-- * 'cprLastModified'
+copyPartResult
+    :: CopyPartResult
+copyPartResult =
+    CopyPartResult'
+    { _cprETag = Nothing
+    , _cprLastModified = Nothing
+    }
+
+-- | Entity tag of the object.
+cprETag :: Lens' CopyPartResult (Maybe ETag)
+cprETag = lens _cprETag (\ s a -> s{_cprETag = a});
+
+-- | Date and time at which the object was uploaded.
+cprLastModified :: Lens' CopyPartResult (Maybe UTCTime)
+cprLastModified = lens _cprLastModified (\ s a -> s{_cprLastModified = a}) . mapping _Time;
+
+instance FromXML CopyPartResult where
+        parseXML x
+          = CopyPartResult' <$>
+              (x .@? "ETag") <*> (x .@? "LastModified")
+
+-- | /See:/ 'createBucketConfiguration' smart constructor.
+newtype CreateBucketConfiguration = CreateBucketConfiguration'
+    { _cbcLocationConstraint :: Maybe Region
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateBucketConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cbcLocationConstraint'
+createBucketConfiguration
+    :: CreateBucketConfiguration
+createBucketConfiguration =
+    CreateBucketConfiguration'
+    { _cbcLocationConstraint = Nothing
+    }
+
+-- | Specifies the region where the bucket will be created. If you don\'t
+-- specify a region, the bucket will be created in US Standard.
+cbcLocationConstraint :: Lens' CreateBucketConfiguration (Maybe Region)
+cbcLocationConstraint = lens _cbcLocationConstraint (\ s a -> s{_cbcLocationConstraint = a});
+
+instance ToXML CreateBucketConfiguration where
+        toXML CreateBucketConfiguration'{..}
+          = mconcat
+              ["LocationConstraint" @= _cbcLocationConstraint]
+
+-- | /See:/ 'delete'' smart constructor.
+data Delete = Delete'
+    { _dQuiet   :: !(Maybe Bool)
+    , _dObjects :: ![ObjectIdentifier]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Delete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dQuiet'
+--
+-- * 'dObjects'
+delete'
+    :: Delete
+delete' =
+    Delete'
+    { _dQuiet = Nothing
+    , _dObjects = mempty
+    }
+
+-- | Element to enable quiet mode for the request. When you add this element,
+-- you must set its value to true.
+dQuiet :: Lens' Delete (Maybe Bool)
+dQuiet = lens _dQuiet (\ s a -> s{_dQuiet = a});
+
+-- | Undocumented member.
+dObjects :: Lens' Delete [ObjectIdentifier]
+dObjects = lens _dObjects (\ s a -> s{_dObjects = a}) . _Coerce;
+
+instance ToXML Delete where
+        toXML Delete'{..}
+          = mconcat
+              ["Quiet" @= _dQuiet, toXMLList "Object" _dObjects]
+
+-- | /See:/ 'deleteMarkerEntry' smart constructor.
+data DeleteMarkerEntry = DeleteMarkerEntry'
+    { _dmeVersionId    :: !(Maybe ObjectVersionId)
+    , _dmeIsLatest     :: !(Maybe Bool)
+    , _dmeOwner        :: !(Maybe Owner)
+    , _dmeKey          :: !(Maybe ObjectKey)
+    , _dmeLastModified :: !(Maybe RFC822)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteMarkerEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dmeVersionId'
+--
+-- * 'dmeIsLatest'
+--
+-- * 'dmeOwner'
+--
+-- * 'dmeKey'
+--
+-- * 'dmeLastModified'
+deleteMarkerEntry
+    :: DeleteMarkerEntry
+deleteMarkerEntry =
+    DeleteMarkerEntry'
+    { _dmeVersionId = Nothing
+    , _dmeIsLatest = Nothing
+    , _dmeOwner = Nothing
+    , _dmeKey = Nothing
+    , _dmeLastModified = Nothing
+    }
+
+-- | Version ID of an object.
+dmeVersionId :: Lens' DeleteMarkerEntry (Maybe ObjectVersionId)
+dmeVersionId = lens _dmeVersionId (\ s a -> s{_dmeVersionId = a});
+
+-- | Specifies whether the object is (true) or is not (false) the latest
+-- version of an object.
+dmeIsLatest :: Lens' DeleteMarkerEntry (Maybe Bool)
+dmeIsLatest = lens _dmeIsLatest (\ s a -> s{_dmeIsLatest = a});
+
+-- | Undocumented member.
+dmeOwner :: Lens' DeleteMarkerEntry (Maybe Owner)
+dmeOwner = lens _dmeOwner (\ s a -> s{_dmeOwner = a});
+
+-- | The object key.
+dmeKey :: Lens' DeleteMarkerEntry (Maybe ObjectKey)
+dmeKey = lens _dmeKey (\ s a -> s{_dmeKey = a});
+
+-- | Date and time the object was last modified.
+dmeLastModified :: Lens' DeleteMarkerEntry (Maybe UTCTime)
+dmeLastModified = lens _dmeLastModified (\ s a -> s{_dmeLastModified = a}) . mapping _Time;
+
+instance FromXML DeleteMarkerEntry where
+        parseXML x
+          = DeleteMarkerEntry' <$>
+              (x .@? "VersionId") <*> (x .@? "IsLatest") <*>
+                (x .@? "Owner")
+                <*> (x .@? "Key")
+                <*> (x .@? "LastModified")
+
+-- | /See:/ 'deletedObject' smart constructor.
+data DeletedObject = DeletedObject'
+    { _dVersionId             :: !(Maybe ObjectVersionId)
+    , _dDeleteMarker          :: !(Maybe Bool)
+    , _dDeleteMarkerVersionId :: !(Maybe Text)
+    , _dKey                   :: !(Maybe ObjectKey)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeletedObject' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dVersionId'
+--
+-- * 'dDeleteMarker'
+--
+-- * 'dDeleteMarkerVersionId'
+--
+-- * 'dKey'
+deletedObject
+    :: DeletedObject
+deletedObject =
+    DeletedObject'
+    { _dVersionId = Nothing
+    , _dDeleteMarker = Nothing
+    , _dDeleteMarkerVersionId = Nothing
+    , _dKey = Nothing
+    }
+
+-- | Undocumented member.
+dVersionId :: Lens' DeletedObject (Maybe ObjectVersionId)
+dVersionId = lens _dVersionId (\ s a -> s{_dVersionId = a});
+
+-- | Undocumented member.
+dDeleteMarker :: Lens' DeletedObject (Maybe Bool)
+dDeleteMarker = lens _dDeleteMarker (\ s a -> s{_dDeleteMarker = a});
+
+-- | Undocumented member.
+dDeleteMarkerVersionId :: Lens' DeletedObject (Maybe Text)
+dDeleteMarkerVersionId = lens _dDeleteMarkerVersionId (\ s a -> s{_dDeleteMarkerVersionId = a});
+
+-- | Undocumented member.
+dKey :: Lens' DeletedObject (Maybe ObjectKey)
+dKey = lens _dKey (\ s a -> s{_dKey = a});
+
+instance FromXML DeletedObject where
+        parseXML x
+          = DeletedObject' <$>
+              (x .@? "VersionId") <*> (x .@? "DeleteMarker") <*>
+                (x .@? "DeleteMarkerVersionId")
+                <*> (x .@? "Key")
+
+-- | /See:/ 'destination' smart constructor.
+newtype Destination = Destination'
+    { _dBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Destination' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dBucket'
+destination
+    :: BucketName -- ^ 'dBucket'
+    -> Destination
+destination pBucket_ =
+    Destination'
+    { _dBucket = pBucket_
+    }
+
+-- | Amazon resource name (ARN) of the bucket where you want Amazon S3 to
+-- store replicas of the object identified by the rule.
+dBucket :: Lens' Destination BucketName
+dBucket = lens _dBucket (\ s a -> s{_dBucket = a});
+
+instance FromXML Destination where
+        parseXML x = Destination' <$> (x .@ "Bucket")
+
+instance ToXML Destination where
+        toXML Destination'{..}
+          = mconcat ["Bucket" @= _dBucket]
+
+-- | /See:/ 'errorDocument' smart constructor.
+newtype ErrorDocument = ErrorDocument'
+    { _edKey :: ObjectKey
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ErrorDocument' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edKey'
+errorDocument
+    :: ObjectKey -- ^ 'edKey'
+    -> ErrorDocument
+errorDocument pKey_ =
+    ErrorDocument'
+    { _edKey = pKey_
+    }
+
+-- | The object key name to use when a 4XX class error occurs.
+edKey :: Lens' ErrorDocument ObjectKey
+edKey = lens _edKey (\ s a -> s{_edKey = a});
+
+instance FromXML ErrorDocument where
+        parseXML x = ErrorDocument' <$> (x .@ "Key")
+
+instance ToXML ErrorDocument where
+        toXML ErrorDocument'{..} = mconcat ["Key" @= _edKey]
+
+-- | /See:/ 'grant' smart constructor.
+data Grant = Grant'
+    { _gPermission :: !(Maybe Permission)
+    , _gGrantee    :: !(Maybe Grantee)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Grant' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gPermission'
+--
+-- * 'gGrantee'
+grant
+    :: Grant
+grant =
+    Grant'
+    { _gPermission = Nothing
+    , _gGrantee = Nothing
+    }
+
+-- | Specifies the permission given to the grantee.
+gPermission :: Lens' Grant (Maybe Permission)
+gPermission = lens _gPermission (\ s a -> s{_gPermission = a});
+
+-- | Undocumented member.
+gGrantee :: Lens' Grant (Maybe Grantee)
+gGrantee = lens _gGrantee (\ s a -> s{_gGrantee = a});
+
+instance FromXML Grant where
+        parseXML x
+          = Grant' <$>
+              (x .@? "Permission") <*> (x .@? "Grantee")
+
+instance ToXML Grant where
+        toXML Grant'{..}
+          = mconcat
+              ["Permission" @= _gPermission,
+               "Grantee" @= _gGrantee]
+
+-- | /See:/ 'grantee' smart constructor.
+data Grantee = Grantee'
+    { _gURI          :: !(Maybe Text)
+    , _gEmailAddress :: !(Maybe Text)
+    , _gId           :: !(Maybe Text)
+    , _gDisplayName  :: !(Maybe Text)
+    , _gType         :: !Type
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Grantee' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gURI'
+--
+-- * 'gEmailAddress'
+--
+-- * 'gId'
+--
+-- * 'gDisplayName'
+--
+-- * 'gType'
+grantee
+    :: Type -- ^ 'gType'
+    -> Grantee
+grantee pType_ =
+    Grantee'
+    { _gURI = Nothing
+    , _gEmailAddress = Nothing
+    , _gId = Nothing
+    , _gDisplayName = Nothing
+    , _gType = pType_
+    }
+
+-- | URI of the grantee group.
+gURI :: Lens' Grantee (Maybe Text)
+gURI = lens _gURI (\ s a -> s{_gURI = a});
+
+-- | Email address of the grantee.
+gEmailAddress :: Lens' Grantee (Maybe Text)
+gEmailAddress = lens _gEmailAddress (\ s a -> s{_gEmailAddress = a});
+
+-- | The canonical user ID of the grantee.
+gId :: Lens' Grantee (Maybe Text)
+gId = lens _gId (\ s a -> s{_gId = a});
+
+-- | Screen name of the grantee.
+gDisplayName :: Lens' Grantee (Maybe Text)
+gDisplayName = lens _gDisplayName (\ s a -> s{_gDisplayName = a});
+
+-- | Type of grantee
+gType :: Lens' Grantee Type
+gType = lens _gType (\ s a -> s{_gType = a});
+
+instance FromXML Grantee where
+        parseXML x
+          = Grantee' <$>
+              (x .@? "URI") <*> (x .@? "EmailAddress") <*>
+                (x .@? "ID")
+                <*> (x .@? "DisplayName")
+                <*> (x .@ "xsi:type")
+
+instance ToXML Grantee where
+        toXML Grantee'{..}
+          = mconcat
+              ["URI" @= _gURI, "EmailAddress" @= _gEmailAddress,
+               "ID" @= _gId, "DisplayName" @= _gDisplayName,
+               "xsi:type" @= _gType]
+
+-- | /See:/ 'indexDocument' smart constructor.
+newtype IndexDocument = IndexDocument'
+    { _idSuffix :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IndexDocument' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'idSuffix'
+indexDocument
+    :: Text -- ^ 'idSuffix'
+    -> IndexDocument
+indexDocument pSuffix_ =
+    IndexDocument'
+    { _idSuffix = pSuffix_
+    }
+
+-- | A suffix that is appended to a request that is for a directory on the
+-- website endpoint (e.g. if the suffix is index.html and you make a
+-- request to samplebucket\/images\/ the data that is returned will be for
+-- the object with the key name images\/index.html) The suffix must not be
+-- empty and must not include a slash character.
+idSuffix :: Lens' IndexDocument Text
+idSuffix = lens _idSuffix (\ s a -> s{_idSuffix = a});
+
+instance FromXML IndexDocument where
+        parseXML x = IndexDocument' <$> (x .@ "Suffix")
+
+instance ToXML IndexDocument where
+        toXML IndexDocument'{..}
+          = mconcat ["Suffix" @= _idSuffix]
+
+-- | /See:/ 'initiator' smart constructor.
+data Initiator = Initiator'
+    { _iId          :: !(Maybe Text)
+    , _iDisplayName :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Initiator' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iId'
+--
+-- * 'iDisplayName'
+initiator
+    :: Initiator
+initiator =
+    Initiator'
+    { _iId = Nothing
+    , _iDisplayName = Nothing
+    }
+
+-- | If the principal is an AWS account, it provides the Canonical User ID.
+-- If the principal is an IAM User, it provides a user ARN value.
+iId :: Lens' Initiator (Maybe Text)
+iId = lens _iId (\ s a -> s{_iId = a});
+
+-- | Name of the Principal.
+iDisplayName :: Lens' Initiator (Maybe Text)
+iDisplayName = lens _iDisplayName (\ s a -> s{_iDisplayName = a});
+
+instance FromXML Initiator where
+        parseXML x
+          = Initiator' <$>
+              (x .@? "ID") <*> (x .@? "DisplayName")
+
+-- | Container for specifying the AWS Lambda notification configuration.
+--
+-- /See:/ 'lambdaFunctionConfiguration' smart constructor.
+data LambdaFunctionConfiguration = LambdaFunctionConfiguration'
+    { _lfcId                :: !(Maybe Text)
+    , _lfcLambdaFunctionARN :: !Text
+    , _lfcEvents            :: ![Event]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LambdaFunctionConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lfcId'
+--
+-- * 'lfcLambdaFunctionARN'
+--
+-- * 'lfcEvents'
+lambdaFunctionConfiguration
+    :: Text -- ^ 'lfcLambdaFunctionARN'
+    -> LambdaFunctionConfiguration
+lambdaFunctionConfiguration pLambdaFunctionARN_ =
+    LambdaFunctionConfiguration'
+    { _lfcId = Nothing
+    , _lfcLambdaFunctionARN = pLambdaFunctionARN_
+    , _lfcEvents = mempty
+    }
+
+-- | Undocumented member.
+lfcId :: Lens' LambdaFunctionConfiguration (Maybe Text)
+lfcId = lens _lfcId (\ s a -> s{_lfcId = a});
+
+-- | Lambda cloud function ARN that Amazon S3 can invoke when it detects
+-- events of the specified type.
+lfcLambdaFunctionARN :: Lens' LambdaFunctionConfiguration Text
+lfcLambdaFunctionARN = lens _lfcLambdaFunctionARN (\ s a -> s{_lfcLambdaFunctionARN = a});
+
+-- | Undocumented member.
+lfcEvents :: Lens' LambdaFunctionConfiguration [Event]
+lfcEvents = lens _lfcEvents (\ s a -> s{_lfcEvents = a}) . _Coerce;
+
+instance FromXML LambdaFunctionConfiguration where
+        parseXML x
+          = LambdaFunctionConfiguration' <$>
+              (x .@? "Id") <*> (x .@ "CloudFunction") <*>
+                (parseXMLList "Event" x)
+
+instance ToXML LambdaFunctionConfiguration where
+        toXML LambdaFunctionConfiguration'{..}
+          = mconcat
+              ["Id" @= _lfcId,
+               "CloudFunction" @= _lfcLambdaFunctionARN,
+               toXMLList "Event" _lfcEvents]
+
+-- | /See:/ 'lifecycleConfiguration' smart constructor.
+newtype LifecycleConfiguration = LifecycleConfiguration'
+    { _lcRules :: [Rule]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LifecycleConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcRules'
+lifecycleConfiguration
+    :: LifecycleConfiguration
+lifecycleConfiguration =
+    LifecycleConfiguration'
+    { _lcRules = mempty
+    }
+
+-- | Undocumented member.
+lcRules :: Lens' LifecycleConfiguration [Rule]
+lcRules = lens _lcRules (\ s a -> s{_lcRules = a}) . _Coerce;
+
+instance ToXML LifecycleConfiguration where
+        toXML LifecycleConfiguration'{..}
+          = mconcat [toXMLList "Rule" _lcRules]
+
+-- | /See:/ 'lifecycleExpiration' smart constructor.
+data LifecycleExpiration = LifecycleExpiration'
+    { _leDays :: !(Maybe Int)
+    , _leDate :: !(Maybe RFC822)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LifecycleExpiration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'leDays'
+--
+-- * 'leDate'
+lifecycleExpiration
+    :: LifecycleExpiration
+lifecycleExpiration =
+    LifecycleExpiration'
+    { _leDays = Nothing
+    , _leDate = Nothing
+    }
+
+-- | Indicates the lifetime, in days, of the objects that are subject to the
+-- rule. The value must be a non-zero positive integer.
+leDays :: Lens' LifecycleExpiration (Maybe Int)
+leDays = lens _leDays (\ s a -> s{_leDays = a});
+
+-- | Indicates at what date the object is to be moved or deleted. Should be
+-- in GMT ISO 8601 Format.
+leDate :: Lens' LifecycleExpiration (Maybe UTCTime)
+leDate = lens _leDate (\ s a -> s{_leDate = a}) . mapping _Time;
+
+instance FromXML LifecycleExpiration where
+        parseXML x
+          = LifecycleExpiration' <$>
+              (x .@? "Days") <*> (x .@? "Date")
+
+instance ToXML LifecycleExpiration where
+        toXML LifecycleExpiration'{..}
+          = mconcat ["Days" @= _leDays, "Date" @= _leDate]
+
+-- | /See:/ 'loggingEnabled' smart constructor.
+data LoggingEnabled = LoggingEnabled'
+    { _leTargetBucket :: !(Maybe Text)
+    , _leTargetGrants :: !(Maybe [TargetGrant])
+    , _leTargetPrefix :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LoggingEnabled' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'leTargetBucket'
+--
+-- * 'leTargetGrants'
+--
+-- * 'leTargetPrefix'
+loggingEnabled
+    :: LoggingEnabled
+loggingEnabled =
+    LoggingEnabled'
+    { _leTargetBucket = Nothing
+    , _leTargetGrants = Nothing
+    , _leTargetPrefix = Nothing
+    }
+
+-- | Specifies the bucket where you want Amazon S3 to store server access
+-- logs. You can have your logs delivered to any bucket that you own,
+-- including the same bucket that is being logged. You can also configure
+-- multiple buckets to deliver their logs to the same target bucket. In
+-- this case you should choose a different TargetPrefix for each source
+-- bucket so that the delivered log files can be distinguished by key.
+leTargetBucket :: Lens' LoggingEnabled (Maybe Text)
+leTargetBucket = lens _leTargetBucket (\ s a -> s{_leTargetBucket = a});
+
+-- | Undocumented member.
+leTargetGrants :: Lens' LoggingEnabled [TargetGrant]
+leTargetGrants = lens _leTargetGrants (\ s a -> s{_leTargetGrants = a}) . _Default . _Coerce;
+
+-- | This element lets you specify a prefix for the keys that the log files
+-- will be stored under.
+leTargetPrefix :: Lens' LoggingEnabled (Maybe Text)
+leTargetPrefix = lens _leTargetPrefix (\ s a -> s{_leTargetPrefix = a});
+
+instance FromXML LoggingEnabled where
+        parseXML x
+          = LoggingEnabled' <$>
+              (x .@? "TargetBucket") <*>
+                (x .@? "TargetGrants" .!@ mempty >>=
+                   may (parseXMLList "Grant"))
+                <*> (x .@? "TargetPrefix")
+
+instance ToXML LoggingEnabled where
+        toXML LoggingEnabled'{..}
+          = mconcat
+              ["TargetBucket" @= _leTargetBucket,
+               "TargetGrants" @=
+                 toXML (toXMLList "Grant" <$> _leTargetGrants),
+               "TargetPrefix" @= _leTargetPrefix]
+
+-- | /See:/ 'multipartUpload' smart constructor.
+data MultipartUpload = MultipartUpload'
+    { _muInitiated    :: !(Maybe RFC822)
+    , _muInitiator    :: !(Maybe Initiator)
+    , _muOwner        :: !(Maybe Owner)
+    , _muKey          :: !(Maybe ObjectKey)
+    , _muStorageClass :: !(Maybe StorageClass)
+    , _muUploadId     :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MultipartUpload' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'muInitiated'
+--
+-- * 'muInitiator'
+--
+-- * 'muOwner'
+--
+-- * 'muKey'
+--
+-- * 'muStorageClass'
+--
+-- * 'muUploadId'
+multipartUpload
+    :: MultipartUpload
+multipartUpload =
+    MultipartUpload'
+    { _muInitiated = Nothing
+    , _muInitiator = Nothing
+    , _muOwner = Nothing
+    , _muKey = Nothing
+    , _muStorageClass = Nothing
+    , _muUploadId = Nothing
+    }
+
+-- | Date and time at which the multipart upload was initiated.
+muInitiated :: Lens' MultipartUpload (Maybe UTCTime)
+muInitiated = lens _muInitiated (\ s a -> s{_muInitiated = a}) . mapping _Time;
+
+-- | Identifies who initiated the multipart upload.
+muInitiator :: Lens' MultipartUpload (Maybe Initiator)
+muInitiator = lens _muInitiator (\ s a -> s{_muInitiator = a});
+
+-- | Undocumented member.
+muOwner :: Lens' MultipartUpload (Maybe Owner)
+muOwner = lens _muOwner (\ s a -> s{_muOwner = a});
+
+-- | Key of the object for which the multipart upload was initiated.
+muKey :: Lens' MultipartUpload (Maybe ObjectKey)
+muKey = lens _muKey (\ s a -> s{_muKey = a});
+
+-- | The class of storage used to store the object.
+muStorageClass :: Lens' MultipartUpload (Maybe StorageClass)
+muStorageClass = lens _muStorageClass (\ s a -> s{_muStorageClass = a});
+
+-- | Upload ID that identifies the multipart upload.
+muUploadId :: Lens' MultipartUpload (Maybe Text)
+muUploadId = lens _muUploadId (\ s a -> s{_muUploadId = a});
+
+instance FromXML MultipartUpload where
+        parseXML x
+          = MultipartUpload' <$>
+              (x .@? "Initiated") <*> (x .@? "Initiator") <*>
+                (x .@? "Owner")
+                <*> (x .@? "Key")
+                <*> (x .@? "StorageClass")
+                <*> (x .@? "UploadId")
+
+-- | Specifies when noncurrent object versions expire. Upon expiration,
+-- Amazon S3 permanently deletes the noncurrent object versions. You set
+-- this lifecycle configuration action on a bucket that has versioning
+-- enabled (or suspended) to request that Amazon S3 delete noncurrent
+-- object versions at a specific period in the object\'s lifetime.
+--
+-- /See:/ 'noncurrentVersionExpiration' smart constructor.
+newtype NoncurrentVersionExpiration = NoncurrentVersionExpiration'
+    { _nveNoncurrentDays :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NoncurrentVersionExpiration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nveNoncurrentDays'
+noncurrentVersionExpiration
+    :: Int -- ^ 'nveNoncurrentDays'
+    -> NoncurrentVersionExpiration
+noncurrentVersionExpiration pNoncurrentDays_ =
+    NoncurrentVersionExpiration'
+    { _nveNoncurrentDays = pNoncurrentDays_
+    }
+
+-- | Specifies the number of days an object is noncurrent before Amazon S3
+-- can perform the associated action. For information about the noncurrent
+-- days calculations, see
+-- </AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
+-- in the Amazon Simple Storage Service Developer Guide.
+nveNoncurrentDays :: Lens' NoncurrentVersionExpiration Int
+nveNoncurrentDays = lens _nveNoncurrentDays (\ s a -> s{_nveNoncurrentDays = a});
+
+instance FromXML NoncurrentVersionExpiration where
+        parseXML x
+          = NoncurrentVersionExpiration' <$>
+              (x .@ "NoncurrentDays")
+
+instance ToXML NoncurrentVersionExpiration where
+        toXML NoncurrentVersionExpiration'{..}
+          = mconcat ["NoncurrentDays" @= _nveNoncurrentDays]
+
+-- | Container for the transition rule that describes when noncurrent objects
+-- transition to the GLACIER storage class. If your bucket is
+-- versioning-enabled (or versioning is suspended), you can set this action
+-- to request that Amazon S3 transition noncurrent object versions to the
+-- GLACIER storage class at a specific period in the object\'s lifetime.
+--
+-- /See:/ 'noncurrentVersionTransition' smart constructor.
+data NoncurrentVersionTransition = NoncurrentVersionTransition'
+    { _nvtNoncurrentDays :: !Int
+    , _nvtStorageClass   :: !TransitionStorageClass
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NoncurrentVersionTransition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nvtNoncurrentDays'
+--
+-- * 'nvtStorageClass'
+noncurrentVersionTransition
+    :: Int -- ^ 'nvtNoncurrentDays'
+    -> TransitionStorageClass -- ^ 'nvtStorageClass'
+    -> NoncurrentVersionTransition
+noncurrentVersionTransition pNoncurrentDays_ pStorageClass_ =
+    NoncurrentVersionTransition'
+    { _nvtNoncurrentDays = pNoncurrentDays_
+    , _nvtStorageClass = pStorageClass_
+    }
+
+-- | Specifies the number of days an object is noncurrent before Amazon S3
+-- can perform the associated action. For information about the noncurrent
+-- days calculations, see
+-- </AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
+-- in the Amazon Simple Storage Service Developer Guide.
+nvtNoncurrentDays :: Lens' NoncurrentVersionTransition Int
+nvtNoncurrentDays = lens _nvtNoncurrentDays (\ s a -> s{_nvtNoncurrentDays = a});
+
+-- | The class of storage used to store the object.
+nvtStorageClass :: Lens' NoncurrentVersionTransition TransitionStorageClass
+nvtStorageClass = lens _nvtStorageClass (\ s a -> s{_nvtStorageClass = a});
+
+instance FromXML NoncurrentVersionTransition where
+        parseXML x
+          = NoncurrentVersionTransition' <$>
+              (x .@ "NoncurrentDays") <*> (x .@ "StorageClass")
+
+instance ToXML NoncurrentVersionTransition where
+        toXML NoncurrentVersionTransition'{..}
+          = mconcat
+              ["NoncurrentDays" @= _nvtNoncurrentDays,
+               "StorageClass" @= _nvtStorageClass]
+
+-- | Container for specifying the notification configuration of the bucket.
+-- If this element is empty, notifications are turned off on the bucket.
+--
+-- /See:/ 'notificationConfiguration' smart constructor.
+data NotificationConfiguration = NotificationConfiguration'
+    { _ncQueueConfigurations          :: !(Maybe [QueueConfiguration])
+    , _ncTopicConfigurations          :: !(Maybe [TopicConfiguration])
+    , _ncLambdaFunctionConfigurations :: !(Maybe [LambdaFunctionConfiguration])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NotificationConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ncQueueConfigurations'
+--
+-- * 'ncTopicConfigurations'
+--
+-- * 'ncLambdaFunctionConfigurations'
+notificationConfiguration
+    :: NotificationConfiguration
+notificationConfiguration =
+    NotificationConfiguration'
+    { _ncQueueConfigurations = Nothing
+    , _ncTopicConfigurations = Nothing
+    , _ncLambdaFunctionConfigurations = Nothing
+    }
+
+-- | Undocumented member.
+ncQueueConfigurations :: Lens' NotificationConfiguration [QueueConfiguration]
+ncQueueConfigurations = lens _ncQueueConfigurations (\ s a -> s{_ncQueueConfigurations = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+ncTopicConfigurations :: Lens' NotificationConfiguration [TopicConfiguration]
+ncTopicConfigurations = lens _ncTopicConfigurations (\ s a -> s{_ncTopicConfigurations = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+ncLambdaFunctionConfigurations :: Lens' NotificationConfiguration [LambdaFunctionConfiguration]
+ncLambdaFunctionConfigurations = lens _ncLambdaFunctionConfigurations (\ s a -> s{_ncLambdaFunctionConfigurations = a}) . _Default . _Coerce;
+
+instance FromXML NotificationConfiguration where
+        parseXML x
+          = NotificationConfiguration' <$>
+              (may (parseXMLList "QueueConfiguration") x) <*>
+                (may (parseXMLList "TopicConfiguration") x)
+                <*>
+                (may (parseXMLList "CloudFunctionConfiguration") x)
+
+instance ToXML NotificationConfiguration where
+        toXML NotificationConfiguration'{..}
+          = mconcat
+              [toXML
+                 (toXMLList "QueueConfiguration" <$>
+                    _ncQueueConfigurations),
+               toXML
+                 (toXMLList "TopicConfiguration" <$>
+                    _ncTopicConfigurations),
+               toXML
+                 (toXMLList "CloudFunctionConfiguration" <$>
+                    _ncLambdaFunctionConfigurations)]
+
+-- | /See:/ 'object'' smart constructor.
+data Object = Object'
+    { _oOwner        :: !(Maybe Owner)
+    , _oETag         :: !ETag
+    , _oSize         :: !Int
+    , _oKey          :: !ObjectKey
+    , _oStorageClass :: !ObjectStorageClass
+    , _oLastModified :: !RFC822
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Object' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oOwner'
+--
+-- * 'oETag'
+--
+-- * 'oSize'
+--
+-- * 'oKey'
+--
+-- * 'oStorageClass'
+--
+-- * 'oLastModified'
+object'
+    :: ETag -- ^ 'oETag'
+    -> Int -- ^ 'oSize'
+    -> ObjectKey -- ^ 'oKey'
+    -> ObjectStorageClass -- ^ 'oStorageClass'
+    -> UTCTime -- ^ 'oLastModified'
+    -> Object
+object' pETag_ pSize_ pKey_ pStorageClass_ pLastModified_ =
+    Object'
+    { _oOwner = Nothing
+    , _oETag = pETag_
+    , _oSize = pSize_
+    , _oKey = pKey_
+    , _oStorageClass = pStorageClass_
+    , _oLastModified = _Time # pLastModified_
+    }
+
+-- | Undocumented member.
+oOwner :: Lens' Object (Maybe Owner)
+oOwner = lens _oOwner (\ s a -> s{_oOwner = a});
+
+-- | Undocumented member.
+oETag :: Lens' Object ETag
+oETag = lens _oETag (\ s a -> s{_oETag = a});
+
+-- | Undocumented member.
+oSize :: Lens' Object Int
+oSize = lens _oSize (\ s a -> s{_oSize = a});
+
+-- | Undocumented member.
+oKey :: Lens' Object ObjectKey
+oKey = lens _oKey (\ s a -> s{_oKey = a});
+
+-- | The class of storage used to store the object.
+oStorageClass :: Lens' Object ObjectStorageClass
+oStorageClass = lens _oStorageClass (\ s a -> s{_oStorageClass = a});
+
+-- | Undocumented member.
+oLastModified :: Lens' Object UTCTime
+oLastModified = lens _oLastModified (\ s a -> s{_oLastModified = a}) . _Time;
+
+instance FromXML Object where
+        parseXML x
+          = Object' <$>
+              (x .@? "Owner") <*> (x .@ "ETag") <*> (x .@ "Size")
+                <*> (x .@ "Key")
+                <*> (x .@ "StorageClass")
+                <*> (x .@ "LastModified")
+
+-- | /See:/ 'objectIdentifier' smart constructor.
+data ObjectIdentifier = ObjectIdentifier'
+    { _oiVersionId :: !(Maybe ObjectVersionId)
+    , _oiKey       :: !ObjectKey
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ObjectIdentifier' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oiVersionId'
+--
+-- * 'oiKey'
+objectIdentifier
+    :: ObjectKey -- ^ 'oiKey'
+    -> ObjectIdentifier
+objectIdentifier pKey_ =
+    ObjectIdentifier'
+    { _oiVersionId = Nothing
+    , _oiKey = pKey_
+    }
+
+-- | VersionId for the specific version of the object to delete.
+oiVersionId :: Lens' ObjectIdentifier (Maybe ObjectVersionId)
+oiVersionId = lens _oiVersionId (\ s a -> s{_oiVersionId = a});
+
+-- | Key name of the object to delete.
+oiKey :: Lens' ObjectIdentifier ObjectKey
+oiKey = lens _oiKey (\ s a -> s{_oiKey = a});
+
+instance ToXML ObjectIdentifier where
+        toXML ObjectIdentifier'{..}
+          = mconcat
+              ["VersionId" @= _oiVersionId, "Key" @= _oiKey]
+
+-- | /See:/ 'objectVersion' smart constructor.
+data ObjectVersion = ObjectVersion'
+    { _ovVersionId    :: !(Maybe ObjectVersionId)
+    , _ovETag         :: !(Maybe ETag)
+    , _ovSize         :: !(Maybe Int)
+    , _ovIsLatest     :: !(Maybe Bool)
+    , _ovOwner        :: !(Maybe Owner)
+    , _ovKey          :: !(Maybe ObjectKey)
+    , _ovStorageClass :: !(Maybe ObjectVersionStorageClass)
+    , _ovLastModified :: !(Maybe RFC822)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ObjectVersion' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ovVersionId'
+--
+-- * 'ovETag'
+--
+-- * 'ovSize'
+--
+-- * 'ovIsLatest'
+--
+-- * 'ovOwner'
+--
+-- * 'ovKey'
+--
+-- * 'ovStorageClass'
+--
+-- * 'ovLastModified'
+objectVersion
+    :: ObjectVersion
+objectVersion =
+    ObjectVersion'
+    { _ovVersionId = Nothing
+    , _ovETag = Nothing
+    , _ovSize = Nothing
+    , _ovIsLatest = Nothing
+    , _ovOwner = Nothing
+    , _ovKey = Nothing
+    , _ovStorageClass = Nothing
+    , _ovLastModified = Nothing
+    }
+
+-- | Version ID of an object.
+ovVersionId :: Lens' ObjectVersion (Maybe ObjectVersionId)
+ovVersionId = lens _ovVersionId (\ s a -> s{_ovVersionId = a});
+
+-- | Undocumented member.
+ovETag :: Lens' ObjectVersion (Maybe ETag)
+ovETag = lens _ovETag (\ s a -> s{_ovETag = a});
+
+-- | Size in bytes of the object.
+ovSize :: Lens' ObjectVersion (Maybe Int)
+ovSize = lens _ovSize (\ s a -> s{_ovSize = a});
+
+-- | Specifies whether the object is (true) or is not (false) the latest
+-- version of an object.
+ovIsLatest :: Lens' ObjectVersion (Maybe Bool)
+ovIsLatest = lens _ovIsLatest (\ s a -> s{_ovIsLatest = a});
+
+-- | Undocumented member.
+ovOwner :: Lens' ObjectVersion (Maybe Owner)
+ovOwner = lens _ovOwner (\ s a -> s{_ovOwner = a});
+
+-- | The object key.
+ovKey :: Lens' ObjectVersion (Maybe ObjectKey)
+ovKey = lens _ovKey (\ s a -> s{_ovKey = a});
+
+-- | The class of storage used to store the object.
+ovStorageClass :: Lens' ObjectVersion (Maybe ObjectVersionStorageClass)
+ovStorageClass = lens _ovStorageClass (\ s a -> s{_ovStorageClass = a});
+
+-- | Date and time the object was last modified.
+ovLastModified :: Lens' ObjectVersion (Maybe UTCTime)
+ovLastModified = lens _ovLastModified (\ s a -> s{_ovLastModified = a}) . mapping _Time;
+
+instance FromXML ObjectVersion where
+        parseXML x
+          = ObjectVersion' <$>
+              (x .@? "VersionId") <*> (x .@? "ETag") <*>
+                (x .@? "Size")
+                <*> (x .@? "IsLatest")
+                <*> (x .@? "Owner")
+                <*> (x .@? "Key")
+                <*> (x .@? "StorageClass")
+                <*> (x .@? "LastModified")
+
+-- | /See:/ 'owner' smart constructor.
+data Owner = Owner'
+    { _oId          :: !(Maybe Text)
+    , _oDisplayName :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Owner' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oId'
+--
+-- * 'oDisplayName'
+owner
+    :: Owner
+owner =
+    Owner'
+    { _oId = Nothing
+    , _oDisplayName = Nothing
+    }
+
+-- | Undocumented member.
+oId :: Lens' Owner (Maybe Text)
+oId = lens _oId (\ s a -> s{_oId = a});
+
+-- | Undocumented member.
+oDisplayName :: Lens' Owner (Maybe Text)
+oDisplayName = lens _oDisplayName (\ s a -> s{_oDisplayName = a});
+
+instance FromXML Owner where
+        parseXML x
+          = Owner' <$> (x .@? "ID") <*> (x .@? "DisplayName")
+
+instance ToXML Owner where
+        toXML Owner'{..}
+          = mconcat
+              ["ID" @= _oId, "DisplayName" @= _oDisplayName]
+
+-- | /See:/ 'part' smart constructor.
+data Part = Part'
+    { _pETag         :: !(Maybe ETag)
+    , _pSize         :: !(Maybe Int)
+    , _pPartNumber   :: !(Maybe Int)
+    , _pLastModified :: !(Maybe RFC822)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Part' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pETag'
+--
+-- * 'pSize'
+--
+-- * 'pPartNumber'
+--
+-- * 'pLastModified'
+part
+    :: Part
+part =
+    Part'
+    { _pETag = Nothing
+    , _pSize = Nothing
+    , _pPartNumber = Nothing
+    , _pLastModified = Nothing
+    }
+
+-- | Entity tag returned when the part was uploaded.
+pETag :: Lens' Part (Maybe ETag)
+pETag = lens _pETag (\ s a -> s{_pETag = a});
+
+-- | Size of the uploaded part data.
+pSize :: Lens' Part (Maybe Int)
+pSize = lens _pSize (\ s a -> s{_pSize = a});
+
+-- | Part number identifying the part. This is a positive integer between 1
+-- and 10,000.
+pPartNumber :: Lens' Part (Maybe Int)
+pPartNumber = lens _pPartNumber (\ s a -> s{_pPartNumber = a});
+
+-- | Date and time at which the part was uploaded.
+pLastModified :: Lens' Part (Maybe UTCTime)
+pLastModified = lens _pLastModified (\ s a -> s{_pLastModified = a}) . mapping _Time;
+
+instance FromXML Part where
+        parseXML x
+          = Part' <$>
+              (x .@? "ETag") <*> (x .@? "Size") <*>
+                (x .@? "PartNumber")
+                <*> (x .@? "LastModified")
+
+-- | Container for specifying an configuration when you want Amazon S3 to
+-- publish events to an Amazon Simple Queue Service (Amazon SQS) queue.
+--
+-- /See:/ 'queueConfiguration' smart constructor.
+data QueueConfiguration = QueueConfiguration'
+    { _qcId       :: !(Maybe Text)
+    , _qcQueueARN :: !Text
+    , _qcEvents   :: ![Event]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QueueConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qcId'
+--
+-- * 'qcQueueARN'
+--
+-- * 'qcEvents'
+queueConfiguration
+    :: Text -- ^ 'qcQueueARN'
+    -> QueueConfiguration
+queueConfiguration pQueueARN_ =
+    QueueConfiguration'
+    { _qcId = Nothing
+    , _qcQueueARN = pQueueARN_
+    , _qcEvents = mempty
+    }
+
+-- | Undocumented member.
+qcId :: Lens' QueueConfiguration (Maybe Text)
+qcId = lens _qcId (\ s a -> s{_qcId = a});
+
+-- | Amazon SQS queue ARN to which Amazon S3 will publish a message when it
+-- detects events of specified type.
+qcQueueARN :: Lens' QueueConfiguration Text
+qcQueueARN = lens _qcQueueARN (\ s a -> s{_qcQueueARN = a});
+
+-- | Undocumented member.
+qcEvents :: Lens' QueueConfiguration [Event]
+qcEvents = lens _qcEvents (\ s a -> s{_qcEvents = a}) . _Coerce;
+
+instance FromXML QueueConfiguration where
+        parseXML x
+          = QueueConfiguration' <$>
+              (x .@? "Id") <*> (x .@ "Queue") <*>
+                (parseXMLList "Event" x)
+
+instance ToXML QueueConfiguration where
+        toXML QueueConfiguration'{..}
+          = mconcat
+              ["Id" @= _qcId, "Queue" @= _qcQueueARN,
+               toXMLList "Event" _qcEvents]
+
+-- | /See:/ 'redirect' smart constructor.
+data Redirect = Redirect'
+    { _rHostName             :: !(Maybe Text)
+    , _rProtocol             :: !(Maybe Protocol)
+    , _rHTTPRedirectCode     :: !(Maybe Text)
+    , _rReplaceKeyWith       :: !(Maybe Text)
+    , _rReplaceKeyPrefixWith :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Redirect' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rHostName'
+--
+-- * 'rProtocol'
+--
+-- * 'rHTTPRedirectCode'
+--
+-- * 'rReplaceKeyWith'
+--
+-- * 'rReplaceKeyPrefixWith'
+redirect
+    :: Redirect
+redirect =
+    Redirect'
+    { _rHostName = Nothing
+    , _rProtocol = Nothing
+    , _rHTTPRedirectCode = Nothing
+    , _rReplaceKeyWith = Nothing
+    , _rReplaceKeyPrefixWith = Nothing
+    }
+
+-- | The host name to use in the redirect request.
+rHostName :: Lens' Redirect (Maybe Text)
+rHostName = lens _rHostName (\ s a -> s{_rHostName = a});
+
+-- | Protocol to use (http, https) when redirecting requests. The default is
+-- the protocol that is used in the original request.
+rProtocol :: Lens' Redirect (Maybe Protocol)
+rProtocol = lens _rProtocol (\ s a -> s{_rProtocol = a});
+
+-- | The HTTP redirect code to use on the response. Not required if one of
+-- the siblings is present.
+rHTTPRedirectCode :: Lens' Redirect (Maybe Text)
+rHTTPRedirectCode = lens _rHTTPRedirectCode (\ s a -> s{_rHTTPRedirectCode = a});
+
+-- | The specific object key to use in the redirect request. For example,
+-- redirect request to error.html. Not required if one of the sibling is
+-- present. Can be present only if ReplaceKeyPrefixWith is not provided.
+rReplaceKeyWith :: Lens' Redirect (Maybe Text)
+rReplaceKeyWith = lens _rReplaceKeyWith (\ s a -> s{_rReplaceKeyWith = a});
+
+-- | The object key prefix to use in the redirect request. For example, to
+-- redirect requests for all pages with prefix docs\/ (objects in the
+-- docs\/ folder) to documents\/, you can set a condition block with
+-- KeyPrefixEquals set to docs\/ and in the Redirect set
+-- ReplaceKeyPrefixWith to \/documents. Not required if one of the siblings
+-- is present. Can be present only if ReplaceKeyWith is not provided.
+rReplaceKeyPrefixWith :: Lens' Redirect (Maybe Text)
+rReplaceKeyPrefixWith = lens _rReplaceKeyPrefixWith (\ s a -> s{_rReplaceKeyPrefixWith = a});
+
+instance FromXML Redirect where
+        parseXML x
+          = Redirect' <$>
+              (x .@? "HostName") <*> (x .@? "Protocol") <*>
+                (x .@? "HttpRedirectCode")
+                <*> (x .@? "ReplaceKeyWith")
+                <*> (x .@? "ReplaceKeyPrefixWith")
+
+instance ToXML Redirect where
+        toXML Redirect'{..}
+          = mconcat
+              ["HostName" @= _rHostName, "Protocol" @= _rProtocol,
+               "HttpRedirectCode" @= _rHTTPRedirectCode,
+               "ReplaceKeyWith" @= _rReplaceKeyWith,
+               "ReplaceKeyPrefixWith" @= _rReplaceKeyPrefixWith]
+
+-- | /See:/ 'redirectAllRequestsTo' smart constructor.
+data RedirectAllRequestsTo = RedirectAllRequestsTo'
+    { _rartProtocol :: !(Maybe Protocol)
+    , _rartHostName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RedirectAllRequestsTo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rartProtocol'
+--
+-- * 'rartHostName'
+redirectAllRequestsTo
+    :: Text -- ^ 'rartHostName'
+    -> RedirectAllRequestsTo
+redirectAllRequestsTo pHostName_ =
+    RedirectAllRequestsTo'
+    { _rartProtocol = Nothing
+    , _rartHostName = pHostName_
+    }
+
+-- | Protocol to use (http, https) when redirecting requests. The default is
+-- the protocol that is used in the original request.
+rartProtocol :: Lens' RedirectAllRequestsTo (Maybe Protocol)
+rartProtocol = lens _rartProtocol (\ s a -> s{_rartProtocol = a});
+
+-- | Name of the host where requests will be redirected.
+rartHostName :: Lens' RedirectAllRequestsTo Text
+rartHostName = lens _rartHostName (\ s a -> s{_rartHostName = a});
+
+instance FromXML RedirectAllRequestsTo where
+        parseXML x
+          = RedirectAllRequestsTo' <$>
+              (x .@? "Protocol") <*> (x .@ "HostName")
+
+instance ToXML RedirectAllRequestsTo where
+        toXML RedirectAllRequestsTo'{..}
+          = mconcat
+              ["Protocol" @= _rartProtocol,
+               "HostName" @= _rartHostName]
+
+-- | Container for replication rules. You can add as many as 1,000 rules.
+-- Total replication configuration size can be up to 2 MB.
+--
+-- /See:/ 'replicationConfiguration' smart constructor.
+data ReplicationConfiguration = ReplicationConfiguration'
+    { _rcRole  :: !Text
+    , _rcRules :: ![ReplicationRule]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReplicationConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rcRole'
+--
+-- * 'rcRules'
+replicationConfiguration
+    :: Text -- ^ 'rcRole'
+    -> ReplicationConfiguration
+replicationConfiguration pRole_ =
+    ReplicationConfiguration'
+    { _rcRole = pRole_
+    , _rcRules = mempty
+    }
+
+-- | Amazon Resource Name (ARN) of an IAM role for Amazon S3 to assume when
+-- replicating the objects.
+rcRole :: Lens' ReplicationConfiguration Text
+rcRole = lens _rcRole (\ s a -> s{_rcRole = a});
+
+-- | Container for information about a particular replication rule.
+-- Replication configuration must have at least one rule and can contain up
+-- to 1,000 rules.
+rcRules :: Lens' ReplicationConfiguration [ReplicationRule]
+rcRules = lens _rcRules (\ s a -> s{_rcRules = a}) . _Coerce;
+
+instance FromXML ReplicationConfiguration where
+        parseXML x
+          = ReplicationConfiguration' <$>
+              (x .@ "Role") <*> (parseXMLList "Rule" x)
+
+instance ToXML ReplicationConfiguration where
+        toXML ReplicationConfiguration'{..}
+          = mconcat
+              ["Role" @= _rcRole, toXMLList "Rule" _rcRules]
+
+-- | /See:/ 'replicationRule' smart constructor.
+data ReplicationRule = ReplicationRule'
+    { _rrId          :: !(Maybe Text)
+    , _rrPrefix      :: !Text
+    , _rrStatus      :: !ReplicationRuleStatus
+    , _rrDestination :: !Destination
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReplicationRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrId'
+--
+-- * 'rrPrefix'
+--
+-- * 'rrStatus'
+--
+-- * 'rrDestination'
+replicationRule
+    :: Text -- ^ 'rrPrefix'
+    -> ReplicationRuleStatus -- ^ 'rrStatus'
+    -> Destination -- ^ 'rrDestination'
+    -> ReplicationRule
+replicationRule pPrefix_ pStatus_ pDestination_ =
+    ReplicationRule'
+    { _rrId = Nothing
+    , _rrPrefix = pPrefix_
+    , _rrStatus = pStatus_
+    , _rrDestination = pDestination_
+    }
+
+-- | Unique identifier for the rule. The value cannot be longer than 255
+-- characters.
+rrId :: Lens' ReplicationRule (Maybe Text)
+rrId = lens _rrId (\ s a -> s{_rrId = a});
+
+-- | Object keyname prefix identifying one or more objects to which the rule
+-- applies. Maximum prefix length can be up to 1,024 characters.
+-- Overlapping prefixes are not supported.
+rrPrefix :: Lens' ReplicationRule Text
+rrPrefix = lens _rrPrefix (\ s a -> s{_rrPrefix = a});
+
+-- | The rule is ignored if status is not Enabled.
+rrStatus :: Lens' ReplicationRule ReplicationRuleStatus
+rrStatus = lens _rrStatus (\ s a -> s{_rrStatus = a});
+
+-- | Undocumented member.
+rrDestination :: Lens' ReplicationRule Destination
+rrDestination = lens _rrDestination (\ s a -> s{_rrDestination = a});
+
+instance FromXML ReplicationRule where
+        parseXML x
+          = ReplicationRule' <$>
+              (x .@? "ID") <*> (x .@ "Prefix") <*> (x .@ "Status")
+                <*> (x .@ "Destination")
+
+instance ToXML ReplicationRule where
+        toXML ReplicationRule'{..}
+          = mconcat
+              ["ID" @= _rrId, "Prefix" @= _rrPrefix,
+               "Status" @= _rrStatus,
+               "Destination" @= _rrDestination]
+
+-- | /See:/ 'requestPaymentConfiguration' smart constructor.
+newtype RequestPaymentConfiguration = RequestPaymentConfiguration'
+    { _rpcPayer :: Payer
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RequestPaymentConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rpcPayer'
+requestPaymentConfiguration
+    :: Payer -- ^ 'rpcPayer'
+    -> RequestPaymentConfiguration
+requestPaymentConfiguration pPayer_ =
+    RequestPaymentConfiguration'
+    { _rpcPayer = pPayer_
+    }
+
+-- | Specifies who pays for the download and request fees.
+rpcPayer :: Lens' RequestPaymentConfiguration Payer
+rpcPayer = lens _rpcPayer (\ s a -> s{_rpcPayer = a});
+
+instance ToXML RequestPaymentConfiguration where
+        toXML RequestPaymentConfiguration'{..}
+          = mconcat ["Payer" @= _rpcPayer]
+
+-- | /See:/ 'restoreRequest' smart constructor.
+newtype RestoreRequest = RestoreRequest'
+    { _rrDays :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RestoreRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrDays'
+restoreRequest
+    :: Int -- ^ 'rrDays'
+    -> RestoreRequest
+restoreRequest pDays_ =
+    RestoreRequest'
+    { _rrDays = pDays_
+    }
+
+-- | Lifetime of the active copy in days
+rrDays :: Lens' RestoreRequest Int
+rrDays = lens _rrDays (\ s a -> s{_rrDays = a});
+
+instance ToXML RestoreRequest where
+        toXML RestoreRequest'{..}
+          = mconcat ["Days" @= _rrDays]
+
+-- | /See:/ 'routingRule' smart constructor.
+data RoutingRule = RoutingRule'
+    { _rrCondition :: !(Maybe Condition)
+    , _rrRedirect  :: !Redirect
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RoutingRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrCondition'
+--
+-- * 'rrRedirect'
+routingRule
+    :: Redirect -- ^ 'rrRedirect'
+    -> RoutingRule
+routingRule pRedirect_ =
+    RoutingRule'
+    { _rrCondition = Nothing
+    , _rrRedirect = pRedirect_
+    }
+
+-- | A container for describing a condition that must be met for the
+-- specified redirect to apply. For example, 1. If request is for pages in
+-- the \/docs folder, redirect to the \/documents folder. 2. If request
+-- results in HTTP error 4xx, redirect request to another host where you
+-- might process the error.
+rrCondition :: Lens' RoutingRule (Maybe Condition)
+rrCondition = lens _rrCondition (\ s a -> s{_rrCondition = a});
+
+-- | Container for redirect information. You can redirect requests to another
+-- host, to another page, or with another protocol. In the event of an
+-- error, you can can specify a different error code to return.
+rrRedirect :: Lens' RoutingRule Redirect
+rrRedirect = lens _rrRedirect (\ s a -> s{_rrRedirect = a});
+
+instance FromXML RoutingRule where
+        parseXML x
+          = RoutingRule' <$>
+              (x .@? "Condition") <*> (x .@ "Redirect")
+
+instance ToXML RoutingRule where
+        toXML RoutingRule'{..}
+          = mconcat
+              ["Condition" @= _rrCondition,
+               "Redirect" @= _rrRedirect]
+
+-- | /See:/ 'rule' smart constructor.
+data Rule = Rule'
+    { _rNoncurrentVersionExpiration :: !(Maybe NoncurrentVersionExpiration)
+    , _rTransition                  :: !(Maybe Transition)
+    , _rExpiration                  :: !(Maybe LifecycleExpiration)
+    , _rNoncurrentVersionTransition :: !(Maybe NoncurrentVersionTransition)
+    , _rId                          :: !(Maybe Text)
+    , _rPrefix                      :: !Text
+    , _rStatus                      :: !ExpirationStatus
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Rule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rNoncurrentVersionExpiration'
+--
+-- * 'rTransition'
+--
+-- * 'rExpiration'
+--
+-- * 'rNoncurrentVersionTransition'
+--
+-- * 'rId'
+--
+-- * 'rPrefix'
+--
+-- * 'rStatus'
+rule
+    :: Text -- ^ 'rPrefix'
+    -> ExpirationStatus -- ^ 'rStatus'
+    -> Rule
+rule pPrefix_ pStatus_ =
+    Rule'
+    { _rNoncurrentVersionExpiration = Nothing
+    , _rTransition = Nothing
+    , _rExpiration = Nothing
+    , _rNoncurrentVersionTransition = Nothing
+    , _rId = Nothing
+    , _rPrefix = pPrefix_
+    , _rStatus = pStatus_
+    }
+
+-- | Undocumented member.
+rNoncurrentVersionExpiration :: Lens' Rule (Maybe NoncurrentVersionExpiration)
+rNoncurrentVersionExpiration = lens _rNoncurrentVersionExpiration (\ s a -> s{_rNoncurrentVersionExpiration = a});
+
+-- | Undocumented member.
+rTransition :: Lens' Rule (Maybe Transition)
+rTransition = lens _rTransition (\ s a -> s{_rTransition = a});
+
+-- | Undocumented member.
+rExpiration :: Lens' Rule (Maybe LifecycleExpiration)
+rExpiration = lens _rExpiration (\ s a -> s{_rExpiration = a});
+
+-- | Undocumented member.
+rNoncurrentVersionTransition :: Lens' Rule (Maybe NoncurrentVersionTransition)
+rNoncurrentVersionTransition = lens _rNoncurrentVersionTransition (\ s a -> s{_rNoncurrentVersionTransition = a});
+
+-- | Unique identifier for the rule. The value cannot be longer than 255
+-- characters.
+rId :: Lens' Rule (Maybe Text)
+rId = lens _rId (\ s a -> s{_rId = a});
+
+-- | Prefix identifying one or more objects to which the rule applies.
+rPrefix :: Lens' Rule Text
+rPrefix = lens _rPrefix (\ s a -> s{_rPrefix = a});
+
+-- | If \'Enabled\', the rule is currently being applied. If \'Disabled\',
+-- the rule is not currently being applied.
+rStatus :: Lens' Rule ExpirationStatus
+rStatus = lens _rStatus (\ s a -> s{_rStatus = a});
+
+instance FromXML Rule where
+        parseXML x
+          = Rule' <$>
+              (x .@? "NoncurrentVersionExpiration") <*>
+                (x .@? "Transition")
+                <*> (x .@? "Expiration")
+                <*> (x .@? "NoncurrentVersionTransition")
+                <*> (x .@? "ID")
+                <*> (x .@ "Prefix")
+                <*> (x .@ "Status")
+
+instance ToXML Rule where
+        toXML Rule'{..}
+          = mconcat
+              ["NoncurrentVersionExpiration" @=
+                 _rNoncurrentVersionExpiration,
+               "Transition" @= _rTransition,
+               "Expiration" @= _rExpiration,
+               "NoncurrentVersionTransition" @=
+                 _rNoncurrentVersionTransition,
+               "ID" @= _rId, "Prefix" @= _rPrefix,
+               "Status" @= _rStatus]
+
+-- | /See:/ 's3ServiceError' smart constructor.
+data S3ServiceError = S3ServiceError'
+    { _sseVersionId :: !(Maybe ObjectVersionId)
+    , _sseKey       :: !(Maybe ObjectKey)
+    , _sseCode      :: !(Maybe Text)
+    , _sseMessage   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'S3ServiceError' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sseVersionId'
+--
+-- * 'sseKey'
+--
+-- * 'sseCode'
+--
+-- * 'sseMessage'
+s3ServiceError
+    :: S3ServiceError
+s3ServiceError =
+    S3ServiceError'
+    { _sseVersionId = Nothing
+    , _sseKey = Nothing
+    , _sseCode = Nothing
+    , _sseMessage = Nothing
+    }
+
+-- | Undocumented member.
+sseVersionId :: Lens' S3ServiceError (Maybe ObjectVersionId)
+sseVersionId = lens _sseVersionId (\ s a -> s{_sseVersionId = a});
+
+-- | Undocumented member.
+sseKey :: Lens' S3ServiceError (Maybe ObjectKey)
+sseKey = lens _sseKey (\ s a -> s{_sseKey = a});
+
+-- | Undocumented member.
+sseCode :: Lens' S3ServiceError (Maybe Text)
+sseCode = lens _sseCode (\ s a -> s{_sseCode = a});
+
+-- | Undocumented member.
+sseMessage :: Lens' S3ServiceError (Maybe Text)
+sseMessage = lens _sseMessage (\ s a -> s{_sseMessage = a});
+
+instance FromXML S3ServiceError where
+        parseXML x
+          = S3ServiceError' <$>
+              (x .@? "VersionId") <*> (x .@? "Key") <*>
+                (x .@? "Code")
+                <*> (x .@? "Message")
+
+-- | /See:/ 'tag' smart constructor.
+data Tag = Tag'
+    { _tagKey   :: !ObjectKey
+    , _tagValue :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Tag' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tagKey'
+--
+-- * 'tagValue'
+tag
+    :: ObjectKey -- ^ 'tagKey'
+    -> Text -- ^ 'tagValue'
+    -> Tag
+tag pKey_ pValue_ =
+    Tag'
+    { _tagKey = pKey_
+    , _tagValue = pValue_
+    }
+
+-- | Name of the tag.
+tagKey :: Lens' Tag ObjectKey
+tagKey = lens _tagKey (\ s a -> s{_tagKey = a});
+
+-- | Value of the tag.
+tagValue :: Lens' Tag Text
+tagValue = lens _tagValue (\ s a -> s{_tagValue = a});
+
+instance FromXML Tag where
+        parseXML x = Tag' <$> (x .@ "Key") <*> (x .@ "Value")
+
+instance ToXML Tag where
+        toXML Tag'{..}
+          = mconcat ["Key" @= _tagKey, "Value" @= _tagValue]
+
+-- | /See:/ 'tagging' smart constructor.
+newtype Tagging = Tagging'
+    { _tTagSet :: [Tag]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Tagging' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tTagSet'
+tagging
+    :: Tagging
+tagging =
+    Tagging'
+    { _tTagSet = mempty
+    }
+
+-- | Undocumented member.
+tTagSet :: Lens' Tagging [Tag]
+tTagSet = lens _tTagSet (\ s a -> s{_tTagSet = a}) . _Coerce;
+
+instance ToXML Tagging where
+        toXML Tagging'{..}
+          = mconcat ["TagSet" @= toXMLList "Tag" _tTagSet]
+
+-- | /See:/ 'targetGrant' smart constructor.
+data TargetGrant = TargetGrant'
+    { _tgPermission :: !(Maybe BucketLogsPermission)
+    , _tgGrantee    :: !(Maybe Grantee)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetGrant' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tgPermission'
+--
+-- * 'tgGrantee'
+targetGrant
+    :: TargetGrant
+targetGrant =
+    TargetGrant'
+    { _tgPermission = Nothing
+    , _tgGrantee = Nothing
+    }
+
+-- | Logging permissions assigned to the Grantee for the bucket.
+tgPermission :: Lens' TargetGrant (Maybe BucketLogsPermission)
+tgPermission = lens _tgPermission (\ s a -> s{_tgPermission = a});
+
+-- | Undocumented member.
+tgGrantee :: Lens' TargetGrant (Maybe Grantee)
+tgGrantee = lens _tgGrantee (\ s a -> s{_tgGrantee = a});
+
+instance FromXML TargetGrant where
+        parseXML x
+          = TargetGrant' <$>
+              (x .@? "Permission") <*> (x .@? "Grantee")
+
+instance ToXML TargetGrant where
+        toXML TargetGrant'{..}
+          = mconcat
+              ["Permission" @= _tgPermission,
+               "Grantee" @= _tgGrantee]
+
+-- | Container for specifying the configuration when you want Amazon S3 to
+-- publish events to an Amazon Simple Notification Service (Amazon SNS)
+-- topic.
+--
+-- /See:/ 'topicConfiguration' smart constructor.
+data TopicConfiguration = TopicConfiguration'
+    { _tcId       :: !(Maybe Text)
+    , _tcTopicARN :: !Text
+    , _tcEvents   :: ![Event]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TopicConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tcId'
+--
+-- * 'tcTopicARN'
+--
+-- * 'tcEvents'
+topicConfiguration
+    :: Text -- ^ 'tcTopicARN'
+    -> TopicConfiguration
+topicConfiguration pTopicARN_ =
+    TopicConfiguration'
+    { _tcId = Nothing
+    , _tcTopicARN = pTopicARN_
+    , _tcEvents = mempty
+    }
+
+-- | Undocumented member.
+tcId :: Lens' TopicConfiguration (Maybe Text)
+tcId = lens _tcId (\ s a -> s{_tcId = a});
+
+-- | Amazon SNS topic ARN to which Amazon S3 will publish a message when it
+-- detects events of specified type.
+tcTopicARN :: Lens' TopicConfiguration Text
+tcTopicARN = lens _tcTopicARN (\ s a -> s{_tcTopicARN = a});
+
+-- | Undocumented member.
+tcEvents :: Lens' TopicConfiguration [Event]
+tcEvents = lens _tcEvents (\ s a -> s{_tcEvents = a}) . _Coerce;
+
+instance FromXML TopicConfiguration where
+        parseXML x
+          = TopicConfiguration' <$>
+              (x .@? "Id") <*> (x .@ "Topic") <*>
+                (parseXMLList "Event" x)
+
+instance ToXML TopicConfiguration where
+        toXML TopicConfiguration'{..}
+          = mconcat
+              ["Id" @= _tcId, "Topic" @= _tcTopicARN,
+               toXMLList "Event" _tcEvents]
+
+-- | /See:/ 'transition' smart constructor.
+data Transition = Transition'
+    { _tDays         :: !(Maybe Int)
+    , _tDate         :: !(Maybe RFC822)
+    , _tStorageClass :: !(Maybe TransitionStorageClass)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Transition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tDays'
+--
+-- * 'tDate'
+--
+-- * 'tStorageClass'
+transition
+    :: Transition
+transition =
+    Transition'
+    { _tDays = Nothing
+    , _tDate = Nothing
+    , _tStorageClass = Nothing
+    }
+
+-- | Indicates the lifetime, in days, of the objects that are subject to the
+-- rule. The value must be a non-zero positive integer.
+tDays :: Lens' Transition (Maybe Int)
+tDays = lens _tDays (\ s a -> s{_tDays = a});
+
+-- | Indicates at what date the object is to be moved or deleted. Should be
+-- in GMT ISO 8601 Format.
+tDate :: Lens' Transition (Maybe UTCTime)
+tDate = lens _tDate (\ s a -> s{_tDate = a}) . mapping _Time;
+
+-- | The class of storage used to store the object.
+tStorageClass :: Lens' Transition (Maybe TransitionStorageClass)
+tStorageClass = lens _tStorageClass (\ s a -> s{_tStorageClass = a});
+
+instance FromXML Transition where
+        parseXML x
+          = Transition' <$>
+              (x .@? "Days") <*> (x .@? "Date") <*>
+                (x .@? "StorageClass")
+
+instance ToXML Transition where
+        toXML Transition'{..}
+          = mconcat
+              ["Days" @= _tDays, "Date" @= _tDate,
+               "StorageClass" @= _tStorageClass]
+
+-- | /See:/ 'versioningConfiguration' smart constructor.
+data VersioningConfiguration = VersioningConfiguration'
+    { _vcStatus    :: !(Maybe BucketVersioningStatus)
+    , _vcMFADelete :: !(Maybe MFADelete)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VersioningConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vcStatus'
+--
+-- * 'vcMFADelete'
+versioningConfiguration
+    :: VersioningConfiguration
+versioningConfiguration =
+    VersioningConfiguration'
+    { _vcStatus = Nothing
+    , _vcMFADelete = Nothing
+    }
+
+-- | The versioning state of the bucket.
+vcStatus :: Lens' VersioningConfiguration (Maybe BucketVersioningStatus)
+vcStatus = lens _vcStatus (\ s a -> s{_vcStatus = a});
+
+-- | Specifies whether MFA delete is enabled in the bucket versioning
+-- configuration. This element is only returned if the bucket has been
+-- configured with MFA delete. If the bucket has never been so configured,
+-- this element is not returned.
+vcMFADelete :: Lens' VersioningConfiguration (Maybe MFADelete)
+vcMFADelete = lens _vcMFADelete (\ s a -> s{_vcMFADelete = a});
+
+instance ToXML VersioningConfiguration where
+        toXML VersioningConfiguration'{..}
+          = mconcat
+              ["Status" @= _vcStatus, "MfaDelete" @= _vcMFADelete]
+
+-- | /See:/ 'websiteConfiguration' smart constructor.
+data WebsiteConfiguration = WebsiteConfiguration'
+    { _wcRedirectAllRequestsTo :: !(Maybe RedirectAllRequestsTo)
+    , _wcErrorDocument         :: !(Maybe ErrorDocument)
+    , _wcRoutingRules          :: !(Maybe [RoutingRule])
+    , _wcIndexDocument         :: !(Maybe IndexDocument)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'WebsiteConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wcRedirectAllRequestsTo'
+--
+-- * 'wcErrorDocument'
+--
+-- * 'wcRoutingRules'
+--
+-- * 'wcIndexDocument'
+websiteConfiguration
+    :: WebsiteConfiguration
+websiteConfiguration =
+    WebsiteConfiguration'
+    { _wcRedirectAllRequestsTo = Nothing
+    , _wcErrorDocument = Nothing
+    , _wcRoutingRules = Nothing
+    , _wcIndexDocument = Nothing
+    }
+
+-- | Undocumented member.
+wcRedirectAllRequestsTo :: Lens' WebsiteConfiguration (Maybe RedirectAllRequestsTo)
+wcRedirectAllRequestsTo = lens _wcRedirectAllRequestsTo (\ s a -> s{_wcRedirectAllRequestsTo = a});
+
+-- | Undocumented member.
+wcErrorDocument :: Lens' WebsiteConfiguration (Maybe ErrorDocument)
+wcErrorDocument = lens _wcErrorDocument (\ s a -> s{_wcErrorDocument = a});
+
+-- | Undocumented member.
+wcRoutingRules :: Lens' WebsiteConfiguration [RoutingRule]
+wcRoutingRules = lens _wcRoutingRules (\ s a -> s{_wcRoutingRules = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+wcIndexDocument :: Lens' WebsiteConfiguration (Maybe IndexDocument)
+wcIndexDocument = lens _wcIndexDocument (\ s a -> s{_wcIndexDocument = a});
+
+instance ToXML WebsiteConfiguration where
+        toXML WebsiteConfiguration'{..}
+          = mconcat
+              ["RedirectAllRequestsTo" @= _wcRedirectAllRequestsTo,
+               "ErrorDocument" @= _wcErrorDocument,
+               "RoutingRules" @=
+                 toXML (toXMLList "RoutingRule" <$> _wcRoutingRules),
+               "IndexDocument" @= _wcIndexDocument]
diff --git a/gen/Network/AWS/S3/Types/Sum.hs b/gen/Network/AWS/S3/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/Types/Sum.hs
@@ -0,0 +1,700 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.S3.Types.Sum
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.S3.Types.Sum where
+
+import           Network.AWS.Prelude
+import           Network.AWS.S3.Internal
+
+data BucketCannedACL
+    = BAuthenticatedRead
+    | BPrivate
+    | BPublicRead
+    | BPublicReadWrite
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText BucketCannedACL where
+    parser = takeLowerText >>= \case
+        "authenticated-read" -> pure BAuthenticatedRead
+        "private" -> pure BPrivate
+        "public-read" -> pure BPublicRead
+        "public-read-write" -> pure BPublicReadWrite
+        e -> fromTextError $ "Failure parsing BucketCannedACL from value: '" <> e
+           <> "'. Accepted values: authenticated-read, private, public-read, public-read-write"
+
+instance ToText BucketCannedACL where
+    toText = \case
+        BAuthenticatedRead -> "authenticated-read"
+        BPrivate -> "private"
+        BPublicRead -> "public-read"
+        BPublicReadWrite -> "public-read-write"
+
+instance Hashable     BucketCannedACL
+instance ToByteString BucketCannedACL
+instance ToQuery      BucketCannedACL
+instance ToHeader     BucketCannedACL
+
+instance ToXML BucketCannedACL where
+    toXML = toXMLText
+
+data BucketLogsPermission
+    = FullControl
+    | Read
+    | Write
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText BucketLogsPermission where
+    parser = takeLowerText >>= \case
+        "full_control" -> pure FullControl
+        "read" -> pure Read
+        "write" -> pure Write
+        e -> fromTextError $ "Failure parsing BucketLogsPermission from value: '" <> e
+           <> "'. Accepted values: full_control, read, write"
+
+instance ToText BucketLogsPermission where
+    toText = \case
+        FullControl -> "full_control"
+        Read -> "read"
+        Write -> "write"
+
+instance Hashable     BucketLogsPermission
+instance ToByteString BucketLogsPermission
+instance ToQuery      BucketLogsPermission
+instance ToHeader     BucketLogsPermission
+
+instance FromXML BucketLogsPermission where
+    parseXML = parseXMLText "BucketLogsPermission"
+
+instance ToXML BucketLogsPermission where
+    toXML = toXMLText
+
+data BucketVersioningStatus
+    = BVSEnabled
+    | BVSSuspended
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText BucketVersioningStatus where
+    parser = takeLowerText >>= \case
+        "enabled" -> pure BVSEnabled
+        "suspended" -> pure BVSSuspended
+        e -> fromTextError $ "Failure parsing BucketVersioningStatus from value: '" <> e
+           <> "'. Accepted values: enabled, suspended"
+
+instance ToText BucketVersioningStatus where
+    toText = \case
+        BVSEnabled -> "enabled"
+        BVSSuspended -> "suspended"
+
+instance Hashable     BucketVersioningStatus
+instance ToByteString BucketVersioningStatus
+instance ToQuery      BucketVersioningStatus
+instance ToHeader     BucketVersioningStatus
+
+instance FromXML BucketVersioningStatus where
+    parseXML = parseXMLText "BucketVersioningStatus"
+
+instance ToXML BucketVersioningStatus where
+    toXML = toXMLText
+
+-- | Requests Amazon S3 to encode the object keys in the response and
+-- specifies the encoding method to use. An object key may contain any
+-- Unicode character; however, XML 1.0 parser cannot parse some characters,
+-- such as characters with an ASCII value from 0 to 10. For characters that
+-- are not supported in XML 1.0, you can add this parameter to request that
+-- Amazon S3 encode the keys in the response.
+data EncodingType =
+    URL
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText EncodingType where
+    parser = takeLowerText >>= \case
+        "url" -> pure URL
+        e -> fromTextError $ "Failure parsing EncodingType from value: '" <> e
+           <> "'. Accepted values: url"
+
+instance ToText EncodingType where
+    toText = \case
+        URL -> "url"
+
+instance Hashable     EncodingType
+instance ToByteString EncodingType
+instance ToQuery      EncodingType
+instance ToHeader     EncodingType
+
+instance FromXML EncodingType where
+    parseXML = parseXMLText "EncodingType"
+
+instance ToXML EncodingType where
+    toXML = toXMLText
+
+-- | Bucket event for which to send notifications.
+data Event
+    = S3ObjectCreated
+    | S3ObjectCreatedCompleteMultipartUpload
+    | S3ObjectCreatedCopy
+    | S3ObjectCreatedPost
+    | S3ObjectCreatedPut
+    | S3ObjectRemoved
+    | S3ObjectRemovedDelete
+    | S3ObjectRemovedDeleteMarkerCreated
+    | S3ReducedRedundancyLostObject
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText Event where
+    parser = takeLowerText >>= \case
+        "s3:objectcreated:*" -> pure S3ObjectCreated
+        "s3:objectcreated:completemultipartupload" -> pure S3ObjectCreatedCompleteMultipartUpload
+        "s3:objectcreated:copy" -> pure S3ObjectCreatedCopy
+        "s3:objectcreated:post" -> pure S3ObjectCreatedPost
+        "s3:objectcreated:put" -> pure S3ObjectCreatedPut
+        "s3:objectremoved:*" -> pure S3ObjectRemoved
+        "s3:objectremoved:delete" -> pure S3ObjectRemovedDelete
+        "s3:objectremoved:deletemarkercreated" -> pure S3ObjectRemovedDeleteMarkerCreated
+        "s3:reducedredundancylostobject" -> pure S3ReducedRedundancyLostObject
+        e -> fromTextError $ "Failure parsing Event from value: '" <> e
+           <> "'. Accepted values: s3:objectcreated:*, s3:objectcreated:completemultipartupload, s3:objectcreated:copy, s3:objectcreated:post, s3:objectcreated:put, s3:objectremoved:*, s3:objectremoved:delete, s3:objectremoved:deletemarkercreated, s3:reducedredundancylostobject"
+
+instance ToText Event where
+    toText = \case
+        S3ObjectCreated -> "s3:objectcreated:*"
+        S3ObjectCreatedCompleteMultipartUpload -> "s3:objectcreated:completemultipartupload"
+        S3ObjectCreatedCopy -> "s3:objectcreated:copy"
+        S3ObjectCreatedPost -> "s3:objectcreated:post"
+        S3ObjectCreatedPut -> "s3:objectcreated:put"
+        S3ObjectRemoved -> "s3:objectremoved:*"
+        S3ObjectRemovedDelete -> "s3:objectremoved:delete"
+        S3ObjectRemovedDeleteMarkerCreated -> "s3:objectremoved:deletemarkercreated"
+        S3ReducedRedundancyLostObject -> "s3:reducedredundancylostobject"
+
+instance Hashable     Event
+instance ToByteString Event
+instance ToQuery      Event
+instance ToHeader     Event
+
+instance FromXML Event where
+    parseXML = parseXMLText "Event"
+
+instance ToXML Event where
+    toXML = toXMLText
+
+data ExpirationStatus
+    = ESDisabled
+    | ESEnabled
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ExpirationStatus where
+    parser = takeLowerText >>= \case
+        "disabled" -> pure ESDisabled
+        "enabled" -> pure ESEnabled
+        e -> fromTextError $ "Failure parsing ExpirationStatus from value: '" <> e
+           <> "'. Accepted values: disabled, enabled"
+
+instance ToText ExpirationStatus where
+    toText = \case
+        ESDisabled -> "disabled"
+        ESEnabled -> "enabled"
+
+instance Hashable     ExpirationStatus
+instance ToByteString ExpirationStatus
+instance ToQuery      ExpirationStatus
+instance ToHeader     ExpirationStatus
+
+instance FromXML ExpirationStatus where
+    parseXML = parseXMLText "ExpirationStatus"
+
+instance ToXML ExpirationStatus where
+    toXML = toXMLText
+
+data MFADelete
+    = MDDisabled
+    | MDEnabled
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText MFADelete where
+    parser = takeLowerText >>= \case
+        "disabled" -> pure MDDisabled
+        "enabled" -> pure MDEnabled
+        e -> fromTextError $ "Failure parsing MFADelete from value: '" <> e
+           <> "'. Accepted values: disabled, enabled"
+
+instance ToText MFADelete where
+    toText = \case
+        MDDisabled -> "disabled"
+        MDEnabled -> "enabled"
+
+instance Hashable     MFADelete
+instance ToByteString MFADelete
+instance ToQuery      MFADelete
+instance ToHeader     MFADelete
+
+instance ToXML MFADelete where
+    toXML = toXMLText
+
+data MFADeleteStatus
+    = MDSDisabled
+    | MDSEnabled
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText MFADeleteStatus where
+    parser = takeLowerText >>= \case
+        "disabled" -> pure MDSDisabled
+        "enabled" -> pure MDSEnabled
+        e -> fromTextError $ "Failure parsing MFADeleteStatus from value: '" <> e
+           <> "'. Accepted values: disabled, enabled"
+
+instance ToText MFADeleteStatus where
+    toText = \case
+        MDSDisabled -> "disabled"
+        MDSEnabled -> "enabled"
+
+instance Hashable     MFADeleteStatus
+instance ToByteString MFADeleteStatus
+instance ToQuery      MFADeleteStatus
+instance ToHeader     MFADeleteStatus
+
+instance FromXML MFADeleteStatus where
+    parseXML = parseXMLText "MFADeleteStatus"
+
+data MetadataDirective
+    = Copy
+    | Replace
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText MetadataDirective where
+    parser = takeLowerText >>= \case
+        "copy" -> pure Copy
+        "replace" -> pure Replace
+        e -> fromTextError $ "Failure parsing MetadataDirective from value: '" <> e
+           <> "'. Accepted values: copy, replace"
+
+instance ToText MetadataDirective where
+    toText = \case
+        Copy -> "copy"
+        Replace -> "replace"
+
+instance Hashable     MetadataDirective
+instance ToByteString MetadataDirective
+instance ToQuery      MetadataDirective
+instance ToHeader     MetadataDirective
+
+instance ToXML MetadataDirective where
+    toXML = toXMLText
+
+data ObjectCannedACL
+    = OAuthenticatedRead
+    | OBucketOwnerFullControl
+    | OBucketOwnerRead
+    | OPrivate
+    | OPublicRead
+    | OPublicReadWrite
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ObjectCannedACL where
+    parser = takeLowerText >>= \case
+        "authenticated-read" -> pure OAuthenticatedRead
+        "bucket-owner-full-control" -> pure OBucketOwnerFullControl
+        "bucket-owner-read" -> pure OBucketOwnerRead
+        "private" -> pure OPrivate
+        "public-read" -> pure OPublicRead
+        "public-read-write" -> pure OPublicReadWrite
+        e -> fromTextError $ "Failure parsing ObjectCannedACL from value: '" <> e
+           <> "'. Accepted values: authenticated-read, bucket-owner-full-control, bucket-owner-read, private, public-read, public-read-write"
+
+instance ToText ObjectCannedACL where
+    toText = \case
+        OAuthenticatedRead -> "authenticated-read"
+        OBucketOwnerFullControl -> "bucket-owner-full-control"
+        OBucketOwnerRead -> "bucket-owner-read"
+        OPrivate -> "private"
+        OPublicRead -> "public-read"
+        OPublicReadWrite -> "public-read-write"
+
+instance Hashable     ObjectCannedACL
+instance ToByteString ObjectCannedACL
+instance ToQuery      ObjectCannedACL
+instance ToHeader     ObjectCannedACL
+
+instance ToXML ObjectCannedACL where
+    toXML = toXMLText
+
+data ObjectStorageClass
+    = OSCGlacier
+    | OSCReducedRedundancy
+    | OSCStandard
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ObjectStorageClass where
+    parser = takeLowerText >>= \case
+        "glacier" -> pure OSCGlacier
+        "reduced_redundancy" -> pure OSCReducedRedundancy
+        "standard" -> pure OSCStandard
+        e -> fromTextError $ "Failure parsing ObjectStorageClass from value: '" <> e
+           <> "'. Accepted values: glacier, reduced_redundancy, standard"
+
+instance ToText ObjectStorageClass where
+    toText = \case
+        OSCGlacier -> "glacier"
+        OSCReducedRedundancy -> "reduced_redundancy"
+        OSCStandard -> "standard"
+
+instance Hashable     ObjectStorageClass
+instance ToByteString ObjectStorageClass
+instance ToQuery      ObjectStorageClass
+instance ToHeader     ObjectStorageClass
+
+instance FromXML ObjectStorageClass where
+    parseXML = parseXMLText "ObjectStorageClass"
+
+data ObjectVersionStorageClass =
+    OVSCStandard
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ObjectVersionStorageClass where
+    parser = takeLowerText >>= \case
+        "standard" -> pure OVSCStandard
+        e -> fromTextError $ "Failure parsing ObjectVersionStorageClass from value: '" <> e
+           <> "'. Accepted values: standard"
+
+instance ToText ObjectVersionStorageClass where
+    toText = \case
+        OVSCStandard -> "standard"
+
+instance Hashable     ObjectVersionStorageClass
+instance ToByteString ObjectVersionStorageClass
+instance ToQuery      ObjectVersionStorageClass
+instance ToHeader     ObjectVersionStorageClass
+
+instance FromXML ObjectVersionStorageClass where
+    parseXML = parseXMLText "ObjectVersionStorageClass"
+
+data Payer
+    = BucketOwner
+    | Requester
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText Payer where
+    parser = takeLowerText >>= \case
+        "bucketowner" -> pure BucketOwner
+        "requester" -> pure Requester
+        e -> fromTextError $ "Failure parsing Payer from value: '" <> e
+           <> "'. Accepted values: bucketowner, requester"
+
+instance ToText Payer where
+    toText = \case
+        BucketOwner -> "bucketowner"
+        Requester -> "requester"
+
+instance Hashable     Payer
+instance ToByteString Payer
+instance ToQuery      Payer
+instance ToHeader     Payer
+
+instance FromXML Payer where
+    parseXML = parseXMLText "Payer"
+
+instance ToXML Payer where
+    toXML = toXMLText
+
+data Permission
+    = PFullControl
+    | PRead
+    | PReadAcp
+    | PWrite
+    | PWriteAcp
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText Permission where
+    parser = takeLowerText >>= \case
+        "full_control" -> pure PFullControl
+        "read" -> pure PRead
+        "read_acp" -> pure PReadAcp
+        "write" -> pure PWrite
+        "write_acp" -> pure PWriteAcp
+        e -> fromTextError $ "Failure parsing Permission from value: '" <> e
+           <> "'. Accepted values: full_control, read, read_acp, write, write_acp"
+
+instance ToText Permission where
+    toText = \case
+        PFullControl -> "full_control"
+        PRead -> "read"
+        PReadAcp -> "read_acp"
+        PWrite -> "write"
+        PWriteAcp -> "write_acp"
+
+instance Hashable     Permission
+instance ToByteString Permission
+instance ToQuery      Permission
+instance ToHeader     Permission
+
+instance FromXML Permission where
+    parseXML = parseXMLText "Permission"
+
+instance ToXML Permission where
+    toXML = toXMLText
+
+data Protocol
+    = HTTP
+    | HTTPS
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText Protocol where
+    parser = takeLowerText >>= \case
+        "http" -> pure HTTP
+        "https" -> pure HTTPS
+        e -> fromTextError $ "Failure parsing Protocol from value: '" <> e
+           <> "'. Accepted values: http, https"
+
+instance ToText Protocol where
+    toText = \case
+        HTTP -> "http"
+        HTTPS -> "https"
+
+instance Hashable     Protocol
+instance ToByteString Protocol
+instance ToQuery      Protocol
+instance ToHeader     Protocol
+
+instance FromXML Protocol where
+    parseXML = parseXMLText "Protocol"
+
+instance ToXML Protocol where
+    toXML = toXMLText
+
+data ReplicationRuleStatus
+    = Disabled
+    | Enabled
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ReplicationRuleStatus where
+    parser = takeLowerText >>= \case
+        "disabled" -> pure Disabled
+        "enabled" -> pure Enabled
+        e -> fromTextError $ "Failure parsing ReplicationRuleStatus from value: '" <> e
+           <> "'. Accepted values: disabled, enabled"
+
+instance ToText ReplicationRuleStatus where
+    toText = \case
+        Disabled -> "disabled"
+        Enabled -> "enabled"
+
+instance Hashable     ReplicationRuleStatus
+instance ToByteString ReplicationRuleStatus
+instance ToQuery      ReplicationRuleStatus
+instance ToHeader     ReplicationRuleStatus
+
+instance FromXML ReplicationRuleStatus where
+    parseXML = parseXMLText "ReplicationRuleStatus"
+
+instance ToXML ReplicationRuleStatus where
+    toXML = toXMLText
+
+data ReplicationStatus
+    = Complete
+    | Failed
+    | Pending
+    | Replica
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ReplicationStatus where
+    parser = takeLowerText >>= \case
+        "complete" -> pure Complete
+        "failed" -> pure Failed
+        "pending" -> pure Pending
+        "replica" -> pure Replica
+        e -> fromTextError $ "Failure parsing ReplicationStatus from value: '" <> e
+           <> "'. Accepted values: complete, failed, pending, replica"
+
+instance ToText ReplicationStatus where
+    toText = \case
+        Complete -> "complete"
+        Failed -> "failed"
+        Pending -> "pending"
+        Replica -> "replica"
+
+instance Hashable     ReplicationStatus
+instance ToByteString ReplicationStatus
+instance ToQuery      ReplicationStatus
+instance ToHeader     ReplicationStatus
+
+instance FromXML ReplicationStatus where
+    parseXML = parseXMLText "ReplicationStatus"
+
+-- | If present, indicates that the requester was successfully charged for
+-- the request.
+data RequestCharged =
+    RCRequester
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText RequestCharged where
+    parser = takeLowerText >>= \case
+        "requester" -> pure RCRequester
+        e -> fromTextError $ "Failure parsing RequestCharged from value: '" <> e
+           <> "'. Accepted values: requester"
+
+instance ToText RequestCharged where
+    toText = \case
+        RCRequester -> "requester"
+
+instance Hashable     RequestCharged
+instance ToByteString RequestCharged
+instance ToQuery      RequestCharged
+instance ToHeader     RequestCharged
+
+instance FromXML RequestCharged where
+    parseXML = parseXMLText "RequestCharged"
+
+-- | Confirms that the requester knows that she or he will be charged for the
+-- request. Bucket owners need not specify this parameter in their
+-- requests. Documentation on downloading objects from requester pays
+-- buckets can be found at
+-- http:\/\/docs.aws.amazon.com\/AmazonS3\/latest\/dev\/ObjectsinRequesterPaysBuckets.html
+data RequestPayer =
+    RPRequester
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText RequestPayer where
+    parser = takeLowerText >>= \case
+        "requester" -> pure RPRequester
+        e -> fromTextError $ "Failure parsing RequestPayer from value: '" <> e
+           <> "'. Accepted values: requester"
+
+instance ToText RequestPayer where
+    toText = \case
+        RPRequester -> "requester"
+
+instance Hashable     RequestPayer
+instance ToByteString RequestPayer
+instance ToQuery      RequestPayer
+instance ToHeader     RequestPayer
+
+instance ToXML RequestPayer where
+    toXML = toXMLText
+
+data ServerSideEncryption
+    = AES256
+    | AWSKMS
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ServerSideEncryption where
+    parser = takeLowerText >>= \case
+        "aes256" -> pure AES256
+        "aws:kms" -> pure AWSKMS
+        e -> fromTextError $ "Failure parsing ServerSideEncryption from value: '" <> e
+           <> "'. Accepted values: aes256, aws:kms"
+
+instance ToText ServerSideEncryption where
+    toText = \case
+        AES256 -> "aes256"
+        AWSKMS -> "aws:kms"
+
+instance Hashable     ServerSideEncryption
+instance ToByteString ServerSideEncryption
+instance ToQuery      ServerSideEncryption
+instance ToHeader     ServerSideEncryption
+
+instance FromXML ServerSideEncryption where
+    parseXML = parseXMLText "ServerSideEncryption"
+
+instance ToXML ServerSideEncryption where
+    toXML = toXMLText
+
+data StorageClass
+    = LT'
+    | ReducedRedundancy
+    | Standard
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText StorageClass where
+    parser = takeLowerText >>= \case
+        "lt" -> pure LT'
+        "reduced_redundancy" -> pure ReducedRedundancy
+        "standard" -> pure Standard
+        e -> fromTextError $ "Failure parsing StorageClass from value: '" <> e
+           <> "'. Accepted values: lt, reduced_redundancy, standard"
+
+instance ToText StorageClass where
+    toText = \case
+        LT' -> "lt"
+        ReducedRedundancy -> "reduced_redundancy"
+        Standard -> "standard"
+
+instance Hashable     StorageClass
+instance ToByteString StorageClass
+instance ToQuery      StorageClass
+instance ToHeader     StorageClass
+
+instance FromXML StorageClass where
+    parseXML = parseXMLText "StorageClass"
+
+instance ToXML StorageClass where
+    toXML = toXMLText
+
+data TransitionStorageClass =
+    Glacier
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText TransitionStorageClass where
+    parser = takeLowerText >>= \case
+        "glacier" -> pure Glacier
+        e -> fromTextError $ "Failure parsing TransitionStorageClass from value: '" <> e
+           <> "'. Accepted values: glacier"
+
+instance ToText TransitionStorageClass where
+    toText = \case
+        Glacier -> "glacier"
+
+instance Hashable     TransitionStorageClass
+instance ToByteString TransitionStorageClass
+instance ToQuery      TransitionStorageClass
+instance ToHeader     TransitionStorageClass
+
+instance FromXML TransitionStorageClass where
+    parseXML = parseXMLText "TransitionStorageClass"
+
+instance ToXML TransitionStorageClass where
+    toXML = toXMLText
+
+data Type
+    = AmazonCustomerByEmail
+    | CanonicalUser
+    | Group
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText Type where
+    parser = takeLowerText >>= \case
+        "amazoncustomerbyemail" -> pure AmazonCustomerByEmail
+        "canonicaluser" -> pure CanonicalUser
+        "group" -> pure Group
+        e -> fromTextError $ "Failure parsing Type from value: '" <> e
+           <> "'. Accepted values: amazoncustomerbyemail, canonicaluser, group"
+
+instance ToText Type where
+    toText = \case
+        AmazonCustomerByEmail -> "amazoncustomerbyemail"
+        CanonicalUser -> "canonicaluser"
+        Group -> "group"
+
+instance Hashable     Type
+instance ToByteString Type
+instance ToQuery      Type
+instance ToHeader     Type
+
+instance FromXML Type where
+    parseXML = parseXMLText "Type"
+
+instance ToXML Type where
+    toXML = toXMLText
diff --git a/gen/Network/AWS/S3/UploadPart.hs b/gen/Network/AWS/S3/UploadPart.hs
--- a/gen/Network/AWS/S3/UploadPart.hs
+++ b/gen/Network/AWS/S3/UploadPart.hs
@@ -1,287 +1,304 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.UploadPart
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Uploads a part in a multipart upload.
+-- Uploads a part in a multipart upload.
 --
--- Note: After you initiate multipart upload and upload one or more parts, you
--- must either complete or abort multipart upload in order to stop getting
--- charged for storage of the uploaded parts. Only after you either complete or
--- abort multipart upload, Amazon S3 frees up the parts storage and stops
--- charging you for the parts storage.
+-- __Note:__ After you initiate multipart upload and upload one or more
+-- parts, you must either complete or abort multipart upload in order to
+-- stop getting charged for storage of the uploaded parts. Only after you
+-- either complete or abort multipart upload, Amazon S3 frees up the parts
+-- storage and stops charging you for the parts storage.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/UploadPart.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/UploadPart.html AWS API Reference> for UploadPart.
 module Network.AWS.S3.UploadPart
     (
-    -- * Request
-      UploadPart
-    -- ** Request constructor
-    , uploadPart
-    -- ** Request lenses
-    , upBody
-    , upBucket
+    -- * Creating a Request
+      uploadPart
+    , UploadPart
+    -- * Request Lenses
     , upContentLength
-    , upContentMD5
-    , upKey
-    , upPartNumber
-    , upRequestPayer
     , upSSECustomerAlgorithm
     , upSSECustomerKey
+    , upRequestPayer
     , upSSECustomerKeyMD5
+    , upContentMD5
+    , upBucket
+    , upKey
+    , upPartNumber
     , upUploadId
+    , upBody
 
-    -- * Response
-    , UploadPartResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , uploadPartResponse
-    -- ** Response lenses
-    , uprETag
-    , uprRequestCharged
-    , uprSSECustomerAlgorithm
-    , uprSSECustomerKeyMD5
-    , uprSSEKMSKeyId
-    , uprServerSideEncryption
+    , UploadPartResponse
+    -- * Response Lenses
+    , uprsETag
+    , uprsRequestCharged
+    , uprsSSECustomerAlgorithm
+    , uprsSSEKMSKeyId
+    , uprsSSECustomerKeyMD5
+    , uprsServerSideEncryption
+    , uprsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data UploadPart = UploadPart
-    { _upBody                 :: RqBody
-    , _upBucket               :: Text
-    , _upContentLength        :: Maybe Int
-    , _upContentMD5           :: Maybe Text
-    , _upKey                  :: Text
-    , _upPartNumber           :: Int
-    , _upRequestPayer         :: Maybe RequestPayer
-    , _upSSECustomerAlgorithm :: Maybe Text
-    , _upSSECustomerKey       :: Maybe (Sensitive Text)
-    , _upSSECustomerKeyMD5    :: Maybe Text
-    , _upUploadId             :: Text
-    } deriving (Show)
+-- | /See:/ 'uploadPart' smart constructor.
+data UploadPart = UploadPart'
+    { _upContentLength        :: !(Maybe Int)
+    , _upSSECustomerAlgorithm :: !(Maybe Text)
+    , _upSSECustomerKey       :: !(Maybe (Sensitive Text))
+    , _upRequestPayer         :: !(Maybe RequestPayer)
+    , _upSSECustomerKeyMD5    :: !(Maybe Text)
+    , _upContentMD5           :: !(Maybe Text)
+    , _upBucket               :: !BucketName
+    , _upKey                  :: !ObjectKey
+    , _upPartNumber           :: !Int
+    , _upUploadId             :: !Text
+    , _upBody                 :: !RqBody
+    } deriving (Show,Generic)
 
--- | 'UploadPart' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'UploadPart' with the minimum fields required to make a request.
 --
--- * 'upBody' @::@ 'RqBody'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'upBucket' @::@ 'Text'
+-- * 'upContentLength'
 --
--- * 'upContentLength' @::@ 'Maybe' 'Int'
+-- * 'upSSECustomerAlgorithm'
 --
--- * 'upContentMD5' @::@ 'Maybe' 'Text'
+-- * 'upSSECustomerKey'
 --
--- * 'upKey' @::@ 'Text'
+-- * 'upRequestPayer'
 --
--- * 'upPartNumber' @::@ 'Int'
+-- * 'upSSECustomerKeyMD5'
 --
--- * 'upRequestPayer' @::@ 'Maybe' 'RequestPayer'
+-- * 'upContentMD5'
 --
--- * 'upSSECustomerAlgorithm' @::@ 'Maybe' 'Text'
+-- * 'upBucket'
 --
--- * 'upSSECustomerKey' @::@ 'Maybe' 'Text'
+-- * 'upKey'
 --
--- * 'upSSECustomerKeyMD5' @::@ 'Maybe' 'Text'
+-- * 'upPartNumber'
 --
--- * 'upUploadId' @::@ 'Text'
+-- * 'upUploadId'
 --
-uploadPart :: RqBody -- ^ 'upBody'
-           -> Text -- ^ 'upBucket'
-           -> Text -- ^ 'upKey'
-           -> Int -- ^ 'upPartNumber'
-           -> Text -- ^ 'upUploadId'
-           -> UploadPart
-uploadPart p1 p2 p3 p4 p5 = UploadPart
-    { _upBody                 = p1
-    , _upBucket               = p2
-    , _upKey                  = p3
-    , _upPartNumber           = p4
-    , _upUploadId             = p5
-    , _upContentLength        = Nothing
-    , _upContentMD5           = Nothing
+-- * 'upBody'
+uploadPart
+    :: BucketName -- ^ 'upBucket'
+    -> ObjectKey -- ^ 'upKey'
+    -> Int -- ^ 'upPartNumber'
+    -> Text -- ^ 'upUploadId'
+    -> RqBody -- ^ 'upBody'
+    -> UploadPart
+uploadPart pBucket_ pKey_ pPartNumber_ pUploadId_ pBody_ =
+    UploadPart'
+    { _upContentLength = Nothing
     , _upSSECustomerAlgorithm = Nothing
-    , _upSSECustomerKey       = Nothing
-    , _upSSECustomerKeyMD5    = Nothing
-    , _upRequestPayer         = Nothing
+    , _upSSECustomerKey = Nothing
+    , _upRequestPayer = Nothing
+    , _upSSECustomerKeyMD5 = Nothing
+    , _upContentMD5 = Nothing
+    , _upBucket = pBucket_
+    , _upKey = pKey_
+    , _upPartNumber = pPartNumber_
+    , _upUploadId = pUploadId_
+    , _upBody = pBody_
     }
 
-upBody :: Lens' UploadPart RqBody
-upBody = lens _upBody (\s a -> s { _upBody = a })
-
-upBucket :: Lens' UploadPart Text
-upBucket = lens _upBucket (\s a -> s { _upBucket = a })
-
--- | Size of the body in bytes. This parameter is useful when the size of the body
--- cannot be determined automatically.
+-- | Size of the body in bytes. This parameter is useful when the size of the
+-- body cannot be determined automatically.
 upContentLength :: Lens' UploadPart (Maybe Int)
-upContentLength = lens _upContentLength (\s a -> s { _upContentLength = a })
-
-upContentMD5 :: Lens' UploadPart (Maybe Text)
-upContentMD5 = lens _upContentMD5 (\s a -> s { _upContentMD5 = a })
-
-upKey :: Lens' UploadPart Text
-upKey = lens _upKey (\s a -> s { _upKey = a })
-
--- | Part number of part being uploaded.
-upPartNumber :: Lens' UploadPart Int
-upPartNumber = lens _upPartNumber (\s a -> s { _upPartNumber = a })
-
-upRequestPayer :: Lens' UploadPart (Maybe RequestPayer)
-upRequestPayer = lens _upRequestPayer (\s a -> s { _upRequestPayer = a })
+upContentLength = lens _upContentLength (\ s a -> s{_upContentLength = a});
 
--- | Specifies the algorithm to use to when encrypting the object (e.g., AES256,
--- aws:kms).
+-- | Specifies the algorithm to use to when encrypting the object (e.g.,
+-- AES256).
 upSSECustomerAlgorithm :: Lens' UploadPart (Maybe Text)
-upSSECustomerAlgorithm =
-    lens _upSSECustomerAlgorithm (\s a -> s { _upSSECustomerAlgorithm = a })
+upSSECustomerAlgorithm = lens _upSSECustomerAlgorithm (\ s a -> s{_upSSECustomerAlgorithm = a});
 
 -- | Specifies the customer-provided encryption key for Amazon S3 to use in
 -- encrypting data. This value is used to store the object and then it is
 -- discarded; Amazon does not store the encryption key. The key must be
 -- appropriate for use with the algorithm specified in the
--- x-amz-server-side​-encryption​-customer-algorithm header. This must be the
--- same encryption key specified in the initiate multipart upload request.
+-- x-amz-server-side​-encryption​-customer-algorithm header. This must be
+-- the same encryption key specified in the initiate multipart upload
+-- request.
 upSSECustomerKey :: Lens' UploadPart (Maybe Text)
-upSSECustomerKey = lens _upSSECustomerKey (\s a -> s { _upSSECustomerKey = a }) . mapping _Sensitive
+upSSECustomerKey = lens _upSSECustomerKey (\ s a -> s{_upSSECustomerKey = a}) . mapping _Sensitive;
 
--- | Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
--- Amazon S3 uses this header for a message integrity check to ensure the
--- encryption key was transmitted without error.
+-- | Undocumented member.
+upRequestPayer :: Lens' UploadPart (Maybe RequestPayer)
+upRequestPayer = lens _upRequestPayer (\ s a -> s{_upRequestPayer = a});
+
+-- | Specifies the 128-bit MD5 digest of the encryption key according to RFC
+-- 1321. Amazon S3 uses this header for a message integrity check to ensure
+-- the encryption key was transmitted without error.
 upSSECustomerKeyMD5 :: Lens' UploadPart (Maybe Text)
-upSSECustomerKeyMD5 =
-    lens _upSSECustomerKeyMD5 (\s a -> s { _upSSECustomerKeyMD5 = a })
+upSSECustomerKeyMD5 = lens _upSSECustomerKeyMD5 (\ s a -> s{_upSSECustomerKeyMD5 = a});
 
+-- | Undocumented member.
+upContentMD5 :: Lens' UploadPart (Maybe Text)
+upContentMD5 = lens _upContentMD5 (\ s a -> s{_upContentMD5 = a});
+
+-- | Undocumented member.
+upBucket :: Lens' UploadPart BucketName
+upBucket = lens _upBucket (\ s a -> s{_upBucket = a});
+
+-- | Undocumented member.
+upKey :: Lens' UploadPart ObjectKey
+upKey = lens _upKey (\ s a -> s{_upKey = a});
+
+-- | Part number of part being uploaded. This is a positive integer between 1
+-- and 10,000.
+upPartNumber :: Lens' UploadPart Int
+upPartNumber = lens _upPartNumber (\ s a -> s{_upPartNumber = a});
+
 -- | Upload ID identifying the multipart upload whose part is being uploaded.
 upUploadId :: Lens' UploadPart Text
-upUploadId = lens _upUploadId (\s a -> s { _upUploadId = a })
+upUploadId = lens _upUploadId (\ s a -> s{_upUploadId = a});
 
-data UploadPartResponse = UploadPartResponse
-    { _uprETag                 :: Maybe Text
-    , _uprRequestCharged       :: Maybe RequestCharged
-    , _uprSSECustomerAlgorithm :: Maybe Text
-    , _uprSSECustomerKeyMD5    :: Maybe Text
-    , _uprSSEKMSKeyId          :: Maybe (Sensitive Text)
-    , _uprServerSideEncryption :: Maybe ServerSideEncryption
-    } deriving (Eq, Read, Show)
+-- | Undocumented member.
+upBody :: Lens' UploadPart RqBody
+upBody = lens _upBody (\ s a -> s{_upBody = a});
 
--- | 'UploadPartResponse' constructor.
+instance AWSRequest UploadPart where
+        type Sv UploadPart = S3
+        type Rs UploadPart = UploadPartResponse
+        request = putBody
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 UploadPartResponse' <$>
+                   (h .#? "ETag") <*> (h .#? "x-amz-request-charged")
+                     <*>
+                     (h .#?
+                        "x-amz-server-side-encryption-customer-algorithm")
+                     <*>
+                     (h .#? "x-amz-server-side-encryption-aws-kms-key-id")
+                     <*>
+                     (h .#?
+                        "x-amz-server-side-encryption-customer-key-MD5")
+                     <*> (h .#? "x-amz-server-side-encryption")
+                     <*> (pure (fromEnum s)))
+
+instance ToBody UploadPart where
+        toBody = _upBody
+
+instance ToHeaders UploadPart where
+        toHeaders UploadPart'{..}
+          = mconcat
+              ["Content-Length" =# _upContentLength,
+               "x-amz-server-side-encryption-customer-algorithm" =#
+                 _upSSECustomerAlgorithm,
+               "x-amz-server-side-encryption-customer-key" =#
+                 _upSSECustomerKey,
+               "x-amz-request-payer" =# _upRequestPayer,
+               "x-amz-server-side-encryption-customer-key-MD5" =#
+                 _upSSECustomerKeyMD5,
+               "Content-MD5" =# _upContentMD5]
+
+instance ToPath UploadPart where
+        toPath UploadPart'{..}
+          = mconcat ["/", toBS _upBucket, "/", toBS _upKey]
+
+instance ToQuery UploadPart where
+        toQuery UploadPart'{..}
+          = mconcat
+              ["partNumber" =: _upPartNumber,
+               "uploadId" =: _upUploadId]
+
+-- | /See:/ 'uploadPartResponse' smart constructor.
+data UploadPartResponse = UploadPartResponse'
+    { _uprsETag                 :: !(Maybe ETag)
+    , _uprsRequestCharged       :: !(Maybe RequestCharged)
+    , _uprsSSECustomerAlgorithm :: !(Maybe Text)
+    , _uprsSSEKMSKeyId          :: !(Maybe (Sensitive Text))
+    , _uprsSSECustomerKeyMD5    :: !(Maybe Text)
+    , _uprsServerSideEncryption :: !(Maybe ServerSideEncryption)
+    , _uprsStatus               :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UploadPartResponse' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'uprETag' @::@ 'Maybe' 'Text'
+-- * 'uprsETag'
 --
--- * 'uprRequestCharged' @::@ 'Maybe' 'RequestCharged'
+-- * 'uprsRequestCharged'
 --
--- * 'uprSSECustomerAlgorithm' @::@ 'Maybe' 'Text'
+-- * 'uprsSSECustomerAlgorithm'
 --
--- * 'uprSSECustomerKeyMD5' @::@ 'Maybe' 'Text'
+-- * 'uprsSSEKMSKeyId'
 --
--- * 'uprSSEKMSKeyId' @::@ 'Maybe' 'Text'
+-- * 'uprsSSECustomerKeyMD5'
 --
--- * 'uprServerSideEncryption' @::@ 'Maybe' 'ServerSideEncryption'
+-- * 'uprsServerSideEncryption'
 --
-uploadPartResponse :: UploadPartResponse
-uploadPartResponse = UploadPartResponse
-    { _uprServerSideEncryption = Nothing
-    , _uprETag                 = Nothing
-    , _uprSSECustomerAlgorithm = Nothing
-    , _uprSSECustomerKeyMD5    = Nothing
-    , _uprSSEKMSKeyId          = Nothing
-    , _uprRequestCharged       = Nothing
+-- * 'uprsStatus'
+uploadPartResponse
+    :: Int -- ^ 'uprsStatus'
+    -> UploadPartResponse
+uploadPartResponse pStatus_ =
+    UploadPartResponse'
+    { _uprsETag = Nothing
+    , _uprsRequestCharged = Nothing
+    , _uprsSSECustomerAlgorithm = Nothing
+    , _uprsSSEKMSKeyId = Nothing
+    , _uprsSSECustomerKeyMD5 = Nothing
+    , _uprsServerSideEncryption = Nothing
+    , _uprsStatus = pStatus_
     }
 
 -- | Entity tag for the uploaded object.
-uprETag :: Lens' UploadPartResponse (Maybe Text)
-uprETag = lens _uprETag (\s a -> s { _uprETag = a })
+uprsETag :: Lens' UploadPartResponse (Maybe ETag)
+uprsETag = lens _uprsETag (\ s a -> s{_uprsETag = a});
 
-uprRequestCharged :: Lens' UploadPartResponse (Maybe RequestCharged)
-uprRequestCharged =
-    lens _uprRequestCharged (\s a -> s { _uprRequestCharged = a })
+-- | Undocumented member.
+uprsRequestCharged :: Lens' UploadPartResponse (Maybe RequestCharged)
+uprsRequestCharged = lens _uprsRequestCharged (\ s a -> s{_uprsRequestCharged = a});
 
 -- | If server-side encryption with a customer-provided encryption key was
--- requested, the response will include this header confirming the encryption
--- algorithm used.
-uprSSECustomerAlgorithm :: Lens' UploadPartResponse (Maybe Text)
-uprSSECustomerAlgorithm =
-    lens _uprSSECustomerAlgorithm (\s a -> s { _uprSSECustomerAlgorithm = a })
+-- requested, the response will include this header confirming the
+-- encryption algorithm used.
+uprsSSECustomerAlgorithm :: Lens' UploadPartResponse (Maybe Text)
+uprsSSECustomerAlgorithm = lens _uprsSSECustomerAlgorithm (\ s a -> s{_uprsSSECustomerAlgorithm = a});
 
+-- | If present, specifies the ID of the AWS Key Management Service (KMS)
+-- master encryption key that was used for the object.
+uprsSSEKMSKeyId :: Lens' UploadPartResponse (Maybe Text)
+uprsSSEKMSKeyId = lens _uprsSSEKMSKeyId (\ s a -> s{_uprsSSEKMSKeyId = a}) . mapping _Sensitive;
+
 -- | If server-side encryption with a customer-provided encryption key was
 -- requested, the response will include this header to provide round trip
 -- message integrity verification of the customer-provided encryption key.
-uprSSECustomerKeyMD5 :: Lens' UploadPartResponse (Maybe Text)
-uprSSECustomerKeyMD5 =
-    lens _uprSSECustomerKeyMD5 (\s a -> s { _uprSSECustomerKeyMD5 = a })
-
--- | If present, specifies the ID of the AWS Key Management Service (KMS) master
--- encryption key that was used for the object.
-uprSSEKMSKeyId :: Lens' UploadPartResponse (Maybe Text)
-uprSSEKMSKeyId = lens _uprSSEKMSKeyId (\s a -> s { _uprSSEKMSKeyId = a }) . mapping _Sensitive
+uprsSSECustomerKeyMD5 :: Lens' UploadPartResponse (Maybe Text)
+uprsSSECustomerKeyMD5 = lens _uprsSSECustomerKeyMD5 (\ s a -> s{_uprsSSECustomerKeyMD5 = a});
 
 -- | The Server-side encryption algorithm used when storing this object in S3
 -- (e.g., AES256, aws:kms).
-uprServerSideEncryption :: Lens' UploadPartResponse (Maybe ServerSideEncryption)
-uprServerSideEncryption =
-    lens _uprServerSideEncryption (\s a -> s { _uprServerSideEncryption = a })
-
-instance ToPath UploadPart where
-    toPath UploadPart{..} = mconcat
-        [ "/"
-        , toText _upBucket
-        , "/"
-        , toText _upKey
-        ]
-
-instance ToQuery UploadPart where
-    toQuery UploadPart{..} = mconcat
-        [ "partNumber" =? _upPartNumber
-        , "uploadId"   =? _upUploadId
-        ]
-
-instance ToHeaders UploadPart where
-    toHeaders UploadPart{..} = mconcat
-        [ "Content-Length"                                  =: _upContentLength
-        , "Content-MD5"                                     =: _upContentMD5
-        , "x-amz-server-side-encryption-customer-algorithm" =: _upSSECustomerAlgorithm
-        , "x-amz-server-side-encryption-customer-key"       =: _upSSECustomerKey
-        , "x-amz-server-side-encryption-customer-key-MD5"   =: _upSSECustomerKeyMD5
-        , "x-amz-request-payer"                             =: _upRequestPayer
-        ]
-
-instance ToBody UploadPart where
-    toBody = toBody . _upBody
-
-instance AWSRequest UploadPart where
-    type Sv UploadPart = S3
-    type Rs UploadPart = UploadPartResponse
+uprsServerSideEncryption :: Lens' UploadPartResponse (Maybe ServerSideEncryption)
+uprsServerSideEncryption = lens _uprsServerSideEncryption (\ s a -> s{_uprsServerSideEncryption = a});
 
-    request  = stream PUT
-    response = headerResponse $ \h -> UploadPartResponse
-        <$> h ~:? "ETag"
-        <*> h ~:? "x-amz-request-charged"
-        <*> h ~:? "x-amz-server-side-encryption-customer-algorithm"
-        <*> h ~:? "x-amz-server-side-encryption-customer-key-MD5"
-        <*> h ~:? "x-amz-server-side-encryption-aws-kms-key-id"
-        <*> h ~:? "x-amz-server-side-encryption"
+-- | The response status code.
+uprsStatus :: Lens' UploadPartResponse Int
+uprsStatus = lens _uprsStatus (\ s a -> s{_uprsStatus = a});
diff --git a/gen/Network/AWS/S3/UploadPartCopy.hs b/gen/Network/AWS/S3/UploadPartCopy.hs
--- a/gen/Network/AWS/S3/UploadPartCopy.hs
+++ b/gen/Network/AWS/S3/UploadPartCopy.hs
@@ -1,389 +1,383 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.UploadPartCopy
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Uploads a part by copying data from an existing object as data source.
+-- Uploads a part by copying data from an existing object as data source.
 --
--- <http://docs.aws.amazon.com/AmazonS3/latest/API/UploadPartCopy.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/UploadPartCopy.html AWS API Reference> for UploadPartCopy.
 module Network.AWS.S3.UploadPartCopy
     (
-    -- * Request
-      UploadPartCopy
-    -- ** Request constructor
-    , uploadPartCopy
-    -- ** Request lenses
-    , upcBucket
-    , upcCopySource
-    , upcCopySourceIfMatch
+    -- * Creating a Request
+      uploadPartCopy
+    , UploadPartCopy
+    -- * Request Lenses
     , upcCopySourceIfModifiedSince
-    , upcCopySourceIfNoneMatch
     , upcCopySourceIfUnmodifiedSince
     , upcCopySourceRange
-    , upcCopySourceSSECustomerAlgorithm
-    , upcCopySourceSSECustomerKey
     , upcCopySourceSSECustomerKeyMD5
-    , upcKey
-    , upcPartNumber
-    , upcRequestPayer
     , upcSSECustomerAlgorithm
+    , upcCopySourceIfNoneMatch
     , upcSSECustomerKey
+    , upcRequestPayer
+    , upcCopySourceIfMatch
     , upcSSECustomerKeyMD5
+    , upcCopySourceSSECustomerKey
+    , upcCopySourceSSECustomerAlgorithm
+    , upcBucket
+    , upcCopySource
+    , upcKey
+    , upcPartNumber
     , upcUploadId
 
-    -- * Response
-    , UploadPartCopyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , uploadPartCopyResponse
-    -- ** Response lenses
-    , upcrCopyPartResult
-    , upcrCopySourceVersionId
-    , upcrRequestCharged
-    , upcrSSECustomerAlgorithm
-    , upcrSSECustomerKeyMD5
-    , upcrSSEKMSKeyId
-    , upcrServerSideEncryption
+    , UploadPartCopyResponse
+    -- * Response Lenses
+    , upcrsRequestCharged
+    , upcrsCopyPartResult
+    , upcrsSSECustomerAlgorithm
+    , upcrsCopySourceVersionId
+    , upcrsSSEKMSKeyId
+    , upcrsSSECustomerKeyMD5
+    , upcrsServerSideEncryption
+    , upcrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.S3
-import Network.AWS.S3.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
 
-data UploadPartCopy = UploadPartCopy
-    { _upcBucket                         :: Text
-    , _upcCopySource                     :: Text
-    , _upcCopySourceIfMatch              :: Maybe Text
-    , _upcCopySourceIfModifiedSince      :: Maybe RFC822
-    , _upcCopySourceIfNoneMatch          :: Maybe Text
-    , _upcCopySourceIfUnmodifiedSince    :: Maybe RFC822
-    , _upcCopySourceRange                :: Maybe Text
-    , _upcCopySourceSSECustomerAlgorithm :: Maybe Text
-    , _upcCopySourceSSECustomerKey       :: Maybe (Sensitive Text)
-    , _upcCopySourceSSECustomerKeyMD5    :: Maybe Text
-    , _upcKey                            :: Text
-    , _upcPartNumber                     :: Int
-    , _upcRequestPayer                   :: Maybe RequestPayer
-    , _upcSSECustomerAlgorithm           :: Maybe Text
-    , _upcSSECustomerKey                 :: Maybe (Sensitive Text)
-    , _upcSSECustomerKeyMD5              :: Maybe Text
-    , _upcUploadId                       :: Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'uploadPartCopy' smart constructor.
+data UploadPartCopy = UploadPartCopy'
+    { _upcCopySourceIfModifiedSince      :: !(Maybe RFC822)
+    , _upcCopySourceIfUnmodifiedSince    :: !(Maybe RFC822)
+    , _upcCopySourceRange                :: !(Maybe Text)
+    , _upcCopySourceSSECustomerKeyMD5    :: !(Maybe Text)
+    , _upcSSECustomerAlgorithm           :: !(Maybe Text)
+    , _upcCopySourceIfNoneMatch          :: !(Maybe Text)
+    , _upcSSECustomerKey                 :: !(Maybe (Sensitive Text))
+    , _upcRequestPayer                   :: !(Maybe RequestPayer)
+    , _upcCopySourceIfMatch              :: !(Maybe Text)
+    , _upcSSECustomerKeyMD5              :: !(Maybe Text)
+    , _upcCopySourceSSECustomerKey       :: !(Maybe (Sensitive Text))
+    , _upcCopySourceSSECustomerAlgorithm :: !(Maybe Text)
+    , _upcBucket                         :: !BucketName
+    , _upcCopySource                     :: !Text
+    , _upcKey                            :: !ObjectKey
+    , _upcPartNumber                     :: !Int
+    , _upcUploadId                       :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'UploadPartCopy' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'UploadPartCopy' with the minimum fields required to make a request.
 --
--- * 'upcBucket' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'upcCopySource' @::@ 'Text'
+-- * 'upcCopySourceIfModifiedSince'
 --
--- * 'upcCopySourceIfMatch' @::@ 'Maybe' 'Text'
+-- * 'upcCopySourceIfUnmodifiedSince'
 --
--- * 'upcCopySourceIfModifiedSince' @::@ 'Maybe' 'UTCTime'
+-- * 'upcCopySourceRange'
 --
--- * 'upcCopySourceIfNoneMatch' @::@ 'Maybe' 'Text'
+-- * 'upcCopySourceSSECustomerKeyMD5'
 --
--- * 'upcCopySourceIfUnmodifiedSince' @::@ 'Maybe' 'UTCTime'
+-- * 'upcSSECustomerAlgorithm'
 --
--- * 'upcCopySourceRange' @::@ 'Maybe' 'Text'
+-- * 'upcCopySourceIfNoneMatch'
 --
--- * 'upcCopySourceSSECustomerAlgorithm' @::@ 'Maybe' 'Text'
+-- * 'upcSSECustomerKey'
 --
--- * 'upcCopySourceSSECustomerKey' @::@ 'Maybe' 'Text'
+-- * 'upcRequestPayer'
 --
--- * 'upcCopySourceSSECustomerKeyMD5' @::@ 'Maybe' 'Text'
+-- * 'upcCopySourceIfMatch'
 --
--- * 'upcKey' @::@ 'Text'
+-- * 'upcSSECustomerKeyMD5'
 --
--- * 'upcPartNumber' @::@ 'Int'
+-- * 'upcCopySourceSSECustomerKey'
 --
--- * 'upcRequestPayer' @::@ 'Maybe' 'RequestPayer'
+-- * 'upcCopySourceSSECustomerAlgorithm'
 --
--- * 'upcSSECustomerAlgorithm' @::@ 'Maybe' 'Text'
+-- * 'upcBucket'
 --
--- * 'upcSSECustomerKey' @::@ 'Maybe' 'Text'
+-- * 'upcCopySource'
 --
--- * 'upcSSECustomerKeyMD5' @::@ 'Maybe' 'Text'
+-- * 'upcKey'
 --
--- * 'upcUploadId' @::@ 'Text'
+-- * 'upcPartNumber'
 --
-uploadPartCopy :: Text -- ^ 'upcBucket'
-               -> Text -- ^ 'upcCopySource'
-               -> Text -- ^ 'upcKey'
-               -> Int -- ^ 'upcPartNumber'
-               -> Text -- ^ 'upcUploadId'
-               -> UploadPartCopy
-uploadPartCopy p1 p2 p3 p4 p5 = UploadPartCopy
-    { _upcBucket                         = p1
-    , _upcCopySource                     = p2
-    , _upcKey                            = p3
-    , _upcPartNumber                     = p4
-    , _upcUploadId                       = p5
-    , _upcCopySourceIfMatch              = Nothing
-    , _upcCopySourceIfModifiedSince      = Nothing
-    , _upcCopySourceIfNoneMatch          = Nothing
-    , _upcCopySourceIfUnmodifiedSince    = Nothing
-    , _upcCopySourceRange                = Nothing
-    , _upcSSECustomerAlgorithm           = Nothing
-    , _upcSSECustomerKey                 = Nothing
-    , _upcSSECustomerKeyMD5              = Nothing
+-- * 'upcUploadId'
+uploadPartCopy
+    :: BucketName -- ^ 'upcBucket'
+    -> Text -- ^ 'upcCopySource'
+    -> ObjectKey -- ^ 'upcKey'
+    -> Int -- ^ 'upcPartNumber'
+    -> Text -- ^ 'upcUploadId'
+    -> UploadPartCopy
+uploadPartCopy pBucket_ pCopySource_ pKey_ pPartNumber_ pUploadId_ =
+    UploadPartCopy'
+    { _upcCopySourceIfModifiedSince = Nothing
+    , _upcCopySourceIfUnmodifiedSince = Nothing
+    , _upcCopySourceRange = Nothing
+    , _upcCopySourceSSECustomerKeyMD5 = Nothing
+    , _upcSSECustomerAlgorithm = Nothing
+    , _upcCopySourceIfNoneMatch = Nothing
+    , _upcSSECustomerKey = Nothing
+    , _upcRequestPayer = Nothing
+    , _upcCopySourceIfMatch = Nothing
+    , _upcSSECustomerKeyMD5 = Nothing
+    , _upcCopySourceSSECustomerKey = Nothing
     , _upcCopySourceSSECustomerAlgorithm = Nothing
-    , _upcCopySourceSSECustomerKey       = Nothing
-    , _upcCopySourceSSECustomerKeyMD5    = Nothing
-    , _upcRequestPayer                   = Nothing
+    , _upcBucket = pBucket_
+    , _upcCopySource = pCopySource_
+    , _upcKey = pKey_
+    , _upcPartNumber = pPartNumber_
+    , _upcUploadId = pUploadId_
     }
 
-upcBucket :: Lens' UploadPartCopy Text
-upcBucket = lens _upcBucket (\s a -> s { _upcBucket = a })
-
--- | The name of the source bucket and key name of the source object, separated by
--- a slash (/). Must be URL-encoded.
-upcCopySource :: Lens' UploadPartCopy Text
-upcCopySource = lens _upcCopySource (\s a -> s { _upcCopySource = a })
-
--- | Copies the object if its entity tag (ETag) matches the specified tag.
-upcCopySourceIfMatch :: Lens' UploadPartCopy (Maybe Text)
-upcCopySourceIfMatch =
-    lens _upcCopySourceIfMatch (\s a -> s { _upcCopySourceIfMatch = a })
-
 -- | Copies the object if it has been modified since the specified time.
 upcCopySourceIfModifiedSince :: Lens' UploadPartCopy (Maybe UTCTime)
-upcCopySourceIfModifiedSince =
-    lens _upcCopySourceIfModifiedSince
-        (\s a -> s { _upcCopySourceIfModifiedSince = a })
-            . mapping _Time
-
--- | Copies the object if its entity tag (ETag) is different than the specified
--- ETag.
-upcCopySourceIfNoneMatch :: Lens' UploadPartCopy (Maybe Text)
-upcCopySourceIfNoneMatch =
-    lens _upcCopySourceIfNoneMatch
-        (\s a -> s { _upcCopySourceIfNoneMatch = a })
+upcCopySourceIfModifiedSince = lens _upcCopySourceIfModifiedSince (\ s a -> s{_upcCopySourceIfModifiedSince = a}) . mapping _Time;
 
--- | Copies the object if it hasn't been modified since the specified time.
+-- | Copies the object if it hasn\'t been modified since the specified time.
 upcCopySourceIfUnmodifiedSince :: Lens' UploadPartCopy (Maybe UTCTime)
-upcCopySourceIfUnmodifiedSince =
-    lens _upcCopySourceIfUnmodifiedSince
-        (\s a -> s { _upcCopySourceIfUnmodifiedSince = a })
-            . mapping _Time
+upcCopySourceIfUnmodifiedSince = lens _upcCopySourceIfUnmodifiedSince (\ s a -> s{_upcCopySourceIfUnmodifiedSince = a}) . mapping _Time;
 
--- | The range of bytes to copy from the source object. The range value must use
--- the form bytes=first-last, where the first and last are the zero-based byte
--- offsets to copy. For example, bytes=0-9 indicates that you want to copy the
--- first ten bytes of the source. You can copy a range only if the source object
--- is greater than 5 GB.
+-- | The range of bytes to copy from the source object. The range value must
+-- use the form bytes=first-last, where the first and last are the
+-- zero-based byte offsets to copy. For example, bytes=0-9 indicates that
+-- you want to copy the first ten bytes of the source. You can copy a range
+-- only if the source object is greater than 5 GB.
 upcCopySourceRange :: Lens' UploadPartCopy (Maybe Text)
-upcCopySourceRange =
-    lens _upcCopySourceRange (\s a -> s { _upcCopySourceRange = a })
-
--- | Specifies the algorithm to use when decrypting the source object (e.g.,
--- AES256).
-upcCopySourceSSECustomerAlgorithm :: Lens' UploadPartCopy (Maybe Text)
-upcCopySourceSSECustomerAlgorithm =
-    lens _upcCopySourceSSECustomerAlgorithm
-        (\s a -> s { _upcCopySourceSSECustomerAlgorithm = a })
-
--- | Specifies the customer-provided encryption key for Amazon S3 to use to
--- decrypt the source object. The encryption key provided in this header must be
--- one that was used when the source object was created.
-upcCopySourceSSECustomerKey :: Lens' UploadPartCopy (Maybe Text)
-upcCopySourceSSECustomerKey =
-    lens _upcCopySourceSSECustomerKey
-        (\s a -> s { _upcCopySourceSSECustomerKey = a })
-            . mapping _Sensitive
+upcCopySourceRange = lens _upcCopySourceRange (\ s a -> s{_upcCopySourceRange = a});
 
--- | Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
--- Amazon S3 uses this header for a message integrity check to ensure the
--- encryption key was transmitted without error.
+-- | Specifies the 128-bit MD5 digest of the encryption key according to RFC
+-- 1321. Amazon S3 uses this header for a message integrity check to ensure
+-- the encryption key was transmitted without error.
 upcCopySourceSSECustomerKeyMD5 :: Lens' UploadPartCopy (Maybe Text)
-upcCopySourceSSECustomerKeyMD5 =
-    lens _upcCopySourceSSECustomerKeyMD5
-        (\s a -> s { _upcCopySourceSSECustomerKeyMD5 = a })
-
-upcKey :: Lens' UploadPartCopy Text
-upcKey = lens _upcKey (\s a -> s { _upcKey = a })
-
--- | Part number of part being copied.
-upcPartNumber :: Lens' UploadPartCopy Int
-upcPartNumber = lens _upcPartNumber (\s a -> s { _upcPartNumber = a })
-
-upcRequestPayer :: Lens' UploadPartCopy (Maybe RequestPayer)
-upcRequestPayer = lens _upcRequestPayer (\s a -> s { _upcRequestPayer = a })
+upcCopySourceSSECustomerKeyMD5 = lens _upcCopySourceSSECustomerKeyMD5 (\ s a -> s{_upcCopySourceSSECustomerKeyMD5 = a});
 
--- | Specifies the algorithm to use to when encrypting the object (e.g., AES256,
--- aws:kms).
+-- | Specifies the algorithm to use to when encrypting the object (e.g.,
+-- AES256).
 upcSSECustomerAlgorithm :: Lens' UploadPartCopy (Maybe Text)
-upcSSECustomerAlgorithm =
-    lens _upcSSECustomerAlgorithm (\s a -> s { _upcSSECustomerAlgorithm = a })
+upcSSECustomerAlgorithm = lens _upcSSECustomerAlgorithm (\ s a -> s{_upcSSECustomerAlgorithm = a});
 
+-- | Copies the object if its entity tag (ETag) is different than the
+-- specified ETag.
+upcCopySourceIfNoneMatch :: Lens' UploadPartCopy (Maybe Text)
+upcCopySourceIfNoneMatch = lens _upcCopySourceIfNoneMatch (\ s a -> s{_upcCopySourceIfNoneMatch = a});
+
 -- | Specifies the customer-provided encryption key for Amazon S3 to use in
 -- encrypting data. This value is used to store the object and then it is
 -- discarded; Amazon does not store the encryption key. The key must be
 -- appropriate for use with the algorithm specified in the
--- x-amz-server-side​-encryption​-customer-algorithm header. This must be the
--- same encryption key specified in the initiate multipart upload request.
+-- x-amz-server-side​-encryption​-customer-algorithm header. This must be
+-- the same encryption key specified in the initiate multipart upload
+-- request.
 upcSSECustomerKey :: Lens' UploadPartCopy (Maybe Text)
-upcSSECustomerKey =
-    lens _upcSSECustomerKey (\s a -> s { _upcSSECustomerKey = a })
-        . mapping _Sensitive
+upcSSECustomerKey = lens _upcSSECustomerKey (\ s a -> s{_upcSSECustomerKey = a}) . mapping _Sensitive;
 
--- | Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
--- Amazon S3 uses this header for a message integrity check to ensure the
--- encryption key was transmitted without error.
+-- | Undocumented member.
+upcRequestPayer :: Lens' UploadPartCopy (Maybe RequestPayer)
+upcRequestPayer = lens _upcRequestPayer (\ s a -> s{_upcRequestPayer = a});
+
+-- | Copies the object if its entity tag (ETag) matches the specified tag.
+upcCopySourceIfMatch :: Lens' UploadPartCopy (Maybe Text)
+upcCopySourceIfMatch = lens _upcCopySourceIfMatch (\ s a -> s{_upcCopySourceIfMatch = a});
+
+-- | Specifies the 128-bit MD5 digest of the encryption key according to RFC
+-- 1321. Amazon S3 uses this header for a message integrity check to ensure
+-- the encryption key was transmitted without error.
 upcSSECustomerKeyMD5 :: Lens' UploadPartCopy (Maybe Text)
-upcSSECustomerKeyMD5 =
-    lens _upcSSECustomerKeyMD5 (\s a -> s { _upcSSECustomerKeyMD5 = a })
+upcSSECustomerKeyMD5 = lens _upcSSECustomerKeyMD5 (\ s a -> s{_upcSSECustomerKeyMD5 = a});
 
+-- | Specifies the customer-provided encryption key for Amazon S3 to use to
+-- decrypt the source object. The encryption key provided in this header
+-- must be one that was used when the source object was created.
+upcCopySourceSSECustomerKey :: Lens' UploadPartCopy (Maybe Text)
+upcCopySourceSSECustomerKey = lens _upcCopySourceSSECustomerKey (\ s a -> s{_upcCopySourceSSECustomerKey = a}) . mapping _Sensitive;
+
+-- | Specifies the algorithm to use when decrypting the source object (e.g.,
+-- AES256).
+upcCopySourceSSECustomerAlgorithm :: Lens' UploadPartCopy (Maybe Text)
+upcCopySourceSSECustomerAlgorithm = lens _upcCopySourceSSECustomerAlgorithm (\ s a -> s{_upcCopySourceSSECustomerAlgorithm = a});
+
+-- | Undocumented member.
+upcBucket :: Lens' UploadPartCopy BucketName
+upcBucket = lens _upcBucket (\ s a -> s{_upcBucket = a});
+
+-- | The name of the source bucket and key name of the source object,
+-- separated by a slash (\/). Must be URL-encoded.
+upcCopySource :: Lens' UploadPartCopy Text
+upcCopySource = lens _upcCopySource (\ s a -> s{_upcCopySource = a});
+
+-- | Undocumented member.
+upcKey :: Lens' UploadPartCopy ObjectKey
+upcKey = lens _upcKey (\ s a -> s{_upcKey = a});
+
+-- | Part number of part being copied. This is a positive integer between 1
+-- and 10,000.
+upcPartNumber :: Lens' UploadPartCopy Int
+upcPartNumber = lens _upcPartNumber (\ s a -> s{_upcPartNumber = a});
+
 -- | Upload ID identifying the multipart upload whose part is being copied.
 upcUploadId :: Lens' UploadPartCopy Text
-upcUploadId = lens _upcUploadId (\s a -> s { _upcUploadId = a })
+upcUploadId = lens _upcUploadId (\ s a -> s{_upcUploadId = a});
 
-data UploadPartCopyResponse = UploadPartCopyResponse
-    { _upcrCopyPartResult       :: Maybe CopyPartResult
-    , _upcrCopySourceVersionId  :: Maybe Text
-    , _upcrRequestCharged       :: Maybe RequestCharged
-    , _upcrSSECustomerAlgorithm :: Maybe Text
-    , _upcrSSECustomerKeyMD5    :: Maybe Text
-    , _upcrSSEKMSKeyId          :: Maybe (Sensitive Text)
-    , _upcrServerSideEncryption :: Maybe ServerSideEncryption
-    } deriving (Eq, Read, Show)
+instance AWSRequest UploadPartCopy where
+        type Sv UploadPartCopy = S3
+        type Rs UploadPartCopy = UploadPartCopyResponse
+        request = put
+        response
+          = receiveXML
+              (\ s h x ->
+                 UploadPartCopyResponse' <$>
+                   (h .#? "x-amz-request-charged") <*> (parseXML x) <*>
+                     (h .#?
+                        "x-amz-server-side-encryption-customer-algorithm")
+                     <*> (h .#? "x-amz-copy-source-version-id")
+                     <*>
+                     (h .#? "x-amz-server-side-encryption-aws-kms-key-id")
+                     <*>
+                     (h .#?
+                        "x-amz-server-side-encryption-customer-key-MD5")
+                     <*> (h .#? "x-amz-server-side-encryption")
+                     <*> (pure (fromEnum s)))
 
--- | 'UploadPartCopyResponse' constructor.
+instance ToHeaders UploadPartCopy where
+        toHeaders UploadPartCopy'{..}
+          = mconcat
+              ["x-amz-copy-source-if-modified-since" =#
+                 _upcCopySourceIfModifiedSince,
+               "x-amz-copy-source-if-unmodified-since" =#
+                 _upcCopySourceIfUnmodifiedSince,
+               "x-amz-copy-source-range" =# _upcCopySourceRange,
+               "x-amz-copy-source-server-side-encryption-customer-key-MD5"
+                 =# _upcCopySourceSSECustomerKeyMD5,
+               "x-amz-server-side-encryption-customer-algorithm" =#
+                 _upcSSECustomerAlgorithm,
+               "x-amz-copy-source-if-none-match" =#
+                 _upcCopySourceIfNoneMatch,
+               "x-amz-server-side-encryption-customer-key" =#
+                 _upcSSECustomerKey,
+               "x-amz-request-payer" =# _upcRequestPayer,
+               "x-amz-copy-source-if-match" =#
+                 _upcCopySourceIfMatch,
+               "x-amz-server-side-encryption-customer-key-MD5" =#
+                 _upcSSECustomerKeyMD5,
+               "x-amz-copy-source-server-side-encryption-customer-key"
+                 =# _upcCopySourceSSECustomerKey,
+               "x-amz-copy-source-server-side-encryption-customer-algorithm"
+                 =# _upcCopySourceSSECustomerAlgorithm,
+               "x-amz-copy-source" =# _upcCopySource]
+
+instance ToPath UploadPartCopy where
+        toPath UploadPartCopy'{..}
+          = mconcat ["/", toBS _upcBucket, "/", toBS _upcKey]
+
+instance ToQuery UploadPartCopy where
+        toQuery UploadPartCopy'{..}
+          = mconcat
+              ["partNumber" =: _upcPartNumber,
+               "uploadId" =: _upcUploadId]
+
+-- | /See:/ 'uploadPartCopyResponse' smart constructor.
+data UploadPartCopyResponse = UploadPartCopyResponse'
+    { _upcrsRequestCharged       :: !(Maybe RequestCharged)
+    , _upcrsCopyPartResult       :: !(Maybe CopyPartResult)
+    , _upcrsSSECustomerAlgorithm :: !(Maybe Text)
+    , _upcrsCopySourceVersionId  :: !(Maybe Text)
+    , _upcrsSSEKMSKeyId          :: !(Maybe (Sensitive Text))
+    , _upcrsSSECustomerKeyMD5    :: !(Maybe Text)
+    , _upcrsServerSideEncryption :: !(Maybe ServerSideEncryption)
+    , _upcrsStatus               :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UploadPartCopyResponse' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'upcrCopyPartResult' @::@ 'Maybe' 'CopyPartResult'
+-- * 'upcrsRequestCharged'
 --
--- * 'upcrCopySourceVersionId' @::@ 'Maybe' 'Text'
+-- * 'upcrsCopyPartResult'
 --
--- * 'upcrRequestCharged' @::@ 'Maybe' 'RequestCharged'
+-- * 'upcrsSSECustomerAlgorithm'
 --
--- * 'upcrSSECustomerAlgorithm' @::@ 'Maybe' 'Text'
+-- * 'upcrsCopySourceVersionId'
 --
--- * 'upcrSSECustomerKeyMD5' @::@ 'Maybe' 'Text'
+-- * 'upcrsSSEKMSKeyId'
 --
--- * 'upcrSSEKMSKeyId' @::@ 'Maybe' 'Text'
+-- * 'upcrsSSECustomerKeyMD5'
 --
--- * 'upcrServerSideEncryption' @::@ 'Maybe' 'ServerSideEncryption'
+-- * 'upcrsServerSideEncryption'
 --
-uploadPartCopyResponse :: UploadPartCopyResponse
-uploadPartCopyResponse = UploadPartCopyResponse
-    { _upcrCopySourceVersionId  = Nothing
-    , _upcrCopyPartResult       = Nothing
-    , _upcrServerSideEncryption = Nothing
-    , _upcrSSECustomerAlgorithm = Nothing
-    , _upcrSSECustomerKeyMD5    = Nothing
-    , _upcrSSEKMSKeyId          = Nothing
-    , _upcrRequestCharged       = Nothing
+-- * 'upcrsStatus'
+uploadPartCopyResponse
+    :: Int -- ^ 'upcrsStatus'
+    -> UploadPartCopyResponse
+uploadPartCopyResponse pStatus_ =
+    UploadPartCopyResponse'
+    { _upcrsRequestCharged = Nothing
+    , _upcrsCopyPartResult = Nothing
+    , _upcrsSSECustomerAlgorithm = Nothing
+    , _upcrsCopySourceVersionId = Nothing
+    , _upcrsSSEKMSKeyId = Nothing
+    , _upcrsSSECustomerKeyMD5 = Nothing
+    , _upcrsServerSideEncryption = Nothing
+    , _upcrsStatus = pStatus_
     }
 
-upcrCopyPartResult :: Lens' UploadPartCopyResponse (Maybe CopyPartResult)
-upcrCopyPartResult =
-    lens _upcrCopyPartResult (\s a -> s { _upcrCopyPartResult = a })
+-- | Undocumented member.
+upcrsRequestCharged :: Lens' UploadPartCopyResponse (Maybe RequestCharged)
+upcrsRequestCharged = lens _upcrsRequestCharged (\ s a -> s{_upcrsRequestCharged = a});
 
+-- | Undocumented member.
+upcrsCopyPartResult :: Lens' UploadPartCopyResponse (Maybe CopyPartResult)
+upcrsCopyPartResult = lens _upcrsCopyPartResult (\ s a -> s{_upcrsCopyPartResult = a});
+
+-- | If server-side encryption with a customer-provided encryption key was
+-- requested, the response will include this header confirming the
+-- encryption algorithm used.
+upcrsSSECustomerAlgorithm :: Lens' UploadPartCopyResponse (Maybe Text)
+upcrsSSECustomerAlgorithm = lens _upcrsSSECustomerAlgorithm (\ s a -> s{_upcrsSSECustomerAlgorithm = a});
+
 -- | The version of the source object that was copied, if you have enabled
 -- versioning on the source bucket.
-upcrCopySourceVersionId :: Lens' UploadPartCopyResponse (Maybe Text)
-upcrCopySourceVersionId =
-    lens _upcrCopySourceVersionId (\s a -> s { _upcrCopySourceVersionId = a })
-
-upcrRequestCharged :: Lens' UploadPartCopyResponse (Maybe RequestCharged)
-upcrRequestCharged =
-    lens _upcrRequestCharged (\s a -> s { _upcrRequestCharged = a })
+upcrsCopySourceVersionId :: Lens' UploadPartCopyResponse (Maybe Text)
+upcrsCopySourceVersionId = lens _upcrsCopySourceVersionId (\ s a -> s{_upcrsCopySourceVersionId = a});
 
--- | If server-side encryption with a customer-provided encryption key was
--- requested, the response will include this header confirming the encryption
--- algorithm used.
-upcrSSECustomerAlgorithm :: Lens' UploadPartCopyResponse (Maybe Text)
-upcrSSECustomerAlgorithm =
-    lens _upcrSSECustomerAlgorithm
-        (\s a -> s { _upcrSSECustomerAlgorithm = a })
+-- | If present, specifies the ID of the AWS Key Management Service (KMS)
+-- master encryption key that was used for the object.
+upcrsSSEKMSKeyId :: Lens' UploadPartCopyResponse (Maybe Text)
+upcrsSSEKMSKeyId = lens _upcrsSSEKMSKeyId (\ s a -> s{_upcrsSSEKMSKeyId = a}) . mapping _Sensitive;
 
 -- | If server-side encryption with a customer-provided encryption key was
 -- requested, the response will include this header to provide round trip
 -- message integrity verification of the customer-provided encryption key.
-upcrSSECustomerKeyMD5 :: Lens' UploadPartCopyResponse (Maybe Text)
-upcrSSECustomerKeyMD5 =
-    lens _upcrSSECustomerKeyMD5 (\s a -> s { _upcrSSECustomerKeyMD5 = a })
-
--- | If present, specifies the ID of the AWS Key Management Service (KMS) master
--- encryption key that was used for the object.
-upcrSSEKMSKeyId :: Lens' UploadPartCopyResponse (Maybe Text)
-upcrSSEKMSKeyId = lens _upcrSSEKMSKeyId (\s a -> s { _upcrSSEKMSKeyId = a }) . mapping _Sensitive
+upcrsSSECustomerKeyMD5 :: Lens' UploadPartCopyResponse (Maybe Text)
+upcrsSSECustomerKeyMD5 = lens _upcrsSSECustomerKeyMD5 (\ s a -> s{_upcrsSSECustomerKeyMD5 = a});
 
 -- | The Server-side encryption algorithm used when storing this object in S3
 -- (e.g., AES256, aws:kms).
-upcrServerSideEncryption :: Lens' UploadPartCopyResponse (Maybe ServerSideEncryption)
-upcrServerSideEncryption =
-    lens _upcrServerSideEncryption
-        (\s a -> s { _upcrServerSideEncryption = a })
-
-instance ToPath UploadPartCopy where
-    toPath UploadPartCopy{..} = mconcat
-        [ "/"
-        , toText _upcBucket
-        , "/"
-        , toText _upcKey
-        ]
-
-instance ToQuery UploadPartCopy where
-    toQuery UploadPartCopy{..} = mconcat
-        [ "partNumber" =? _upcPartNumber
-        , "uploadId"   =? _upcUploadId
-        ]
-
-instance ToHeaders UploadPartCopy where
-    toHeaders UploadPartCopy{..} = mconcat
-        [ "x-amz-copy-source"                                           =: _upcCopySource
-        , "x-amz-copy-source-if-match"                                  =: _upcCopySourceIfMatch
-        , "x-amz-copy-source-if-modified-since"                         =: _upcCopySourceIfModifiedSince
-        , "x-amz-copy-source-if-none-match"                             =: _upcCopySourceIfNoneMatch
-        , "x-amz-copy-source-if-unmodified-since"                       =: _upcCopySourceIfUnmodifiedSince
-        , "x-amz-copy-source-range"                                     =: _upcCopySourceRange
-        , "x-amz-server-side-encryption-customer-algorithm"             =: _upcSSECustomerAlgorithm
-        , "x-amz-server-side-encryption-customer-key"                   =: _upcSSECustomerKey
-        , "x-amz-server-side-encryption-customer-key-MD5"               =: _upcSSECustomerKeyMD5
-        , "x-amz-copy-source-server-side-encryption-customer-algorithm" =: _upcCopySourceSSECustomerAlgorithm
-        , "x-amz-copy-source-server-side-encryption-customer-key"       =: _upcCopySourceSSECustomerKey
-        , "x-amz-copy-source-server-side-encryption-customer-key-MD5"   =: _upcCopySourceSSECustomerKeyMD5
-        , "x-amz-request-payer"                                         =: _upcRequestPayer
-        ]
-
-instance ToXMLRoot UploadPartCopy where
-    toXMLRoot = const (namespaced ns "UploadPartCopy" [])
-
-instance ToXML UploadPartCopy
-
-instance AWSRequest UploadPartCopy where
-    type Sv UploadPartCopy = S3
-    type Rs UploadPartCopy = UploadPartCopyResponse
+upcrsServerSideEncryption :: Lens' UploadPartCopyResponse (Maybe ServerSideEncryption)
+upcrsServerSideEncryption = lens _upcrsServerSideEncryption (\ s a -> s{_upcrsServerSideEncryption = a});
 
-    request  = put
-    response = xmlHeaderResponse $ \h x -> UploadPartCopyResponse
-        <$> x .@? "CopyPartResult"
-        <*> h ~:? "x-amz-copy-source-version-id"
-        <*> h ~:? "x-amz-request-charged"
-        <*> h ~:? "x-amz-server-side-encryption-customer-algorithm"
-        <*> h ~:? "x-amz-server-side-encryption-customer-key-MD5"
-        <*> h ~:? "x-amz-server-side-encryption-aws-kms-key-id"
-        <*> h ~:? "x-amz-server-side-encryption"
+-- | The response status code.
+upcrsStatus :: Lens' UploadPartCopyResponse Int
+upcrsStatus = lens _upcrsStatus (\ s a -> s{_upcrsStatus = a});
diff --git a/gen/Network/AWS/S3/Waiters.hs b/gen/Network/AWS/S3/Waiters.hs
--- a/gen/Network/AWS/S3/Waiters.hs
+++ b/gen/Network/AWS/S3/Waiters.hs
@@ -1,63 +1,70 @@
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE TypeFamilies      #-}
 
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.S3.Waiters
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
 module Network.AWS.S3.Waiters where
 
-import Network.AWS.S3.HeadBucket
-import Network.AWS.S3.HeadObject
-import Network.AWS.S3.Types
-import Network.AWS.Waiters
+import           Network.AWS.Prelude
+import           Network.AWS.S3.HeadBucket
+import           Network.AWS.S3.HeadBucket
+import           Network.AWS.S3.HeadObject
+import           Network.AWS.S3.HeadObject
+import           Network.AWS.S3.Types
+import           Network.AWS.Waiter
 
-bucketExists :: Wait HeadBucket
-bucketExists = Wait
-    { _waitName      = "BucketExists"
-    , _waitAttempts  = 20
-    , _waitDelay     = 5
-    , _waitAcceptors =
-        [ matchStatus 200 AcceptSuccess
-        , matchStatus 404 AcceptRetry
-        ]
+-- | Polls 'Network.AWS.S3.HeadObject' every 5 seconds until a
+-- successful state is reached. An error is returned after 20 failed checks.
+objectNotExists :: Wait HeadObject
+objectNotExists =
+    Wait
+    { _waitName = "ObjectNotExists"
+    , _waitAttempts = 20
+    , _waitDelay = 5
+    , _waitAcceptors = [matchStatus 404 AcceptSuccess]
     }
 
-bucketNotExists :: Wait HeadBucket
-bucketNotExists = Wait
-    { _waitName      = "BucketNotExists"
-    , _waitAttempts  = 20
-    , _waitDelay     = 5
-    , _waitAcceptors =
-        [ matchStatus 404 AcceptSuccess
-        ]
+-- | Polls 'Network.AWS.S3.HeadBucket' every 5 seconds until a
+-- successful state is reached. An error is returned after 20 failed checks.
+bucketExists :: Wait HeadBucket
+bucketExists =
+    Wait
+    { _waitName = "BucketExists"
+    , _waitAttempts = 20
+    , _waitDelay = 5
+    , _waitAcceptors = [ matchStatus 200 AcceptSuccess
+                       , matchStatus 404 AcceptRetry]
     }
 
+-- | Polls 'Network.AWS.S3.HeadObject' every 5 seconds until a
+-- successful state is reached. An error is returned after 20 failed checks.
 objectExists :: Wait HeadObject
-objectExists = Wait
-    { _waitName      = "ObjectExists"
-    , _waitAttempts  = 20
-    , _waitDelay     = 5
-    , _waitAcceptors =
-        [ matchStatus 200 AcceptSuccess
-        , matchStatus 404 AcceptRetry
-        ]
+objectExists =
+    Wait
+    { _waitName = "ObjectExists"
+    , _waitAttempts = 20
+    , _waitDelay = 5
+    , _waitAcceptors = [ matchStatus 200 AcceptSuccess
+                       , matchStatus 404 AcceptRetry]
     }
 
-objectNotExists :: Wait HeadObject
-objectNotExists = Wait
-    { _waitName      = "ObjectNotExists"
-    , _waitAttempts  = 20
-    , _waitDelay     = 5
-    , _waitAcceptors =
-        [ matchStatus 404 AcceptSuccess
-        ]
+-- | Polls 'Network.AWS.S3.HeadBucket' every 5 seconds until a
+-- successful state is reached. An error is returned after 20 failed checks.
+bucketNotExists :: Wait HeadBucket
+bucketNotExists =
+    Wait
+    { _waitName = "BucketNotExists"
+    , _waitAttempts = 20
+    , _waitDelay = 5
+    , _waitAcceptors = [matchStatus 404 AcceptSuccess]
     }
diff --git a/src/Network/AWS/S3/Internal.hs b/src/Network/AWS/S3/Internal.hs
--- a/src/Network/AWS/S3/Internal.hs
+++ b/src/Network/AWS/S3/Internal.hs
@@ -1,31 +1,46 @@
+{-# LANGUAGE BangPatterns               #-}
+{-# LANGUAGE DeriveDataTypeable         #-}
 {-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE FlexibleContexts           #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE MultiWayIf                 #-}
+{-# LANGUAGE RankNTypes                 #-}
 
+-- |
 -- Module      : Network.AWS.S3.Internal
--- Copyright   : (c) 2013-2015 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : This Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : experimental
 -- Portability : non-portable (GHC extensions)
-
+--
 module Network.AWS.S3.Internal
-    ( module Network.AWS.S3.Internal
-    , Region
+    ( Region          (..)
+    , BucketName      (..)
+    , ETag            (..)
+    , ObjectVersionId (..)
+    , Delimiter
+    , ObjectKey       (..)
+    , _ObjectKey
+    , keyPrefix
+    , keyName
+    , keyComponents
     ) where
 
-import Data.String
-import GHC.Generics
-import Network.AWS.Prelude
-import Network.AWS.Types (Region)
+import           Control.Lens
+import           Data.String
+import qualified Data.Text            as Text
+import           Network.AWS.Data.XML
+import           Network.AWS.Prelude
 
 newtype BucketName = BucketName Text
     deriving
         ( Eq
         , Ord
+        , Read
         , Show
+        , Data
+        , Typeable
         , Generic
         , IsString
         , FromText
@@ -36,11 +51,16 @@
         , ToQuery
         )
 
-newtype ObjectKey = ObjectKey Text
+-- FIXME: Add the difference between weak + strong ETags and their respective
+-- equalities if necessary, see: https://github.com/brendanhay/amazonka/issues/76
+newtype ETag = ETag ByteString
     deriving
         ( Eq
         , Ord
+        , Read
         , Show
+        , Data
+        , Typeable
         , Generic
         , IsString
         , FromText
@@ -55,7 +75,10 @@
     deriving
         ( Eq
         , Ord
+        , Read
         , Show
+        , Data
+        , Typeable
         , Generic
         , IsString
         , FromText
@@ -66,11 +89,14 @@
         , ToQuery
         )
 
-newtype ETag = ETag Text
+newtype ObjectKey = ObjectKey Text
     deriving
         ( Eq
         , Ord
+        , Read
         , Show
+        , Data
+        , Typeable
         , Generic
         , IsString
         , FromText
@@ -79,4 +105,82 @@
         , FromXML
         , ToXML
         , ToQuery
+        , ToPath
         )
+
+type Delimiter = Char
+
+_ObjectKey :: Iso' ObjectKey Text
+_ObjectKey = iso (\(ObjectKey k) -> k) ObjectKey
+{-# INLINE _ObjectKey #-}
+
+-- FIXME: Note about laws for combining keyPrefix/keyName.
+
+-- | Traverse the prefix of an object key.
+--
+-- The prefix is classified as the entirety of the object key minus the name.
+-- A leading prefix in the presence of a name, and no other delimiters is
+-- interpreted as a blank prefix.
+--
+-- >>> "/home/jsmith/base.wiki" ^? keyPrefix '/'
+-- Just "/home/jsmith"
+--
+-- >>> "/home/jsmith/" ^? keyPrefix '/'
+-- Just "/home/jsmith"
+--
+-- >>> "/home" ^? keyPrefix '/'
+-- Nothing
+--
+-- >>> "/" ^? keyPrefix '/'
+-- Nothing
+--
+keyPrefix :: Delimiter -> Traversal' ObjectKey Text
+keyPrefix c = _ObjectKeySnoc True c . _1
+{-# INLINE keyPrefix #-}
+
+-- | Traverse the name of an object key.
+---
+-- The name is classified as last path component based on the given delimiter.
+-- A trailing delimiter is interpreted as a blank name.
+--
+-- >>> "/home/jsmith/base.wiki" ^? keyName '/'
+-- Just "base.wiki"
+--
+-- >>> "/home/jsmith/" ^? keyName '/'
+-- Just ""
+--
+-- >>> "/home" ^? keyName '/'
+-- Just "home"
+--
+-- >>> "/" ^? keyName '/'
+-- Just ""
+--
+keyName :: Delimiter -> Traversal' ObjectKey Text
+keyName c = _ObjectKeySnoc False c . _2
+{-# INLINE keyName #-}
+
+-- | Traverse the path components of an object key using the specified delimiter.
+keyComponents :: Delimiter -> IndexedTraversal' Int ObjectKey Text
+keyComponents !c f (ObjectKey k) = cat <$> traversed f split
+  where
+    split = Text.split (== c) k
+    cat   = ObjectKey . Text.intercalate (Text.singleton c)
+{-# INLINE keyComponents #-}
+
+-- | Modelled on the '_Snoc' type class from "Control.Lens.Cons".
+_ObjectKeySnoc :: Bool -> Delimiter -> Prism' ObjectKey (Text, Text)
+_ObjectKeySnoc dir !c = prism (ObjectKey . uncurry cat) split
+  where
+    split x@(ObjectKey k) =
+        let (h, t) = Text.breakOnEnd suf k
+         in if | Text.length h <= 1, dir -> Left x
+               | otherwise               -> Right (Text.dropEnd 1 h, t)
+
+    cat h t
+        | Text.null h             = t
+        | Text.null t             = h
+        | suf `Text.isSuffixOf` h = h <> t
+        | suf `Text.isPrefixOf` t = h <> t
+        | otherwise               = h <> suf <> t
+
+    suf = Text.singleton c
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,21 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Main (main) where
+
+import Test.Tasty
+import Test.AWS.S3
+import Test.AWS.S3.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "S3"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/Gen/S3.hs b/test/Test/AWS/Gen/S3.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/S3.hs
@@ -0,0 +1,901 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-orphans        #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.AWS.Gen.S3
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.Gen.S3 where
+
+import Data.Proxy
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+import Network.AWS.S3
+import Test.AWS.S3.Internal
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ testPutBucketRequestPayment $
+--             putBucketRequestPayment
+--
+--         , testPutObject $
+--             putObject
+--
+--         , testPutBucketLogging $
+--             putBucketLogging
+--
+--         , testDeleteObject $
+--             deleteObject
+--
+--         , testDeleteBucket $
+--             deleteBucket
+--
+--         , testListBuckets $
+--             listBuckets
+--
+--         , testCreateBucket $
+--             createBucket
+--
+--         , testPutBucketTagging $
+--             putBucketTagging
+--
+--         , testDeleteBucketTagging $
+--             deleteBucketTagging
+--
+--         , testPutObjectACL $
+--             putObjectACL
+--
+--         , testGetBucketNotificationConfiguration $
+--             getBucketNotificationConfiguration
+--
+--         , testGetBucketLocation $
+--             getBucketLocation
+--
+--         , testPutBucketReplication $
+--             putBucketReplication
+--
+--         , testGetBucketWebsite $
+--             getBucketWebsite
+--
+--         , testGetObject $
+--             getObject
+--
+--         , testDeleteBucketReplication $
+--             deleteBucketReplication
+--
+--         , testGetBucketRequestPayment $
+--             getBucketRequestPayment
+--
+--         , testListObjectVersions $
+--             listObjectVersions
+--
+--         , testGetBucketLifecycle $
+--             getBucketLifecycle
+--
+--         , testHeadBucket $
+--             headBucket
+--
+--         , testPutBucketLifecycle $
+--             putBucketLifecycle
+--
+--         , testCreateMultipartUpload $
+--             createMultipartUpload
+--
+--         , testDeleteBucketLifecycle $
+--             deleteBucketLifecycle
+--
+--         , testGetBucketReplication $
+--             getBucketReplication
+--
+--         , testPutBucketWebsite $
+--             putBucketWebsite
+--
+--         , testCompleteMultipartUpload $
+--             completeMultipartUpload
+--
+--         , testUploadPart $
+--             uploadPart
+--
+--         , testListMultipartUploads $
+--             listMultipartUploads
+--
+--         , testDeleteBucketWebsite $
+--             deleteBucketWebsite
+--
+--         , testListObjects $
+--             listObjects
+--
+--         , testDeleteObjects $
+--             deleteObjects
+--
+--         , testPutBucketPolicy $
+--             putBucketPolicy
+--
+--         , testDeleteBucketPolicy $
+--             deleteBucketPolicy
+--
+--         , testAbortMultipartUpload $
+--             abortMultipartUpload
+--
+--         , testGetObjectTorrent $
+--             getObjectTorrent
+--
+--         , testPutBucketCORS $
+--             putBucketCORS
+--
+--         , testDeleteBucketCORS $
+--             deleteBucketCORS
+--
+--         , testGetBucketVersioning $
+--             getBucketVersioning
+--
+--         , testPutBucketNotificationConfiguration $
+--             putBucketNotificationConfiguration
+--
+--         , testGetBucketTagging $
+--             getBucketTagging
+--
+--         , testHeadObject $
+--             headObject
+--
+--         , testPutBucketVersioning $
+--             putBucketVersioning
+--
+--         , testGetObjectACL $
+--             getObjectACL
+--
+--         , testRestoreObject $
+--             restoreObject
+--
+--         , testGetBucketCORS $
+--             getBucketCORS
+--
+--         , testCopyObject $
+--             copyObject
+--
+--         , testGetBucketPolicy $
+--             getBucketPolicy
+--
+--         , testGetBucketLogging $
+--             getBucketLogging
+--
+--         , testListParts $
+--             listParts
+--
+--         , testGetBucketACL $
+--             getBucketACL
+--
+--         , testPutBucketACL $
+--             putBucketACL
+--
+--         , testUploadPartCopy $
+--             uploadPartCopy
+--
+--           ]
+
+--     , testGroup "response"
+--         [ testPutBucketRequestPaymentResponse $
+--             putBucketRequestPaymentResponse
+--
+--         , testPutObjectResponse $
+--             putObjectResponse
+--
+--         , testPutBucketLoggingResponse $
+--             putBucketLoggingResponse
+--
+--         , testDeleteObjectResponse $
+--             deleteObjectResponse
+--
+--         , testDeleteBucketResponse $
+--             deleteBucketResponse
+--
+--         , testListBucketsResponse $
+--             listBucketsResponse
+--
+--         , testCreateBucketResponse $
+--             createBucketResponse
+--
+--         , testPutBucketTaggingResponse $
+--             putBucketTaggingResponse
+--
+--         , testDeleteBucketTaggingResponse $
+--             deleteBucketTaggingResponse
+--
+--         , testPutObjectACLResponse $
+--             putObjectACLResponse
+--
+--         , testGetBucketNotificationConfigurationResponse $
+--             notificationConfiguration
+--
+--         , testGetBucketLocationResponse $
+--             getBucketLocationResponse
+--
+--         , testPutBucketReplicationResponse $
+--             putBucketReplicationResponse
+--
+--         , testGetBucketWebsiteResponse $
+--             getBucketWebsiteResponse
+--
+--         , testGetObjectResponse $
+--             getObjectResponse
+--
+--         , testDeleteBucketReplicationResponse $
+--             deleteBucketReplicationResponse
+--
+--         , testGetBucketRequestPaymentResponse $
+--             getBucketRequestPaymentResponse
+--
+--         , testListObjectVersionsResponse $
+--             listObjectVersionsResponse
+--
+--         , testGetBucketLifecycleResponse $
+--             getBucketLifecycleResponse
+--
+--         , testHeadBucketResponse $
+--             headBucketResponse
+--
+--         , testPutBucketLifecycleResponse $
+--             putBucketLifecycleResponse
+--
+--         , testCreateMultipartUploadResponse $
+--             createMultipartUploadResponse
+--
+--         , testDeleteBucketLifecycleResponse $
+--             deleteBucketLifecycleResponse
+--
+--         , testGetBucketReplicationResponse $
+--             getBucketReplicationResponse
+--
+--         , testPutBucketWebsiteResponse $
+--             putBucketWebsiteResponse
+--
+--         , testCompleteMultipartUploadResponse $
+--             completeMultipartUploadResponse
+--
+--         , testUploadPartResponse $
+--             uploadPartResponse
+--
+--         , testListMultipartUploadsResponse $
+--             listMultipartUploadsResponse
+--
+--         , testDeleteBucketWebsiteResponse $
+--             deleteBucketWebsiteResponse
+--
+--         , testListObjectsResponse $
+--             listObjectsResponse
+--
+--         , testDeleteObjectsResponse $
+--             deleteObjectsResponse
+--
+--         , testPutBucketPolicyResponse $
+--             putBucketPolicyResponse
+--
+--         , testDeleteBucketPolicyResponse $
+--             deleteBucketPolicyResponse
+--
+--         , testAbortMultipartUploadResponse $
+--             abortMultipartUploadResponse
+--
+--         , testGetObjectTorrentResponse $
+--             getObjectTorrentResponse
+--
+--         , testPutBucketCORSResponse $
+--             putBucketCORSResponse
+--
+--         , testDeleteBucketCORSResponse $
+--             deleteBucketCORSResponse
+--
+--         , testGetBucketVersioningResponse $
+--             getBucketVersioningResponse
+--
+--         , testPutBucketNotificationConfigurationResponse $
+--             putBucketNotificationConfigurationResponse
+--
+--         , testGetBucketTaggingResponse $
+--             getBucketTaggingResponse
+--
+--         , testHeadObjectResponse $
+--             headObjectResponse
+--
+--         , testPutBucketVersioningResponse $
+--             putBucketVersioningResponse
+--
+--         , testGetObjectACLResponse $
+--             getObjectACLResponse
+--
+--         , testRestoreObjectResponse $
+--             restoreObjectResponse
+--
+--         , testGetBucketCORSResponse $
+--             getBucketCORSResponse
+--
+--         , testCopyObjectResponse $
+--             copyObjectResponse
+--
+--         , testGetBucketPolicyResponse $
+--             getBucketPolicyResponse
+--
+--         , testGetBucketLoggingResponse $
+--             getBucketLoggingResponse
+--
+--         , testListPartsResponse $
+--             listPartsResponse
+--
+--         , testGetBucketACLResponse $
+--             getBucketACLResponse
+--
+--         , testPutBucketACLResponse $
+--             putBucketACLResponse
+--
+--         , testUploadPartCopyResponse $
+--             uploadPartCopyResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+testPutBucketRequestPayment :: PutBucketRequestPayment -> TestTree
+testPutBucketRequestPayment = req
+    "PutBucketRequestPayment"
+    "fixture/PutBucketRequestPayment"
+
+testPutBucketLogging :: PutBucketLogging -> TestTree
+testPutBucketLogging = req
+    "PutBucketLogging"
+    "fixture/PutBucketLogging"
+
+testDeleteObject :: DeleteObject -> TestTree
+testDeleteObject = req
+    "DeleteObject"
+    "fixture/DeleteObject"
+
+testDeleteBucket :: DeleteBucket -> TestTree
+testDeleteBucket = req
+    "DeleteBucket"
+    "fixture/DeleteBucket"
+
+testListBuckets :: ListBuckets -> TestTree
+testListBuckets = req
+    "ListBuckets"
+    "fixture/ListBuckets"
+
+testCreateBucket :: CreateBucket -> TestTree
+testCreateBucket = req
+    "CreateBucket"
+    "fixture/CreateBucket"
+
+testPutBucketTagging :: PutBucketTagging -> TestTree
+testPutBucketTagging = req
+    "PutBucketTagging"
+    "fixture/PutBucketTagging"
+
+testDeleteBucketTagging :: DeleteBucketTagging -> TestTree
+testDeleteBucketTagging = req
+    "DeleteBucketTagging"
+    "fixture/DeleteBucketTagging"
+
+testPutObjectACL :: PutObjectACL -> TestTree
+testPutObjectACL = req
+    "PutObjectACL"
+    "fixture/PutObjectACL"
+
+testGetBucketNotificationConfiguration :: GetBucketNotificationConfiguration -> TestTree
+testGetBucketNotificationConfiguration = req
+    "GetBucketNotificationConfiguration"
+    "fixture/GetBucketNotificationConfiguration"
+
+testGetBucketLocation :: GetBucketLocation -> TestTree
+testGetBucketLocation = req
+    "GetBucketLocation"
+    "fixture/GetBucketLocation"
+
+testPutBucketReplication :: PutBucketReplication -> TestTree
+testPutBucketReplication = req
+    "PutBucketReplication"
+    "fixture/PutBucketReplication"
+
+testGetBucketWebsite :: GetBucketWebsite -> TestTree
+testGetBucketWebsite = req
+    "GetBucketWebsite"
+    "fixture/GetBucketWebsite"
+
+testGetObject :: GetObject -> TestTree
+testGetObject = req
+    "GetObject"
+    "fixture/GetObject"
+
+testDeleteBucketReplication :: DeleteBucketReplication -> TestTree
+testDeleteBucketReplication = req
+    "DeleteBucketReplication"
+    "fixture/DeleteBucketReplication"
+
+testGetBucketRequestPayment :: GetBucketRequestPayment -> TestTree
+testGetBucketRequestPayment = req
+    "GetBucketRequestPayment"
+    "fixture/GetBucketRequestPayment"
+
+testListObjectVersions :: ListObjectVersions -> TestTree
+testListObjectVersions = req
+    "ListObjectVersions"
+    "fixture/ListObjectVersions"
+
+testGetBucketLifecycle :: GetBucketLifecycle -> TestTree
+testGetBucketLifecycle = req
+    "GetBucketLifecycle"
+    "fixture/GetBucketLifecycle"
+
+testHeadBucket :: HeadBucket -> TestTree
+testHeadBucket = req
+    "HeadBucket"
+    "fixture/HeadBucket"
+
+testPutBucketLifecycle :: PutBucketLifecycle -> TestTree
+testPutBucketLifecycle = req
+    "PutBucketLifecycle"
+    "fixture/PutBucketLifecycle"
+
+testCreateMultipartUpload :: CreateMultipartUpload -> TestTree
+testCreateMultipartUpload = req
+    "CreateMultipartUpload"
+    "fixture/CreateMultipartUpload"
+
+testDeleteBucketLifecycle :: DeleteBucketLifecycle -> TestTree
+testDeleteBucketLifecycle = req
+    "DeleteBucketLifecycle"
+    "fixture/DeleteBucketLifecycle"
+
+testGetBucketReplication :: GetBucketReplication -> TestTree
+testGetBucketReplication = req
+    "GetBucketReplication"
+    "fixture/GetBucketReplication"
+
+testPutBucketWebsite :: PutBucketWebsite -> TestTree
+testPutBucketWebsite = req
+    "PutBucketWebsite"
+    "fixture/PutBucketWebsite"
+
+testCompleteMultipartUpload :: CompleteMultipartUpload -> TestTree
+testCompleteMultipartUpload = req
+    "CompleteMultipartUpload"
+    "fixture/CompleteMultipartUpload"
+
+testListMultipartUploads :: ListMultipartUploads -> TestTree
+testListMultipartUploads = req
+    "ListMultipartUploads"
+    "fixture/ListMultipartUploads"
+
+testDeleteBucketWebsite :: DeleteBucketWebsite -> TestTree
+testDeleteBucketWebsite = req
+    "DeleteBucketWebsite"
+    "fixture/DeleteBucketWebsite"
+
+testListObjects :: ListObjects -> TestTree
+testListObjects = req
+    "ListObjects"
+    "fixture/ListObjects"
+
+testDeleteObjects :: DeleteObjects -> TestTree
+testDeleteObjects = req
+    "DeleteObjects"
+    "fixture/DeleteObjects"
+
+testPutBucketPolicy :: PutBucketPolicy -> TestTree
+testPutBucketPolicy = req
+    "PutBucketPolicy"
+    "fixture/PutBucketPolicy"
+
+testDeleteBucketPolicy :: DeleteBucketPolicy -> TestTree
+testDeleteBucketPolicy = req
+    "DeleteBucketPolicy"
+    "fixture/DeleteBucketPolicy"
+
+testAbortMultipartUpload :: AbortMultipartUpload -> TestTree
+testAbortMultipartUpload = req
+    "AbortMultipartUpload"
+    "fixture/AbortMultipartUpload"
+
+testGetObjectTorrent :: GetObjectTorrent -> TestTree
+testGetObjectTorrent = req
+    "GetObjectTorrent"
+    "fixture/GetObjectTorrent"
+
+testPutBucketCORS :: PutBucketCORS -> TestTree
+testPutBucketCORS = req
+    "PutBucketCORS"
+    "fixture/PutBucketCORS"
+
+testDeleteBucketCORS :: DeleteBucketCORS -> TestTree
+testDeleteBucketCORS = req
+    "DeleteBucketCORS"
+    "fixture/DeleteBucketCORS"
+
+testGetBucketVersioning :: GetBucketVersioning -> TestTree
+testGetBucketVersioning = req
+    "GetBucketVersioning"
+    "fixture/GetBucketVersioning"
+
+testPutBucketNotificationConfiguration :: PutBucketNotificationConfiguration -> TestTree
+testPutBucketNotificationConfiguration = req
+    "PutBucketNotificationConfiguration"
+    "fixture/PutBucketNotificationConfiguration"
+
+testGetBucketTagging :: GetBucketTagging -> TestTree
+testGetBucketTagging = req
+    "GetBucketTagging"
+    "fixture/GetBucketTagging"
+
+testHeadObject :: HeadObject -> TestTree
+testHeadObject = req
+    "HeadObject"
+    "fixture/HeadObject"
+
+testPutBucketVersioning :: PutBucketVersioning -> TestTree
+testPutBucketVersioning = req
+    "PutBucketVersioning"
+    "fixture/PutBucketVersioning"
+
+testGetObjectACL :: GetObjectACL -> TestTree
+testGetObjectACL = req
+    "GetObjectACL"
+    "fixture/GetObjectACL"
+
+testRestoreObject :: RestoreObject -> TestTree
+testRestoreObject = req
+    "RestoreObject"
+    "fixture/RestoreObject"
+
+testGetBucketCORS :: GetBucketCORS -> TestTree
+testGetBucketCORS = req
+    "GetBucketCORS"
+    "fixture/GetBucketCORS"
+
+testCopyObject :: CopyObject -> TestTree
+testCopyObject = req
+    "CopyObject"
+    "fixture/CopyObject"
+
+testGetBucketPolicy :: GetBucketPolicy -> TestTree
+testGetBucketPolicy = req
+    "GetBucketPolicy"
+    "fixture/GetBucketPolicy"
+
+testGetBucketLogging :: GetBucketLogging -> TestTree
+testGetBucketLogging = req
+    "GetBucketLogging"
+    "fixture/GetBucketLogging"
+
+testListParts :: ListParts -> TestTree
+testListParts = req
+    "ListParts"
+    "fixture/ListParts"
+
+testGetBucketACL :: GetBucketACL -> TestTree
+testGetBucketACL = req
+    "GetBucketACL"
+    "fixture/GetBucketACL"
+
+testPutBucketACL :: PutBucketACL -> TestTree
+testPutBucketACL = req
+    "PutBucketACL"
+    "fixture/PutBucketACL"
+
+testUploadPartCopy :: UploadPartCopy -> TestTree
+testUploadPartCopy = req
+    "UploadPartCopy"
+    "fixture/UploadPartCopy"
+
+-- Responses
+
+testPutBucketRequestPaymentResponse :: PutBucketRequestPaymentResponse -> TestTree
+testPutBucketRequestPaymentResponse = res
+    "PutBucketRequestPaymentResponse"
+    "fixture/PutBucketRequestPaymentResponse"
+    (Proxy :: Proxy PutBucketRequestPayment)
+
+testPutObjectResponse :: PutObjectResponse -> TestTree
+testPutObjectResponse = res
+    "PutObjectResponse"
+    "fixture/PutObjectResponse"
+    (Proxy :: Proxy PutObject)
+
+testPutBucketLoggingResponse :: PutBucketLoggingResponse -> TestTree
+testPutBucketLoggingResponse = res
+    "PutBucketLoggingResponse"
+    "fixture/PutBucketLoggingResponse"
+    (Proxy :: Proxy PutBucketLogging)
+
+testDeleteObjectResponse :: DeleteObjectResponse -> TestTree
+testDeleteObjectResponse = res
+    "DeleteObjectResponse"
+    "fixture/DeleteObjectResponse"
+    (Proxy :: Proxy DeleteObject)
+
+testDeleteBucketResponse :: DeleteBucketResponse -> TestTree
+testDeleteBucketResponse = res
+    "DeleteBucketResponse"
+    "fixture/DeleteBucketResponse"
+    (Proxy :: Proxy DeleteBucket)
+
+testListBucketsResponse :: ListBucketsResponse -> TestTree
+testListBucketsResponse = res
+    "ListBucketsResponse"
+    "fixture/ListBucketsResponse"
+    (Proxy :: Proxy ListBuckets)
+
+testCreateBucketResponse :: CreateBucketResponse -> TestTree
+testCreateBucketResponse = res
+    "CreateBucketResponse"
+    "fixture/CreateBucketResponse"
+    (Proxy :: Proxy CreateBucket)
+
+testPutBucketTaggingResponse :: PutBucketTaggingResponse -> TestTree
+testPutBucketTaggingResponse = res
+    "PutBucketTaggingResponse"
+    "fixture/PutBucketTaggingResponse"
+    (Proxy :: Proxy PutBucketTagging)
+
+testDeleteBucketTaggingResponse :: DeleteBucketTaggingResponse -> TestTree
+testDeleteBucketTaggingResponse = res
+    "DeleteBucketTaggingResponse"
+    "fixture/DeleteBucketTaggingResponse"
+    (Proxy :: Proxy DeleteBucketTagging)
+
+testPutObjectACLResponse :: PutObjectACLResponse -> TestTree
+testPutObjectACLResponse = res
+    "PutObjectACLResponse"
+    "fixture/PutObjectACLResponse"
+    (Proxy :: Proxy PutObjectACL)
+
+testGetBucketNotificationConfigurationResponse :: NotificationConfiguration -> TestTree
+testGetBucketNotificationConfigurationResponse = res
+    "GetBucketNotificationConfigurationResponse"
+    "fixture/GetBucketNotificationConfigurationResponse"
+    (Proxy :: Proxy GetBucketNotificationConfiguration)
+
+testGetBucketLocationResponse :: GetBucketLocationResponse -> TestTree
+testGetBucketLocationResponse = res
+    "GetBucketLocationResponse"
+    "fixture/GetBucketLocationResponse"
+    (Proxy :: Proxy GetBucketLocation)
+
+testPutBucketReplicationResponse :: PutBucketReplicationResponse -> TestTree
+testPutBucketReplicationResponse = res
+    "PutBucketReplicationResponse"
+    "fixture/PutBucketReplicationResponse"
+    (Proxy :: Proxy PutBucketReplication)
+
+testGetBucketWebsiteResponse :: GetBucketWebsiteResponse -> TestTree
+testGetBucketWebsiteResponse = res
+    "GetBucketWebsiteResponse"
+    "fixture/GetBucketWebsiteResponse"
+    (Proxy :: Proxy GetBucketWebsite)
+
+testDeleteBucketReplicationResponse :: DeleteBucketReplicationResponse -> TestTree
+testDeleteBucketReplicationResponse = res
+    "DeleteBucketReplicationResponse"
+    "fixture/DeleteBucketReplicationResponse"
+    (Proxy :: Proxy DeleteBucketReplication)
+
+testGetBucketRequestPaymentResponse :: GetBucketRequestPaymentResponse -> TestTree
+testGetBucketRequestPaymentResponse = res
+    "GetBucketRequestPaymentResponse"
+    "fixture/GetBucketRequestPaymentResponse"
+    (Proxy :: Proxy GetBucketRequestPayment)
+
+testListObjectVersionsResponse :: ListObjectVersionsResponse -> TestTree
+testListObjectVersionsResponse = res
+    "ListObjectVersionsResponse"
+    "fixture/ListObjectVersionsResponse"
+    (Proxy :: Proxy ListObjectVersions)
+
+testGetBucketLifecycleResponse :: GetBucketLifecycleResponse -> TestTree
+testGetBucketLifecycleResponse = res
+    "GetBucketLifecycleResponse"
+    "fixture/GetBucketLifecycleResponse"
+    (Proxy :: Proxy GetBucketLifecycle)
+
+testHeadBucketResponse :: HeadBucketResponse -> TestTree
+testHeadBucketResponse = res
+    "HeadBucketResponse"
+    "fixture/HeadBucketResponse"
+    (Proxy :: Proxy HeadBucket)
+
+testPutBucketLifecycleResponse :: PutBucketLifecycleResponse -> TestTree
+testPutBucketLifecycleResponse = res
+    "PutBucketLifecycleResponse"
+    "fixture/PutBucketLifecycleResponse"
+    (Proxy :: Proxy PutBucketLifecycle)
+
+testCreateMultipartUploadResponse :: CreateMultipartUploadResponse -> TestTree
+testCreateMultipartUploadResponse = res
+    "CreateMultipartUploadResponse"
+    "fixture/CreateMultipartUploadResponse"
+    (Proxy :: Proxy CreateMultipartUpload)
+
+testDeleteBucketLifecycleResponse :: DeleteBucketLifecycleResponse -> TestTree
+testDeleteBucketLifecycleResponse = res
+    "DeleteBucketLifecycleResponse"
+    "fixture/DeleteBucketLifecycleResponse"
+    (Proxy :: Proxy DeleteBucketLifecycle)
+
+testGetBucketReplicationResponse :: GetBucketReplicationResponse -> TestTree
+testGetBucketReplicationResponse = res
+    "GetBucketReplicationResponse"
+    "fixture/GetBucketReplicationResponse"
+    (Proxy :: Proxy GetBucketReplication)
+
+testPutBucketWebsiteResponse :: PutBucketWebsiteResponse -> TestTree
+testPutBucketWebsiteResponse = res
+    "PutBucketWebsiteResponse"
+    "fixture/PutBucketWebsiteResponse"
+    (Proxy :: Proxy PutBucketWebsite)
+
+testCompleteMultipartUploadResponse :: CompleteMultipartUploadResponse -> TestTree
+testCompleteMultipartUploadResponse = res
+    "CompleteMultipartUploadResponse"
+    "fixture/CompleteMultipartUploadResponse"
+    (Proxy :: Proxy CompleteMultipartUpload)
+
+testUploadPartResponse :: UploadPartResponse -> TestTree
+testUploadPartResponse = res
+    "UploadPartResponse"
+    "fixture/UploadPartResponse"
+    (Proxy :: Proxy UploadPart)
+
+testListMultipartUploadsResponse :: ListMultipartUploadsResponse -> TestTree
+testListMultipartUploadsResponse = res
+    "ListMultipartUploadsResponse"
+    "fixture/ListMultipartUploadsResponse"
+    (Proxy :: Proxy ListMultipartUploads)
+
+testDeleteBucketWebsiteResponse :: DeleteBucketWebsiteResponse -> TestTree
+testDeleteBucketWebsiteResponse = res
+    "DeleteBucketWebsiteResponse"
+    "fixture/DeleteBucketWebsiteResponse"
+    (Proxy :: Proxy DeleteBucketWebsite)
+
+testListObjectsResponse :: ListObjectsResponse -> TestTree
+testListObjectsResponse = res
+    "ListObjectsResponse"
+    "fixture/ListObjectsResponse"
+    (Proxy :: Proxy ListObjects)
+
+testDeleteObjectsResponse :: DeleteObjectsResponse -> TestTree
+testDeleteObjectsResponse = res
+    "DeleteObjectsResponse"
+    "fixture/DeleteObjectsResponse"
+    (Proxy :: Proxy DeleteObjects)
+
+testPutBucketPolicyResponse :: PutBucketPolicyResponse -> TestTree
+testPutBucketPolicyResponse = res
+    "PutBucketPolicyResponse"
+    "fixture/PutBucketPolicyResponse"
+    (Proxy :: Proxy PutBucketPolicy)
+
+testDeleteBucketPolicyResponse :: DeleteBucketPolicyResponse -> TestTree
+testDeleteBucketPolicyResponse = res
+    "DeleteBucketPolicyResponse"
+    "fixture/DeleteBucketPolicyResponse"
+    (Proxy :: Proxy DeleteBucketPolicy)
+
+testAbortMultipartUploadResponse :: AbortMultipartUploadResponse -> TestTree
+testAbortMultipartUploadResponse = res
+    "AbortMultipartUploadResponse"
+    "fixture/AbortMultipartUploadResponse"
+    (Proxy :: Proxy AbortMultipartUpload)
+
+testPutBucketCORSResponse :: PutBucketCORSResponse -> TestTree
+testPutBucketCORSResponse = res
+    "PutBucketCORSResponse"
+    "fixture/PutBucketCORSResponse"
+    (Proxy :: Proxy PutBucketCORS)
+
+testDeleteBucketCORSResponse :: DeleteBucketCORSResponse -> TestTree
+testDeleteBucketCORSResponse = res
+    "DeleteBucketCORSResponse"
+    "fixture/DeleteBucketCORSResponse"
+    (Proxy :: Proxy DeleteBucketCORS)
+
+testGetBucketVersioningResponse :: GetBucketVersioningResponse -> TestTree
+testGetBucketVersioningResponse = res
+    "GetBucketVersioningResponse"
+    "fixture/GetBucketVersioningResponse"
+    (Proxy :: Proxy GetBucketVersioning)
+
+testPutBucketNotificationConfigurationResponse :: PutBucketNotificationConfigurationResponse -> TestTree
+testPutBucketNotificationConfigurationResponse = res
+    "PutBucketNotificationConfigurationResponse"
+    "fixture/PutBucketNotificationConfigurationResponse"
+    (Proxy :: Proxy PutBucketNotificationConfiguration)
+
+testGetBucketTaggingResponse :: GetBucketTaggingResponse -> TestTree
+testGetBucketTaggingResponse = res
+    "GetBucketTaggingResponse"
+    "fixture/GetBucketTaggingResponse"
+    (Proxy :: Proxy GetBucketTagging)
+
+testHeadObjectResponse :: HeadObjectResponse -> TestTree
+testHeadObjectResponse = res
+    "HeadObjectResponse"
+    "fixture/HeadObjectResponse"
+    (Proxy :: Proxy HeadObject)
+
+testPutBucketVersioningResponse :: PutBucketVersioningResponse -> TestTree
+testPutBucketVersioningResponse = res
+    "PutBucketVersioningResponse"
+    "fixture/PutBucketVersioningResponse"
+    (Proxy :: Proxy PutBucketVersioning)
+
+testGetObjectACLResponse :: GetObjectACLResponse -> TestTree
+testGetObjectACLResponse = res
+    "GetObjectACLResponse"
+    "fixture/GetObjectACLResponse"
+    (Proxy :: Proxy GetObjectACL)
+
+testRestoreObjectResponse :: RestoreObjectResponse -> TestTree
+testRestoreObjectResponse = res
+    "RestoreObjectResponse"
+    "fixture/RestoreObjectResponse"
+    (Proxy :: Proxy RestoreObject)
+
+testGetBucketCORSResponse :: GetBucketCORSResponse -> TestTree
+testGetBucketCORSResponse = res
+    "GetBucketCORSResponse"
+    "fixture/GetBucketCORSResponse"
+    (Proxy :: Proxy GetBucketCORS)
+
+testCopyObjectResponse :: CopyObjectResponse -> TestTree
+testCopyObjectResponse = res
+    "CopyObjectResponse"
+    "fixture/CopyObjectResponse"
+    (Proxy :: Proxy CopyObject)
+
+testGetBucketPolicyResponse :: GetBucketPolicyResponse -> TestTree
+testGetBucketPolicyResponse = res
+    "GetBucketPolicyResponse"
+    "fixture/GetBucketPolicyResponse"
+    (Proxy :: Proxy GetBucketPolicy)
+
+testGetBucketLoggingResponse :: GetBucketLoggingResponse -> TestTree
+testGetBucketLoggingResponse = res
+    "GetBucketLoggingResponse"
+    "fixture/GetBucketLoggingResponse"
+    (Proxy :: Proxy GetBucketLogging)
+
+testListPartsResponse :: ListPartsResponse -> TestTree
+testListPartsResponse = res
+    "ListPartsResponse"
+    "fixture/ListPartsResponse"
+    (Proxy :: Proxy ListParts)
+
+testGetBucketACLResponse :: GetBucketACLResponse -> TestTree
+testGetBucketACLResponse = res
+    "GetBucketACLResponse"
+    "fixture/GetBucketACLResponse"
+    (Proxy :: Proxy GetBucketACL)
+
+testPutBucketACLResponse :: PutBucketACLResponse -> TestTree
+testPutBucketACLResponse = res
+    "PutBucketACLResponse"
+    "fixture/PutBucketACLResponse"
+    (Proxy :: Proxy PutBucketACL)
+
+testUploadPartCopyResponse :: UploadPartCopyResponse -> TestTree
+testUploadPartCopyResponse = res
+    "UploadPartCopyResponse"
+    "fixture/UploadPartCopyResponse"
+    (Proxy :: Proxy UploadPartCopy)
diff --git a/test/Test/AWS/S3.hs b/test/Test/AWS/S3.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/S3.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TemplateHaskell   #-}
+
+-- |
+-- Module      : Test.AWS.S3
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.S3
+    ( tests
+    , fixtures
+    ) where
+
+import           Data.Time
+import           Network.AWS.Prelude
+import           Network.AWS.S3
+import           Test.AWS.Gen.S3
+import           Test.AWS.Prelude
+import qualified Test.AWS.S3.ObjectKey as ObjectKey
+import           Test.Tasty
+
+tests :: [TestTree]
+tests =
+    [ ObjectKey.tests
+    ]
+
+fixtures :: [TestTree]
+fixtures =
+    [ testGroup "request"
+        [ testDeleteObjects $
+            deleteObjects "bucketname" $
+                delete' & dObjects .~
+                    [ objectIdentifier "sample1.text"
+                    , objectIdentifier "sample2.text"
+                    ]
+
+        , testListMultipartUploads $
+            listMultipartUploads "foo-bucket" & lmuMaxUploads ?~ 3
+        ]
+
+    , testGroup "response"
+        [ testGetBucketReplicationResponse $
+            getBucketReplicationResponse 200
+                & gbrrsReplicationConfiguration ?~
+                   (replicationConfiguration "arn:aws:iam::35667example:role/CrossRegionReplicationRoleForS3"
+                       & rcRules .~
+                           [ replicationRule "" Enabled (destination "arn:aws:s3:::exampletargetbucket")
+                               & rrId ?~ "rule1"
+                           ])
+
+        , testCopyObjectResponse $
+            copyObjectResponse 200
+                & corsCopyObjectResult ?~
+                    (copyObjectResult
+                        & corETag         ?~ ETag "\"9b2cf535f27731c974343645a3985328\""
+                        & corLastModified ?~ $(mkTime "2009-10-28T22:32:00Z"))
+
+        , testListPartsResponse $
+            listPartsResponse 200
+                & lprsBucket               ?~ "example-bucket"
+                & lprsKey                  ?~ "example-object"
+                & lprsUploadId             ?~ "XXBsb2FkIElEIGZvciBlbHZpbmcncyVcdS1tb3ZpZS5tMnRzEEEwbG9hZA"
+                & lprsStorageClass         ?~ Standard
+                & lprsPartNumberMarker     ?~ 1
+                & lprsNextPartNumberMarker ?~ 3
+                & lprsMaxParts             ?~ 2
+                & lprsIsTruncated          ?~ True
+                & lprsInitiator            ?~
+                    (initiator
+                        & iId              ?~ "arn:aws:iam::111122223333:user/some-user-11116a31-17b5-4fb7-9df5-b288870f11xx"
+                        & iDisplayName     ?~ "umat-user-11116a31-17b5-4fb7-9df5-b288870f11xx")
+                & lprsOwner                ?~
+                    (owner
+                        & oId              ?~ "75aa57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a"
+                        & oDisplayName     ?~ "someName")
+                & lprsParts                .~
+                    [ part & pPartNumber   ?~ 2
+                           & pLastModified ?~ $(mkTime "2010-11-10T20:48:34.000Z")
+                           & pETag         ?~ "\"7778aef83f66abc1fa1e8477f296d394\""
+                           & pSize         ?~ 10485760
+                    , part & pPartNumber   ?~ 3
+                           & pLastModified ?~ $(mkTime "2010-11-10T20:48:33.000Z")
+                           & pETag         ?~ "\"aaaa18db4cc2f85cedef654fccc4a4x8\""
+                           & pSize         ?~ 10485760
+                    ]
+
+        -- FIXME: Has a JSON body, not XML, hence, serialiser error.
+        -- , testGetBucketPolicyResponse $
+        --     getBucketPolicyResponse 200
+        --         & gbprPolicy ?~ "foo"
+        ]
+    ]
diff --git a/test/Test/AWS/S3/Internal.hs b/test/Test/AWS/S3/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/S3/Internal.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Test.AWS.S3.Internal
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+module Test.AWS.S3.Internal where
+
+import           Network.AWS.S3
+import           Test.AWS.Prelude
