diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,24 +8,27 @@
 
 ## Version
 
-`1.4.4`
+`1.4.5`
 
 
 ## 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.
-
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-s3)
 and the [AWS API Reference](https://aws.amazon.com/documentation/).
 
 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.
+which provides mechanisms for specifying AuthN/AuthZ information, sending requests,
+and receiving responses.
 
-Use of lenses is required for constructing and manipulating types.
-This is due to the amount of nesting of AWS types and transparency regarding
+Lenses are used for constructing and manipulating types,
+due to the depth 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).
+
+See [Network.AWS.S3](http://hackage.haskell.org/package/amazonka-s3/docs/Network-AWS-S3.html)
+or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
+
 
 ## Contribute
 
diff --git a/amazonka-s3.cabal b/amazonka-s3.cabal
--- a/amazonka-s3.cabal
+++ b/amazonka-s3.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-s3
-version:               1.4.4
+version:               1.4.5
 synopsis:              Amazon Simple Storage Service SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -11,22 +11,21 @@
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 cabal-version:         >= 1.10
-extra-source-files:    README.md fixture/*.yaml fixture/*.proto
+extra-source-files:    README.md fixture/*.yaml fixture/*.proto src/.gitkeep
 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.
-    .
     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.
+    mechanisms for specifying AuthN/AuthZ information, sending requests,
+    and receiving responses.
     .
-    Use of lenses is required for constructing and manipulating types.
-    This is due to the amount of nesting of AWS types and transparency regarding
+    Lenses are used for constructing and manipulating types,
+    due to the depth 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" or <https://aws.amazon.com/documentation/ the AWS Documentation>
+    See "Network.AWS.S3" or <https://aws.amazon.com/documentation/ the AWS documentation>
     to get started.
 
 source-repository head
@@ -47,20 +46,27 @@
         , Network.AWS.S3.CreateBucket
         , Network.AWS.S3.CreateMultipartUpload
         , Network.AWS.S3.DeleteBucket
+        , Network.AWS.S3.DeleteBucketAnalyticsConfiguration
         , Network.AWS.S3.DeleteBucketCORS
+        , Network.AWS.S3.DeleteBucketInventoryConfiguration
         , Network.AWS.S3.DeleteBucketLifecycle
+        , Network.AWS.S3.DeleteBucketMetricsConfiguration
         , Network.AWS.S3.DeleteBucketPolicy
         , Network.AWS.S3.DeleteBucketReplication
         , Network.AWS.S3.DeleteBucketTagging
         , Network.AWS.S3.DeleteBucketWebsite
         , Network.AWS.S3.DeleteObject
+        , Network.AWS.S3.DeleteObjectTagging
         , Network.AWS.S3.DeleteObjects
         , Network.AWS.S3.GetBucketACL
         , Network.AWS.S3.GetBucketAccelerateConfiguration
+        , Network.AWS.S3.GetBucketAnalyticsConfiguration
         , Network.AWS.S3.GetBucketCORS
+        , Network.AWS.S3.GetBucketInventoryConfiguration
         , Network.AWS.S3.GetBucketLifecycleConfiguration
         , Network.AWS.S3.GetBucketLocation
         , Network.AWS.S3.GetBucketLogging
+        , Network.AWS.S3.GetBucketMetricsConfiguration
         , Network.AWS.S3.GetBucketNotificationConfiguration
         , Network.AWS.S3.GetBucketPolicy
         , Network.AWS.S3.GetBucketReplication
@@ -70,9 +76,13 @@
         , Network.AWS.S3.GetBucketWebsite
         , Network.AWS.S3.GetObject
         , Network.AWS.S3.GetObjectACL
+        , Network.AWS.S3.GetObjectTagging
         , Network.AWS.S3.GetObjectTorrent
         , Network.AWS.S3.HeadBucket
         , Network.AWS.S3.HeadObject
+        , Network.AWS.S3.ListBucketAnalyticsConfigurations
+        , Network.AWS.S3.ListBucketInventoryConfigurations
+        , Network.AWS.S3.ListBucketMetricsConfigurations
         , Network.AWS.S3.ListBuckets
         , Network.AWS.S3.ListMultipartUploads
         , Network.AWS.S3.ListObjectVersions
@@ -81,9 +91,12 @@
         , Network.AWS.S3.ListParts
         , Network.AWS.S3.PutBucketACL
         , Network.AWS.S3.PutBucketAccelerateConfiguration
+        , Network.AWS.S3.PutBucketAnalyticsConfiguration
         , Network.AWS.S3.PutBucketCORS
+        , Network.AWS.S3.PutBucketInventoryConfiguration
         , Network.AWS.S3.PutBucketLifecycleConfiguration
         , Network.AWS.S3.PutBucketLogging
+        , Network.AWS.S3.PutBucketMetricsConfiguration
         , Network.AWS.S3.PutBucketNotificationConfiguration
         , Network.AWS.S3.PutBucketPolicy
         , Network.AWS.S3.PutBucketReplication
@@ -93,6 +106,7 @@
         , Network.AWS.S3.PutBucketWebsite
         , Network.AWS.S3.PutObject
         , Network.AWS.S3.PutObjectACL
+        , Network.AWS.S3.PutObjectTagging
         , Network.AWS.S3.RestoreObject
         , Network.AWS.S3.Types
         , Network.AWS.S3.UploadPart
@@ -105,7 +119,7 @@
         , Network.AWS.S3.Types.Sum
 
     build-depends:
-          amazonka-core == 1.4.4.*
+          amazonka-core == 1.4.5.*
         , base          >= 4.7     && < 5
         , lens >= 4.4
         , text >= 1.1
@@ -127,9 +141,9 @@
         , Test.AWS.S3.Internal
 
     build-depends:
-          amazonka-core == 1.4.4.*
-        , amazonka-test == 1.4.4.*
-        , amazonka-s3 == 1.4.4.*
+          amazonka-core == 1.4.5.*
+        , amazonka-test == 1.4.5.*
+        , amazonka-s3 == 1.4.5.*
         , base
         , bytestring
         , tasty
diff --git a/fixture/DeleteBucketAnalyticsConfiguration.yaml b/fixture/DeleteBucketAnalyticsConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucketAnalyticsConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  s3.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteBucketAnalyticsConfigurationResponse.proto b/fixture/DeleteBucketAnalyticsConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucketAnalyticsConfigurationResponse.proto
diff --git a/fixture/DeleteBucketInventoryConfiguration.yaml b/fixture/DeleteBucketInventoryConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucketInventoryConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  s3.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteBucketInventoryConfigurationResponse.proto b/fixture/DeleteBucketInventoryConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucketInventoryConfigurationResponse.proto
diff --git a/fixture/DeleteBucketMetricsConfiguration.yaml b/fixture/DeleteBucketMetricsConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucketMetricsConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  s3.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteBucketMetricsConfigurationResponse.proto b/fixture/DeleteBucketMetricsConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucketMetricsConfigurationResponse.proto
diff --git a/fixture/DeleteObjectTagging.yaml b/fixture/DeleteObjectTagging.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteObjectTagging.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  s3.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteObjectTaggingResponse.proto b/fixture/DeleteObjectTaggingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteObjectTaggingResponse.proto
diff --git a/fixture/GetBucketAnalyticsConfiguration.yaml b/fixture/GetBucketAnalyticsConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketAnalyticsConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  s3.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetBucketAnalyticsConfigurationResponse.proto b/fixture/GetBucketAnalyticsConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketAnalyticsConfigurationResponse.proto
diff --git a/fixture/GetBucketInventoryConfiguration.yaml b/fixture/GetBucketInventoryConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketInventoryConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  s3.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetBucketInventoryConfigurationResponse.proto b/fixture/GetBucketInventoryConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketInventoryConfigurationResponse.proto
diff --git a/fixture/GetBucketMetricsConfiguration.yaml b/fixture/GetBucketMetricsConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketMetricsConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  s3.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetBucketMetricsConfigurationResponse.proto b/fixture/GetBucketMetricsConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketMetricsConfigurationResponse.proto
diff --git a/fixture/GetObjectTagging.yaml b/fixture/GetObjectTagging.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetObjectTagging.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  s3.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetObjectTaggingResponse.proto b/fixture/GetObjectTaggingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetObjectTaggingResponse.proto
diff --git a/fixture/ListBucketAnalyticsConfigurations.yaml b/fixture/ListBucketAnalyticsConfigurations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListBucketAnalyticsConfigurations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  s3.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListBucketAnalyticsConfigurationsResponse.proto b/fixture/ListBucketAnalyticsConfigurationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListBucketAnalyticsConfigurationsResponse.proto
diff --git a/fixture/ListBucketInventoryConfigurations.yaml b/fixture/ListBucketInventoryConfigurations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListBucketInventoryConfigurations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  s3.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListBucketInventoryConfigurationsResponse.proto b/fixture/ListBucketInventoryConfigurationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListBucketInventoryConfigurationsResponse.proto
diff --git a/fixture/ListBucketMetricsConfigurations.yaml b/fixture/ListBucketMetricsConfigurations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListBucketMetricsConfigurations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  s3.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListBucketMetricsConfigurationsResponse.proto b/fixture/ListBucketMetricsConfigurationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListBucketMetricsConfigurationsResponse.proto
diff --git a/fixture/PutBucketAnalyticsConfiguration.yaml b/fixture/PutBucketAnalyticsConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketAnalyticsConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  s3.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutBucketAnalyticsConfigurationResponse.proto b/fixture/PutBucketAnalyticsConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketAnalyticsConfigurationResponse.proto
diff --git a/fixture/PutBucketInventoryConfiguration.yaml b/fixture/PutBucketInventoryConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketInventoryConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  s3.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutBucketInventoryConfigurationResponse.proto b/fixture/PutBucketInventoryConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketInventoryConfigurationResponse.proto
diff --git a/fixture/PutBucketMetricsConfiguration.yaml b/fixture/PutBucketMetricsConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketMetricsConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  s3.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutBucketMetricsConfigurationResponse.proto b/fixture/PutBucketMetricsConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketMetricsConfigurationResponse.proto
diff --git a/fixture/PutObjectTagging.yaml b/fixture/PutObjectTagging.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutObjectTagging.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  s3.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutObjectTaggingResponse.proto b/fixture/PutObjectTaggingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutObjectTaggingResponse.proto
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
@@ -71,6 +71,9 @@
     -- ** PutBucketLogging
     , module Network.AWS.S3.PutBucketLogging
 
+    -- ** GetBucketMetricsConfiguration
+    , module Network.AWS.S3.GetBucketMetricsConfiguration
+
     -- ** ListBuckets
     , module Network.AWS.S3.ListBuckets
 
@@ -89,15 +92,33 @@
     -- ** PutBucketTagging
     , module Network.AWS.S3.PutBucketTagging
 
+    -- ** GetBucketInventoryConfiguration
+    , module Network.AWS.S3.GetBucketInventoryConfiguration
+
+    -- ** PutBucketInventoryConfiguration
+    , module Network.AWS.S3.PutBucketInventoryConfiguration
+
     -- ** GetBucketLocation
     , module Network.AWS.S3.GetBucketLocation
 
+    -- ** ListBucketInventoryConfigurations
+    , module Network.AWS.S3.ListBucketInventoryConfigurations
+
+    -- ** DeleteBucketInventoryConfiguration
+    , module Network.AWS.S3.DeleteBucketInventoryConfiguration
+
     -- ** GetBucketNotificationConfiguration
     , module Network.AWS.S3.GetBucketNotificationConfiguration
 
     -- ** PutBucketAccelerateConfiguration
     , module Network.AWS.S3.PutBucketAccelerateConfiguration
 
+    -- ** PutBucketMetricsConfiguration
+    , module Network.AWS.S3.PutBucketMetricsConfiguration
+
+    -- ** DeleteBucketMetricsConfiguration
+    , module Network.AWS.S3.DeleteBucketMetricsConfiguration
+
     -- ** ListObjectsV
     , module Network.AWS.S3.ListObjectsV
 
@@ -128,6 +149,15 @@
     -- ** PutBucketLifecycleConfiguration
     , module Network.AWS.S3.PutBucketLifecycleConfiguration
 
+    -- ** PutBucketAnalyticsConfiguration
+    , module Network.AWS.S3.PutBucketAnalyticsConfiguration
+
+    -- ** ListBucketAnalyticsConfigurations
+    , module Network.AWS.S3.ListBucketAnalyticsConfigurations
+
+    -- ** DeleteBucketAnalyticsConfiguration
+    , module Network.AWS.S3.DeleteBucketAnalyticsConfiguration
+
     -- ** CreateMultipartUpload
     , module Network.AWS.S3.CreateMultipartUpload
 
@@ -203,6 +233,9 @@
     -- ** CopyObject
     , module Network.AWS.S3.CopyObject
 
+    -- ** ListBucketMetricsConfigurations
+    , module Network.AWS.S3.ListBucketMetricsConfigurations
+
     -- ** GetBucketPolicy
     , module Network.AWS.S3.GetBucketPolicy
 
@@ -215,20 +248,35 @@
     -- ** GetBucketLifecycleConfiguration
     , module Network.AWS.S3.GetBucketLifecycleConfiguration
 
+    -- ** GetBucketAnalyticsConfiguration
+    , module Network.AWS.S3.GetBucketAnalyticsConfiguration
+
+    -- ** GetObjectTagging
+    , module Network.AWS.S3.GetObjectTagging
+
     -- ** ListParts (Paginated)
     , module Network.AWS.S3.ListParts
 
+    -- ** DeleteObjectTagging
+    , module Network.AWS.S3.DeleteObjectTagging
+
     -- ** UploadPartCopy
     , module Network.AWS.S3.UploadPartCopy
 
+    -- ** PutObjectTagging
+    , module Network.AWS.S3.PutObjectTagging
+
     -- ** PutBucketACL
     , module Network.AWS.S3.PutBucketACL
 
     -- * Types
 
-    -- ** Re-exported Types
+    -- ** Common
     , module Network.AWS.S3.Internal
 
+    -- ** AnalyticsS3ExportFileFormat
+    , AnalyticsS3ExportFileFormat (..)
+
     -- ** BucketAccelerateStatus
     , BucketAccelerateStatus (..)
 
@@ -253,6 +301,18 @@
     -- ** FilterRuleName
     , FilterRuleName (..)
 
+    -- ** InventoryFormat
+    , InventoryFormat (..)
+
+    -- ** InventoryFrequency
+    , InventoryFrequency (..)
+
+    -- ** InventoryIncludedObjectVersions
+    , InventoryIncludedObjectVersions (..)
+
+    -- ** InventoryOptionalField
+    , InventoryOptionalField (..)
+
     -- ** MFADelete
     , MFADelete (..)
 
@@ -298,6 +358,15 @@
     -- ** StorageClass
     , StorageClass (..)
 
+    -- ** StorageClassAnalysisSchemaVersion
+    , StorageClassAnalysisSchemaVersion (..)
+
+    -- ** TaggingDirective
+    , TaggingDirective (..)
+
+    -- ** Tier
+    , Tier (..)
+
     -- ** TransitionStorageClass
     , TransitionStorageClass (..)
 
@@ -320,6 +389,39 @@
     , acpGrants
     , acpOwner
 
+    -- ** AnalyticsAndOperator
+    , AnalyticsAndOperator
+    , analyticsAndOperator
+    , aaoPrefix
+    , aaoTags
+
+    -- ** AnalyticsConfiguration
+    , AnalyticsConfiguration
+    , analyticsConfiguration
+    , acFilter
+    , acId
+    , acStorageClassAnalysis
+
+    -- ** AnalyticsExportDestination
+    , AnalyticsExportDestination
+    , analyticsExportDestination
+    , aedS3BucketDestination
+
+    -- ** AnalyticsFilter
+    , AnalyticsFilter
+    , analyticsFilter
+    , afTag
+    , afPrefix
+    , afAnd
+
+    -- ** AnalyticsS3BucketDestination
+    , AnalyticsS3BucketDestination
+    , analyticsS3BucketDestination
+    , asbdBucketAccountId
+    , asbdPrefix
+    , asbdFormat
+    , asbdBucket
+
     -- ** Bucket
     , Bucket
     , bucket
@@ -429,6 +531,11 @@
     , frValue
     , frName
 
+    -- ** GlacierJobParameters
+    , GlacierJobParameters
+    , glacierJobParameters
+    , gjpTier
+
     -- ** Grant
     , Grant
     , grant
@@ -455,6 +562,40 @@
     , iDisplayName
     , iId
 
+    -- ** InventoryConfiguration
+    , InventoryConfiguration
+    , inventoryConfiguration
+    , icOptionalFields
+    , icFilter
+    , icDestination
+    , icIsEnabled
+    , icId
+    , icIncludedObjectVersions
+    , icSchedule
+
+    -- ** InventoryDestination
+    , InventoryDestination
+    , inventoryDestination
+    , idS3BucketDestination
+
+    -- ** InventoryFilter
+    , InventoryFilter
+    , inventoryFilter
+    , ifPrefix
+
+    -- ** InventoryS3BucketDestination
+    , InventoryS3BucketDestination
+    , inventoryS3BucketDestination
+    , isbdPrefix
+    , isbdAccountId
+    , isbdBucket
+    , isbdFormat
+
+    -- ** InventorySchedule
+    , InventorySchedule
+    , inventorySchedule
+    , isFrequency
+
     -- ** LambdaFunctionConfiguration
     , LambdaFunctionConfiguration
     , lambdaFunctionConfiguration
@@ -475,13 +616,27 @@
     , lifecycleRule
     , lrTransitions
     , lrNoncurrentVersionExpiration
+    , lrPrefix
     , lrNoncurrentVersionTransitions
     , lrExpiration
     , lrId
+    , lrFilter
     , lrAbortIncompleteMultipartUpload
-    , lrPrefix
     , lrStatus
 
+    -- ** LifecycleRuleAndOperator
+    , LifecycleRuleAndOperator
+    , lifecycleRuleAndOperator
+    , lraoPrefix
+    , lraoTags
+
+    -- ** LifecycleRuleFilter
+    , LifecycleRuleFilter
+    , lifecycleRuleFilter
+    , lrfTag
+    , lrfPrefix
+    , lrfAnd
+
     -- ** LoggingEnabled
     , LoggingEnabled
     , loggingEnabled
@@ -489,6 +644,25 @@
     , leTargetGrants
     , leTargetPrefix
 
+    -- ** MetricsAndOperator
+    , MetricsAndOperator
+    , metricsAndOperator
+    , maoPrefix
+    , maoTags
+
+    -- ** MetricsConfiguration
+    , MetricsConfiguration
+    , metricsConfiguration
+    , mcFilter
+    , mcId
+
+    -- ** MetricsFilter
+    , MetricsFilter
+    , metricsFilter
+    , mfTag
+    , mfPrefix
+    , mfAnd
+
     -- ** MultipartUpload
     , MultipartUpload
     , multipartUpload
@@ -609,6 +783,7 @@
     -- ** RestoreRequest
     , RestoreRequest
     , restoreRequest
+    , rrGlacierJobParameters
     , rrDays
 
     -- ** RoutingRule
@@ -630,6 +805,17 @@
     , sseCode
     , sseMessage
 
+    -- ** StorageClassAnalysis
+    , StorageClassAnalysis
+    , storageClassAnalysis
+    , scaDataExport
+
+    -- ** StorageClassAnalysisDataExport
+    , StorageClassAnalysisDataExport
+    , storageClassAnalysisDataExport
+    , scadeOutputSchemaVersion
+    , scadeDestination
+
     -- ** Tag
     , Tag
     , tag
@@ -683,20 +869,27 @@
 import           Network.AWS.S3.CreateBucket
 import           Network.AWS.S3.CreateMultipartUpload
 import           Network.AWS.S3.DeleteBucket
+import           Network.AWS.S3.DeleteBucketAnalyticsConfiguration
 import           Network.AWS.S3.DeleteBucketCORS
+import           Network.AWS.S3.DeleteBucketInventoryConfiguration
 import           Network.AWS.S3.DeleteBucketLifecycle
+import           Network.AWS.S3.DeleteBucketMetricsConfiguration
 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.DeleteObjectTagging
 import           Network.AWS.S3.GetBucketAccelerateConfiguration
 import           Network.AWS.S3.GetBucketACL
+import           Network.AWS.S3.GetBucketAnalyticsConfiguration
 import           Network.AWS.S3.GetBucketCORS
+import           Network.AWS.S3.GetBucketInventoryConfiguration
 import           Network.AWS.S3.GetBucketLifecycleConfiguration
 import           Network.AWS.S3.GetBucketLocation
 import           Network.AWS.S3.GetBucketLogging
+import           Network.AWS.S3.GetBucketMetricsConfiguration
 import           Network.AWS.S3.GetBucketNotificationConfiguration
 import           Network.AWS.S3.GetBucketPolicy
 import           Network.AWS.S3.GetBucketReplication
@@ -706,10 +899,14 @@
 import           Network.AWS.S3.GetBucketWebsite
 import           Network.AWS.S3.GetObject
 import           Network.AWS.S3.GetObjectACL
+import           Network.AWS.S3.GetObjectTagging
 import           Network.AWS.S3.GetObjectTorrent
 import           Network.AWS.S3.HeadBucket
 import           Network.AWS.S3.HeadObject
 import           Network.AWS.S3.Internal
+import           Network.AWS.S3.ListBucketAnalyticsConfigurations
+import           Network.AWS.S3.ListBucketInventoryConfigurations
+import           Network.AWS.S3.ListBucketMetricsConfigurations
 import           Network.AWS.S3.ListBuckets
 import           Network.AWS.S3.ListMultipartUploads
 import           Network.AWS.S3.ListObjects
@@ -718,9 +915,12 @@
 import           Network.AWS.S3.ListParts
 import           Network.AWS.S3.PutBucketAccelerateConfiguration
 import           Network.AWS.S3.PutBucketACL
+import           Network.AWS.S3.PutBucketAnalyticsConfiguration
 import           Network.AWS.S3.PutBucketCORS
+import           Network.AWS.S3.PutBucketInventoryConfiguration
 import           Network.AWS.S3.PutBucketLifecycleConfiguration
 import           Network.AWS.S3.PutBucketLogging
+import           Network.AWS.S3.PutBucketMetricsConfiguration
 import           Network.AWS.S3.PutBucketNotificationConfiguration
 import           Network.AWS.S3.PutBucketPolicy
 import           Network.AWS.S3.PutBucketReplication
@@ -730,6 +930,7 @@
 import           Network.AWS.S3.PutBucketWebsite
 import           Network.AWS.S3.PutObject
 import           Network.AWS.S3.PutObjectACL
+import           Network.AWS.S3.PutObjectTagging
 import           Network.AWS.S3.RestoreObject
 import           Network.AWS.S3.Types
 import           Network.AWS.S3.UploadPart
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
@@ -20,7 +20,9 @@
 --
 -- 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.
+--
 module Network.AWS.S3.AbortMultipartUpload
     (
     -- * Creating a Request
@@ -59,13 +61,13 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'amuRequestPayer'
+-- * 'amuRequestPayer' - Undocumented member.
 --
--- * 'amuBucket'
+-- * 'amuBucket' - Undocumented member.
 --
--- * 'amuKey'
+-- * 'amuKey' - Undocumented member.
 --
--- * 'amuUploadId'
+-- * 'amuUploadId' - Undocumented member.
 abortMultipartUpload
     :: BucketName -- ^ 'amuBucket'
     -> ObjectKey -- ^ 'amuKey'
@@ -132,9 +134,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'amursRequestCharged'
+-- * 'amursRequestCharged' - Undocumented member.
 --
--- * 'amursResponseStatus'
+-- * 'amursResponseStatus' - -- | The response status code.
 abortMultipartUploadResponse
     :: Int -- ^ 'amursResponseStatus'
     -> AbortMultipartUploadResponse
@@ -148,7 +150,7 @@
 amursRequestCharged :: Lens' AbortMultipartUploadResponse (Maybe RequestCharged)
 amursRequestCharged = lens _amursRequestCharged (\ s a -> s{_amursRequestCharged = a});
 
--- | The response status code.
+-- | -- | The response status code.
 amursResponseStatus :: Lens' AbortMultipartUploadResponse Int
 amursResponseStatus = lens _amursResponseStatus (\ s a -> s{_amursResponseStatus = 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
@@ -67,15 +67,15 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cRequestPayer'
+-- * 'cRequestPayer' - Undocumented member.
 --
--- * 'cMultipartUpload'
+-- * 'cMultipartUpload' - Undocumented member.
 --
--- * 'cBucket'
+-- * 'cBucket' - Undocumented member.
 --
--- * 'cKey'
+-- * 'cKey' - Undocumented member.
 --
--- * 'cUploadId'
+-- * 'cUploadId' - Undocumented member.
 completeMultipartUpload
     :: BucketName -- ^ 'cBucket'
     -> ObjectKey -- ^ 'cKey'
@@ -170,25 +170,25 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'crsRequestCharged'
+-- * 'crsRequestCharged' - Undocumented member.
 --
--- * 'crsETag'
+-- * 'crsETag' - Entity tag of the object.
 --
--- * 'crsVersionId'
+-- * 'crsVersionId' - Version of the object.
 --
--- * 'crsLocation'
+-- * 'crsLocation' - Undocumented member.
 --
--- * 'crsExpiration'
+-- * 'crsExpiration' - 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.
 --
--- * 'crsBucket'
+-- * 'crsBucket' - Undocumented member.
 --
--- * 'crsKey'
+-- * 'crsKey' - Undocumented member.
 --
--- * 'crsSSEKMSKeyId'
+-- * 'crsSSEKMSKeyId' - If present, specifies the ID of the AWS Key Management Service (KMS) master encryption key that was used for the object.
 --
--- * 'crsServerSideEncryption'
+-- * 'crsServerSideEncryption' - The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 --
--- * 'crsResponseStatus'
+-- * 'crsResponseStatus' - -- | The response status code.
 completeMultipartUploadResponse
     :: Int -- ^ 'crsResponseStatus'
     -> CompleteMultipartUploadResponse
@@ -242,7 +242,7 @@
 crsServerSideEncryption :: Lens' CompleteMultipartUploadResponse (Maybe ServerSideEncryption)
 crsServerSideEncryption = lens _crsServerSideEncryption (\ s a -> s{_crsServerSideEncryption = a});
 
--- | The response status code.
+-- | -- | The response status code.
 crsResponseStatus :: Lens' CompleteMultipartUploadResponse Int
 crsResponseStatus = lens _crsResponseStatus (\ s a -> s{_crsResponseStatus = 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
@@ -28,6 +28,7 @@
     , coCopySourceIfModifiedSince
     , coCopySourceIfUnmodifiedSince
     , coCopySourceSSECustomerKeyMD5
+    , coTaggingDirective
     , coMetadataDirective
     , coExpires
     , coGrantReadACP
@@ -44,6 +45,7 @@
     , coSSEKMSKeyId
     , coGrantFullControl
     , coContentEncoding
+    , coTagging
     , coMetadata
     , coCacheControl
     , coContentLanguage
@@ -85,6 +87,7 @@
     { _coCopySourceIfModifiedSince      :: !(Maybe RFC822)
     , _coCopySourceIfUnmodifiedSince    :: !(Maybe RFC822)
     , _coCopySourceSSECustomerKeyMD5    :: !(Maybe Text)
+    , _coTaggingDirective               :: !(Maybe TaggingDirective)
     , _coMetadataDirective              :: !(Maybe MetadataDirective)
     , _coExpires                        :: !(Maybe RFC822)
     , _coGrantReadACP                   :: !(Maybe Text)
@@ -101,6 +104,7 @@
     , _coSSEKMSKeyId                    :: !(Maybe (Sensitive Text))
     , _coGrantFullControl               :: !(Maybe Text)
     , _coContentEncoding                :: !(Maybe Text)
+    , _coTagging                        :: !(Maybe Text)
     , _coMetadata                       :: !(Map Text Text)
     , _coCacheControl                   :: !(Maybe Text)
     , _coContentLanguage                :: !(Maybe Text)
@@ -119,67 +123,71 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'coCopySourceIfModifiedSince'
+-- * 'coCopySourceIfModifiedSince' - Copies the object if it has been modified since the specified time.
 --
--- * 'coCopySourceIfUnmodifiedSince'
+-- * 'coCopySourceIfUnmodifiedSince' - Copies the object if it hasn't been modified since the specified time.
 --
--- * 'coCopySourceSSECustomerKeyMD5'
+-- * 'coCopySourceSSECustomerKeyMD5' - 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.
 --
--- * 'coMetadataDirective'
+-- * 'coTaggingDirective' - Specifies whether the object tag-set are copied from the source object or replaced with tag-set provided in the request.
 --
--- * 'coExpires'
+-- * 'coMetadataDirective' - Specifies whether the metadata is copied from the source object or replaced with metadata provided in the request.
 --
--- * 'coGrantReadACP'
+-- * 'coExpires' - The date and time at which the object is no longer cacheable.
 --
--- * 'coCopySourceIfNoneMatch'
+-- * 'coGrantReadACP' - Allows grantee to read the object ACL.
 --
--- * 'coSSECustomerAlgorithm'
+-- * 'coCopySourceIfNoneMatch' - Copies the object if its entity tag (ETag) is different than the specified ETag.
 --
--- * 'coSSECustomerKey'
+-- * 'coSSECustomerAlgorithm' - Specifies the algorithm to use to when encrypting the object (e.g., AES256).
 --
--- * 'coRequestPayer'
+-- * 'coSSECustomerKey' - 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.
 --
--- * 'coGrantWriteACP'
+-- * 'coRequestPayer' - Undocumented member.
 --
--- * 'coCopySourceIfMatch'
+-- * 'coGrantWriteACP' - Allows grantee to write the ACL for the applicable object.
 --
--- * 'coWebsiteRedirectLocation'
+-- * 'coCopySourceIfMatch' - Copies the object if its entity tag (ETag) matches the specified tag.
 --
--- * 'coGrantRead'
+-- * 'coWebsiteRedirectLocation' - 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.
 --
--- * 'coStorageClass'
+-- * 'coGrantRead' - Allows grantee to read the object data and its metadata.
 --
--- * 'coSSECustomerKeyMD5'
+-- * 'coStorageClass' - The type of storage to use for the object. Defaults to 'STANDARD'.
 --
--- * 'coSSEKMSKeyId'
+-- * 'coSSECustomerKeyMD5' - 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.
 --
--- * 'coGrantFullControl'
+-- * 'coSSEKMSKeyId' - 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
 --
--- * 'coContentEncoding'
+-- * 'coGrantFullControl' - Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.
 --
--- * 'coMetadata'
+-- * 'coContentEncoding' - 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.
 --
--- * 'coCacheControl'
+-- * 'coTagging' - The tag-set for the object destination object this value must be used in conjunction with the TaggingDirective. The tag-set must be encoded as URL Query parameters
 --
--- * 'coContentLanguage'
+-- * 'coMetadata' - A map of metadata to store with the object in S3.
 --
--- * 'coCopySourceSSECustomerKey'
+-- * 'coCacheControl' - Specifies caching behavior along the request/reply chain.
 --
--- * 'coCopySourceSSECustomerAlgorithm'
+-- * 'coContentLanguage' - The language the content is in.
 --
--- * 'coACL'
+-- * 'coCopySourceSSECustomerKey' - 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.
 --
--- * 'coContentDisposition'
+-- * 'coCopySourceSSECustomerAlgorithm' - Specifies the algorithm to use when decrypting the source object (e.g., AES256).
 --
--- * 'coServerSideEncryption'
+-- * 'coACL' - The canned ACL to apply to the object.
 --
--- * 'coContentType'
+-- * 'coContentDisposition' - Specifies presentational information for the object.
 --
--- * 'coBucket'
+-- * 'coServerSideEncryption' - The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 --
--- * 'coCopySource'
+-- * 'coContentType' - A standard MIME type describing the format of the object data.
 --
--- * 'coKey'
+-- * 'coBucket' - Undocumented member.
+--
+-- * 'coCopySource' - The name of the source bucket and key name of the source object, separated by a slash (/). Must be URL-encoded.
+--
+-- * 'coKey' - Undocumented member.
 copyObject
     :: BucketName -- ^ 'coBucket'
     -> Text -- ^ 'coCopySource'
@@ -190,6 +198,7 @@
     { _coCopySourceIfModifiedSince = Nothing
     , _coCopySourceIfUnmodifiedSince = Nothing
     , _coCopySourceSSECustomerKeyMD5 = Nothing
+    , _coTaggingDirective = Nothing
     , _coMetadataDirective = Nothing
     , _coExpires = Nothing
     , _coGrantReadACP = Nothing
@@ -206,6 +215,7 @@
     , _coSSEKMSKeyId = Nothing
     , _coGrantFullControl = Nothing
     , _coContentEncoding = Nothing
+    , _coTagging = Nothing
     , _coMetadata = mempty
     , _coCacheControl = Nothing
     , _coContentLanguage = Nothing
@@ -224,7 +234,7 @@
 coCopySourceIfModifiedSince :: Lens' CopyObject (Maybe UTCTime)
 coCopySourceIfModifiedSince = lens _coCopySourceIfModifiedSince (\ s a -> s{_coCopySourceIfModifiedSince = 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.
 coCopySourceIfUnmodifiedSince :: Lens' CopyObject (Maybe UTCTime)
 coCopySourceIfUnmodifiedSince = lens _coCopySourceIfUnmodifiedSince (\ s a -> s{_coCopySourceIfUnmodifiedSince = a}) . mapping _Time;
 
@@ -232,6 +242,10 @@
 coCopySourceSSECustomerKeyMD5 :: Lens' CopyObject (Maybe Text)
 coCopySourceSSECustomerKeyMD5 = lens _coCopySourceSSECustomerKeyMD5 (\ s a -> s{_coCopySourceSSECustomerKeyMD5 = a});
 
+-- | Specifies whether the object tag-set are copied from the source object or replaced with tag-set provided in the request.
+coTaggingDirective :: Lens' CopyObject (Maybe TaggingDirective)
+coTaggingDirective = lens _coTaggingDirective (\ s a -> s{_coTaggingDirective = 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});
@@ -276,7 +290,7 @@
 coGrantRead :: Lens' CopyObject (Maybe Text)
 coGrantRead = lens _coGrantRead (\ s a -> s{_coGrantRead = a});
 
--- | The type of storage to use for the object. Defaults to \'STANDARD\'.
+-- | 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});
 
@@ -284,7 +298,7 @@
 coSSECustomerKeyMD5 :: Lens' CopyObject (Maybe Text)
 coSSECustomerKeyMD5 = lens _coSSECustomerKeyMD5 (\ s a -> s{_coSSECustomerKeyMD5 = 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
+-- | 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;
 
@@ -296,11 +310,15 @@
 coContentEncoding :: Lens' CopyObject (Maybe Text)
 coContentEncoding = lens _coContentEncoding (\ s a -> s{_coContentEncoding = a});
 
+-- | The tag-set for the object destination object this value must be used in conjunction with the TaggingDirective. The tag-set must be encoded as URL Query parameters
+coTagging :: Lens' CopyObject (Maybe Text)
+coTagging = lens _coTagging (\ s a -> s{_coTagging = a});
+
 -- | A map of metadata to store with the object in S3.
 coMetadata :: Lens' CopyObject (HashMap Text Text)
 coMetadata = lens _coMetadata (\ s a -> s{_coMetadata = a}) . _Map;
 
--- | Specifies caching behavior along the request\/reply chain.
+-- | Specifies caching behavior along the request/reply chain.
 coCacheControl :: Lens' CopyObject (Maybe Text)
 coCacheControl = lens _coCacheControl (\ s a -> s{_coCacheControl = a});
 
@@ -336,7 +354,7 @@
 coBucket :: Lens' CopyObject BucketName
 coBucket = lens _coBucket (\ s a -> s{_coBucket = a});
 
--- | The name of the source bucket and key name of the source object, separated by a slash (\/). Must be URL-encoded.
+-- | 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});
 
@@ -380,6 +398,7 @@
                  _coCopySourceIfUnmodifiedSince,
                "x-amz-copy-source-server-side-encryption-customer-key-MD5"
                  =# _coCopySourceSSECustomerKeyMD5,
+               "x-amz-tagging-directive" =# _coTaggingDirective,
                "x-amz-metadata-directive" =# _coMetadataDirective,
                "Expires" =# _coExpires,
                "x-amz-grant-read-acp" =# _coGrantReadACP,
@@ -402,6 +421,7 @@
                  _coSSEKMSKeyId,
                "x-amz-grant-full-control" =# _coGrantFullControl,
                "Content-Encoding" =# _coContentEncoding,
+               "x-amz-tagging" =# _coTagging,
                "x-amz-meta-" =# _coMetadata,
                "Cache-Control" =# _coCacheControl,
                "Content-Language" =# _coContentLanguage,
@@ -441,25 +461,25 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'corsRequestCharged'
+-- * 'corsRequestCharged' - Undocumented member.
 --
--- * 'corsVersionId'
+-- * 'corsVersionId' - Version ID of the newly created copy.
 --
--- * 'corsExpiration'
+-- * 'corsExpiration' - If the object expiration is configured, the response includes this header.
 --
--- * 'corsSSECustomerAlgorithm'
+-- * 'corsSSECustomerAlgorithm' - If server-side encryption with a customer-provided encryption key was requested, the response will include this header confirming the encryption algorithm used.
 --
--- * 'corsCopySourceVersionId'
+-- * 'corsCopySourceVersionId' - Undocumented member.
 --
--- * 'corsSSECustomerKeyMD5'
+-- * 'corsSSECustomerKeyMD5' - 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.
 --
--- * 'corsSSEKMSKeyId'
+-- * 'corsSSEKMSKeyId' - If present, specifies the ID of the AWS Key Management Service (KMS) master encryption key that was used for the object.
 --
--- * 'corsServerSideEncryption'
+-- * 'corsServerSideEncryption' - The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 --
--- * 'corsCopyObjectResult'
+-- * 'corsCopyObjectResult' - Undocumented member.
 --
--- * 'corsResponseStatus'
+-- * 'corsResponseStatus' - -- | The response status code.
 copyObjectResponse
     :: Int -- ^ 'corsResponseStatus'
     -> CopyObjectResponse
@@ -513,7 +533,7 @@
 corsCopyObjectResult :: Lens' CopyObjectResponse (Maybe CopyObjectResult)
 corsCopyObjectResult = lens _corsCopyObjectResult (\ s a -> s{_corsCopyObjectResult = a});
 
--- | The response status code.
+-- | -- | The response status code.
 corsResponseStatus :: Lens' CopyObjectResponse Int
 corsResponseStatus = lens _corsResponseStatus (\ s a -> s{_corsResponseStatus = 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
@@ -65,21 +65,21 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cbGrantReadACP'
+-- * 'cbGrantReadACP' - Allows grantee to read the bucket ACL.
 --
--- * 'cbGrantWriteACP'
+-- * 'cbGrantWriteACP' - Allows grantee to write the ACL for the applicable bucket.
 --
--- * 'cbGrantRead'
+-- * 'cbGrantRead' - Allows grantee to list the objects in the bucket.
 --
--- * 'cbGrantFullControl'
+-- * 'cbGrantFullControl' - Allows grantee the read, write, read ACP, and write ACP permissions on the bucket.
 --
--- * 'cbCreateBucketConfiguration'
+-- * 'cbCreateBucketConfiguration' - Undocumented member.
 --
--- * 'cbGrantWrite'
+-- * 'cbGrantWrite' - Allows grantee to create, overwrite, and delete any object in the bucket.
 --
--- * 'cbACL'
+-- * 'cbACL' - The canned ACL to apply to the bucket.
 --
--- * 'cbBucket'
+-- * 'cbBucket' - Undocumented member.
 createBucket
     :: BucketName -- ^ 'cbBucket'
     -> CreateBucket
@@ -174,9 +174,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cbrsLocation'
+-- * 'cbrsLocation' - Undocumented member.
 --
--- * 'cbrsResponseStatus'
+-- * 'cbrsResponseStatus' - -- | The response status code.
 createBucketResponse
     :: Int -- ^ 'cbrsResponseStatus'
     -> CreateBucketResponse
@@ -190,7 +190,7 @@
 cbrsLocation :: Lens' CreateBucketResponse (Maybe Text)
 cbrsLocation = lens _cbrsLocation (\ s a -> s{_cbrsLocation = a});
 
--- | The response status code.
+-- | -- | The response status code.
 cbrsResponseStatus :: Lens' CreateBucketResponse Int
 cbrsResponseStatus = lens _cbrsResponseStatus (\ s a -> s{_cbrsResponseStatus = 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
@@ -20,7 +20,9 @@
 --
 -- 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.
+--
 module Network.AWS.S3.CreateMultipartUpload
     (
     -- * Creating a Request
@@ -104,49 +106,49 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cmuExpires'
+-- * 'cmuExpires' - The date and time at which the object is no longer cacheable.
 --
--- * 'cmuGrantReadACP'
+-- * 'cmuGrantReadACP' - Allows grantee to read the object ACL.
 --
--- * 'cmuSSECustomerAlgorithm'
+-- * 'cmuSSECustomerAlgorithm' - Specifies the algorithm to use to when encrypting the object (e.g., AES256).
 --
--- * 'cmuSSECustomerKey'
+-- * 'cmuSSECustomerKey' - 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.
 --
--- * 'cmuRequestPayer'
+-- * 'cmuRequestPayer' - Undocumented member.
 --
--- * 'cmuGrantWriteACP'
+-- * 'cmuGrantWriteACP' - Allows grantee to write the ACL for the applicable object.
 --
--- * 'cmuWebsiteRedirectLocation'
+-- * 'cmuWebsiteRedirectLocation' - 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.
 --
--- * 'cmuGrantRead'
+-- * 'cmuGrantRead' - Allows grantee to read the object data and its metadata.
 --
--- * 'cmuStorageClass'
+-- * 'cmuStorageClass' - The type of storage to use for the object. Defaults to 'STANDARD'.
 --
--- * 'cmuSSECustomerKeyMD5'
+-- * 'cmuSSECustomerKeyMD5' - 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.
 --
--- * 'cmuSSEKMSKeyId'
+-- * 'cmuSSEKMSKeyId' - 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
 --
--- * 'cmuGrantFullControl'
+-- * 'cmuGrantFullControl' - Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.
 --
--- * 'cmuContentEncoding'
+-- * 'cmuContentEncoding' - 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.
 --
--- * 'cmuMetadata'
+-- * 'cmuMetadata' - A map of metadata to store with the object in S3.
 --
--- * 'cmuCacheControl'
+-- * 'cmuCacheControl' - Specifies caching behavior along the request/reply chain.
 --
--- * 'cmuContentLanguage'
+-- * 'cmuContentLanguage' - The language the content is in.
 --
--- * 'cmuACL'
+-- * 'cmuACL' - The canned ACL to apply to the object.
 --
--- * 'cmuContentDisposition'
+-- * 'cmuContentDisposition' - Specifies presentational information for the object.
 --
--- * 'cmuServerSideEncryption'
+-- * 'cmuServerSideEncryption' - The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 --
--- * 'cmuContentType'
+-- * 'cmuContentType' - A standard MIME type describing the format of the object data.
 --
--- * 'cmuBucket'
+-- * 'cmuBucket' - Undocumented member.
 --
--- * 'cmuKey'
+-- * 'cmuKey' - Undocumented member.
 createMultipartUpload
     :: BucketName -- ^ 'cmuBucket'
     -> ObjectKey -- ^ 'cmuKey'
@@ -209,7 +211,7 @@
 cmuGrantRead :: Lens' CreateMultipartUpload (Maybe Text)
 cmuGrantRead = lens _cmuGrantRead (\ s a -> s{_cmuGrantRead = a});
 
--- | The type of storage to use for the object. Defaults to \'STANDARD\'.
+-- | 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});
 
@@ -217,7 +219,7 @@
 cmuSSECustomerKeyMD5 :: Lens' CreateMultipartUpload (Maybe Text)
 cmuSSECustomerKeyMD5 = lens _cmuSSECustomerKeyMD5 (\ s a -> s{_cmuSSECustomerKeyMD5 = 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
+-- | 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;
 
@@ -233,7 +235,7 @@
 cmuMetadata :: Lens' CreateMultipartUpload (HashMap Text Text)
 cmuMetadata = lens _cmuMetadata (\ s a -> s{_cmuMetadata = a}) . _Map;
 
--- | Specifies caching behavior along the request\/reply chain.
+-- | Specifies caching behavior along the request/reply chain.
 cmuCacheControl :: Lens' CreateMultipartUpload (Maybe Text)
 cmuCacheControl = lens _cmuCacheControl (\ s a -> s{_cmuCacheControl = a});
 
@@ -349,27 +351,27 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cmursRequestCharged'
+-- * 'cmursRequestCharged' - Undocumented member.
 --
--- * 'cmursBucket'
+-- * 'cmursBucket' - Name of the bucket to which the multipart upload was initiated.
 --
--- * 'cmursSSECustomerAlgorithm'
+-- * 'cmursSSECustomerAlgorithm' - If server-side encryption with a customer-provided encryption key was requested, the response will include this header confirming the encryption algorithm used.
 --
--- * 'cmursAbortDate'
+-- * 'cmursAbortDate' - Date when multipart upload will become eligible for abort operation by lifecycle.
 --
--- * 'cmursAbortRuleId'
+-- * 'cmursAbortRuleId' - Id of the lifecycle rule that makes a multipart upload eligible for abort operation.
 --
--- * 'cmursKey'
+-- * 'cmursKey' - Object key for which the multipart upload was initiated.
 --
--- * 'cmursSSECustomerKeyMD5'
+-- * 'cmursSSECustomerKeyMD5' - 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.
 --
--- * 'cmursSSEKMSKeyId'
+-- * 'cmursSSEKMSKeyId' - If present, specifies the ID of the AWS Key Management Service (KMS) master encryption key that was used for the object.
 --
--- * 'cmursUploadId'
+-- * 'cmursUploadId' - ID for the initiated multipart upload.
 --
--- * 'cmursServerSideEncryption'
+-- * 'cmursServerSideEncryption' - The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 --
--- * 'cmursResponseStatus'
+-- * 'cmursResponseStatus' - -- | The response status code.
 createMultipartUploadResponse
     :: Int -- ^ 'cmursResponseStatus'
     -> CreateMultipartUploadResponse
@@ -428,7 +430,7 @@
 cmursServerSideEncryption :: Lens' CreateMultipartUploadResponse (Maybe ServerSideEncryption)
 cmursServerSideEncryption = lens _cmursServerSideEncryption (\ s a -> s{_cmursServerSideEncryption = a});
 
--- | The response status code.
+-- | -- | The response status code.
 cmursResponseStatus :: Lens' CreateMultipartUploadResponse Int
 cmursResponseStatus = lens _cmursResponseStatus (\ s a -> s{_cmursResponseStatus = 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
@@ -48,7 +48,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dbBucket'
+-- * 'dbBucket' - Undocumented member.
 deleteBucket
     :: BucketName -- ^ 'dbBucket'
     -> DeleteBucket
diff --git a/gen/Network/AWS/S3/DeleteBucketAnalyticsConfiguration.hs b/gen/Network/AWS/S3/DeleteBucketAnalyticsConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/DeleteBucketAnalyticsConfiguration.hs
@@ -0,0 +1,114 @@
+{-# 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.DeleteBucketAnalyticsConfiguration
+-- Copyright   : (c) 2013-2016 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 an analytics configuration for the bucket (specified by the analytics configuration ID).
+module Network.AWS.S3.DeleteBucketAnalyticsConfiguration
+    (
+    -- * Creating a Request
+      deleteBucketAnalyticsConfiguration
+    , DeleteBucketAnalyticsConfiguration
+    -- * Request Lenses
+    , dbacBucket
+    , dbacId
+
+    -- * Destructuring the Response
+    , deleteBucketAnalyticsConfigurationResponse
+    , DeleteBucketAnalyticsConfigurationResponse
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'deleteBucketAnalyticsConfiguration' smart constructor.
+data DeleteBucketAnalyticsConfiguration = DeleteBucketAnalyticsConfiguration'
+    { _dbacBucket :: !BucketName
+    , _dbacId     :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteBucketAnalyticsConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dbacBucket' - The name of the bucket from which an analytics configuration is deleted.
+--
+-- * 'dbacId' - The identifier used to represent an analytics configuration.
+deleteBucketAnalyticsConfiguration
+    :: BucketName -- ^ 'dbacBucket'
+    -> Text -- ^ 'dbacId'
+    -> DeleteBucketAnalyticsConfiguration
+deleteBucketAnalyticsConfiguration pBucket_ pId_ =
+    DeleteBucketAnalyticsConfiguration'
+    { _dbacBucket = pBucket_
+    , _dbacId = pId_
+    }
+
+-- | The name of the bucket from which an analytics configuration is deleted.
+dbacBucket :: Lens' DeleteBucketAnalyticsConfiguration BucketName
+dbacBucket = lens _dbacBucket (\ s a -> s{_dbacBucket = a});
+
+-- | The identifier used to represent an analytics configuration.
+dbacId :: Lens' DeleteBucketAnalyticsConfiguration Text
+dbacId = lens _dbacId (\ s a -> s{_dbacId = a});
+
+instance AWSRequest
+         DeleteBucketAnalyticsConfiguration where
+        type Rs DeleteBucketAnalyticsConfiguration =
+             DeleteBucketAnalyticsConfigurationResponse
+        request = delete s3
+        response
+          = receiveNull
+              DeleteBucketAnalyticsConfigurationResponse'
+
+instance Hashable DeleteBucketAnalyticsConfiguration
+
+instance NFData DeleteBucketAnalyticsConfiguration
+
+instance ToHeaders DeleteBucketAnalyticsConfiguration
+         where
+        toHeaders = const mempty
+
+instance ToPath DeleteBucketAnalyticsConfiguration
+         where
+        toPath DeleteBucketAnalyticsConfiguration'{..}
+          = mconcat ["/", toBS _dbacBucket]
+
+instance ToQuery DeleteBucketAnalyticsConfiguration
+         where
+        toQuery DeleteBucketAnalyticsConfiguration'{..}
+          = mconcat ["id" =: _dbacId, "analytics"]
+
+-- | /See:/ 'deleteBucketAnalyticsConfigurationResponse' smart constructor.
+data DeleteBucketAnalyticsConfigurationResponse =
+    DeleteBucketAnalyticsConfigurationResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteBucketAnalyticsConfigurationResponse' with the minimum fields required to make a request.
+--
+deleteBucketAnalyticsConfigurationResponse
+    :: DeleteBucketAnalyticsConfigurationResponse
+deleteBucketAnalyticsConfigurationResponse =
+    DeleteBucketAnalyticsConfigurationResponse'
+
+instance NFData
+         DeleteBucketAnalyticsConfigurationResponse
diff --git a/gen/Network/AWS/S3/DeleteBucketCORS.hs b/gen/Network/AWS/S3/DeleteBucketCORS.hs
--- a/gen/Network/AWS/S3/DeleteBucketCORS.hs
+++ b/gen/Network/AWS/S3/DeleteBucketCORS.hs
@@ -48,7 +48,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dbcBucket'
+-- * 'dbcBucket' - Undocumented member.
 deleteBucketCORS
     :: BucketName -- ^ 'dbcBucket'
     -> DeleteBucketCORS
diff --git a/gen/Network/AWS/S3/DeleteBucketInventoryConfiguration.hs b/gen/Network/AWS/S3/DeleteBucketInventoryConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/DeleteBucketInventoryConfiguration.hs
@@ -0,0 +1,114 @@
+{-# 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.DeleteBucketInventoryConfiguration
+-- Copyright   : (c) 2013-2016 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 an inventory configuration (identified by the inventory ID) from the bucket.
+module Network.AWS.S3.DeleteBucketInventoryConfiguration
+    (
+    -- * Creating a Request
+      deleteBucketInventoryConfiguration
+    , DeleteBucketInventoryConfiguration
+    -- * Request Lenses
+    , dbicBucket
+    , dbicId
+
+    -- * Destructuring the Response
+    , deleteBucketInventoryConfigurationResponse
+    , DeleteBucketInventoryConfigurationResponse
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'deleteBucketInventoryConfiguration' smart constructor.
+data DeleteBucketInventoryConfiguration = DeleteBucketInventoryConfiguration'
+    { _dbicBucket :: !BucketName
+    , _dbicId     :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteBucketInventoryConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dbicBucket' - The name of the bucket containing the inventory configuration to delete.
+--
+-- * 'dbicId' - The ID used to identify the inventory configuration.
+deleteBucketInventoryConfiguration
+    :: BucketName -- ^ 'dbicBucket'
+    -> Text -- ^ 'dbicId'
+    -> DeleteBucketInventoryConfiguration
+deleteBucketInventoryConfiguration pBucket_ pId_ =
+    DeleteBucketInventoryConfiguration'
+    { _dbicBucket = pBucket_
+    , _dbicId = pId_
+    }
+
+-- | The name of the bucket containing the inventory configuration to delete.
+dbicBucket :: Lens' DeleteBucketInventoryConfiguration BucketName
+dbicBucket = lens _dbicBucket (\ s a -> s{_dbicBucket = a});
+
+-- | The ID used to identify the inventory configuration.
+dbicId :: Lens' DeleteBucketInventoryConfiguration Text
+dbicId = lens _dbicId (\ s a -> s{_dbicId = a});
+
+instance AWSRequest
+         DeleteBucketInventoryConfiguration where
+        type Rs DeleteBucketInventoryConfiguration =
+             DeleteBucketInventoryConfigurationResponse
+        request = delete s3
+        response
+          = receiveNull
+              DeleteBucketInventoryConfigurationResponse'
+
+instance Hashable DeleteBucketInventoryConfiguration
+
+instance NFData DeleteBucketInventoryConfiguration
+
+instance ToHeaders DeleteBucketInventoryConfiguration
+         where
+        toHeaders = const mempty
+
+instance ToPath DeleteBucketInventoryConfiguration
+         where
+        toPath DeleteBucketInventoryConfiguration'{..}
+          = mconcat ["/", toBS _dbicBucket]
+
+instance ToQuery DeleteBucketInventoryConfiguration
+         where
+        toQuery DeleteBucketInventoryConfiguration'{..}
+          = mconcat ["id" =: _dbicId, "inventory"]
+
+-- | /See:/ 'deleteBucketInventoryConfigurationResponse' smart constructor.
+data DeleteBucketInventoryConfigurationResponse =
+    DeleteBucketInventoryConfigurationResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteBucketInventoryConfigurationResponse' with the minimum fields required to make a request.
+--
+deleteBucketInventoryConfigurationResponse
+    :: DeleteBucketInventoryConfigurationResponse
+deleteBucketInventoryConfigurationResponse =
+    DeleteBucketInventoryConfigurationResponse'
+
+instance NFData
+         DeleteBucketInventoryConfigurationResponse
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
@@ -48,7 +48,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dblBucket'
+-- * 'dblBucket' - Undocumented member.
 deleteBucketLifecycle
     :: BucketName -- ^ 'dblBucket'
     -> DeleteBucketLifecycle
diff --git a/gen/Network/AWS/S3/DeleteBucketMetricsConfiguration.hs b/gen/Network/AWS/S3/DeleteBucketMetricsConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/DeleteBucketMetricsConfiguration.hs
@@ -0,0 +1,114 @@
+{-# 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.DeleteBucketMetricsConfiguration
+-- Copyright   : (c) 2013-2016 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 a metrics configuration (specified by the metrics configuration ID) from the bucket.
+module Network.AWS.S3.DeleteBucketMetricsConfiguration
+    (
+    -- * Creating a Request
+      deleteBucketMetricsConfiguration
+    , DeleteBucketMetricsConfiguration
+    -- * Request Lenses
+    , dbmcBucket
+    , dbmcId
+
+    -- * Destructuring the Response
+    , deleteBucketMetricsConfigurationResponse
+    , DeleteBucketMetricsConfigurationResponse
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'deleteBucketMetricsConfiguration' smart constructor.
+data DeleteBucketMetricsConfiguration = DeleteBucketMetricsConfiguration'
+    { _dbmcBucket :: !BucketName
+    , _dbmcId     :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteBucketMetricsConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dbmcBucket' - The name of the bucket containing the metrics configuration to delete.
+--
+-- * 'dbmcId' - The ID used to identify the metrics configuration.
+deleteBucketMetricsConfiguration
+    :: BucketName -- ^ 'dbmcBucket'
+    -> Text -- ^ 'dbmcId'
+    -> DeleteBucketMetricsConfiguration
+deleteBucketMetricsConfiguration pBucket_ pId_ =
+    DeleteBucketMetricsConfiguration'
+    { _dbmcBucket = pBucket_
+    , _dbmcId = pId_
+    }
+
+-- | The name of the bucket containing the metrics configuration to delete.
+dbmcBucket :: Lens' DeleteBucketMetricsConfiguration BucketName
+dbmcBucket = lens _dbmcBucket (\ s a -> s{_dbmcBucket = a});
+
+-- | The ID used to identify the metrics configuration.
+dbmcId :: Lens' DeleteBucketMetricsConfiguration Text
+dbmcId = lens _dbmcId (\ s a -> s{_dbmcId = a});
+
+instance AWSRequest DeleteBucketMetricsConfiguration
+         where
+        type Rs DeleteBucketMetricsConfiguration =
+             DeleteBucketMetricsConfigurationResponse
+        request = delete s3
+        response
+          = receiveNull
+              DeleteBucketMetricsConfigurationResponse'
+
+instance Hashable DeleteBucketMetricsConfiguration
+
+instance NFData DeleteBucketMetricsConfiguration
+
+instance ToHeaders DeleteBucketMetricsConfiguration
+         where
+        toHeaders = const mempty
+
+instance ToPath DeleteBucketMetricsConfiguration
+         where
+        toPath DeleteBucketMetricsConfiguration'{..}
+          = mconcat ["/", toBS _dbmcBucket]
+
+instance ToQuery DeleteBucketMetricsConfiguration
+         where
+        toQuery DeleteBucketMetricsConfiguration'{..}
+          = mconcat ["id" =: _dbmcId, "metrics"]
+
+-- | /See:/ 'deleteBucketMetricsConfigurationResponse' smart constructor.
+data DeleteBucketMetricsConfigurationResponse =
+    DeleteBucketMetricsConfigurationResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteBucketMetricsConfigurationResponse' with the minimum fields required to make a request.
+--
+deleteBucketMetricsConfigurationResponse
+    :: DeleteBucketMetricsConfigurationResponse
+deleteBucketMetricsConfigurationResponse =
+    DeleteBucketMetricsConfigurationResponse'
+
+instance NFData
+         DeleteBucketMetricsConfigurationResponse
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
@@ -48,7 +48,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dbpBucket'
+-- * 'dbpBucket' - Undocumented member.
 deleteBucketPolicy
     :: BucketName -- ^ 'dbpBucket'
     -> DeleteBucketPolicy
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
@@ -48,7 +48,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dbrBucket'
+-- * 'dbrBucket' - Undocumented member.
 deleteBucketReplication
     :: BucketName -- ^ 'dbrBucket'
     -> DeleteBucketReplication
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
@@ -48,7 +48,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dbtBucket'
+-- * 'dbtBucket' - Undocumented member.
 deleteBucketTagging
     :: BucketName -- ^ 'dbtBucket'
     -> DeleteBucketTagging
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
@@ -48,7 +48,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dbwBucket'
+-- * 'dbwBucket' - Undocumented member.
 deleteBucketWebsite
     :: BucketName -- ^ 'dbwBucket'
     -> DeleteBucketWebsite
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
@@ -18,7 +18,7 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- 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.
 module Network.AWS.S3.DeleteObject
     (
     -- * Creating a Request
@@ -61,15 +61,15 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'doVersionId'
+-- * 'doVersionId' - VersionId used to reference a specific version of the object.
 --
--- * 'doMFA'
+-- * 'doMFA' - The concatenation of the authentication device's serial number, a space, and the value that is displayed on your authentication device.
 --
--- * 'doRequestPayer'
+-- * 'doRequestPayer' - Undocumented member.
 --
--- * 'doBucket'
+-- * 'doBucket' - Undocumented member.
 --
--- * 'doKey'
+-- * 'doKey' - Undocumented member.
 deleteObject
     :: BucketName -- ^ 'doBucket'
     -> ObjectKey -- ^ 'doKey'
@@ -87,7 +87,7 @@
 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});
 
@@ -145,13 +145,13 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dorsRequestCharged'
+-- * 'dorsRequestCharged' - Undocumented member.
 --
--- * 'dorsVersionId'
+-- * 'dorsVersionId' - Returns the version ID of the delete marker created as a result of the DELETE operation.
 --
--- * 'dorsDeleteMarker'
+-- * 'dorsDeleteMarker' - Specifies whether the versioned object that was permanently deleted was (true) or was not (false) a delete marker.
 --
--- * 'dorsResponseStatus'
+-- * 'dorsResponseStatus' - -- | The response status code.
 deleteObjectResponse
     :: Int -- ^ 'dorsResponseStatus'
     -> DeleteObjectResponse
@@ -175,7 +175,7 @@
 dorsDeleteMarker :: Lens' DeleteObjectResponse (Maybe Bool)
 dorsDeleteMarker = lens _dorsDeleteMarker (\ s a -> s{_dorsDeleteMarker = a});
 
--- | The response status code.
+-- | -- | The response status code.
 dorsResponseStatus :: Lens' DeleteObjectResponse Int
 dorsResponseStatus = lens _dorsResponseStatus (\ s a -> s{_dorsResponseStatus = a});
 
diff --git a/gen/Network/AWS/S3/DeleteObjectTagging.hs b/gen/Network/AWS/S3/DeleteObjectTagging.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/DeleteObjectTagging.hs
@@ -0,0 +1,141 @@
+{-# 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.DeleteObjectTagging
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Removes the tag-set from an existing object.
+module Network.AWS.S3.DeleteObjectTagging
+    (
+    -- * Creating a Request
+      deleteObjectTagging
+    , DeleteObjectTagging
+    -- * Request Lenses
+    , dotVersionId
+    , dotBucket
+    , dotKey
+
+    -- * Destructuring the Response
+    , deleteObjectTaggingResponse
+    , DeleteObjectTaggingResponse
+    -- * Response Lenses
+    , dotrsVersionId
+    , dotrsResponseStatus
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'deleteObjectTagging' smart constructor.
+data DeleteObjectTagging = DeleteObjectTagging'
+    { _dotVersionId :: !(Maybe ObjectVersionId)
+    , _dotBucket    :: !BucketName
+    , _dotKey       :: !ObjectKey
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteObjectTagging' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dotVersionId' - The versionId of the object that the tag-set will be removed from.
+--
+-- * 'dotBucket' - Undocumented member.
+--
+-- * 'dotKey' - Undocumented member.
+deleteObjectTagging
+    :: BucketName -- ^ 'dotBucket'
+    -> ObjectKey -- ^ 'dotKey'
+    -> DeleteObjectTagging
+deleteObjectTagging pBucket_ pKey_ =
+    DeleteObjectTagging'
+    { _dotVersionId = Nothing
+    , _dotBucket = pBucket_
+    , _dotKey = pKey_
+    }
+
+-- | The versionId of the object that the tag-set will be removed from.
+dotVersionId :: Lens' DeleteObjectTagging (Maybe ObjectVersionId)
+dotVersionId = lens _dotVersionId (\ s a -> s{_dotVersionId = a});
+
+-- | Undocumented member.
+dotBucket :: Lens' DeleteObjectTagging BucketName
+dotBucket = lens _dotBucket (\ s a -> s{_dotBucket = a});
+
+-- | Undocumented member.
+dotKey :: Lens' DeleteObjectTagging ObjectKey
+dotKey = lens _dotKey (\ s a -> s{_dotKey = a});
+
+instance AWSRequest DeleteObjectTagging where
+        type Rs DeleteObjectTagging =
+             DeleteObjectTaggingResponse
+        request = delete s3
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteObjectTaggingResponse' <$>
+                   (h .#? "x-amz-version-id") <*> (pure (fromEnum s)))
+
+instance Hashable DeleteObjectTagging
+
+instance NFData DeleteObjectTagging
+
+instance ToHeaders DeleteObjectTagging where
+        toHeaders = const mempty
+
+instance ToPath DeleteObjectTagging where
+        toPath DeleteObjectTagging'{..}
+          = mconcat ["/", toBS _dotBucket, "/", toBS _dotKey]
+
+instance ToQuery DeleteObjectTagging where
+        toQuery DeleteObjectTagging'{..}
+          = mconcat ["versionId" =: _dotVersionId, "tagging"]
+
+-- | /See:/ 'deleteObjectTaggingResponse' smart constructor.
+data DeleteObjectTaggingResponse = DeleteObjectTaggingResponse'
+    { _dotrsVersionId      :: !(Maybe ObjectVersionId)
+    , _dotrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteObjectTaggingResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dotrsVersionId' - The versionId of the object the tag-set was removed from.
+--
+-- * 'dotrsResponseStatus' - -- | The response status code.
+deleteObjectTaggingResponse
+    :: Int -- ^ 'dotrsResponseStatus'
+    -> DeleteObjectTaggingResponse
+deleteObjectTaggingResponse pResponseStatus_ =
+    DeleteObjectTaggingResponse'
+    { _dotrsVersionId = Nothing
+    , _dotrsResponseStatus = pResponseStatus_
+    }
+
+-- | The versionId of the object the tag-set was removed from.
+dotrsVersionId :: Lens' DeleteObjectTaggingResponse (Maybe ObjectVersionId)
+dotrsVersionId = lens _dotrsVersionId (\ s a -> s{_dotrsVersionId = a});
+
+-- | -- | The response status code.
+dotrsResponseStatus :: Lens' DeleteObjectTaggingResponse Int
+dotrsResponseStatus = lens _dotrsResponseStatus (\ s a -> s{_dotrsResponseStatus = a});
+
+instance NFData DeleteObjectTaggingResponse
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
@@ -59,13 +59,13 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dosMFA'
+-- * 'dosMFA' - The concatenation of the authentication device's serial number, a space, and the value that is displayed on your authentication device.
 --
--- * 'dosRequestPayer'
+-- * 'dosRequestPayer' - Undocumented member.
 --
--- * 'dosBucket'
+-- * 'dosBucket' - Undocumented member.
 --
--- * 'dosDelete'
+-- * 'dosDelete' - Undocumented member.
 deleteObjects
     :: BucketName -- ^ 'dosBucket'
     -> Delete -- ^ 'dosDelete'
@@ -78,7 +78,7 @@
     , _dosDelete = pDelete_
     }
 
--- | 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.
 dosMFA :: Lens' DeleteObjects (Maybe Text)
 dosMFA = lens _dosMFA (\ s a -> s{_dosMFA = a});
 
@@ -96,7 +96,7 @@
 
 instance AWSRequest DeleteObjects where
         type Rs DeleteObjects = DeleteObjectsResponse
-        request = contentMD5 . postXML s3
+        request = contentMD5Header . postXML s3
         response
           = receiveXML
               (\ s h x ->
@@ -142,13 +142,13 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'drsRequestCharged'
+-- * 'drsRequestCharged' - Undocumented member.
 --
--- * 'drsDeleted'
+-- * 'drsDeleted' - Undocumented member.
 --
--- * 'drsErrors'
+-- * 'drsErrors' - Undocumented member.
 --
--- * 'drsResponseStatus'
+-- * 'drsResponseStatus' - -- | The response status code.
 deleteObjectsResponse
     :: Int -- ^ 'drsResponseStatus'
     -> DeleteObjectsResponse
@@ -172,7 +172,7 @@
 drsErrors :: Lens' DeleteObjectsResponse [S3ServiceError]
 drsErrors = lens _drsErrors (\ s a -> s{_drsErrors = a}) . _Default . _Coerce;
 
--- | The response status code.
+-- | -- | The response status code.
 drsResponseStatus :: Lens' DeleteObjectsResponse Int
 drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a});
 
diff --git a/gen/Network/AWS/S3/GetBucketACL.hs b/gen/Network/AWS/S3/GetBucketACL.hs
--- a/gen/Network/AWS/S3/GetBucketACL.hs
+++ b/gen/Network/AWS/S3/GetBucketACL.hs
@@ -52,7 +52,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gbaBucket'
+-- * 'gbaBucket' - Undocumented member.
 getBucketACL
     :: BucketName -- ^ 'gbaBucket'
     -> GetBucketACL
@@ -102,11 +102,11 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gbarsGrants'
+-- * 'gbarsGrants' - A list of grants.
 --
--- * 'gbarsOwner'
+-- * 'gbarsOwner' - Undocumented member.
 --
--- * 'gbarsResponseStatus'
+-- * 'gbarsResponseStatus' - -- | The response status code.
 getBucketACLResponse
     :: Int -- ^ 'gbarsResponseStatus'
     -> GetBucketACLResponse
@@ -125,7 +125,7 @@
 gbarsOwner :: Lens' GetBucketACLResponse (Maybe Owner)
 gbarsOwner = lens _gbarsOwner (\ s a -> s{_gbarsOwner = a});
 
--- | The response status code.
+-- | -- | The response status code.
 gbarsResponseStatus :: Lens' GetBucketACLResponse Int
 gbarsResponseStatus = lens _gbarsResponseStatus (\ s a -> s{_gbarsResponseStatus = a});
 
diff --git a/gen/Network/AWS/S3/GetBucketAccelerateConfiguration.hs b/gen/Network/AWS/S3/GetBucketAccelerateConfiguration.hs
--- a/gen/Network/AWS/S3/GetBucketAccelerateConfiguration.hs
+++ b/gen/Network/AWS/S3/GetBucketAccelerateConfiguration.hs
@@ -31,8 +31,8 @@
     , getBucketAccelerateConfigurationResponse
     , GetBucketAccelerateConfigurationResponse
     -- * Response Lenses
-    , gbacrsStatus
-    , gbacrsResponseStatus
+    , grsStatus
+    , grsResponseStatus
     ) where
 
 import           Network.AWS.Lens
@@ -51,7 +51,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gbacBucket'
+-- * 'gbacBucket' - Name of the bucket for which the accelerate configuration is retrieved.
 getBucketAccelerateConfiguration
     :: BucketName -- ^ 'gbacBucket'
     -> GetBucketAccelerateConfiguration
@@ -94,33 +94,33 @@
 
 -- | /See:/ 'getBucketAccelerateConfigurationResponse' smart constructor.
 data GetBucketAccelerateConfigurationResponse = GetBucketAccelerateConfigurationResponse'
-    { _gbacrsStatus         :: !(Maybe BucketAccelerateStatus)
-    , _gbacrsResponseStatus :: !Int
+    { _grsStatus         :: !(Maybe BucketAccelerateStatus)
+    , _grsResponseStatus :: !Int
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'GetBucketAccelerateConfigurationResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gbacrsStatus'
+-- * 'grsStatus' - The accelerate configuration of the bucket.
 --
--- * 'gbacrsResponseStatus'
+-- * 'grsResponseStatus' - -- | The response status code.
 getBucketAccelerateConfigurationResponse
-    :: Int -- ^ 'gbacrsResponseStatus'
+    :: Int -- ^ 'grsResponseStatus'
     -> GetBucketAccelerateConfigurationResponse
 getBucketAccelerateConfigurationResponse pResponseStatus_ =
     GetBucketAccelerateConfigurationResponse'
-    { _gbacrsStatus = Nothing
-    , _gbacrsResponseStatus = pResponseStatus_
+    { _grsStatus = Nothing
+    , _grsResponseStatus = pResponseStatus_
     }
 
 -- | The accelerate configuration of the bucket.
-gbacrsStatus :: Lens' GetBucketAccelerateConfigurationResponse (Maybe BucketAccelerateStatus)
-gbacrsStatus = lens _gbacrsStatus (\ s a -> s{_gbacrsStatus = a});
+grsStatus :: Lens' GetBucketAccelerateConfigurationResponse (Maybe BucketAccelerateStatus)
+grsStatus = lens _grsStatus (\ s a -> s{_grsStatus = a});
 
--- | The response status code.
-gbacrsResponseStatus :: Lens' GetBucketAccelerateConfigurationResponse Int
-gbacrsResponseStatus = lens _gbacrsResponseStatus (\ s a -> s{_gbacrsResponseStatus = a});
+-- | -- | The response status code.
+grsResponseStatus :: Lens' GetBucketAccelerateConfigurationResponse Int
+grsResponseStatus = lens _grsResponseStatus (\ s a -> s{_grsResponseStatus = a});
 
 instance NFData
          GetBucketAccelerateConfigurationResponse
diff --git a/gen/Network/AWS/S3/GetBucketAnalyticsConfiguration.hs b/gen/Network/AWS/S3/GetBucketAnalyticsConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/GetBucketAnalyticsConfiguration.hs
@@ -0,0 +1,136 @@
+{-# 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.GetBucketAnalyticsConfiguration
+-- Copyright   : (c) 2013-2016 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 an analytics configuration for the bucket (specified by the analytics configuration ID).
+module Network.AWS.S3.GetBucketAnalyticsConfiguration
+    (
+    -- * Creating a Request
+      getBucketAnalyticsConfiguration
+    , GetBucketAnalyticsConfiguration
+    -- * Request Lenses
+    , getBucket
+    , getId
+
+    -- * Destructuring the Response
+    , getBucketAnalyticsConfigurationResponse
+    , GetBucketAnalyticsConfigurationResponse
+    -- * Response Lenses
+    , gbacrsAnalyticsConfiguration
+    , gbacrsResponseStatus
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'getBucketAnalyticsConfiguration' smart constructor.
+data GetBucketAnalyticsConfiguration = GetBucketAnalyticsConfiguration'
+    { _getBucket :: !BucketName
+    , _getId     :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetBucketAnalyticsConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'getBucket' - The name of the bucket from which an analytics configuration is retrieved.
+--
+-- * 'getId' - The identifier used to represent an analytics configuration.
+getBucketAnalyticsConfiguration
+    :: BucketName -- ^ 'getBucket'
+    -> Text -- ^ 'getId'
+    -> GetBucketAnalyticsConfiguration
+getBucketAnalyticsConfiguration pBucket_ pId_ =
+    GetBucketAnalyticsConfiguration'
+    { _getBucket = pBucket_
+    , _getId = pId_
+    }
+
+-- | The name of the bucket from which an analytics configuration is retrieved.
+getBucket :: Lens' GetBucketAnalyticsConfiguration BucketName
+getBucket = lens _getBucket (\ s a -> s{_getBucket = a});
+
+-- | The identifier used to represent an analytics configuration.
+getId :: Lens' GetBucketAnalyticsConfiguration Text
+getId = lens _getId (\ s a -> s{_getId = a});
+
+instance AWSRequest GetBucketAnalyticsConfiguration
+         where
+        type Rs GetBucketAnalyticsConfiguration =
+             GetBucketAnalyticsConfigurationResponse
+        request = get s3
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetBucketAnalyticsConfigurationResponse' <$>
+                   (parseXML x) <*> (pure (fromEnum s)))
+
+instance Hashable GetBucketAnalyticsConfiguration
+
+instance NFData GetBucketAnalyticsConfiguration
+
+instance ToHeaders GetBucketAnalyticsConfiguration
+         where
+        toHeaders = const mempty
+
+instance ToPath GetBucketAnalyticsConfiguration where
+        toPath GetBucketAnalyticsConfiguration'{..}
+          = mconcat ["/", toBS _getBucket]
+
+instance ToQuery GetBucketAnalyticsConfiguration
+         where
+        toQuery GetBucketAnalyticsConfiguration'{..}
+          = mconcat ["id" =: _getId, "analytics"]
+
+-- | /See:/ 'getBucketAnalyticsConfigurationResponse' smart constructor.
+data GetBucketAnalyticsConfigurationResponse = GetBucketAnalyticsConfigurationResponse'
+    { _gbacrsAnalyticsConfiguration :: !(Maybe AnalyticsConfiguration)
+    , _gbacrsResponseStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetBucketAnalyticsConfigurationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbacrsAnalyticsConfiguration' - The configuration and any analyses for the analytics filter.
+--
+-- * 'gbacrsResponseStatus' - -- | The response status code.
+getBucketAnalyticsConfigurationResponse
+    :: Int -- ^ 'gbacrsResponseStatus'
+    -> GetBucketAnalyticsConfigurationResponse
+getBucketAnalyticsConfigurationResponse pResponseStatus_ =
+    GetBucketAnalyticsConfigurationResponse'
+    { _gbacrsAnalyticsConfiguration = Nothing
+    , _gbacrsResponseStatus = pResponseStatus_
+    }
+
+-- | The configuration and any analyses for the analytics filter.
+gbacrsAnalyticsConfiguration :: Lens' GetBucketAnalyticsConfigurationResponse (Maybe AnalyticsConfiguration)
+gbacrsAnalyticsConfiguration = lens _gbacrsAnalyticsConfiguration (\ s a -> s{_gbacrsAnalyticsConfiguration = a});
+
+-- | -- | The response status code.
+gbacrsResponseStatus :: Lens' GetBucketAnalyticsConfigurationResponse Int
+gbacrsResponseStatus = lens _gbacrsResponseStatus (\ s a -> s{_gbacrsResponseStatus = a});
+
+instance NFData
+         GetBucketAnalyticsConfigurationResponse
diff --git a/gen/Network/AWS/S3/GetBucketCORS.hs b/gen/Network/AWS/S3/GetBucketCORS.hs
--- a/gen/Network/AWS/S3/GetBucketCORS.hs
+++ b/gen/Network/AWS/S3/GetBucketCORS.hs
@@ -51,7 +51,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gbcBucket'
+-- * 'gbcBucket' - Undocumented member.
 getBucketCORS
     :: BucketName -- ^ 'gbcBucket'
     -> GetBucketCORS
@@ -98,9 +98,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gbcrsCORSRules'
+-- * 'gbcrsCORSRules' - Undocumented member.
 --
--- * 'gbcrsResponseStatus'
+-- * 'gbcrsResponseStatus' - -- | The response status code.
 getBucketCORSResponse
     :: Int -- ^ 'gbcrsResponseStatus'
     -> GetBucketCORSResponse
@@ -114,7 +114,7 @@
 gbcrsCORSRules :: Lens' GetBucketCORSResponse [CORSRule]
 gbcrsCORSRules = lens _gbcrsCORSRules (\ s a -> s{_gbcrsCORSRules = a}) . _Default . _Coerce;
 
--- | The response status code.
+-- | -- | The response status code.
 gbcrsResponseStatus :: Lens' GetBucketCORSResponse Int
 gbcrsResponseStatus = lens _gbcrsResponseStatus (\ s a -> s{_gbcrsResponseStatus = a});
 
diff --git a/gen/Network/AWS/S3/GetBucketInventoryConfiguration.hs b/gen/Network/AWS/S3/GetBucketInventoryConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/GetBucketInventoryConfiguration.hs
@@ -0,0 +1,136 @@
+{-# 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.GetBucketInventoryConfiguration
+-- Copyright   : (c) 2013-2016 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 an inventory configuration (identified by the inventory ID) from the bucket.
+module Network.AWS.S3.GetBucketInventoryConfiguration
+    (
+    -- * Creating a Request
+      getBucketInventoryConfiguration
+    , GetBucketInventoryConfiguration
+    -- * Request Lenses
+    , gbicBucket
+    , gbicId
+
+    -- * Destructuring the Response
+    , getBucketInventoryConfigurationResponse
+    , GetBucketInventoryConfigurationResponse
+    -- * Response Lenses
+    , gbicrsInventoryConfiguration
+    , gbicrsResponseStatus
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'getBucketInventoryConfiguration' smart constructor.
+data GetBucketInventoryConfiguration = GetBucketInventoryConfiguration'
+    { _gbicBucket :: !BucketName
+    , _gbicId     :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetBucketInventoryConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbicBucket' - The name of the bucket containing the inventory configuration to retrieve.
+--
+-- * 'gbicId' - The ID used to identify the inventory configuration.
+getBucketInventoryConfiguration
+    :: BucketName -- ^ 'gbicBucket'
+    -> Text -- ^ 'gbicId'
+    -> GetBucketInventoryConfiguration
+getBucketInventoryConfiguration pBucket_ pId_ =
+    GetBucketInventoryConfiguration'
+    { _gbicBucket = pBucket_
+    , _gbicId = pId_
+    }
+
+-- | The name of the bucket containing the inventory configuration to retrieve.
+gbicBucket :: Lens' GetBucketInventoryConfiguration BucketName
+gbicBucket = lens _gbicBucket (\ s a -> s{_gbicBucket = a});
+
+-- | The ID used to identify the inventory configuration.
+gbicId :: Lens' GetBucketInventoryConfiguration Text
+gbicId = lens _gbicId (\ s a -> s{_gbicId = a});
+
+instance AWSRequest GetBucketInventoryConfiguration
+         where
+        type Rs GetBucketInventoryConfiguration =
+             GetBucketInventoryConfigurationResponse
+        request = get s3
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetBucketInventoryConfigurationResponse' <$>
+                   (parseXML x) <*> (pure (fromEnum s)))
+
+instance Hashable GetBucketInventoryConfiguration
+
+instance NFData GetBucketInventoryConfiguration
+
+instance ToHeaders GetBucketInventoryConfiguration
+         where
+        toHeaders = const mempty
+
+instance ToPath GetBucketInventoryConfiguration where
+        toPath GetBucketInventoryConfiguration'{..}
+          = mconcat ["/", toBS _gbicBucket]
+
+instance ToQuery GetBucketInventoryConfiguration
+         where
+        toQuery GetBucketInventoryConfiguration'{..}
+          = mconcat ["id" =: _gbicId, "inventory"]
+
+-- | /See:/ 'getBucketInventoryConfigurationResponse' smart constructor.
+data GetBucketInventoryConfigurationResponse = GetBucketInventoryConfigurationResponse'
+    { _gbicrsInventoryConfiguration :: !(Maybe InventoryConfiguration)
+    , _gbicrsResponseStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetBucketInventoryConfigurationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbicrsInventoryConfiguration' - Specifies the inventory configuration.
+--
+-- * 'gbicrsResponseStatus' - -- | The response status code.
+getBucketInventoryConfigurationResponse
+    :: Int -- ^ 'gbicrsResponseStatus'
+    -> GetBucketInventoryConfigurationResponse
+getBucketInventoryConfigurationResponse pResponseStatus_ =
+    GetBucketInventoryConfigurationResponse'
+    { _gbicrsInventoryConfiguration = Nothing
+    , _gbicrsResponseStatus = pResponseStatus_
+    }
+
+-- | Specifies the inventory configuration.
+gbicrsInventoryConfiguration :: Lens' GetBucketInventoryConfigurationResponse (Maybe InventoryConfiguration)
+gbicrsInventoryConfiguration = lens _gbicrsInventoryConfiguration (\ s a -> s{_gbicrsInventoryConfiguration = a});
+
+-- | -- | The response status code.
+gbicrsResponseStatus :: Lens' GetBucketInventoryConfigurationResponse Int
+gbicrsResponseStatus = lens _gbicrsResponseStatus (\ s a -> s{_gbicrsResponseStatus = a});
+
+instance NFData
+         GetBucketInventoryConfigurationResponse
diff --git a/gen/Network/AWS/S3/GetBucketLifecycleConfiguration.hs b/gen/Network/AWS/S3/GetBucketLifecycleConfiguration.hs
--- a/gen/Network/AWS/S3/GetBucketLifecycleConfiguration.hs
+++ b/gen/Network/AWS/S3/GetBucketLifecycleConfiguration.hs
@@ -51,7 +51,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gblcBucket'
+-- * 'gblcBucket' - Undocumented member.
 getBucketLifecycleConfiguration
     :: BucketName -- ^ 'gblcBucket'
     -> GetBucketLifecycleConfiguration
@@ -102,9 +102,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gblcrsRules'
+-- * 'gblcrsRules' - Undocumented member.
 --
--- * 'gblcrsResponseStatus'
+-- * 'gblcrsResponseStatus' - -- | The response status code.
 getBucketLifecycleConfigurationResponse
     :: Int -- ^ 'gblcrsResponseStatus'
     -> GetBucketLifecycleConfigurationResponse
@@ -118,7 +118,7 @@
 gblcrsRules :: Lens' GetBucketLifecycleConfigurationResponse [LifecycleRule]
 gblcrsRules = lens _gblcrsRules (\ s a -> s{_gblcrsRules = a}) . _Default . _Coerce;
 
--- | The response status code.
+-- | -- | The response status code.
 gblcrsResponseStatus :: Lens' GetBucketLifecycleConfigurationResponse Int
 gblcrsResponseStatus = lens _gblcrsResponseStatus (\ s a -> s{_gblcrsResponseStatus = 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
@@ -31,8 +31,8 @@
     , getBucketLocationResponse
     , GetBucketLocationResponse
     -- * Response Lenses
-    , grsResponseStatus
-    , grsLocationConstraint
+    , gblbrsResponseStatus
+    , gblbrsLocationConstraint
     ) where
 
 import           Network.AWS.Lens
@@ -51,7 +51,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gblBucket'
+-- * 'gblBucket' - Undocumented member.
 getBucketLocation
     :: BucketName -- ^ 'gblBucket'
     -> GetBucketLocation
@@ -89,33 +89,33 @@
 
 -- | /See:/ 'getBucketLocationResponse' smart constructor.
 data GetBucketLocationResponse = GetBucketLocationResponse'
-    { _grsResponseStatus     :: !Int
-    , _grsLocationConstraint :: !LocationConstraint
+    { _gblbrsResponseStatus     :: !Int
+    , _gblbrsLocationConstraint :: !LocationConstraint
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | 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:
 --
--- * 'grsResponseStatus'
+-- * 'gblbrsResponseStatus' - -- | The response status code.
 --
--- * 'grsLocationConstraint'
+-- * 'gblbrsLocationConstraint' - Undocumented member.
 getBucketLocationResponse
-    :: Int -- ^ 'grsResponseStatus'
-    -> LocationConstraint -- ^ 'grsLocationConstraint'
+    :: Int -- ^ 'gblbrsResponseStatus'
+    -> LocationConstraint -- ^ 'gblbrsLocationConstraint'
     -> GetBucketLocationResponse
 getBucketLocationResponse pResponseStatus_ pLocationConstraint_ =
     GetBucketLocationResponse'
-    { _grsResponseStatus = pResponseStatus_
-    , _grsLocationConstraint = pLocationConstraint_
+    { _gblbrsResponseStatus = pResponseStatus_
+    , _gblbrsLocationConstraint = pLocationConstraint_
     }
 
--- | The response status code.
-grsResponseStatus :: Lens' GetBucketLocationResponse Int
-grsResponseStatus = lens _grsResponseStatus (\ s a -> s{_grsResponseStatus = a});
+-- | -- | The response status code.
+gblbrsResponseStatus :: Lens' GetBucketLocationResponse Int
+gblbrsResponseStatus = lens _gblbrsResponseStatus (\ s a -> s{_gblbrsResponseStatus = a});
 
 -- | Undocumented member.
-grsLocationConstraint :: Lens' GetBucketLocationResponse LocationConstraint
-grsLocationConstraint = lens _grsLocationConstraint (\ s a -> s{_grsLocationConstraint = a});
+gblbrsLocationConstraint :: Lens' GetBucketLocationResponse LocationConstraint
+gblbrsLocationConstraint = lens _gblbrsLocationConstraint (\ s a -> s{_gblbrsLocationConstraint = a});
 
 instance NFData GetBucketLocationResponse
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
@@ -51,7 +51,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gBucket'
+-- * 'gBucket' - Undocumented member.
 getBucketLogging
     :: BucketName -- ^ 'gBucket'
     -> GetBucketLogging
@@ -97,9 +97,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gblrsLoggingEnabled'
+-- * 'gblrsLoggingEnabled' - Undocumented member.
 --
--- * 'gblrsResponseStatus'
+-- * 'gblrsResponseStatus' - -- | The response status code.
 getBucketLoggingResponse
     :: Int -- ^ 'gblrsResponseStatus'
     -> GetBucketLoggingResponse
@@ -113,7 +113,7 @@
 gblrsLoggingEnabled :: Lens' GetBucketLoggingResponse (Maybe LoggingEnabled)
 gblrsLoggingEnabled = lens _gblrsLoggingEnabled (\ s a -> s{_gblrsLoggingEnabled = a});
 
--- | The response status code.
+-- | -- | The response status code.
 gblrsResponseStatus :: Lens' GetBucketLoggingResponse Int
 gblrsResponseStatus = lens _gblrsResponseStatus (\ s a -> s{_gblrsResponseStatus = a});
 
diff --git a/gen/Network/AWS/S3/GetBucketMetricsConfiguration.hs b/gen/Network/AWS/S3/GetBucketMetricsConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/GetBucketMetricsConfiguration.hs
@@ -0,0 +1,134 @@
+{-# 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.GetBucketMetricsConfiguration
+-- Copyright   : (c) 2013-2016 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 a metrics configuration (specified by the metrics configuration ID) from the bucket.
+module Network.AWS.S3.GetBucketMetricsConfiguration
+    (
+    -- * Creating a Request
+      getBucketMetricsConfiguration
+    , GetBucketMetricsConfiguration
+    -- * Request Lenses
+    , gbmcBucket
+    , gbmcId
+
+    -- * Destructuring the Response
+    , getBucketMetricsConfigurationResponse
+    , GetBucketMetricsConfigurationResponse
+    -- * Response Lenses
+    , gbmcrsMetricsConfiguration
+    , gbmcrsResponseStatus
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'getBucketMetricsConfiguration' smart constructor.
+data GetBucketMetricsConfiguration = GetBucketMetricsConfiguration'
+    { _gbmcBucket :: !BucketName
+    , _gbmcId     :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetBucketMetricsConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbmcBucket' - The name of the bucket containing the metrics configuration to retrieve.
+--
+-- * 'gbmcId' - The ID used to identify the metrics configuration.
+getBucketMetricsConfiguration
+    :: BucketName -- ^ 'gbmcBucket'
+    -> Text -- ^ 'gbmcId'
+    -> GetBucketMetricsConfiguration
+getBucketMetricsConfiguration pBucket_ pId_ =
+    GetBucketMetricsConfiguration'
+    { _gbmcBucket = pBucket_
+    , _gbmcId = pId_
+    }
+
+-- | The name of the bucket containing the metrics configuration to retrieve.
+gbmcBucket :: Lens' GetBucketMetricsConfiguration BucketName
+gbmcBucket = lens _gbmcBucket (\ s a -> s{_gbmcBucket = a});
+
+-- | The ID used to identify the metrics configuration.
+gbmcId :: Lens' GetBucketMetricsConfiguration Text
+gbmcId = lens _gbmcId (\ s a -> s{_gbmcId = a});
+
+instance AWSRequest GetBucketMetricsConfiguration
+         where
+        type Rs GetBucketMetricsConfiguration =
+             GetBucketMetricsConfigurationResponse
+        request = get s3
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetBucketMetricsConfigurationResponse' <$>
+                   (parseXML x) <*> (pure (fromEnum s)))
+
+instance Hashable GetBucketMetricsConfiguration
+
+instance NFData GetBucketMetricsConfiguration
+
+instance ToHeaders GetBucketMetricsConfiguration
+         where
+        toHeaders = const mempty
+
+instance ToPath GetBucketMetricsConfiguration where
+        toPath GetBucketMetricsConfiguration'{..}
+          = mconcat ["/", toBS _gbmcBucket]
+
+instance ToQuery GetBucketMetricsConfiguration where
+        toQuery GetBucketMetricsConfiguration'{..}
+          = mconcat ["id" =: _gbmcId, "metrics"]
+
+-- | /See:/ 'getBucketMetricsConfigurationResponse' smart constructor.
+data GetBucketMetricsConfigurationResponse = GetBucketMetricsConfigurationResponse'
+    { _gbmcrsMetricsConfiguration :: !(Maybe MetricsConfiguration)
+    , _gbmcrsResponseStatus       :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetBucketMetricsConfigurationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbmcrsMetricsConfiguration' - Specifies the metrics configuration.
+--
+-- * 'gbmcrsResponseStatus' - -- | The response status code.
+getBucketMetricsConfigurationResponse
+    :: Int -- ^ 'gbmcrsResponseStatus'
+    -> GetBucketMetricsConfigurationResponse
+getBucketMetricsConfigurationResponse pResponseStatus_ =
+    GetBucketMetricsConfigurationResponse'
+    { _gbmcrsMetricsConfiguration = Nothing
+    , _gbmcrsResponseStatus = pResponseStatus_
+    }
+
+-- | Specifies the metrics configuration.
+gbmcrsMetricsConfiguration :: Lens' GetBucketMetricsConfigurationResponse (Maybe MetricsConfiguration)
+gbmcrsMetricsConfiguration = lens _gbmcrsMetricsConfiguration (\ s a -> s{_gbmcrsMetricsConfiguration = a});
+
+-- | -- | The response status code.
+gbmcrsResponseStatus :: Lens' GetBucketMetricsConfigurationResponse Int
+gbmcrsResponseStatus = lens _gbmcrsResponseStatus (\ s a -> s{_gbmcrsResponseStatus = a});
+
+instance NFData GetBucketMetricsConfigurationResponse
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
@@ -52,7 +52,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gbncBucket'
+-- * 'gbncBucket' - Name of the bucket to get the notification configuration for.
 getBucketNotificationConfiguration
     :: BucketName -- ^ 'gbncBucket'
     -> GetBucketNotificationConfiguration
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
@@ -51,7 +51,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gbpBucket'
+-- * 'gbpBucket' - Undocumented member.
 getBucketPolicy
     :: BucketName -- ^ 'gbpBucket'
     -> GetBucketPolicy
@@ -97,9 +97,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gbprsResponseStatus'
+-- * 'gbprsResponseStatus' - -- | The response status code.
 --
--- * 'gbprsPolicy'
+-- * 'gbprsPolicy' - The bucket policy as a JSON document.
 getBucketPolicyResponse
     :: Int -- ^ 'gbprsResponseStatus'
     -> HashMap Text Value -- ^ 'gbprsPolicy'
@@ -110,7 +110,7 @@
     , _gbprsPolicy = pPolicy_
     }
 
--- | The response status code.
+-- | -- | The response status code.
 gbprsResponseStatus :: Lens' GetBucketPolicyResponse Int
 gbprsResponseStatus = lens _gbprsResponseStatus (\ s a -> s{_gbprsResponseStatus = 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
@@ -51,7 +51,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gbrBucket'
+-- * 'gbrBucket' - Undocumented member.
 getBucketReplication
     :: BucketName -- ^ 'gbrBucket'
     -> GetBucketReplication
@@ -98,9 +98,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gbrrsReplicationConfiguration'
+-- * 'gbrrsReplicationConfiguration' - Undocumented member.
 --
--- * 'gbrrsResponseStatus'
+-- * 'gbrrsResponseStatus' - -- | The response status code.
 getBucketReplicationResponse
     :: Int -- ^ 'gbrrsResponseStatus'
     -> GetBucketReplicationResponse
@@ -114,7 +114,7 @@
 gbrrsReplicationConfiguration :: Lens' GetBucketReplicationResponse (Maybe ReplicationConfiguration)
 gbrrsReplicationConfiguration = lens _gbrrsReplicationConfiguration (\ s a -> s{_gbrrsReplicationConfiguration = a});
 
--- | The response status code.
+-- | -- | The response status code.
 gbrrsResponseStatus :: Lens' GetBucketReplicationResponse Int
 gbrrsResponseStatus = lens _gbrrsResponseStatus (\ s a -> s{_gbrrsResponseStatus = 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
@@ -51,7 +51,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gbrpBucket'
+-- * 'gbrpBucket' - Undocumented member.
 getBucketRequestPayment
     :: BucketName -- ^ 'gbrpBucket'
     -> GetBucketRequestPayment
@@ -98,9 +98,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gbrprsPayer'
+-- * 'gbrprsPayer' - Specifies who pays for the download and request fees.
 --
--- * 'gbrprsResponseStatus'
+-- * 'gbrprsResponseStatus' - -- | The response status code.
 getBucketRequestPaymentResponse
     :: Int -- ^ 'gbrprsResponseStatus'
     -> GetBucketRequestPaymentResponse
@@ -114,7 +114,7 @@
 gbrprsPayer :: Lens' GetBucketRequestPaymentResponse (Maybe Payer)
 gbrprsPayer = lens _gbrprsPayer (\ s a -> s{_gbrprsPayer = a});
 
--- | The response status code.
+-- | -- | The response status code.
 gbrprsResponseStatus :: Lens' GetBucketRequestPaymentResponse Int
 gbrprsResponseStatus = lens _gbrprsResponseStatus (\ s a -> s{_gbrprsResponseStatus = 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
@@ -51,7 +51,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gbtBucket'
+-- * 'gbtBucket' - Undocumented member.
 getBucketTagging
     :: BucketName -- ^ 'gbtBucket'
     -> GetBucketTagging
@@ -98,9 +98,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gbtrsResponseStatus'
+-- * 'gbtrsResponseStatus' - -- | The response status code.
 --
--- * 'gbtrsTagSet'
+-- * 'gbtrsTagSet' - Undocumented member.
 getBucketTaggingResponse
     :: Int -- ^ 'gbtrsResponseStatus'
     -> GetBucketTaggingResponse
@@ -110,7 +110,7 @@
     , _gbtrsTagSet = mempty
     }
 
--- | The response status code.
+-- | -- | The response status code.
 gbtrsResponseStatus :: Lens' GetBucketTaggingResponse Int
 gbtrsResponseStatus = lens _gbtrsResponseStatus (\ s a -> s{_gbtrsResponseStatus = a});
 
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
@@ -52,7 +52,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gbvBucket'
+-- * 'gbvBucket' - Undocumented member.
 getBucketVersioning
     :: BucketName -- ^ 'gbvBucket'
     -> GetBucketVersioning
@@ -101,11 +101,11 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gbvrsStatus'
+-- * 'gbvrsStatus' - The versioning state of the bucket.
 --
--- * 'gbvrsMFADelete'
+-- * 'gbvrsMFADelete' - 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.
 --
--- * 'gbvrsResponseStatus'
+-- * 'gbvrsResponseStatus' - -- | The response status code.
 getBucketVersioningResponse
     :: Int -- ^ 'gbvrsResponseStatus'
     -> GetBucketVersioningResponse
@@ -124,7 +124,7 @@
 gbvrsMFADelete :: Lens' GetBucketVersioningResponse (Maybe MFADeleteStatus)
 gbvrsMFADelete = lens _gbvrsMFADelete (\ s a -> s{_gbvrsMFADelete = a});
 
--- | The response status code.
+-- | -- | The response status code.
 gbvrsResponseStatus :: Lens' GetBucketVersioningResponse Int
 gbvrsResponseStatus = lens _gbvrsResponseStatus (\ s a -> s{_gbvrsResponseStatus = 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
@@ -54,7 +54,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gbwBucket'
+-- * 'gbwBucket' - Undocumented member.
 getBucketWebsite
     :: BucketName -- ^ 'gbwBucket'
     -> GetBucketWebsite
@@ -109,15 +109,15 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gbwrsRedirectAllRequestsTo'
+-- * 'gbwrsRedirectAllRequestsTo' - Undocumented member.
 --
--- * 'gbwrsErrorDocument'
+-- * 'gbwrsErrorDocument' - Undocumented member.
 --
--- * 'gbwrsIndexDocument'
+-- * 'gbwrsIndexDocument' - Undocumented member.
 --
--- * 'gbwrsRoutingRules'
+-- * 'gbwrsRoutingRules' - Undocumented member.
 --
--- * 'gbwrsResponseStatus'
+-- * 'gbwrsResponseStatus' - -- | The response status code.
 getBucketWebsiteResponse
     :: Int -- ^ 'gbwrsResponseStatus'
     -> GetBucketWebsiteResponse
@@ -146,7 +146,7 @@
 gbwrsRoutingRules :: Lens' GetBucketWebsiteResponse [RoutingRule]
 gbwrsRoutingRules = lens _gbwrsRoutingRules (\ s a -> s{_gbwrsRoutingRules = a}) . _Default . _Coerce;
 
--- | The response status code.
+-- | -- | The response status code.
 gbwrsResponseStatus :: Lens' GetBucketWebsiteResponse Int
 gbwrsResponseStatus = lens _gbwrsResponseStatus (\ s a -> s{_gbwrsResponseStatus = 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
@@ -35,6 +35,7 @@
     , goRequestPayer
     , goResponseContentEncoding
     , goIfModifiedSince
+    , goPartNumber
     , goRange
     , goIfUnmodifiedSince
     , goSSECustomerKeyMD5
@@ -49,6 +50,7 @@
     , GetObjectResponse
     -- * Response Lenses
     , gorsRequestCharged
+    , gorsPartsCount
     , gorsETag
     , gorsVersionId
     , gorsContentLength
@@ -57,6 +59,7 @@
     , gorsExpiration
     , gorsDeleteMarker
     , gorsSSECustomerAlgorithm
+    , gorsTagCount
     , gorsMissingMeta
     , gorsWebsiteRedirectLocation
     , gorsAcceptRanges
@@ -96,6 +99,7 @@
     , _goRequestPayer               :: !(Maybe RequestPayer)
     , _goResponseContentEncoding    :: !(Maybe Text)
     , _goIfModifiedSince            :: !(Maybe RFC822)
+    , _goPartNumber                 :: !(Maybe Int)
     , _goRange                      :: !(Maybe Text)
     , _goIfUnmodifiedSince          :: !(Maybe RFC822)
     , _goSSECustomerKeyMD5          :: !(Maybe Text)
@@ -110,41 +114,43 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'goIfMatch'
+-- * 'goIfMatch' - Return the object only if its entity tag (ETag) is the same as the one specified, otherwise return a 412 (precondition failed).
 --
--- * 'goVersionId'
+-- * 'goVersionId' - VersionId used to reference a specific version of the object.
 --
--- * 'goResponseContentType'
+-- * 'goResponseContentType' - Sets the Content-Type header of the response.
 --
--- * 'goResponseContentDisposition'
+-- * 'goResponseContentDisposition' - Sets the Content-Disposition header of the response
 --
--- * 'goResponseContentLanguage'
+-- * 'goResponseContentLanguage' - Sets the Content-Language header of the response.
 --
--- * 'goSSECustomerAlgorithm'
+-- * 'goSSECustomerAlgorithm' - Specifies the algorithm to use to when encrypting the object (e.g., AES256).
 --
--- * 'goSSECustomerKey'
+-- * 'goSSECustomerKey' - 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.
 --
--- * 'goRequestPayer'
+-- * 'goRequestPayer' - Undocumented member.
 --
--- * 'goResponseContentEncoding'
+-- * 'goResponseContentEncoding' - Sets the Content-Encoding header of the response.
 --
--- * 'goIfModifiedSince'
+-- * 'goIfModifiedSince' - Return the object only if it has been modified since the specified time, otherwise return a 304 (not modified).
 --
--- * 'goRange'
+-- * 'goPartNumber' - Part number of the object being read. This is a positive integer between 1 and 10,000. Effectively performs a 'ranged' GET request for the part specified. Useful for downloading just a part of an object.
 --
--- * 'goIfUnmodifiedSince'
+-- * 'goRange' - 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.
 --
--- * 'goSSECustomerKeyMD5'
+-- * 'goIfUnmodifiedSince' - Return the object only if it has not been modified since the specified time, otherwise return a 412 (precondition failed).
 --
--- * 'goResponseCacheControl'
+-- * 'goSSECustomerKeyMD5' - 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.
 --
--- * 'goResponseExpires'
+-- * 'goResponseCacheControl' - Sets the Cache-Control header of the response.
 --
--- * 'goIfNoneMatch'
+-- * 'goResponseExpires' - Sets the Expires header of the response.
 --
--- * 'goBucket'
+-- * 'goIfNoneMatch' - Return the object only if its entity tag (ETag) is different from the one specified, otherwise return a 304 (not modified).
 --
--- * 'goKey'
+-- * 'goBucket' - Undocumented member.
+--
+-- * 'goKey' - Undocumented member.
 getObject
     :: BucketName -- ^ 'goBucket'
     -> ObjectKey -- ^ 'goKey'
@@ -161,6 +167,7 @@
     , _goRequestPayer = Nothing
     , _goResponseContentEncoding = Nothing
     , _goIfModifiedSince = Nothing
+    , _goPartNumber = Nothing
     , _goRange = Nothing
     , _goIfUnmodifiedSince = Nothing
     , _goSSECustomerKeyMD5 = Nothing
@@ -211,7 +218,11 @@
 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.
+-- | Part number of the object being read. This is a positive integer between 1 and 10,000. Effectively performs a 'ranged' GET request for the part specified. Useful for downloading just a part of an object.
+goPartNumber :: Lens' GetObject (Maybe Int)
+goPartNumber = lens _goPartNumber (\ s a -> s{_goPartNumber = 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});
 
@@ -250,7 +261,9 @@
           = receiveBody
               (\ s h x ->
                  GetObjectResponse' <$>
-                   (h .#? "x-amz-request-charged") <*> (h .#? "ETag")
+                   (h .#? "x-amz-request-charged") <*>
+                     (h .#? "x-amz-mp-parts-count")
+                     <*> (h .#? "ETag")
                      <*> (h .#? "x-amz-version-id")
                      <*> (h .#? "Content-Length")
                      <*> (h .#? "Expires")
@@ -260,6 +273,7 @@
                      <*>
                      (h .#?
                         "x-amz-server-side-encryption-customer-algorithm")
+                     <*> (h .#? "x-amz-tagging-count")
                      <*> (h .#? "x-amz-missing-meta")
                      <*> (h .#? "x-amz-website-redirect-location")
                      <*> (h .#? "accept-ranges")
@@ -317,12 +331,14 @@
                  _goResponseContentLanguage,
                "response-content-encoding" =:
                  _goResponseContentEncoding,
+               "partNumber" =: _goPartNumber,
                "response-cache-control" =: _goResponseCacheControl,
                "response-expires" =: _goResponseExpires]
 
 -- | /See:/ 'getObjectResponse' smart constructor.
 data GetObjectResponse = GetObjectResponse'
     { _gorsRequestCharged          :: !(Maybe RequestCharged)
+    , _gorsPartsCount              :: !(Maybe Int)
     , _gorsETag                    :: !(Maybe ETag)
     , _gorsVersionId               :: !(Maybe ObjectVersionId)
     , _gorsContentLength           :: !(Maybe Integer)
@@ -331,6 +347,7 @@
     , _gorsExpiration              :: !(Maybe Text)
     , _gorsDeleteMarker            :: !(Maybe Bool)
     , _gorsSSECustomerAlgorithm    :: !(Maybe Text)
+    , _gorsTagCount                :: !(Maybe Int)
     , _gorsMissingMeta             :: !(Maybe Int)
     , _gorsWebsiteRedirectLocation :: !(Maybe Text)
     , _gorsAcceptRanges            :: !(Maybe Text)
@@ -355,59 +372,63 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gorsRequestCharged'
+-- * 'gorsRequestCharged' - Undocumented member.
 --
--- * 'gorsETag'
+-- * 'gorsPartsCount' - The count of parts this object has.
 --
--- * 'gorsVersionId'
+-- * 'gorsETag' - An ETag is an opaque identifier assigned by a web server to a specific version of a resource found at a URL
 --
--- * 'gorsContentLength'
+-- * 'gorsVersionId' - Version of the object.
 --
--- * 'gorsExpires'
+-- * 'gorsContentLength' - Size of the body in bytes.
 --
--- * 'gorsRestore'
+-- * 'gorsExpires' - The date and time at which the object is no longer cacheable.
 --
--- * 'gorsExpiration'
+-- * 'gorsRestore' - Provides information about object restoration operation and expiration time of the restored object copy.
 --
--- * 'gorsDeleteMarker'
+-- * 'gorsExpiration' - 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.
 --
--- * 'gorsSSECustomerAlgorithm'
+-- * 'gorsDeleteMarker' - 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.
 --
--- * 'gorsMissingMeta'
+-- * 'gorsSSECustomerAlgorithm' - If server-side encryption with a customer-provided encryption key was requested, the response will include this header confirming the encryption algorithm used.
 --
--- * 'gorsWebsiteRedirectLocation'
+-- * 'gorsTagCount' - The number of tags, if any, on the object.
 --
--- * 'gorsAcceptRanges'
+-- * 'gorsMissingMeta' - 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.
 --
--- * 'gorsStorageClass'
+-- * 'gorsWebsiteRedirectLocation' - 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.
 --
--- * 'gorsSSECustomerKeyMD5'
+-- * 'gorsAcceptRanges' - Undocumented member.
 --
--- * 'gorsSSEKMSKeyId'
+-- * 'gorsStorageClass' - Undocumented member.
 --
--- * 'gorsContentEncoding'
+-- * 'gorsSSECustomerKeyMD5' - 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.
 --
--- * 'gorsMetadata'
+-- * 'gorsSSEKMSKeyId' - If present, specifies the ID of the AWS Key Management Service (KMS) master encryption key that was used for the object.
 --
--- * 'gorsReplicationStatus'
+-- * 'gorsContentEncoding' - 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.
 --
--- * 'gorsCacheControl'
+-- * 'gorsMetadata' - A map of metadata to store with the object in S3.
 --
--- * 'gorsContentLanguage'
+-- * 'gorsReplicationStatus' - Undocumented member.
 --
--- * 'gorsLastModified'
+-- * 'gorsCacheControl' - Specifies caching behavior along the request/reply chain.
 --
--- * 'gorsContentDisposition'
+-- * 'gorsContentLanguage' - The language the content is in.
 --
--- * 'gorsContentRange'
+-- * 'gorsLastModified' - Last modified date of the object
 --
--- * 'gorsServerSideEncryption'
+-- * 'gorsContentDisposition' - Specifies presentational information for the object.
 --
--- * 'gorsContentType'
+-- * 'gorsContentRange' - The portion of the object returned in the response.
 --
--- * 'gorsResponseStatus'
+-- * 'gorsServerSideEncryption' - The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 --
--- * 'gorsBody'
+-- * 'gorsContentType' - A standard MIME type describing the format of the object data.
+--
+-- * 'gorsResponseStatus' - -- | The response status code.
+--
+-- * 'gorsBody' - Object data.
 getObjectResponse
     :: Int -- ^ 'gorsResponseStatus'
     -> RsBody -- ^ 'gorsBody'
@@ -415,6 +436,7 @@
 getObjectResponse pResponseStatus_ pBody_ =
     GetObjectResponse'
     { _gorsRequestCharged = Nothing
+    , _gorsPartsCount = Nothing
     , _gorsETag = Nothing
     , _gorsVersionId = Nothing
     , _gorsContentLength = Nothing
@@ -423,6 +445,7 @@
     , _gorsExpiration = Nothing
     , _gorsDeleteMarker = Nothing
     , _gorsSSECustomerAlgorithm = Nothing
+    , _gorsTagCount = Nothing
     , _gorsMissingMeta = Nothing
     , _gorsWebsiteRedirectLocation = Nothing
     , _gorsAcceptRanges = Nothing
@@ -447,6 +470,10 @@
 gorsRequestCharged :: Lens' GetObjectResponse (Maybe RequestCharged)
 gorsRequestCharged = lens _gorsRequestCharged (\ s a -> s{_gorsRequestCharged = a});
 
+-- | The count of parts this object has.
+gorsPartsCount :: Lens' GetObjectResponse (Maybe Int)
+gorsPartsCount = lens _gorsPartsCount (\ s a -> s{_gorsPartsCount = 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});
@@ -479,6 +506,10 @@
 gorsSSECustomerAlgorithm :: Lens' GetObjectResponse (Maybe Text)
 gorsSSECustomerAlgorithm = lens _gorsSSECustomerAlgorithm (\ s a -> s{_gorsSSECustomerAlgorithm = a});
 
+-- | The number of tags, if any, on the object.
+gorsTagCount :: Lens' GetObjectResponse (Maybe Int)
+gorsTagCount = lens _gorsTagCount (\ s a -> s{_gorsTagCount = 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.
 gorsMissingMeta :: Lens' GetObjectResponse (Maybe Int)
 gorsMissingMeta = lens _gorsMissingMeta (\ s a -> s{_gorsMissingMeta = a});
@@ -515,7 +546,7 @@
 gorsReplicationStatus :: Lens' GetObjectResponse (Maybe ReplicationStatus)
 gorsReplicationStatus = lens _gorsReplicationStatus (\ s a -> s{_gorsReplicationStatus = a});
 
--- | Specifies caching behavior along the request\/reply chain.
+-- | Specifies caching behavior along the request/reply chain.
 gorsCacheControl :: Lens' GetObjectResponse (Maybe Text)
 gorsCacheControl = lens _gorsCacheControl (\ s a -> s{_gorsCacheControl = a});
 
@@ -543,7 +574,7 @@
 gorsContentType :: Lens' GetObjectResponse (Maybe Text)
 gorsContentType = lens _gorsContentType (\ s a -> s{_gorsContentType = a});
 
--- | The response status code.
+-- | -- | The response status code.
 gorsResponseStatus :: Lens' GetObjectResponse Int
 gorsResponseStatus = lens _gorsResponseStatus (\ s a -> s{_gorsResponseStatus = a});
 
diff --git a/gen/Network/AWS/S3/GetObjectACL.hs b/gen/Network/AWS/S3/GetObjectACL.hs
--- a/gen/Network/AWS/S3/GetObjectACL.hs
+++ b/gen/Network/AWS/S3/GetObjectACL.hs
@@ -59,13 +59,13 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'goaVersionId'
+-- * 'goaVersionId' - VersionId used to reference a specific version of the object.
 --
--- * 'goaRequestPayer'
+-- * 'goaRequestPayer' - Undocumented member.
 --
--- * 'goaBucket'
+-- * 'goaBucket' - Undocumented member.
 --
--- * 'goaKey'
+-- * 'goaKey' - Undocumented member.
 getObjectACL
     :: BucketName -- ^ 'goaBucket'
     -> ObjectKey -- ^ 'goaKey'
@@ -135,13 +135,13 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'goarsRequestCharged'
+-- * 'goarsRequestCharged' - Undocumented member.
 --
--- * 'goarsGrants'
+-- * 'goarsGrants' - A list of grants.
 --
--- * 'goarsOwner'
+-- * 'goarsOwner' - Undocumented member.
 --
--- * 'goarsResponseStatus'
+-- * 'goarsResponseStatus' - -- | The response status code.
 getObjectACLResponse
     :: Int -- ^ 'goarsResponseStatus'
     -> GetObjectACLResponse
@@ -165,7 +165,7 @@
 goarsOwner :: Lens' GetObjectACLResponse (Maybe Owner)
 goarsOwner = lens _goarsOwner (\ s a -> s{_goarsOwner = a});
 
--- | The response status code.
+-- | -- | The response status code.
 goarsResponseStatus :: Lens' GetObjectACLResponse Int
 goarsResponseStatus = lens _goarsResponseStatus (\ s a -> s{_goarsResponseStatus = a});
 
diff --git a/gen/Network/AWS/S3/GetObjectTagging.hs b/gen/Network/AWS/S3/GetObjectTagging.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/GetObjectTagging.hs
@@ -0,0 +1,151 @@
+{-# 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.GetObjectTagging
+-- Copyright   : (c) 2013-2016 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 tag-set of an object.
+module Network.AWS.S3.GetObjectTagging
+    (
+    -- * Creating a Request
+      getObjectTagging
+    , GetObjectTagging
+    -- * Request Lenses
+    , gotoBucket
+    , gotoKey
+    , gotoVersionId
+
+    -- * Destructuring the Response
+    , getObjectTaggingResponse
+    , GetObjectTaggingResponse
+    -- * Response Lenses
+    , gotrsVersionId
+    , gotrsResponseStatus
+    , gotrsTagSet
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'getObjectTagging' smart constructor.
+data GetObjectTagging = GetObjectTagging'
+    { _gotoBucket    :: !BucketName
+    , _gotoKey       :: !ObjectKey
+    , _gotoVersionId :: !ObjectVersionId
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetObjectTagging' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gotoBucket' - Undocumented member.
+--
+-- * 'gotoKey' - Undocumented member.
+--
+-- * 'gotoVersionId' - Undocumented member.
+getObjectTagging
+    :: BucketName -- ^ 'gotoBucket'
+    -> ObjectKey -- ^ 'gotoKey'
+    -> ObjectVersionId -- ^ 'gotoVersionId'
+    -> GetObjectTagging
+getObjectTagging pBucket_ pKey_ pVersionId_ =
+    GetObjectTagging'
+    { _gotoBucket = pBucket_
+    , _gotoKey = pKey_
+    , _gotoVersionId = pVersionId_
+    }
+
+-- | Undocumented member.
+gotoBucket :: Lens' GetObjectTagging BucketName
+gotoBucket = lens _gotoBucket (\ s a -> s{_gotoBucket = a});
+
+-- | Undocumented member.
+gotoKey :: Lens' GetObjectTagging ObjectKey
+gotoKey = lens _gotoKey (\ s a -> s{_gotoKey = a});
+
+-- | Undocumented member.
+gotoVersionId :: Lens' GetObjectTagging ObjectVersionId
+gotoVersionId = lens _gotoVersionId (\ s a -> s{_gotoVersionId = a});
+
+instance AWSRequest GetObjectTagging where
+        type Rs GetObjectTagging = GetObjectTaggingResponse
+        request = get s3
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetObjectTaggingResponse' <$>
+                   (h .#? "x-amz-version-id") <*> (pure (fromEnum s))
+                     <*>
+                     (x .@? "TagSet" .!@ mempty >>= parseXMLList "Tag"))
+
+instance Hashable GetObjectTagging
+
+instance NFData GetObjectTagging
+
+instance ToHeaders GetObjectTagging where
+        toHeaders = const mempty
+
+instance ToPath GetObjectTagging where
+        toPath GetObjectTagging'{..}
+          = mconcat ["/", toBS _gotoBucket, "/", toBS _gotoKey]
+
+instance ToQuery GetObjectTagging where
+        toQuery = const (mconcat ["tagging"])
+
+-- | /See:/ 'getObjectTaggingResponse' smart constructor.
+data GetObjectTaggingResponse = GetObjectTaggingResponse'
+    { _gotrsVersionId      :: !(Maybe ObjectVersionId)
+    , _gotrsResponseStatus :: !Int
+    , _gotrsTagSet         :: ![Tag]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetObjectTaggingResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gotrsVersionId' - Undocumented member.
+--
+-- * 'gotrsResponseStatus' - -- | The response status code.
+--
+-- * 'gotrsTagSet' - Undocumented member.
+getObjectTaggingResponse
+    :: Int -- ^ 'gotrsResponseStatus'
+    -> GetObjectTaggingResponse
+getObjectTaggingResponse pResponseStatus_ =
+    GetObjectTaggingResponse'
+    { _gotrsVersionId = Nothing
+    , _gotrsResponseStatus = pResponseStatus_
+    , _gotrsTagSet = mempty
+    }
+
+-- | Undocumented member.
+gotrsVersionId :: Lens' GetObjectTaggingResponse (Maybe ObjectVersionId)
+gotrsVersionId = lens _gotrsVersionId (\ s a -> s{_gotrsVersionId = a});
+
+-- | -- | The response status code.
+gotrsResponseStatus :: Lens' GetObjectTaggingResponse Int
+gotrsResponseStatus = lens _gotrsResponseStatus (\ s a -> s{_gotrsResponseStatus = a});
+
+-- | Undocumented member.
+gotrsTagSet :: Lens' GetObjectTaggingResponse [Tag]
+gotrsTagSet = lens _gotrsTagSet (\ s a -> s{_gotrsTagSet = a}) . _Coerce;
+
+instance NFData GetObjectTaggingResponse
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
@@ -33,9 +33,9 @@
     , getObjectTorrentResponse
     , GetObjectTorrentResponse
     -- * Response Lenses
-    , gotrsRequestCharged
-    , gotrsResponseStatus
-    , gotrsBody
+    , getrsRequestCharged
+    , getrsResponseStatus
+    , getrsBody
     ) where
 
 import           Network.AWS.Lens
@@ -56,11 +56,11 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gotRequestPayer'
+-- * 'gotRequestPayer' - Undocumented member.
 --
--- * 'gotBucket'
+-- * 'gotBucket' - Undocumented member.
 --
--- * 'gotKey'
+-- * 'gotKey' - Undocumented member.
 getObjectTorrent
     :: BucketName -- ^ 'gotBucket'
     -> ObjectKey -- ^ 'gotKey'
@@ -112,39 +112,39 @@
 
 -- | /See:/ 'getObjectTorrentResponse' smart constructor.
 data GetObjectTorrentResponse = GetObjectTorrentResponse'
-    { _gotrsRequestCharged :: !(Maybe RequestCharged)
-    , _gotrsResponseStatus :: !Int
-    , _gotrsBody           :: !RsBody
+    { _getrsRequestCharged :: !(Maybe RequestCharged)
+    , _getrsResponseStatus :: !Int
+    , _getrsBody           :: !RsBody
     } deriving (Show,Generic)
 
 -- | 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'
+-- * 'getrsRequestCharged' - Undocumented member.
 --
--- * 'gotrsResponseStatus'
+-- * 'getrsResponseStatus' - -- | The response status code.
 --
--- * 'gotrsBody'
+-- * 'getrsBody' - Undocumented member.
 getObjectTorrentResponse
-    :: Int -- ^ 'gotrsResponseStatus'
-    -> RsBody -- ^ 'gotrsBody'
+    :: Int -- ^ 'getrsResponseStatus'
+    -> RsBody -- ^ 'getrsBody'
     -> GetObjectTorrentResponse
 getObjectTorrentResponse pResponseStatus_ pBody_ =
     GetObjectTorrentResponse'
-    { _gotrsRequestCharged = Nothing
-    , _gotrsResponseStatus = pResponseStatus_
-    , _gotrsBody = pBody_
+    { _getrsRequestCharged = Nothing
+    , _getrsResponseStatus = pResponseStatus_
+    , _getrsBody = pBody_
     }
 
 -- | Undocumented member.
-gotrsRequestCharged :: Lens' GetObjectTorrentResponse (Maybe RequestCharged)
-gotrsRequestCharged = lens _gotrsRequestCharged (\ s a -> s{_gotrsRequestCharged = a});
+getrsRequestCharged :: Lens' GetObjectTorrentResponse (Maybe RequestCharged)
+getrsRequestCharged = lens _getrsRequestCharged (\ s a -> s{_getrsRequestCharged = a});
 
--- | The response status code.
-gotrsResponseStatus :: Lens' GetObjectTorrentResponse Int
-gotrsResponseStatus = lens _gotrsResponseStatus (\ s a -> s{_gotrsResponseStatus = a});
+-- | -- | The response status code.
+getrsResponseStatus :: Lens' GetObjectTorrentResponse Int
+getrsResponseStatus = lens _getrsResponseStatus (\ s a -> s{_getrsResponseStatus = a});
 
 -- | Undocumented member.
-gotrsBody :: Lens' GetObjectTorrentResponse RsBody
-gotrsBody = lens _gotrsBody (\ s a -> s{_gotrsBody = a});
+getrsBody :: Lens' GetObjectTorrentResponse RsBody
+getrsBody = lens _getrsBody (\ s a -> s{_getrsBody = 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
@@ -48,7 +48,7 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'hbBucket'
+-- * 'hbBucket' - Undocumented member.
 headBucket
     :: BucketName -- ^ 'hbBucket'
     -> HeadBucket
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
@@ -18,7 +18,7 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- 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.
 module Network.AWS.S3.HeadObject
     (
     -- * Creating a Request
@@ -31,6 +31,7 @@
     , hoSSECustomerKey
     , hoRequestPayer
     , hoIfModifiedSince
+    , hoPartNumber
     , hoRange
     , hoIfUnmodifiedSince
     , hoSSECustomerKeyMD5
@@ -43,6 +44,7 @@
     , HeadObjectResponse
     -- * Response Lenses
     , horsRequestCharged
+    , horsPartsCount
     , horsETag
     , horsVersionId
     , horsContentLength
@@ -84,6 +86,7 @@
     , _hoSSECustomerKey       :: !(Maybe (Sensitive Text))
     , _hoRequestPayer         :: !(Maybe RequestPayer)
     , _hoIfModifiedSince      :: !(Maybe RFC822)
+    , _hoPartNumber           :: !(Maybe Int)
     , _hoRange                :: !(Maybe Text)
     , _hoIfUnmodifiedSince    :: !(Maybe RFC822)
     , _hoSSECustomerKeyMD5    :: !(Maybe Text)
@@ -96,29 +99,31 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'hoIfMatch'
+-- * 'hoIfMatch' - Return the object only if its entity tag (ETag) is the same as the one specified, otherwise return a 412 (precondition failed).
 --
--- * 'hoVersionId'
+-- * 'hoVersionId' - VersionId used to reference a specific version of the object.
 --
--- * 'hoSSECustomerAlgorithm'
+-- * 'hoSSECustomerAlgorithm' - Specifies the algorithm to use to when encrypting the object (e.g., AES256).
 --
--- * 'hoSSECustomerKey'
+-- * 'hoSSECustomerKey' - 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.
 --
--- * 'hoRequestPayer'
+-- * 'hoRequestPayer' - Undocumented member.
 --
--- * 'hoIfModifiedSince'
+-- * 'hoIfModifiedSince' - Return the object only if it has been modified since the specified time, otherwise return a 304 (not modified).
 --
--- * 'hoRange'
+-- * 'hoPartNumber' - Part number of the object being read. This is a positive integer between 1 and 10,000. Effectively performs a 'ranged' HEAD request for the part specified. Useful querying about the size of the part and the number of parts in this object.
 --
--- * 'hoIfUnmodifiedSince'
+-- * 'hoRange' - 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.
 --
--- * 'hoSSECustomerKeyMD5'
+-- * 'hoIfUnmodifiedSince' - Return the object only if it has not been modified since the specified time, otherwise return a 412 (precondition failed).
 --
--- * 'hoIfNoneMatch'
+-- * 'hoSSECustomerKeyMD5' - 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.
 --
--- * 'hoBucket'
+-- * 'hoIfNoneMatch' - Return the object only if its entity tag (ETag) is different from the one specified, otherwise return a 304 (not modified).
 --
--- * 'hoKey'
+-- * 'hoBucket' - Undocumented member.
+--
+-- * 'hoKey' - Undocumented member.
 headObject
     :: BucketName -- ^ 'hoBucket'
     -> ObjectKey -- ^ 'hoKey'
@@ -131,6 +136,7 @@
     , _hoSSECustomerKey = Nothing
     , _hoRequestPayer = Nothing
     , _hoIfModifiedSince = Nothing
+    , _hoPartNumber = Nothing
     , _hoRange = Nothing
     , _hoIfUnmodifiedSince = Nothing
     , _hoSSECustomerKeyMD5 = Nothing
@@ -163,7 +169,11 @@
 hoIfModifiedSince :: Lens' HeadObject (Maybe UTCTime)
 hoIfModifiedSince = lens _hoIfModifiedSince (\ s a -> s{_hoIfModifiedSince = 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.
+-- | Part number of the object being read. This is a positive integer between 1 and 10,000. Effectively performs a 'ranged' HEAD request for the part specified. Useful querying about the size of the part and the number of parts in this object.
+hoPartNumber :: Lens' HeadObject (Maybe Int)
+hoPartNumber = lens _hoPartNumber (\ s a -> s{_hoPartNumber = 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});
 
@@ -194,7 +204,9 @@
           = receiveEmpty
               (\ s h x ->
                  HeadObjectResponse' <$>
-                   (h .#? "x-amz-request-charged") <*> (h .#? "ETag")
+                   (h .#? "x-amz-request-charged") <*>
+                     (h .#? "x-amz-mp-parts-count")
+                     <*> (h .#? "ETag")
                      <*> (h .#? "x-amz-version-id")
                      <*> (h .#? "Content-Length")
                      <*> (h .#? "Expires")
@@ -250,11 +262,14 @@
 
 instance ToQuery HeadObject where
         toQuery HeadObject'{..}
-          = mconcat ["versionId" =: _hoVersionId]
+          = mconcat
+              ["versionId" =: _hoVersionId,
+               "partNumber" =: _hoPartNumber]
 
 -- | /See:/ 'headObjectResponse' smart constructor.
 data HeadObjectResponse = HeadObjectResponse'
     { _horsRequestCharged          :: !(Maybe RequestCharged)
+    , _horsPartsCount              :: !(Maybe Int)
     , _horsETag                    :: !(Maybe ETag)
     , _horsVersionId               :: !(Maybe ObjectVersionId)
     , _horsContentLength           :: !(Maybe Integer)
@@ -285,61 +300,64 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'horsRequestCharged'
+-- * 'horsRequestCharged' - Undocumented member.
 --
--- * 'horsETag'
+-- * 'horsPartsCount' - The count of parts this object has.
 --
--- * 'horsVersionId'
+-- * 'horsETag' - An ETag is an opaque identifier assigned by a web server to a specific version of a resource found at a URL
 --
--- * 'horsContentLength'
+-- * 'horsVersionId' - Version of the object.
 --
--- * 'horsExpires'
+-- * 'horsContentLength' - Size of the body in bytes.
 --
--- * 'horsRestore'
+-- * 'horsExpires' - The date and time at which the object is no longer cacheable.
 --
--- * 'horsExpiration'
+-- * 'horsRestore' - Provides information about object restoration operation and expiration time of the restored object copy.
 --
--- * 'horsDeleteMarker'
+-- * 'horsExpiration' - 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.
 --
--- * 'horsSSECustomerAlgorithm'
+-- * 'horsDeleteMarker' - 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.
 --
--- * 'horsMissingMeta'
+-- * 'horsSSECustomerAlgorithm' - If server-side encryption with a customer-provided encryption key was requested, the response will include this header confirming the encryption algorithm used.
 --
--- * 'horsWebsiteRedirectLocation'
+-- * 'horsMissingMeta' - 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.
 --
--- * 'horsAcceptRanges'
+-- * 'horsWebsiteRedirectLocation' - 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.
 --
--- * 'horsStorageClass'
+-- * 'horsAcceptRanges' - Undocumented member.
 --
--- * 'horsSSECustomerKeyMD5'
+-- * 'horsStorageClass' - Undocumented member.
 --
--- * 'horsSSEKMSKeyId'
+-- * 'horsSSECustomerKeyMD5' - 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.
 --
--- * 'horsContentEncoding'
+-- * 'horsSSEKMSKeyId' - If present, specifies the ID of the AWS Key Management Service (KMS) master encryption key that was used for the object.
 --
--- * 'horsMetadata'
+-- * 'horsContentEncoding' - 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.
 --
--- * 'horsReplicationStatus'
+-- * 'horsMetadata' - A map of metadata to store with the object in S3.
 --
--- * 'horsCacheControl'
+-- * 'horsReplicationStatus' - Undocumented member.
 --
--- * 'horsContentLanguage'
+-- * 'horsCacheControl' - Specifies caching behavior along the request/reply chain.
 --
--- * 'horsLastModified'
+-- * 'horsContentLanguage' - The language the content is in.
 --
--- * 'horsContentDisposition'
+-- * 'horsLastModified' - Last modified date of the object
 --
--- * 'horsServerSideEncryption'
+-- * 'horsContentDisposition' - Specifies presentational information for the object.
 --
--- * 'horsContentType'
+-- * 'horsServerSideEncryption' - The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 --
--- * 'horsResponseStatus'
+-- * 'horsContentType' - A standard MIME type describing the format of the object data.
+--
+-- * 'horsResponseStatus' - -- | The response status code.
 headObjectResponse
     :: Int -- ^ 'horsResponseStatus'
     -> HeadObjectResponse
 headObjectResponse pResponseStatus_ =
     HeadObjectResponse'
     { _horsRequestCharged = Nothing
+    , _horsPartsCount = Nothing
     , _horsETag = Nothing
     , _horsVersionId = Nothing
     , _horsContentLength = Nothing
@@ -370,6 +388,10 @@
 horsRequestCharged :: Lens' HeadObjectResponse (Maybe RequestCharged)
 horsRequestCharged = lens _horsRequestCharged (\ s a -> s{_horsRequestCharged = a});
 
+-- | The count of parts this object has.
+horsPartsCount :: Lens' HeadObjectResponse (Maybe Int)
+horsPartsCount = lens _horsPartsCount (\ s a -> s{_horsPartsCount = 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});
@@ -438,7 +460,7 @@
 horsReplicationStatus :: Lens' HeadObjectResponse (Maybe ReplicationStatus)
 horsReplicationStatus = lens _horsReplicationStatus (\ s a -> s{_horsReplicationStatus = a});
 
--- | Specifies caching behavior along the request\/reply chain.
+-- | Specifies caching behavior along the request/reply chain.
 horsCacheControl :: Lens' HeadObjectResponse (Maybe Text)
 horsCacheControl = lens _horsCacheControl (\ s a -> s{_horsCacheControl = a});
 
@@ -462,7 +484,7 @@
 horsContentType :: Lens' HeadObjectResponse (Maybe Text)
 horsContentType = lens _horsContentType (\ s a -> s{_horsContentType = a});
 
--- | The response status code.
+-- | -- | The response status code.
 horsResponseStatus :: Lens' HeadObjectResponse Int
 horsResponseStatus = lens _horsResponseStatus (\ s a -> s{_horsResponseStatus = a});
 
diff --git a/gen/Network/AWS/S3/ListBucketAnalyticsConfigurations.hs b/gen/Network/AWS/S3/ListBucketAnalyticsConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/ListBucketAnalyticsConfigurations.hs
@@ -0,0 +1,169 @@
+{-# 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.ListBucketAnalyticsConfigurations
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Lists the analytics configurations for the bucket.
+module Network.AWS.S3.ListBucketAnalyticsConfigurations
+    (
+    -- * Creating a Request
+      listBucketAnalyticsConfigurations
+    , ListBucketAnalyticsConfigurations
+    -- * Request Lenses
+    , lbacContinuationToken
+    , lbacBucket
+
+    -- * Destructuring the Response
+    , listBucketAnalyticsConfigurationsResponse
+    , ListBucketAnalyticsConfigurationsResponse
+    -- * Response Lenses
+    , lbacrsAnalyticsConfigurationList
+    , lbacrsContinuationToken
+    , lbacrsNextContinuationToken
+    , lbacrsIsTruncated
+    , lbacrsResponseStatus
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'listBucketAnalyticsConfigurations' smart constructor.
+data ListBucketAnalyticsConfigurations = ListBucketAnalyticsConfigurations'
+    { _lbacContinuationToken :: !(Maybe Text)
+    , _lbacBucket            :: !BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListBucketAnalyticsConfigurations' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lbacContinuationToken' - The ContinuationToken that represents a placeholder from where this request should begin.
+--
+-- * 'lbacBucket' - The name of the bucket from which analytics configurations are retrieved.
+listBucketAnalyticsConfigurations
+    :: BucketName -- ^ 'lbacBucket'
+    -> ListBucketAnalyticsConfigurations
+listBucketAnalyticsConfigurations pBucket_ =
+    ListBucketAnalyticsConfigurations'
+    { _lbacContinuationToken = Nothing
+    , _lbacBucket = pBucket_
+    }
+
+-- | The ContinuationToken that represents a placeholder from where this request should begin.
+lbacContinuationToken :: Lens' ListBucketAnalyticsConfigurations (Maybe Text)
+lbacContinuationToken = lens _lbacContinuationToken (\ s a -> s{_lbacContinuationToken = a});
+
+-- | The name of the bucket from which analytics configurations are retrieved.
+lbacBucket :: Lens' ListBucketAnalyticsConfigurations BucketName
+lbacBucket = lens _lbacBucket (\ s a -> s{_lbacBucket = a});
+
+instance AWSRequest ListBucketAnalyticsConfigurations
+         where
+        type Rs ListBucketAnalyticsConfigurations =
+             ListBucketAnalyticsConfigurationsResponse
+        request = get s3
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListBucketAnalyticsConfigurationsResponse' <$>
+                   (may (parseXMLList "AnalyticsConfiguration") x) <*>
+                     (x .@? "ContinuationToken")
+                     <*> (x .@? "NextContinuationToken")
+                     <*> (x .@? "IsTruncated")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable ListBucketAnalyticsConfigurations
+
+instance NFData ListBucketAnalyticsConfigurations
+
+instance ToHeaders ListBucketAnalyticsConfigurations
+         where
+        toHeaders = const mempty
+
+instance ToPath ListBucketAnalyticsConfigurations
+         where
+        toPath ListBucketAnalyticsConfigurations'{..}
+          = mconcat ["/", toBS _lbacBucket]
+
+instance ToQuery ListBucketAnalyticsConfigurations
+         where
+        toQuery ListBucketAnalyticsConfigurations'{..}
+          = mconcat
+              ["continuation-token" =: _lbacContinuationToken,
+               "analytics"]
+
+-- | /See:/ 'listBucketAnalyticsConfigurationsResponse' smart constructor.
+data ListBucketAnalyticsConfigurationsResponse = ListBucketAnalyticsConfigurationsResponse'
+    { _lbacrsAnalyticsConfigurationList :: !(Maybe [AnalyticsConfiguration])
+    , _lbacrsContinuationToken          :: !(Maybe Text)
+    , _lbacrsNextContinuationToken      :: !(Maybe Text)
+    , _lbacrsIsTruncated                :: !(Maybe Bool)
+    , _lbacrsResponseStatus             :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListBucketAnalyticsConfigurationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lbacrsAnalyticsConfigurationList' - The list of analytics configurations for a bucket.
+--
+-- * 'lbacrsContinuationToken' - The ContinuationToken that represents where this request began.
+--
+-- * 'lbacrsNextContinuationToken' - NextContinuationToken is sent when isTruncated is true, which indicates that there are more analytics configurations to list. The next request must include this NextContinuationToken. The token is obfuscated and is not a usable value.
+--
+-- * 'lbacrsIsTruncated' - Indicates whether the returned list of analytics configurations is complete. A value of true indicates that the list is not complete and the NextContinuationToken will be provided for a subsequent request.
+--
+-- * 'lbacrsResponseStatus' - -- | The response status code.
+listBucketAnalyticsConfigurationsResponse
+    :: Int -- ^ 'lbacrsResponseStatus'
+    -> ListBucketAnalyticsConfigurationsResponse
+listBucketAnalyticsConfigurationsResponse pResponseStatus_ =
+    ListBucketAnalyticsConfigurationsResponse'
+    { _lbacrsAnalyticsConfigurationList = Nothing
+    , _lbacrsContinuationToken = Nothing
+    , _lbacrsNextContinuationToken = Nothing
+    , _lbacrsIsTruncated = Nothing
+    , _lbacrsResponseStatus = pResponseStatus_
+    }
+
+-- | The list of analytics configurations for a bucket.
+lbacrsAnalyticsConfigurationList :: Lens' ListBucketAnalyticsConfigurationsResponse [AnalyticsConfiguration]
+lbacrsAnalyticsConfigurationList = lens _lbacrsAnalyticsConfigurationList (\ s a -> s{_lbacrsAnalyticsConfigurationList = a}) . _Default . _Coerce;
+
+-- | The ContinuationToken that represents where this request began.
+lbacrsContinuationToken :: Lens' ListBucketAnalyticsConfigurationsResponse (Maybe Text)
+lbacrsContinuationToken = lens _lbacrsContinuationToken (\ s a -> s{_lbacrsContinuationToken = a});
+
+-- | NextContinuationToken is sent when isTruncated is true, which indicates that there are more analytics configurations to list. The next request must include this NextContinuationToken. The token is obfuscated and is not a usable value.
+lbacrsNextContinuationToken :: Lens' ListBucketAnalyticsConfigurationsResponse (Maybe Text)
+lbacrsNextContinuationToken = lens _lbacrsNextContinuationToken (\ s a -> s{_lbacrsNextContinuationToken = a});
+
+-- | Indicates whether the returned list of analytics configurations is complete. A value of true indicates that the list is not complete and the NextContinuationToken will be provided for a subsequent request.
+lbacrsIsTruncated :: Lens' ListBucketAnalyticsConfigurationsResponse (Maybe Bool)
+lbacrsIsTruncated = lens _lbacrsIsTruncated (\ s a -> s{_lbacrsIsTruncated = a});
+
+-- | -- | The response status code.
+lbacrsResponseStatus :: Lens' ListBucketAnalyticsConfigurationsResponse Int
+lbacrsResponseStatus = lens _lbacrsResponseStatus (\ s a -> s{_lbacrsResponseStatus = a});
+
+instance NFData
+         ListBucketAnalyticsConfigurationsResponse
diff --git a/gen/Network/AWS/S3/ListBucketInventoryConfigurations.hs b/gen/Network/AWS/S3/ListBucketInventoryConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/ListBucketInventoryConfigurations.hs
@@ -0,0 +1,169 @@
+{-# 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.ListBucketInventoryConfigurations
+-- Copyright   : (c) 2013-2016 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 a list of inventory configurations for the bucket.
+module Network.AWS.S3.ListBucketInventoryConfigurations
+    (
+    -- * Creating a Request
+      listBucketInventoryConfigurations
+    , ListBucketInventoryConfigurations
+    -- * Request Lenses
+    , lbicContinuationToken
+    , lbicBucket
+
+    -- * Destructuring the Response
+    , listBucketInventoryConfigurationsResponse
+    , ListBucketInventoryConfigurationsResponse
+    -- * Response Lenses
+    , lbicrsContinuationToken
+    , lbicrsInventoryConfigurationList
+    , lbicrsNextContinuationToken
+    , lbicrsIsTruncated
+    , lbicrsResponseStatus
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'listBucketInventoryConfigurations' smart constructor.
+data ListBucketInventoryConfigurations = ListBucketInventoryConfigurations'
+    { _lbicContinuationToken :: !(Maybe Text)
+    , _lbicBucket            :: !BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListBucketInventoryConfigurations' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lbicContinuationToken' - The marker used to continue an inventory configuration listing that has been truncated. Use the NextContinuationToken from a previously truncated list response to continue the listing. The continuation token is an opaque value that Amazon S3 understands.
+--
+-- * 'lbicBucket' - The name of the bucket containing the inventory configurations to retrieve.
+listBucketInventoryConfigurations
+    :: BucketName -- ^ 'lbicBucket'
+    -> ListBucketInventoryConfigurations
+listBucketInventoryConfigurations pBucket_ =
+    ListBucketInventoryConfigurations'
+    { _lbicContinuationToken = Nothing
+    , _lbicBucket = pBucket_
+    }
+
+-- | The marker used to continue an inventory configuration listing that has been truncated. Use the NextContinuationToken from a previously truncated list response to continue the listing. The continuation token is an opaque value that Amazon S3 understands.
+lbicContinuationToken :: Lens' ListBucketInventoryConfigurations (Maybe Text)
+lbicContinuationToken = lens _lbicContinuationToken (\ s a -> s{_lbicContinuationToken = a});
+
+-- | The name of the bucket containing the inventory configurations to retrieve.
+lbicBucket :: Lens' ListBucketInventoryConfigurations BucketName
+lbicBucket = lens _lbicBucket (\ s a -> s{_lbicBucket = a});
+
+instance AWSRequest ListBucketInventoryConfigurations
+         where
+        type Rs ListBucketInventoryConfigurations =
+             ListBucketInventoryConfigurationsResponse
+        request = get s3
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListBucketInventoryConfigurationsResponse' <$>
+                   (x .@? "ContinuationToken") <*>
+                     (may (parseXMLList "InventoryConfiguration") x)
+                     <*> (x .@? "NextContinuationToken")
+                     <*> (x .@? "IsTruncated")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable ListBucketInventoryConfigurations
+
+instance NFData ListBucketInventoryConfigurations
+
+instance ToHeaders ListBucketInventoryConfigurations
+         where
+        toHeaders = const mempty
+
+instance ToPath ListBucketInventoryConfigurations
+         where
+        toPath ListBucketInventoryConfigurations'{..}
+          = mconcat ["/", toBS _lbicBucket]
+
+instance ToQuery ListBucketInventoryConfigurations
+         where
+        toQuery ListBucketInventoryConfigurations'{..}
+          = mconcat
+              ["continuation-token" =: _lbicContinuationToken,
+               "inventory"]
+
+-- | /See:/ 'listBucketInventoryConfigurationsResponse' smart constructor.
+data ListBucketInventoryConfigurationsResponse = ListBucketInventoryConfigurationsResponse'
+    { _lbicrsContinuationToken          :: !(Maybe Text)
+    , _lbicrsInventoryConfigurationList :: !(Maybe [InventoryConfiguration])
+    , _lbicrsNextContinuationToken      :: !(Maybe Text)
+    , _lbicrsIsTruncated                :: !(Maybe Bool)
+    , _lbicrsResponseStatus             :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListBucketInventoryConfigurationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lbicrsContinuationToken' - If sent in the request, the marker that is used as a starting point for this inventory configuration list response.
+--
+-- * 'lbicrsInventoryConfigurationList' - The list of inventory configurations for a bucket.
+--
+-- * 'lbicrsNextContinuationToken' - The marker used to continue this inventory configuration listing. Use the NextContinuationToken from this response to continue the listing in a subsequent request. The continuation token is an opaque value that Amazon S3 understands.
+--
+-- * 'lbicrsIsTruncated' - Indicates whether the returned list of inventory configurations is truncated in this response. A value of true indicates that the list is truncated.
+--
+-- * 'lbicrsResponseStatus' - -- | The response status code.
+listBucketInventoryConfigurationsResponse
+    :: Int -- ^ 'lbicrsResponseStatus'
+    -> ListBucketInventoryConfigurationsResponse
+listBucketInventoryConfigurationsResponse pResponseStatus_ =
+    ListBucketInventoryConfigurationsResponse'
+    { _lbicrsContinuationToken = Nothing
+    , _lbicrsInventoryConfigurationList = Nothing
+    , _lbicrsNextContinuationToken = Nothing
+    , _lbicrsIsTruncated = Nothing
+    , _lbicrsResponseStatus = pResponseStatus_
+    }
+
+-- | If sent in the request, the marker that is used as a starting point for this inventory configuration list response.
+lbicrsContinuationToken :: Lens' ListBucketInventoryConfigurationsResponse (Maybe Text)
+lbicrsContinuationToken = lens _lbicrsContinuationToken (\ s a -> s{_lbicrsContinuationToken = a});
+
+-- | The list of inventory configurations for a bucket.
+lbicrsInventoryConfigurationList :: Lens' ListBucketInventoryConfigurationsResponse [InventoryConfiguration]
+lbicrsInventoryConfigurationList = lens _lbicrsInventoryConfigurationList (\ s a -> s{_lbicrsInventoryConfigurationList = a}) . _Default . _Coerce;
+
+-- | The marker used to continue this inventory configuration listing. Use the NextContinuationToken from this response to continue the listing in a subsequent request. The continuation token is an opaque value that Amazon S3 understands.
+lbicrsNextContinuationToken :: Lens' ListBucketInventoryConfigurationsResponse (Maybe Text)
+lbicrsNextContinuationToken = lens _lbicrsNextContinuationToken (\ s a -> s{_lbicrsNextContinuationToken = a});
+
+-- | Indicates whether the returned list of inventory configurations is truncated in this response. A value of true indicates that the list is truncated.
+lbicrsIsTruncated :: Lens' ListBucketInventoryConfigurationsResponse (Maybe Bool)
+lbicrsIsTruncated = lens _lbicrsIsTruncated (\ s a -> s{_lbicrsIsTruncated = a});
+
+-- | -- | The response status code.
+lbicrsResponseStatus :: Lens' ListBucketInventoryConfigurationsResponse Int
+lbicrsResponseStatus = lens _lbicrsResponseStatus (\ s a -> s{_lbicrsResponseStatus = a});
+
+instance NFData
+         ListBucketInventoryConfigurationsResponse
diff --git a/gen/Network/AWS/S3/ListBucketMetricsConfigurations.hs b/gen/Network/AWS/S3/ListBucketMetricsConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/ListBucketMetricsConfigurations.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.ListBucketMetricsConfigurations
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Lists the metrics configurations for the bucket.
+module Network.AWS.S3.ListBucketMetricsConfigurations
+    (
+    -- * Creating a Request
+      listBucketMetricsConfigurations
+    , ListBucketMetricsConfigurations
+    -- * Request Lenses
+    , lbmcContinuationToken
+    , lbmcBucket
+
+    -- * Destructuring the Response
+    , listBucketMetricsConfigurationsResponse
+    , ListBucketMetricsConfigurationsResponse
+    -- * Response Lenses
+    , lbmcrsContinuationToken
+    , lbmcrsMetricsConfigurationList
+    , lbmcrsNextContinuationToken
+    , lbmcrsIsTruncated
+    , lbmcrsResponseStatus
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'listBucketMetricsConfigurations' smart constructor.
+data ListBucketMetricsConfigurations = ListBucketMetricsConfigurations'
+    { _lbmcContinuationToken :: !(Maybe Text)
+    , _lbmcBucket            :: !BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListBucketMetricsConfigurations' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lbmcContinuationToken' - The marker that is used to continue a metrics configuration listing that has been truncated. Use the NextContinuationToken from a previously truncated list response to continue the listing. The continuation token is an opaque value that Amazon S3 understands.
+--
+-- * 'lbmcBucket' - The name of the bucket containing the metrics configurations to retrieve.
+listBucketMetricsConfigurations
+    :: BucketName -- ^ 'lbmcBucket'
+    -> ListBucketMetricsConfigurations
+listBucketMetricsConfigurations pBucket_ =
+    ListBucketMetricsConfigurations'
+    { _lbmcContinuationToken = Nothing
+    , _lbmcBucket = pBucket_
+    }
+
+-- | The marker that is used to continue a metrics configuration listing that has been truncated. Use the NextContinuationToken from a previously truncated list response to continue the listing. The continuation token is an opaque value that Amazon S3 understands.
+lbmcContinuationToken :: Lens' ListBucketMetricsConfigurations (Maybe Text)
+lbmcContinuationToken = lens _lbmcContinuationToken (\ s a -> s{_lbmcContinuationToken = a});
+
+-- | The name of the bucket containing the metrics configurations to retrieve.
+lbmcBucket :: Lens' ListBucketMetricsConfigurations BucketName
+lbmcBucket = lens _lbmcBucket (\ s a -> s{_lbmcBucket = a});
+
+instance AWSRequest ListBucketMetricsConfigurations
+         where
+        type Rs ListBucketMetricsConfigurations =
+             ListBucketMetricsConfigurationsResponse
+        request = get s3
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListBucketMetricsConfigurationsResponse' <$>
+                   (x .@? "ContinuationToken") <*>
+                     (may (parseXMLList "MetricsConfiguration") x)
+                     <*> (x .@? "NextContinuationToken")
+                     <*> (x .@? "IsTruncated")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable ListBucketMetricsConfigurations
+
+instance NFData ListBucketMetricsConfigurations
+
+instance ToHeaders ListBucketMetricsConfigurations
+         where
+        toHeaders = const mempty
+
+instance ToPath ListBucketMetricsConfigurations where
+        toPath ListBucketMetricsConfigurations'{..}
+          = mconcat ["/", toBS _lbmcBucket]
+
+instance ToQuery ListBucketMetricsConfigurations
+         where
+        toQuery ListBucketMetricsConfigurations'{..}
+          = mconcat
+              ["continuation-token" =: _lbmcContinuationToken,
+               "metrics"]
+
+-- | /See:/ 'listBucketMetricsConfigurationsResponse' smart constructor.
+data ListBucketMetricsConfigurationsResponse = ListBucketMetricsConfigurationsResponse'
+    { _lbmcrsContinuationToken        :: !(Maybe Text)
+    , _lbmcrsMetricsConfigurationList :: !(Maybe [MetricsConfiguration])
+    , _lbmcrsNextContinuationToken    :: !(Maybe Text)
+    , _lbmcrsIsTruncated              :: !(Maybe Bool)
+    , _lbmcrsResponseStatus           :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListBucketMetricsConfigurationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lbmcrsContinuationToken' - The marker that is used as a starting point for this metrics configuration list response. This value is present if it was sent in the request.
+--
+-- * 'lbmcrsMetricsConfigurationList' - The list of metrics configurations for a bucket.
+--
+-- * 'lbmcrsNextContinuationToken' - The marker used to continue a metrics configuration listing that has been truncated. Use the NextContinuationToken from a previously truncated list response to continue the listing. The continuation token is an opaque value that Amazon S3 understands.
+--
+-- * 'lbmcrsIsTruncated' - Indicates whether the returned list of metrics configurations is complete. A value of true indicates that the list is not complete and the NextContinuationToken will be provided for a subsequent request.
+--
+-- * 'lbmcrsResponseStatus' - -- | The response status code.
+listBucketMetricsConfigurationsResponse
+    :: Int -- ^ 'lbmcrsResponseStatus'
+    -> ListBucketMetricsConfigurationsResponse
+listBucketMetricsConfigurationsResponse pResponseStatus_ =
+    ListBucketMetricsConfigurationsResponse'
+    { _lbmcrsContinuationToken = Nothing
+    , _lbmcrsMetricsConfigurationList = Nothing
+    , _lbmcrsNextContinuationToken = Nothing
+    , _lbmcrsIsTruncated = Nothing
+    , _lbmcrsResponseStatus = pResponseStatus_
+    }
+
+-- | The marker that is used as a starting point for this metrics configuration list response. This value is present if it was sent in the request.
+lbmcrsContinuationToken :: Lens' ListBucketMetricsConfigurationsResponse (Maybe Text)
+lbmcrsContinuationToken = lens _lbmcrsContinuationToken (\ s a -> s{_lbmcrsContinuationToken = a});
+
+-- | The list of metrics configurations for a bucket.
+lbmcrsMetricsConfigurationList :: Lens' ListBucketMetricsConfigurationsResponse [MetricsConfiguration]
+lbmcrsMetricsConfigurationList = lens _lbmcrsMetricsConfigurationList (\ s a -> s{_lbmcrsMetricsConfigurationList = a}) . _Default . _Coerce;
+
+-- | The marker used to continue a metrics configuration listing that has been truncated. Use the NextContinuationToken from a previously truncated list response to continue the listing. The continuation token is an opaque value that Amazon S3 understands.
+lbmcrsNextContinuationToken :: Lens' ListBucketMetricsConfigurationsResponse (Maybe Text)
+lbmcrsNextContinuationToken = lens _lbmcrsNextContinuationToken (\ s a -> s{_lbmcrsNextContinuationToken = a});
+
+-- | Indicates whether the returned list of metrics configurations is complete. A value of true indicates that the list is not complete and the NextContinuationToken will be provided for a subsequent request.
+lbmcrsIsTruncated :: Lens' ListBucketMetricsConfigurationsResponse (Maybe Bool)
+lbmcrsIsTruncated = lens _lbmcrsIsTruncated (\ s a -> s{_lbmcrsIsTruncated = a});
+
+-- | -- | The response status code.
+lbmcrsResponseStatus :: Lens' ListBucketMetricsConfigurationsResponse Int
+lbmcrsResponseStatus = lens _lbmcrsResponseStatus (\ s a -> s{_lbmcrsResponseStatus = a});
+
+instance NFData
+         ListBucketMetricsConfigurationsResponse
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
@@ -88,11 +88,11 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lbrsBuckets'
+-- * 'lbrsBuckets' - Undocumented member.
 --
--- * 'lbrsOwner'
+-- * 'lbrsOwner' - Undocumented member.
 --
--- * 'lbrsResponseStatus'
+-- * 'lbrsResponseStatus' - -- | The response status code.
 listBucketsResponse
     :: Int -- ^ 'lbrsResponseStatus'
     -> ListBucketsResponse
@@ -111,7 +111,7 @@
 lbrsOwner :: Lens' ListBucketsResponse (Maybe Owner)
 lbrsOwner = lens _lbrsOwner (\ s a -> s{_lbrsOwner = a});
 
--- | The response status code.
+-- | -- | The response status code.
 lbrsResponseStatus :: Lens' ListBucketsResponse Int
 lbrsResponseStatus = lens _lbrsResponseStatus (\ s a -> s{_lbrsResponseStatus = 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
@@ -77,19 +77,19 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lmuKeyMarker'
+-- * 'lmuKeyMarker' - Together with upload-id-marker, this parameter specifies the multipart upload after which listing should begin.
 --
--- * 'lmuPrefix'
+-- * 'lmuPrefix' - Lists in-progress uploads only for those keys that begin with the specified prefix.
 --
--- * 'lmuEncodingType'
+-- * 'lmuEncodingType' - Undocumented member.
 --
--- * 'lmuUploadIdMarker'
+-- * 'lmuUploadIdMarker' - 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.
 --
--- * 'lmuMaxUploads'
+-- * 'lmuMaxUploads' - 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.
 --
--- * 'lmuDelimiter'
+-- * 'lmuDelimiter' - Character you use to group keys.
 --
--- * 'lmuBucket'
+-- * 'lmuBucket' - Undocumented member.
 listMultipartUploads
     :: BucketName -- ^ 'lmuBucket'
     -> ListMultipartUploads
@@ -205,31 +205,31 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lmursKeyMarker'
+-- * 'lmursKeyMarker' - The key at or after which the listing began.
 --
--- * 'lmursPrefix'
+-- * 'lmursPrefix' - When a prefix is provided in the request, this field contains the specified prefix. The result contains only keys starting with the specified prefix.
 --
--- * 'lmursCommonPrefixes'
+-- * 'lmursCommonPrefixes' - Undocumented member.
 --
--- * 'lmursEncodingType'
+-- * 'lmursEncodingType' - Encoding type used by Amazon S3 to encode object keys in the response.
 --
--- * 'lmursBucket'
+-- * 'lmursBucket' - Name of the bucket to which the multipart upload was initiated.
 --
--- * 'lmursUploadIdMarker'
+-- * 'lmursUploadIdMarker' - Upload ID after which listing began.
 --
--- * 'lmursMaxUploads'
+-- * 'lmursMaxUploads' - Maximum number of multipart uploads that could have been included in the response.
 --
--- * 'lmursNextKeyMarker'
+-- * 'lmursNextKeyMarker' - When a list is truncated, this element specifies the value that should be used for the key-marker request parameter in a subsequent request.
 --
--- * 'lmursUploads'
+-- * 'lmursUploads' - Undocumented member.
 --
--- * 'lmursIsTruncated'
+-- * 'lmursIsTruncated' - 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.
 --
--- * 'lmursNextUploadIdMarker'
+-- * 'lmursNextUploadIdMarker' - 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.
 --
--- * 'lmursDelimiter'
+-- * 'lmursDelimiter' - Undocumented member.
 --
--- * 'lmursResponseStatus'
+-- * 'lmursResponseStatus' - -- | The response status code.
 listMultipartUploadsResponse
     :: Int -- ^ 'lmursResponseStatus'
     -> ListMultipartUploadsResponse
@@ -298,7 +298,7 @@
 lmursDelimiter :: Lens' ListMultipartUploadsResponse (Maybe Delimiter)
 lmursDelimiter = lens _lmursDelimiter (\ s a -> s{_lmursDelimiter = a});
 
--- | The response status code.
+-- | -- | The response status code.
 lmursResponseStatus :: Lens' ListMultipartUploadsResponse Int
 lmursResponseStatus = lens _lmursResponseStatus (\ s a -> s{_lmursResponseStatus = 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
@@ -78,19 +78,19 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lovKeyMarker'
+-- * 'lovKeyMarker' - Specifies the key to start with when listing objects in a bucket.
 --
--- * 'lovPrefix'
+-- * 'lovPrefix' - Limits the response to keys that begin with the specified prefix.
 --
--- * 'lovEncodingType'
+-- * 'lovEncodingType' - Undocumented member.
 --
--- * 'lovVersionIdMarker'
+-- * 'lovVersionIdMarker' - Specifies the object version you want to start listing from.
 --
--- * 'lovMaxKeys'
+-- * 'lovMaxKeys' - Sets the maximum number of keys returned in the response. The response might contain fewer keys but will never contain more.
 --
--- * 'lovDelimiter'
+-- * 'lovDelimiter' - A delimiter is a character you use to group keys.
 --
--- * 'lovBucket'
+-- * 'lovBucket' - Undocumented member.
 listObjectVersions
     :: BucketName -- ^ 'lovBucket'
     -> ListObjectVersions
@@ -209,33 +209,33 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lovrsNextVersionIdMarker'
+-- * 'lovrsNextVersionIdMarker' - Use this value for the next version id marker parameter in a subsequent request.
 --
--- * 'lovrsKeyMarker'
+-- * 'lovrsKeyMarker' - Marks the last Key returned in a truncated response.
 --
--- * 'lovrsDeleteMarkers'
+-- * 'lovrsDeleteMarkers' - Undocumented member.
 --
--- * 'lovrsPrefix'
+-- * 'lovrsPrefix' - Undocumented member.
 --
--- * 'lovrsCommonPrefixes'
+-- * 'lovrsCommonPrefixes' - Undocumented member.
 --
--- * 'lovrsEncodingType'
+-- * 'lovrsEncodingType' - Encoding type used by Amazon S3 to encode object keys in the response.
 --
--- * 'lovrsVersions'
+-- * 'lovrsVersions' - Undocumented member.
 --
--- * 'lovrsName'
+-- * 'lovrsName' - Undocumented member.
 --
--- * 'lovrsNextKeyMarker'
+-- * 'lovrsNextKeyMarker' - Use this value for the key marker request parameter in a subsequent request.
 --
--- * 'lovrsVersionIdMarker'
+-- * 'lovrsVersionIdMarker' - Undocumented member.
 --
--- * 'lovrsMaxKeys'
+-- * 'lovrsMaxKeys' - Undocumented member.
 --
--- * 'lovrsIsTruncated'
+-- * 'lovrsIsTruncated' - 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.
 --
--- * 'lovrsDelimiter'
+-- * 'lovrsDelimiter' - Undocumented member.
 --
--- * 'lovrsResponseStatus'
+-- * 'lovrsResponseStatus' - -- | The response status code.
 listObjectVersionsResponse
     :: Int -- ^ 'lovrsResponseStatus'
     -> ListObjectVersionsResponse
@@ -309,7 +309,7 @@
 lovrsDelimiter :: Lens' ListObjectVersionsResponse (Maybe Delimiter)
 lovrsDelimiter = lens _lovrsDelimiter (\ s a -> s{_lovrsDelimiter = a});
 
--- | The response status code.
+-- | -- | The response status code.
 lovrsResponseStatus :: Lens' ListObjectVersionsResponse Int
 lovrsResponseStatus = lens _lovrsResponseStatus (\ s a -> s{_lovrsResponseStatus = 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
@@ -29,6 +29,7 @@
     -- * Request Lenses
     , loPrefix
     , loEncodingType
+    , loRequestPayer
     , loMarker
     , loMaxKeys
     , loDelimiter
@@ -63,6 +64,7 @@
 data ListObjects = ListObjects'
     { _loPrefix       :: !(Maybe Text)
     , _loEncodingType :: !(Maybe EncodingType)
+    , _loRequestPayer :: !(Maybe RequestPayer)
     , _loMarker       :: !(Maybe Text)
     , _loMaxKeys      :: !(Maybe Int)
     , _loDelimiter    :: !(Maybe Delimiter)
@@ -73,17 +75,19 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'loPrefix'
+-- * 'loPrefix' - Limits the response to keys that begin with the specified prefix.
 --
--- * 'loEncodingType'
+-- * 'loEncodingType' - Undocumented member.
 --
--- * 'loMarker'
+-- * 'loRequestPayer' - Confirms that the requester knows that she or he will be charged for the list objects request. Bucket owners need not specify this parameter in their requests.
 --
--- * 'loMaxKeys'
+-- * 'loMarker' - Specifies the key to start with when listing objects in a bucket.
 --
--- * 'loDelimiter'
+-- * 'loMaxKeys' - Sets the maximum number of keys returned in the response. The response might contain fewer keys but will never contain more.
 --
--- * 'loBucket'
+-- * 'loDelimiter' - A delimiter is a character you use to group keys.
+--
+-- * 'loBucket' - Undocumented member.
 listObjects
     :: BucketName -- ^ 'loBucket'
     -> ListObjects
@@ -91,6 +95,7 @@
     ListObjects'
     { _loPrefix = Nothing
     , _loEncodingType = Nothing
+    , _loRequestPayer = Nothing
     , _loMarker = Nothing
     , _loMaxKeys = Nothing
     , _loDelimiter = Nothing
@@ -105,6 +110,10 @@
 loEncodingType :: Lens' ListObjects (Maybe EncodingType)
 loEncodingType = lens _loEncodingType (\ s a -> s{_loEncodingType = a});
 
+-- | Confirms that the requester knows that she or he will be charged for the list objects request. Bucket owners need not specify this parameter in their requests.
+loRequestPayer :: Lens' ListObjects (Maybe RequestPayer)
+loRequestPayer = lens _loRequestPayer (\ s a -> s{_loRequestPayer = 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});
@@ -160,7 +169,8 @@
 instance NFData ListObjects
 
 instance ToHeaders ListObjects where
-        toHeaders = const mempty
+        toHeaders ListObjects'{..}
+          = mconcat ["x-amz-request-payer" =# _loRequestPayer]
 
 instance ToPath ListObjects where
         toPath ListObjects'{..}
@@ -193,27 +203,27 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lorsContents'
+-- * 'lorsContents' - Undocumented member.
 --
--- * 'lorsPrefix'
+-- * 'lorsPrefix' - Undocumented member.
 --
--- * 'lorsCommonPrefixes'
+-- * 'lorsCommonPrefixes' - Undocumented member.
 --
--- * 'lorsEncodingType'
+-- * 'lorsEncodingType' - Encoding type used by Amazon S3 to encode object keys in the response.
 --
--- * 'lorsName'
+-- * 'lorsName' - Undocumented member.
 --
--- * 'lorsMarker'
+-- * 'lorsMarker' - Undocumented member.
 --
--- * 'lorsNextMarker'
+-- * 'lorsNextMarker' - 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.
 --
--- * 'lorsMaxKeys'
+-- * 'lorsMaxKeys' - Undocumented member.
 --
--- * 'lorsIsTruncated'
+-- * 'lorsIsTruncated' - A flag that indicates whether or not Amazon S3 returned all of the results that satisfied the search criteria.
 --
--- * 'lorsDelimiter'
+-- * 'lorsDelimiter' - Undocumented member.
 --
--- * 'lorsResponseStatus'
+-- * 'lorsResponseStatus' - -- | The response status code.
 listObjectsResponse
     :: Int -- ^ 'lorsResponseStatus'
     -> ListObjectsResponse
@@ -272,7 +282,7 @@
 lorsDelimiter :: Lens' ListObjectsResponse (Maybe Delimiter)
 lorsDelimiter = lens _lorsDelimiter (\ s a -> s{_lorsDelimiter = a});
 
--- | The response status code.
+-- | -- | The response status code.
 lorsResponseStatus :: Lens' ListObjectsResponse Int
 lorsResponseStatus = lens _lorsResponseStatus (\ s a -> s{_lorsResponseStatus = a});
 
diff --git a/gen/Network/AWS/S3/ListObjectsV.hs b/gen/Network/AWS/S3/ListObjectsV.hs
--- a/gen/Network/AWS/S3/ListObjectsV.hs
+++ b/gen/Network/AWS/S3/ListObjectsV.hs
@@ -30,6 +30,7 @@
     , lFetchOwner
     , lPrefix
     , lEncodingType
+    , lRequestPayer
     , lMaxKeys
     , lDelimiter
     , lBucket
@@ -67,6 +68,7 @@
     , _lFetchOwner        :: !(Maybe Bool)
     , _lPrefix            :: !(Maybe Text)
     , _lEncodingType      :: !(Maybe EncodingType)
+    , _lRequestPayer      :: !(Maybe RequestPayer)
     , _lMaxKeys           :: !(Maybe Int)
     , _lDelimiter         :: !(Maybe Delimiter)
     , _lBucket            :: !BucketName
@@ -76,21 +78,23 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lStartAfter'
+-- * 'lStartAfter' - StartAfter is where you want Amazon S3 to start listing from. Amazon S3 starts listing after this specified key. StartAfter can be any key in the bucket
 --
--- * 'lContinuationToken'
+-- * 'lContinuationToken' - ContinuationToken indicates Amazon S3 that the list is being continued on this bucket with a token. ContinuationToken is obfuscated and is not a real key
 --
--- * 'lFetchOwner'
+-- * 'lFetchOwner' - The owner field is not present in listV2 by default, if you want to return owner field with each key in the result then set the fetch owner field to true
 --
--- * 'lPrefix'
+-- * 'lPrefix' - Limits the response to keys that begin with the specified prefix.
 --
--- * 'lEncodingType'
+-- * 'lEncodingType' - Encoding type used by Amazon S3 to encode object keys in the response.
 --
--- * 'lMaxKeys'
+-- * 'lRequestPayer' - Confirms that the requester knows that she or he will be charged for the list objects request in V2 style. Bucket owners need not specify this parameter in their requests.
 --
--- * 'lDelimiter'
+-- * 'lMaxKeys' - Sets the maximum number of keys returned in the response. The response might contain fewer keys but will never contain more.
 --
--- * 'lBucket'
+-- * 'lDelimiter' - A delimiter is a character you use to group keys.
+--
+-- * 'lBucket' - Name of the bucket to list.
 listObjectsV
     :: BucketName -- ^ 'lBucket'
     -> ListObjectsV
@@ -101,6 +105,7 @@
     , _lFetchOwner = Nothing
     , _lPrefix = Nothing
     , _lEncodingType = Nothing
+    , _lRequestPayer = Nothing
     , _lMaxKeys = Nothing
     , _lDelimiter = Nothing
     , _lBucket = pBucket_
@@ -126,6 +131,10 @@
 lEncodingType :: Lens' ListObjectsV (Maybe EncodingType)
 lEncodingType = lens _lEncodingType (\ s a -> s{_lEncodingType = a});
 
+-- | Confirms that the requester knows that she or he will be charged for the list objects request in V2 style. Bucket owners need not specify this parameter in their requests.
+lRequestPayer :: Lens' ListObjectsV (Maybe RequestPayer)
+lRequestPayer = lens _lRequestPayer (\ s a -> s{_lRequestPayer = a});
+
 -- | Sets the maximum number of keys returned in the response. The response might contain fewer keys but will never contain more.
 lMaxKeys :: Lens' ListObjectsV (Maybe Int)
 lMaxKeys = lens _lMaxKeys (\ s a -> s{_lMaxKeys = a});
@@ -163,7 +172,8 @@
 instance NFData ListObjectsV
 
 instance ToHeaders ListObjectsV where
-        toHeaders = const mempty
+        toHeaders ListObjectsV'{..}
+          = mconcat ["x-amz-request-payer" =# _lRequestPayer]
 
 instance ToPath ListObjectsV where
         toPath ListObjectsV'{..}
@@ -200,31 +210,31 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lrsStartAfter'
+-- * 'lrsStartAfter' - StartAfter is where you want Amazon S3 to start listing from. Amazon S3 starts listing after this specified key. StartAfter can be any key in the bucket
 --
--- * 'lrsKeyCount'
+-- * 'lrsKeyCount' - KeyCount is the number of keys returned with this request. KeyCount will always be less than equals to MaxKeys field. Say you ask for 50 keys, your result will include less than equals 50 keys
 --
--- * 'lrsContents'
+-- * 'lrsContents' - Metadata about each object returned.
 --
--- * 'lrsContinuationToken'
+-- * 'lrsContinuationToken' - ContinuationToken indicates Amazon S3 that the list is being continued on this bucket with a token. ContinuationToken is obfuscated and is not a real key
 --
--- * 'lrsPrefix'
+-- * 'lrsPrefix' - Limits the response to keys that begin with the specified prefix.
 --
--- * 'lrsCommonPrefixes'
+-- * 'lrsCommonPrefixes' - CommonPrefixes contains all (if there are any) keys between Prefix and the next occurrence of the string specified by delimiter
 --
--- * 'lrsEncodingType'
+-- * 'lrsEncodingType' - Encoding type used by Amazon S3 to encode object keys in the response.
 --
--- * 'lrsName'
+-- * 'lrsName' - Name of the bucket to list.
 --
--- * 'lrsNextContinuationToken'
+-- * 'lrsNextContinuationToken' - NextContinuationToken is sent when isTruncated is true which means there are more keys in the bucket that can be listed. The next list requests to Amazon S3 can be continued with this NextContinuationToken. NextContinuationToken is obfuscated and is not a real key
 --
--- * 'lrsMaxKeys'
+-- * 'lrsMaxKeys' - Sets the maximum number of keys returned in the response. The response might contain fewer keys but will never contain more.
 --
--- * 'lrsIsTruncated'
+-- * 'lrsIsTruncated' - A flag that indicates whether or not Amazon S3 returned all of the results that satisfied the search criteria.
 --
--- * 'lrsDelimiter'
+-- * 'lrsDelimiter' - A delimiter is a character you use to group keys.
 --
--- * 'lrsResponseStatus'
+-- * 'lrsResponseStatus' - -- | The response status code.
 listObjectsVResponse
     :: Int -- ^ 'lrsResponseStatus'
     -> ListObjectsVResponse
@@ -293,7 +303,7 @@
 lrsDelimiter :: Lens' ListObjectsVResponse (Maybe Delimiter)
 lrsDelimiter = lens _lrsDelimiter (\ s a -> s{_lrsDelimiter = a});
 
--- | The response status code.
+-- | -- | The response status code.
 lrsResponseStatus :: Lens' ListObjectsVResponse Int
 lrsResponseStatus = lens _lrsResponseStatus (\ s a -> s{_lrsResponseStatus = 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
@@ -77,17 +77,17 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lpMaxParts'
+-- * 'lpMaxParts' - Sets the maximum number of parts to return.
 --
--- * 'lpRequestPayer'
+-- * 'lpRequestPayer' - Undocumented member.
 --
--- * 'lpPartNumberMarker'
+-- * 'lpPartNumberMarker' - Specifies the part after which listing should begin. Only parts with higher part numbers will be listed.
 --
--- * 'lpBucket'
+-- * 'lpBucket' - Undocumented member.
 --
--- * 'lpKey'
+-- * 'lpKey' - Undocumented member.
 --
--- * 'lpUploadId'
+-- * 'lpUploadId' - Upload ID identifying the multipart upload whose parts are being listed.
 listParts
     :: BucketName -- ^ 'lpBucket'
     -> ObjectKey -- ^ 'lpKey'
@@ -201,35 +201,35 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lprsParts'
+-- * 'lprsParts' - Undocumented member.
 --
--- * 'lprsRequestCharged'
+-- * 'lprsRequestCharged' - Undocumented member.
 --
--- * 'lprsMaxParts'
+-- * 'lprsMaxParts' - Maximum number of parts that were allowed in the response.
 --
--- * 'lprsInitiator'
+-- * 'lprsInitiator' - Identifies who initiated the multipart upload.
 --
--- * 'lprsBucket'
+-- * 'lprsBucket' - Name of the bucket to which the multipart upload was initiated.
 --
--- * 'lprsAbortDate'
+-- * 'lprsAbortDate' - Date when multipart upload will become eligible for abort operation by lifecycle.
 --
--- * 'lprsNextPartNumberMarker'
+-- * 'lprsNextPartNumberMarker' - 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.
 --
--- * 'lprsAbortRuleId'
+-- * 'lprsAbortRuleId' - Id of the lifecycle rule that makes a multipart upload eligible for abort operation.
 --
--- * 'lprsOwner'
+-- * 'lprsOwner' - Undocumented member.
 --
--- * 'lprsKey'
+-- * 'lprsKey' - Object key for which the multipart upload was initiated.
 --
--- * 'lprsStorageClass'
+-- * 'lprsStorageClass' - The class of storage used to store the object.
 --
--- * 'lprsIsTruncated'
+-- * 'lprsIsTruncated' - Indicates whether the returned list of parts is truncated.
 --
--- * 'lprsPartNumberMarker'
+-- * 'lprsPartNumberMarker' - Part number after which listing begins.
 --
--- * 'lprsUploadId'
+-- * 'lprsUploadId' - Upload ID identifying the multipart upload whose parts are being listed.
 --
--- * 'lprsResponseStatus'
+-- * 'lprsResponseStatus' - -- | The response status code.
 listPartsResponse
     :: Int -- ^ 'lprsResponseStatus'
     -> ListPartsResponse
@@ -308,7 +308,7 @@
 lprsUploadId :: Lens' ListPartsResponse (Maybe Text)
 lprsUploadId = lens _lprsUploadId (\ s a -> s{_lprsUploadId = a});
 
--- | The response status code.
+-- | -- | The response status code.
 lprsResponseStatus :: Lens' ListPartsResponse Int
 lprsResponseStatus = lens _lprsResponseStatus (\ s a -> s{_lprsResponseStatus = a});
 
diff --git a/gen/Network/AWS/S3/PutBucketACL.hs b/gen/Network/AWS/S3/PutBucketACL.hs
--- a/gen/Network/AWS/S3/PutBucketACL.hs
+++ b/gen/Network/AWS/S3/PutBucketACL.hs
@@ -64,23 +64,23 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pbaGrantReadACP'
+-- * 'pbaGrantReadACP' - Allows grantee to read the bucket ACL.
 --
--- * 'pbaGrantWriteACP'
+-- * 'pbaGrantWriteACP' - Allows grantee to write the ACL for the applicable bucket.
 --
--- * 'pbaGrantRead'
+-- * 'pbaGrantRead' - Allows grantee to list the objects in the bucket.
 --
--- * 'pbaGrantFullControl'
+-- * 'pbaGrantFullControl' - Allows grantee the read, write, read ACP, and write ACP permissions on the bucket.
 --
--- * 'pbaContentMD5'
+-- * 'pbaContentMD5' - Undocumented member.
 --
--- * 'pbaAccessControlPolicy'
+-- * 'pbaAccessControlPolicy' - Undocumented member.
 --
--- * 'pbaGrantWrite'
+-- * 'pbaGrantWrite' - Allows grantee to create, overwrite, and delete any object in the bucket.
 --
--- * 'pbaACL'
+-- * 'pbaACL' - The canned ACL to apply to the bucket.
 --
--- * 'pbaBucket'
+-- * 'pbaBucket' - Undocumented member.
 putBucketACL
     :: BucketName -- ^ 'pbaBucket'
     -> PutBucketACL
diff --git a/gen/Network/AWS/S3/PutBucketAccelerateConfiguration.hs b/gen/Network/AWS/S3/PutBucketAccelerateConfiguration.hs
--- a/gen/Network/AWS/S3/PutBucketAccelerateConfiguration.hs
+++ b/gen/Network/AWS/S3/PutBucketAccelerateConfiguration.hs
@@ -50,9 +50,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pbacBucket'
+-- * 'pbacBucket' - Name of the bucket for which the accelerate configuration is set.
 --
--- * 'pbacAccelerateConfiguration'
+-- * 'pbacAccelerateConfiguration' - Specifies the Accelerate Configuration you want to set for the bucket.
 putBucketAccelerateConfiguration
     :: BucketName -- ^ 'pbacBucket'
     -> AccelerateConfiguration -- ^ 'pbacAccelerateConfiguration'
diff --git a/gen/Network/AWS/S3/PutBucketAnalyticsConfiguration.hs b/gen/Network/AWS/S3/PutBucketAnalyticsConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/PutBucketAnalyticsConfiguration.hs
@@ -0,0 +1,131 @@
+{-# 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.PutBucketAnalyticsConfiguration
+-- Copyright   : (c) 2013-2016 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 an analytics configuration for the bucket (specified by the analytics configuration ID).
+module Network.AWS.S3.PutBucketAnalyticsConfiguration
+    (
+    -- * Creating a Request
+      putBucketAnalyticsConfiguration
+    , PutBucketAnalyticsConfiguration
+    -- * Request Lenses
+    , pBucket
+    , pId
+    , pAnalyticsConfiguration
+
+    -- * Destructuring the Response
+    , putBucketAnalyticsConfigurationResponse
+    , PutBucketAnalyticsConfigurationResponse
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'putBucketAnalyticsConfiguration' smart constructor.
+data PutBucketAnalyticsConfiguration = PutBucketAnalyticsConfiguration'
+    { _pBucket                 :: !BucketName
+    , _pId                     :: !Text
+    , _pAnalyticsConfiguration :: !AnalyticsConfiguration
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutBucketAnalyticsConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pBucket' - The name of the bucket to which an analytics configuration is stored.
+--
+-- * 'pId' - The identifier used to represent an analytics configuration.
+--
+-- * 'pAnalyticsConfiguration' - The configuration and any analyses for the analytics filter.
+putBucketAnalyticsConfiguration
+    :: BucketName -- ^ 'pBucket'
+    -> Text -- ^ 'pId'
+    -> AnalyticsConfiguration -- ^ 'pAnalyticsConfiguration'
+    -> PutBucketAnalyticsConfiguration
+putBucketAnalyticsConfiguration pBucket_ pId_ pAnalyticsConfiguration_ =
+    PutBucketAnalyticsConfiguration'
+    { _pBucket = pBucket_
+    , _pId = pId_
+    , _pAnalyticsConfiguration = pAnalyticsConfiguration_
+    }
+
+-- | The name of the bucket to which an analytics configuration is stored.
+pBucket :: Lens' PutBucketAnalyticsConfiguration BucketName
+pBucket = lens _pBucket (\ s a -> s{_pBucket = a});
+
+-- | The identifier used to represent an analytics configuration.
+pId :: Lens' PutBucketAnalyticsConfiguration Text
+pId = lens _pId (\ s a -> s{_pId = a});
+
+-- | The configuration and any analyses for the analytics filter.
+pAnalyticsConfiguration :: Lens' PutBucketAnalyticsConfiguration AnalyticsConfiguration
+pAnalyticsConfiguration = lens _pAnalyticsConfiguration (\ s a -> s{_pAnalyticsConfiguration = a});
+
+instance AWSRequest PutBucketAnalyticsConfiguration
+         where
+        type Rs PutBucketAnalyticsConfiguration =
+             PutBucketAnalyticsConfigurationResponse
+        request = putXML s3
+        response
+          = receiveNull
+              PutBucketAnalyticsConfigurationResponse'
+
+instance Hashable PutBucketAnalyticsConfiguration
+
+instance NFData PutBucketAnalyticsConfiguration
+
+instance ToElement PutBucketAnalyticsConfiguration
+         where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}AnalyticsConfiguration"
+              .
+              _pAnalyticsConfiguration
+
+instance ToHeaders PutBucketAnalyticsConfiguration
+         where
+        toHeaders = const mempty
+
+instance ToPath PutBucketAnalyticsConfiguration where
+        toPath PutBucketAnalyticsConfiguration'{..}
+          = mconcat ["/", toBS _pBucket]
+
+instance ToQuery PutBucketAnalyticsConfiguration
+         where
+        toQuery PutBucketAnalyticsConfiguration'{..}
+          = mconcat ["id" =: _pId, "analytics"]
+
+-- | /See:/ 'putBucketAnalyticsConfigurationResponse' smart constructor.
+data PutBucketAnalyticsConfigurationResponse =
+    PutBucketAnalyticsConfigurationResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutBucketAnalyticsConfigurationResponse' with the minimum fields required to make a request.
+--
+putBucketAnalyticsConfigurationResponse
+    :: PutBucketAnalyticsConfigurationResponse
+putBucketAnalyticsConfigurationResponse =
+    PutBucketAnalyticsConfigurationResponse'
+
+instance NFData
+         PutBucketAnalyticsConfigurationResponse
diff --git a/gen/Network/AWS/S3/PutBucketCORS.hs b/gen/Network/AWS/S3/PutBucketCORS.hs
--- a/gen/Network/AWS/S3/PutBucketCORS.hs
+++ b/gen/Network/AWS/S3/PutBucketCORS.hs
@@ -52,11 +52,11 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pbcContentMD5'
+-- * 'pbcContentMD5' - Undocumented member.
 --
--- * 'pbcBucket'
+-- * 'pbcBucket' - Undocumented member.
 --
--- * 'pbcCORSConfiguration'
+-- * 'pbcCORSConfiguration' - Undocumented member.
 putBucketCORS
     :: BucketName -- ^ 'pbcBucket'
     -> CORSConfiguration -- ^ 'pbcCORSConfiguration'
diff --git a/gen/Network/AWS/S3/PutBucketInventoryConfiguration.hs b/gen/Network/AWS/S3/PutBucketInventoryConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/PutBucketInventoryConfiguration.hs
@@ -0,0 +1,131 @@
+{-# 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.PutBucketInventoryConfiguration
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Adds an inventory configuration (identified by the inventory ID) from the bucket.
+module Network.AWS.S3.PutBucketInventoryConfiguration
+    (
+    -- * Creating a Request
+      putBucketInventoryConfiguration
+    , PutBucketInventoryConfiguration
+    -- * Request Lenses
+    , pbicBucket
+    , pbicId
+    , pbicInventoryConfiguration
+
+    -- * Destructuring the Response
+    , putBucketInventoryConfigurationResponse
+    , PutBucketInventoryConfigurationResponse
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'putBucketInventoryConfiguration' smart constructor.
+data PutBucketInventoryConfiguration = PutBucketInventoryConfiguration'
+    { _pbicBucket                 :: !BucketName
+    , _pbicId                     :: !Text
+    , _pbicInventoryConfiguration :: !InventoryConfiguration
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutBucketInventoryConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pbicBucket' - The name of the bucket where the inventory configuration will be stored.
+--
+-- * 'pbicId' - The ID used to identify the inventory configuration.
+--
+-- * 'pbicInventoryConfiguration' - Specifies the inventory configuration.
+putBucketInventoryConfiguration
+    :: BucketName -- ^ 'pbicBucket'
+    -> Text -- ^ 'pbicId'
+    -> InventoryConfiguration -- ^ 'pbicInventoryConfiguration'
+    -> PutBucketInventoryConfiguration
+putBucketInventoryConfiguration pBucket_ pId_ pInventoryConfiguration_ =
+    PutBucketInventoryConfiguration'
+    { _pbicBucket = pBucket_
+    , _pbicId = pId_
+    , _pbicInventoryConfiguration = pInventoryConfiguration_
+    }
+
+-- | The name of the bucket where the inventory configuration will be stored.
+pbicBucket :: Lens' PutBucketInventoryConfiguration BucketName
+pbicBucket = lens _pbicBucket (\ s a -> s{_pbicBucket = a});
+
+-- | The ID used to identify the inventory configuration.
+pbicId :: Lens' PutBucketInventoryConfiguration Text
+pbicId = lens _pbicId (\ s a -> s{_pbicId = a});
+
+-- | Specifies the inventory configuration.
+pbicInventoryConfiguration :: Lens' PutBucketInventoryConfiguration InventoryConfiguration
+pbicInventoryConfiguration = lens _pbicInventoryConfiguration (\ s a -> s{_pbicInventoryConfiguration = a});
+
+instance AWSRequest PutBucketInventoryConfiguration
+         where
+        type Rs PutBucketInventoryConfiguration =
+             PutBucketInventoryConfigurationResponse
+        request = putXML s3
+        response
+          = receiveNull
+              PutBucketInventoryConfigurationResponse'
+
+instance Hashable PutBucketInventoryConfiguration
+
+instance NFData PutBucketInventoryConfiguration
+
+instance ToElement PutBucketInventoryConfiguration
+         where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}InventoryConfiguration"
+              .
+              _pbicInventoryConfiguration
+
+instance ToHeaders PutBucketInventoryConfiguration
+         where
+        toHeaders = const mempty
+
+instance ToPath PutBucketInventoryConfiguration where
+        toPath PutBucketInventoryConfiguration'{..}
+          = mconcat ["/", toBS _pbicBucket]
+
+instance ToQuery PutBucketInventoryConfiguration
+         where
+        toQuery PutBucketInventoryConfiguration'{..}
+          = mconcat ["id" =: _pbicId, "inventory"]
+
+-- | /See:/ 'putBucketInventoryConfigurationResponse' smart constructor.
+data PutBucketInventoryConfigurationResponse =
+    PutBucketInventoryConfigurationResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutBucketInventoryConfigurationResponse' with the minimum fields required to make a request.
+--
+putBucketInventoryConfigurationResponse
+    :: PutBucketInventoryConfigurationResponse
+putBucketInventoryConfigurationResponse =
+    PutBucketInventoryConfigurationResponse'
+
+instance NFData
+         PutBucketInventoryConfigurationResponse
diff --git a/gen/Network/AWS/S3/PutBucketLifecycleConfiguration.hs b/gen/Network/AWS/S3/PutBucketLifecycleConfiguration.hs
--- a/gen/Network/AWS/S3/PutBucketLifecycleConfiguration.hs
+++ b/gen/Network/AWS/S3/PutBucketLifecycleConfiguration.hs
@@ -50,9 +50,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pblcLifecycleConfiguration'
+-- * 'pblcLifecycleConfiguration' - Undocumented member.
 --
--- * 'pblcBucket'
+-- * 'pblcBucket' - Undocumented member.
 putBucketLifecycleConfiguration
     :: BucketName -- ^ 'pblcBucket'
     -> PutBucketLifecycleConfiguration
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
@@ -52,11 +52,11 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pblContentMD5'
+-- * 'pblContentMD5' - Undocumented member.
 --
--- * 'pblBucket'
+-- * 'pblBucket' - Undocumented member.
 --
--- * 'pblBucketLoggingStatus'
+-- * 'pblBucketLoggingStatus' - Undocumented member.
 putBucketLogging
     :: BucketName -- ^ 'pblBucket'
     -> BucketLoggingStatus -- ^ 'pblBucketLoggingStatus'
diff --git a/gen/Network/AWS/S3/PutBucketMetricsConfiguration.hs b/gen/Network/AWS/S3/PutBucketMetricsConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/PutBucketMetricsConfiguration.hs
@@ -0,0 +1,127 @@
+{-# 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.PutBucketMetricsConfiguration
+-- Copyright   : (c) 2013-2016 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 a metrics configuration (specified by the metrics configuration ID) for the bucket.
+module Network.AWS.S3.PutBucketMetricsConfiguration
+    (
+    -- * Creating a Request
+      putBucketMetricsConfiguration
+    , PutBucketMetricsConfiguration
+    -- * Request Lenses
+    , pbmcBucket
+    , pbmcId
+    , pbmcMetricsConfiguration
+
+    -- * Destructuring the Response
+    , putBucketMetricsConfigurationResponse
+    , PutBucketMetricsConfigurationResponse
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'putBucketMetricsConfiguration' smart constructor.
+data PutBucketMetricsConfiguration = PutBucketMetricsConfiguration'
+    { _pbmcBucket               :: !BucketName
+    , _pbmcId                   :: !Text
+    , _pbmcMetricsConfiguration :: !MetricsConfiguration
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutBucketMetricsConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pbmcBucket' - The name of the bucket for which the metrics configuration is set.
+--
+-- * 'pbmcId' - The ID used to identify the metrics configuration.
+--
+-- * 'pbmcMetricsConfiguration' - Specifies the metrics configuration.
+putBucketMetricsConfiguration
+    :: BucketName -- ^ 'pbmcBucket'
+    -> Text -- ^ 'pbmcId'
+    -> MetricsConfiguration -- ^ 'pbmcMetricsConfiguration'
+    -> PutBucketMetricsConfiguration
+putBucketMetricsConfiguration pBucket_ pId_ pMetricsConfiguration_ =
+    PutBucketMetricsConfiguration'
+    { _pbmcBucket = pBucket_
+    , _pbmcId = pId_
+    , _pbmcMetricsConfiguration = pMetricsConfiguration_
+    }
+
+-- | The name of the bucket for which the metrics configuration is set.
+pbmcBucket :: Lens' PutBucketMetricsConfiguration BucketName
+pbmcBucket = lens _pbmcBucket (\ s a -> s{_pbmcBucket = a});
+
+-- | The ID used to identify the metrics configuration.
+pbmcId :: Lens' PutBucketMetricsConfiguration Text
+pbmcId = lens _pbmcId (\ s a -> s{_pbmcId = a});
+
+-- | Specifies the metrics configuration.
+pbmcMetricsConfiguration :: Lens' PutBucketMetricsConfiguration MetricsConfiguration
+pbmcMetricsConfiguration = lens _pbmcMetricsConfiguration (\ s a -> s{_pbmcMetricsConfiguration = a});
+
+instance AWSRequest PutBucketMetricsConfiguration
+         where
+        type Rs PutBucketMetricsConfiguration =
+             PutBucketMetricsConfigurationResponse
+        request = putXML s3
+        response
+          = receiveNull PutBucketMetricsConfigurationResponse'
+
+instance Hashable PutBucketMetricsConfiguration
+
+instance NFData PutBucketMetricsConfiguration
+
+instance ToElement PutBucketMetricsConfiguration
+         where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}MetricsConfiguration"
+              .
+              _pbmcMetricsConfiguration
+
+instance ToHeaders PutBucketMetricsConfiguration
+         where
+        toHeaders = const mempty
+
+instance ToPath PutBucketMetricsConfiguration where
+        toPath PutBucketMetricsConfiguration'{..}
+          = mconcat ["/", toBS _pbmcBucket]
+
+instance ToQuery PutBucketMetricsConfiguration where
+        toQuery PutBucketMetricsConfiguration'{..}
+          = mconcat ["id" =: _pbmcId, "metrics"]
+
+-- | /See:/ 'putBucketMetricsConfigurationResponse' smart constructor.
+data PutBucketMetricsConfigurationResponse =
+    PutBucketMetricsConfigurationResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutBucketMetricsConfigurationResponse' with the minimum fields required to make a request.
+--
+putBucketMetricsConfigurationResponse
+    :: PutBucketMetricsConfigurationResponse
+putBucketMetricsConfigurationResponse = PutBucketMetricsConfigurationResponse'
+
+instance NFData PutBucketMetricsConfigurationResponse
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
@@ -50,9 +50,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pbncBucket'
+-- * 'pbncBucket' - Undocumented member.
 --
--- * 'pbncNotificationConfiguration'
+-- * 'pbncNotificationConfiguration' - Undocumented member.
 putBucketNotificationConfiguration
     :: BucketName -- ^ 'pbncBucket'
     -> NotificationConfiguration -- ^ 'pbncNotificationConfiguration'
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
@@ -52,11 +52,11 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pbpContentMD5'
+-- * 'pbpContentMD5' - Undocumented member.
 --
--- * 'pbpBucket'
+-- * 'pbpBucket' - Undocumented member.
 --
--- * 'pbpPolicy'
+-- * 'pbpPolicy' - The bucket policy as a JSON document.
 putBucketPolicy
     :: BucketName -- ^ 'pbpBucket'
     -> HashMap Text Value -- ^ 'pbpPolicy'
@@ -82,7 +82,7 @@
 
 instance AWSRequest PutBucketPolicy where
         type Rs PutBucketPolicy = PutBucketPolicyResponse
-        request = contentMD5 . putBody s3
+        request = contentMD5Header . putBody s3
         response = receiveNull PutBucketPolicyResponse'
 
 instance Hashable PutBucketPolicy
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
@@ -52,11 +52,11 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pbrContentMD5'
+-- * 'pbrContentMD5' - Undocumented member.
 --
--- * 'pbrBucket'
+-- * 'pbrBucket' - Undocumented member.
 --
--- * 'pbrReplicationConfiguration'
+-- * 'pbrReplicationConfiguration' - Undocumented member.
 putBucketReplication
     :: BucketName -- ^ 'pbrBucket'
     -> ReplicationConfiguration -- ^ 'pbrReplicationConfiguration'
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
@@ -18,7 +18,7 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- 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
 module Network.AWS.S3.PutBucketRequestPayment
     (
     -- * Creating a Request
@@ -52,11 +52,11 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pbrpContentMD5'
+-- * 'pbrpContentMD5' - Undocumented member.
 --
--- * 'pbrpBucket'
+-- * 'pbrpBucket' - Undocumented member.
 --
--- * 'pbrpRequestPaymentConfiguration'
+-- * 'pbrpRequestPaymentConfiguration' - Undocumented member.
 putBucketRequestPayment
     :: BucketName -- ^ 'pbrpBucket'
     -> RequestPaymentConfiguration -- ^ 'pbrpRequestPaymentConfiguration'
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
@@ -52,11 +52,11 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pbtContentMD5'
+-- * 'pbtContentMD5' - Undocumented member.
 --
--- * 'pbtBucket'
+-- * 'pbtBucket' - Undocumented member.
 --
--- * 'pbtTagging'
+-- * 'pbtTagging' - Undocumented member.
 putBucketTagging
     :: BucketName -- ^ 'pbtBucket'
     -> Tagging -- ^ 'pbtTagging'
@@ -82,7 +82,7 @@
 
 instance AWSRequest PutBucketTagging where
         type Rs PutBucketTagging = PutBucketTaggingResponse
-        request = contentMD5 . putXML s3
+        request = contentMD5Header . putXML s3
         response = receiveNull PutBucketTaggingResponse'
 
 instance Hashable PutBucketTagging
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
@@ -54,13 +54,13 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pbvMFA'
+-- * 'pbvMFA' - The concatenation of the authentication device's serial number, a space, and the value that is displayed on your authentication device.
 --
--- * 'pbvContentMD5'
+-- * 'pbvContentMD5' - Undocumented member.
 --
--- * 'pbvBucket'
+-- * 'pbvBucket' - Undocumented member.
 --
--- * 'pbvVersioningConfiguration'
+-- * 'pbvVersioningConfiguration' - Undocumented member.
 putBucketVersioning
     :: BucketName -- ^ 'pbvBucket'
     -> VersioningConfiguration -- ^ 'pbvVersioningConfiguration'
@@ -73,7 +73,7 @@
     , _pbvVersioningConfiguration = pVersioningConfiguration_
     }
 
--- | 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.
 pbvMFA :: Lens' PutBucketVersioning (Maybe Text)
 pbvMFA = lens _pbvMFA (\ s a -> s{_pbvMFA = a});
 
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
@@ -52,11 +52,11 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pbwContentMD5'
+-- * 'pbwContentMD5' - Undocumented member.
 --
--- * 'pbwBucket'
+-- * 'pbwBucket' - Undocumented member.
 --
--- * 'pbwWebsiteConfiguration'
+-- * 'pbwWebsiteConfiguration' - Undocumented member.
 putBucketWebsite
     :: BucketName -- ^ 'pbwBucket'
     -> WebsiteConfiguration -- ^ 'pbwWebsiteConfiguration'
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
@@ -39,6 +39,7 @@
     , poSSEKMSKeyId
     , poGrantFullControl
     , poContentEncoding
+    , poTagging
     , poContentMD5
     , poMetadata
     , poCacheControl
@@ -89,6 +90,7 @@
     , _poSSEKMSKeyId             :: !(Maybe (Sensitive Text))
     , _poGrantFullControl        :: !(Maybe Text)
     , _poContentEncoding         :: !(Maybe Text)
+    , _poTagging                 :: !(Maybe Text)
     , _poContentMD5              :: !(Maybe Text)
     , _poMetadata                :: !(Map Text Text)
     , _poCacheControl            :: !(Maybe Text)
@@ -106,55 +108,57 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'poContentLength'
+-- * 'poContentLength' - Size of the body in bytes. This parameter is useful when the size of the body cannot be determined automatically.
 --
--- * 'poExpires'
+-- * 'poExpires' - The date and time at which the object is no longer cacheable.
 --
--- * 'poGrantReadACP'
+-- * 'poGrantReadACP' - Allows grantee to read the object ACL.
 --
--- * 'poSSECustomerAlgorithm'
+-- * 'poSSECustomerAlgorithm' - Specifies the algorithm to use to when encrypting the object (e.g., AES256).
 --
--- * 'poSSECustomerKey'
+-- * 'poSSECustomerKey' - 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.
 --
--- * 'poRequestPayer'
+-- * 'poRequestPayer' - Undocumented member.
 --
--- * 'poGrantWriteACP'
+-- * 'poGrantWriteACP' - Allows grantee to write the ACL for the applicable object.
 --
--- * 'poWebsiteRedirectLocation'
+-- * 'poWebsiteRedirectLocation' - 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.
 --
--- * 'poGrantRead'
+-- * 'poGrantRead' - Allows grantee to read the object data and its metadata.
 --
--- * 'poStorageClass'
+-- * 'poStorageClass' - The type of storage to use for the object. Defaults to 'STANDARD'.
 --
--- * 'poSSECustomerKeyMD5'
+-- * 'poSSECustomerKeyMD5' - 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.
 --
--- * 'poSSEKMSKeyId'
+-- * 'poSSEKMSKeyId' - 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
 --
--- * 'poGrantFullControl'
+-- * 'poGrantFullControl' - Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.
 --
--- * 'poContentEncoding'
+-- * 'poContentEncoding' - 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.
 --
--- * 'poContentMD5'
+-- * 'poTagging' - The tag-set for the object. The tag-set must be encoded as URL Query parameters
 --
--- * 'poMetadata'
+-- * 'poContentMD5' - The base64-encoded 128-bit MD5 digest of the part data.
 --
--- * 'poCacheControl'
+-- * 'poMetadata' - A map of metadata to store with the object in S3.
 --
--- * 'poContentLanguage'
+-- * 'poCacheControl' - Specifies caching behavior along the request/reply chain.
 --
--- * 'poACL'
+-- * 'poContentLanguage' - The language the content is in.
 --
--- * 'poContentDisposition'
+-- * 'poACL' - The canned ACL to apply to the object.
 --
--- * 'poServerSideEncryption'
+-- * 'poContentDisposition' - Specifies presentational information for the object.
 --
--- * 'poContentType'
+-- * 'poServerSideEncryption' - The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 --
--- * 'poBucket'
+-- * 'poContentType' - A standard MIME type describing the format of the object data.
 --
--- * 'poKey'
+-- * 'poBucket' - Name of the bucket to which the PUT operation was initiated.
 --
--- * 'poBody'
+-- * 'poKey' - Object key for which the PUT operation was initiated.
+--
+-- * 'poBody' - Object data.
 putObject
     :: BucketName -- ^ 'poBucket'
     -> ObjectKey -- ^ 'poKey'
@@ -176,6 +180,7 @@
     , _poSSEKMSKeyId = Nothing
     , _poGrantFullControl = Nothing
     , _poContentEncoding = Nothing
+    , _poTagging = Nothing
     , _poContentMD5 = Nothing
     , _poMetadata = mempty
     , _poCacheControl = Nothing
@@ -225,7 +230,7 @@
 poGrantRead :: Lens' PutObject (Maybe Text)
 poGrantRead = lens _poGrantRead (\ s a -> s{_poGrantRead = a});
 
--- | The type of storage to use for the object. Defaults to \'STANDARD\'.
+-- | 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});
 
@@ -233,7 +238,7 @@
 poSSECustomerKeyMD5 :: Lens' PutObject (Maybe Text)
 poSSECustomerKeyMD5 = lens _poSSECustomerKeyMD5 (\ s a -> s{_poSSECustomerKeyMD5 = 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
+-- | 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;
 
@@ -245,6 +250,10 @@
 poContentEncoding :: Lens' PutObject (Maybe Text)
 poContentEncoding = lens _poContentEncoding (\ s a -> s{_poContentEncoding = a});
 
+-- | The tag-set for the object. The tag-set must be encoded as URL Query parameters
+poTagging :: Lens' PutObject (Maybe Text)
+poTagging = lens _poTagging (\ s a -> s{_poTagging = a});
+
 -- | The base64-encoded 128-bit MD5 digest of the part data.
 poContentMD5 :: Lens' PutObject (Maybe Text)
 poContentMD5 = lens _poContentMD5 (\ s a -> s{_poContentMD5 = a});
@@ -253,7 +262,7 @@
 poMetadata :: Lens' PutObject (HashMap Text Text)
 poMetadata = lens _poMetadata (\ s a -> s{_poMetadata = a}) . _Map;
 
--- | Specifies caching behavior along the request\/reply chain.
+-- | Specifies caching behavior along the request/reply chain.
 poCacheControl :: Lens' PutObject (Maybe Text)
 poCacheControl = lens _poCacheControl (\ s a -> s{_poCacheControl = a});
 
@@ -291,7 +300,7 @@
 
 instance AWSRequest PutObject where
         type Rs PutObject = PutObjectResponse
-        request = putBody s3
+        request = expectHeader . putBody s3
         response
           = receiveEmpty
               (\ s h x ->
@@ -335,6 +344,7 @@
                  _poSSEKMSKeyId,
                "x-amz-grant-full-control" =# _poGrantFullControl,
                "Content-Encoding" =# _poContentEncoding,
+               "x-amz-tagging" =# _poTagging,
                "Content-MD5" =# _poContentMD5,
                "x-amz-meta-" =# _poMetadata,
                "Cache-Control" =# _poCacheControl,
@@ -369,23 +379,23 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'porsRequestCharged'
+-- * 'porsRequestCharged' - Undocumented member.
 --
--- * 'porsETag'
+-- * 'porsETag' - Entity tag for the uploaded object.
 --
--- * 'porsVersionId'
+-- * 'porsVersionId' - Version of the object.
 --
--- * 'porsExpiration'
+-- * 'porsExpiration' - 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.
 --
--- * 'porsSSECustomerAlgorithm'
+-- * 'porsSSECustomerAlgorithm' - If server-side encryption with a customer-provided encryption key was requested, the response will include this header confirming the encryption algorithm used.
 --
--- * 'porsSSECustomerKeyMD5'
+-- * 'porsSSECustomerKeyMD5' - 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.
 --
--- * 'porsSSEKMSKeyId'
+-- * 'porsSSEKMSKeyId' - If present, specifies the ID of the AWS Key Management Service (KMS) master encryption key that was used for the object.
 --
--- * 'porsServerSideEncryption'
+-- * 'porsServerSideEncryption' - The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 --
--- * 'porsResponseStatus'
+-- * 'porsResponseStatus' - -- | The response status code.
 putObjectResponse
     :: Int -- ^ 'porsResponseStatus'
     -> PutObjectResponse
@@ -434,7 +444,7 @@
 porsServerSideEncryption :: Lens' PutObjectResponse (Maybe ServerSideEncryption)
 porsServerSideEncryption = lens _porsServerSideEncryption (\ s a -> s{_porsServerSideEncryption = a});
 
--- | The response status code.
+-- | -- | The response status code.
 porsResponseStatus :: Lens' PutObjectResponse Int
 porsResponseStatus = lens _porsResponseStatus (\ s a -> s{_porsResponseStatus = a});
 
diff --git a/gen/Network/AWS/S3/PutObjectACL.hs b/gen/Network/AWS/S3/PutObjectACL.hs
--- a/gen/Network/AWS/S3/PutObjectACL.hs
+++ b/gen/Network/AWS/S3/PutObjectACL.hs
@@ -73,29 +73,29 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'poaVersionId'
+-- * 'poaVersionId' - VersionId used to reference a specific version of the object.
 --
--- * 'poaGrantReadACP'
+-- * 'poaGrantReadACP' - Allows grantee to read the bucket ACL.
 --
--- * 'poaRequestPayer'
+-- * 'poaRequestPayer' - Undocumented member.
 --
--- * 'poaGrantWriteACP'
+-- * 'poaGrantWriteACP' - Allows grantee to write the ACL for the applicable bucket.
 --
--- * 'poaGrantRead'
+-- * 'poaGrantRead' - Allows grantee to list the objects in the bucket.
 --
--- * 'poaGrantFullControl'
+-- * 'poaGrantFullControl' - Allows grantee the read, write, read ACP, and write ACP permissions on the bucket.
 --
--- * 'poaContentMD5'
+-- * 'poaContentMD5' - Undocumented member.
 --
--- * 'poaAccessControlPolicy'
+-- * 'poaAccessControlPolicy' - Undocumented member.
 --
--- * 'poaGrantWrite'
+-- * 'poaGrantWrite' - Allows grantee to create, overwrite, and delete any object in the bucket.
 --
--- * 'poaACL'
+-- * 'poaACL' - The canned ACL to apply to the object.
 --
--- * 'poaBucket'
+-- * 'poaBucket' - Undocumented member.
 --
--- * 'poaKey'
+-- * 'poaKey' - Undocumented member.
 putObjectACL
     :: BucketName -- ^ 'poaBucket'
     -> ObjectKey -- ^ 'poaKey'
@@ -215,9 +215,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'poarsRequestCharged'
+-- * 'poarsRequestCharged' - Undocumented member.
 --
--- * 'poarsResponseStatus'
+-- * 'poarsResponseStatus' - -- | The response status code.
 putObjectACLResponse
     :: Int -- ^ 'poarsResponseStatus'
     -> PutObjectACLResponse
@@ -231,7 +231,7 @@
 poarsRequestCharged :: Lens' PutObjectACLResponse (Maybe RequestCharged)
 poarsRequestCharged = lens _poarsRequestCharged (\ s a -> s{_poarsRequestCharged = a});
 
--- | The response status code.
+-- | -- | The response status code.
 poarsResponseStatus :: Lens' PutObjectACLResponse Int
 poarsResponseStatus = lens _poarsResponseStatus (\ s a -> s{_poarsResponseStatus = a});
 
diff --git a/gen/Network/AWS/S3/PutObjectTagging.hs b/gen/Network/AWS/S3/PutObjectTagging.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/PutObjectTagging.hs
@@ -0,0 +1,167 @@
+{-# 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.PutObjectTagging
+-- Copyright   : (c) 2013-2016 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 supplied tag-set to an object that already exists in a bucket
+module Network.AWS.S3.PutObjectTagging
+    (
+    -- * Creating a Request
+      putObjectTagging
+    , PutObjectTagging
+    -- * Request Lenses
+    , potContentMD5
+    , potBucket
+    , potKey
+    , potTagging
+    , potVersionId
+
+    -- * Destructuring the Response
+    , putObjectTaggingResponse
+    , PutObjectTaggingResponse
+    -- * Response Lenses
+    , potrsVersionId
+    , potrsResponseStatus
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'putObjectTagging' smart constructor.
+data PutObjectTagging = PutObjectTagging'
+    { _potContentMD5 :: !(Maybe Text)
+    , _potBucket     :: !BucketName
+    , _potKey        :: !ObjectKey
+    , _potTagging    :: !Tagging
+    , _potVersionId  :: !ObjectVersionId
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutObjectTagging' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'potContentMD5' - Undocumented member.
+--
+-- * 'potBucket' - Undocumented member.
+--
+-- * 'potKey' - Undocumented member.
+--
+-- * 'potTagging' - Undocumented member.
+--
+-- * 'potVersionId' - Undocumented member.
+putObjectTagging
+    :: BucketName -- ^ 'potBucket'
+    -> ObjectKey -- ^ 'potKey'
+    -> Tagging -- ^ 'potTagging'
+    -> ObjectVersionId -- ^ 'potVersionId'
+    -> PutObjectTagging
+putObjectTagging pBucket_ pKey_ pTagging_ pVersionId_ =
+    PutObjectTagging'
+    { _potContentMD5 = Nothing
+    , _potBucket = pBucket_
+    , _potKey = pKey_
+    , _potTagging = pTagging_
+    , _potVersionId = pVersionId_
+    }
+
+-- | Undocumented member.
+potContentMD5 :: Lens' PutObjectTagging (Maybe Text)
+potContentMD5 = lens _potContentMD5 (\ s a -> s{_potContentMD5 = a});
+
+-- | Undocumented member.
+potBucket :: Lens' PutObjectTagging BucketName
+potBucket = lens _potBucket (\ s a -> s{_potBucket = a});
+
+-- | Undocumented member.
+potKey :: Lens' PutObjectTagging ObjectKey
+potKey = lens _potKey (\ s a -> s{_potKey = a});
+
+-- | Undocumented member.
+potTagging :: Lens' PutObjectTagging Tagging
+potTagging = lens _potTagging (\ s a -> s{_potTagging = a});
+
+-- | Undocumented member.
+potVersionId :: Lens' PutObjectTagging ObjectVersionId
+potVersionId = lens _potVersionId (\ s a -> s{_potVersionId = a});
+
+instance AWSRequest PutObjectTagging where
+        type Rs PutObjectTagging = PutObjectTaggingResponse
+        request = putXML s3
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 PutObjectTaggingResponse' <$>
+                   (h .#? "x-amz-version-id") <*> (pure (fromEnum s)))
+
+instance Hashable PutObjectTagging
+
+instance NFData PutObjectTagging
+
+instance ToElement PutObjectTagging where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}Tagging"
+              .
+              _potTagging
+
+instance ToHeaders PutObjectTagging where
+        toHeaders PutObjectTagging'{..}
+          = mconcat ["Content-MD5" =# _potContentMD5]
+
+instance ToPath PutObjectTagging where
+        toPath PutObjectTagging'{..}
+          = mconcat ["/", toBS _potBucket, "/", toBS _potKey]
+
+instance ToQuery PutObjectTagging where
+        toQuery = const (mconcat ["tagging"])
+
+-- | /See:/ 'putObjectTaggingResponse' smart constructor.
+data PutObjectTaggingResponse = PutObjectTaggingResponse'
+    { _potrsVersionId      :: !(Maybe ObjectVersionId)
+    , _potrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutObjectTaggingResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'potrsVersionId' - Undocumented member.
+--
+-- * 'potrsResponseStatus' - -- | The response status code.
+putObjectTaggingResponse
+    :: Int -- ^ 'potrsResponseStatus'
+    -> PutObjectTaggingResponse
+putObjectTaggingResponse pResponseStatus_ =
+    PutObjectTaggingResponse'
+    { _potrsVersionId = Nothing
+    , _potrsResponseStatus = pResponseStatus_
+    }
+
+-- | Undocumented member.
+potrsVersionId :: Lens' PutObjectTaggingResponse (Maybe ObjectVersionId)
+potrsVersionId = lens _potrsVersionId (\ s a -> s{_potrsVersionId = a});
+
+-- | -- | The response status code.
+potrsResponseStatus :: Lens' PutObjectTaggingResponse Int
+potrsResponseStatus = lens _potrsResponseStatus (\ s a -> s{_potrsResponseStatus = a});
+
+instance NFData PutObjectTaggingResponse
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
@@ -59,15 +59,15 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'roVersionId'
+-- * 'roVersionId' - Undocumented member.
 --
--- * 'roRequestPayer'
+-- * 'roRequestPayer' - Undocumented member.
 --
--- * 'roRestoreRequest'
+-- * 'roRestoreRequest' - Undocumented member.
 --
--- * 'roBucket'
+-- * 'roBucket' - Undocumented member.
 --
--- * 'roKey'
+-- * 'roKey' - Undocumented member.
 restoreObject
     :: BucketName -- ^ 'roBucket'
     -> ObjectKey -- ^ 'roKey'
@@ -144,9 +144,9 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'rorsRequestCharged'
+-- * 'rorsRequestCharged' - Undocumented member.
 --
--- * 'rorsResponseStatus'
+-- * 'rorsResponseStatus' - -- | The response status code.
 restoreObjectResponse
     :: Int -- ^ 'rorsResponseStatus'
     -> RestoreObjectResponse
@@ -160,7 +160,7 @@
 rorsRequestCharged :: Lens' RestoreObjectResponse (Maybe RequestCharged)
 rorsRequestCharged = lens _rorsRequestCharged (\ s a -> s{_rorsRequestCharged = a});
 
--- | The response status code.
+-- | -- | The response status code.
 rorsResponseStatus :: Lens' RestoreObjectResponse Int
 rorsResponseStatus = lens _rorsResponseStatus (\ s a -> s{_rorsResponseStatus = 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
@@ -27,6 +27,9 @@
     -- * Re-exported Types
     , module Network.AWS.S3.Internal
 
+    -- * AnalyticsS3ExportFileFormat
+    , AnalyticsS3ExportFileFormat (..)
+
     -- * BucketAccelerateStatus
     , BucketAccelerateStatus (..)
 
@@ -51,6 +54,18 @@
     -- * FilterRuleName
     , FilterRuleName (..)
 
+    -- * InventoryFormat
+    , InventoryFormat (..)
+
+    -- * InventoryFrequency
+    , InventoryFrequency (..)
+
+    -- * InventoryIncludedObjectVersions
+    , InventoryIncludedObjectVersions (..)
+
+    -- * InventoryOptionalField
+    , InventoryOptionalField (..)
+
     -- * MFADelete
     , MFADelete (..)
 
@@ -96,6 +111,15 @@
     -- * StorageClass
     , StorageClass (..)
 
+    -- * StorageClassAnalysisSchemaVersion
+    , StorageClassAnalysisSchemaVersion (..)
+
+    -- * TaggingDirective
+    , TaggingDirective (..)
+
+    -- * Tier
+    , Tier (..)
+
     -- * TransitionStorageClass
     , TransitionStorageClass (..)
 
@@ -118,6 +142,39 @@
     , acpGrants
     , acpOwner
 
+    -- * AnalyticsAndOperator
+    , AnalyticsAndOperator
+    , analyticsAndOperator
+    , aaoPrefix
+    , aaoTags
+
+    -- * AnalyticsConfiguration
+    , AnalyticsConfiguration
+    , analyticsConfiguration
+    , acFilter
+    , acId
+    , acStorageClassAnalysis
+
+    -- * AnalyticsExportDestination
+    , AnalyticsExportDestination
+    , analyticsExportDestination
+    , aedS3BucketDestination
+
+    -- * AnalyticsFilter
+    , AnalyticsFilter
+    , analyticsFilter
+    , afTag
+    , afPrefix
+    , afAnd
+
+    -- * AnalyticsS3BucketDestination
+    , AnalyticsS3BucketDestination
+    , analyticsS3BucketDestination
+    , asbdBucketAccountId
+    , asbdPrefix
+    , asbdFormat
+    , asbdBucket
+
     -- * Bucket
     , Bucket
     , bucket
@@ -227,6 +284,11 @@
     , frValue
     , frName
 
+    -- * GlacierJobParameters
+    , GlacierJobParameters
+    , glacierJobParameters
+    , gjpTier
+
     -- * Grant
     , Grant
     , grant
@@ -253,6 +315,40 @@
     , iDisplayName
     , iId
 
+    -- * InventoryConfiguration
+    , InventoryConfiguration
+    , inventoryConfiguration
+    , icOptionalFields
+    , icFilter
+    , icDestination
+    , icIsEnabled
+    , icId
+    , icIncludedObjectVersions
+    , icSchedule
+
+    -- * InventoryDestination
+    , InventoryDestination
+    , inventoryDestination
+    , idS3BucketDestination
+
+    -- * InventoryFilter
+    , InventoryFilter
+    , inventoryFilter
+    , ifPrefix
+
+    -- * InventoryS3BucketDestination
+    , InventoryS3BucketDestination
+    , inventoryS3BucketDestination
+    , isbdPrefix
+    , isbdAccountId
+    , isbdBucket
+    , isbdFormat
+
+    -- * InventorySchedule
+    , InventorySchedule
+    , inventorySchedule
+    , isFrequency
+
     -- * LambdaFunctionConfiguration
     , LambdaFunctionConfiguration
     , lambdaFunctionConfiguration
@@ -273,13 +369,27 @@
     , lifecycleRule
     , lrTransitions
     , lrNoncurrentVersionExpiration
+    , lrPrefix
     , lrNoncurrentVersionTransitions
     , lrExpiration
     , lrId
+    , lrFilter
     , lrAbortIncompleteMultipartUpload
-    , lrPrefix
     , lrStatus
 
+    -- * LifecycleRuleAndOperator
+    , LifecycleRuleAndOperator
+    , lifecycleRuleAndOperator
+    , lraoPrefix
+    , lraoTags
+
+    -- * LifecycleRuleFilter
+    , LifecycleRuleFilter
+    , lifecycleRuleFilter
+    , lrfTag
+    , lrfPrefix
+    , lrfAnd
+
     -- * LoggingEnabled
     , LoggingEnabled
     , loggingEnabled
@@ -287,6 +397,25 @@
     , leTargetGrants
     , leTargetPrefix
 
+    -- * MetricsAndOperator
+    , MetricsAndOperator
+    , metricsAndOperator
+    , maoPrefix
+    , maoTags
+
+    -- * MetricsConfiguration
+    , MetricsConfiguration
+    , metricsConfiguration
+    , mcFilter
+    , mcId
+
+    -- * MetricsFilter
+    , MetricsFilter
+    , metricsFilter
+    , mfTag
+    , mfPrefix
+    , mfAnd
+
     -- * MultipartUpload
     , MultipartUpload
     , multipartUpload
@@ -407,6 +536,7 @@
     -- * RestoreRequest
     , RestoreRequest
     , restoreRequest
+    , rrGlacierJobParameters
     , rrDays
 
     -- * RoutingRule
@@ -428,6 +558,17 @@
     , sseCode
     , sseMessage
 
+    -- * StorageClassAnalysis
+    , StorageClassAnalysis
+    , storageClassAnalysis
+    , scaDataExport
+
+    -- * StorageClassAnalysisDataExport
+    , StorageClassAnalysisDataExport
+    , storageClassAnalysisDataExport
+    , scadeOutputSchemaVersion
+    , scadeDestination
+
     -- * Tag
     , Tag
     , tag
@@ -482,7 +623,7 @@
 import           Network.AWS.S3.Types.Sum
 import           Network.AWS.Sign.V4
 
--- | API version '2006-03-01' of the Amazon Simple Storage Service SDK configuration.
+-- | API version @2006-03-01@ of the Amazon Simple Storage Service SDK configuration.
 s3 :: Service
 s3 =
     Service
diff --git a/gen/Network/AWS/S3/Types/Product.hs b/gen/Network/AWS/S3/Types/Product.hs
--- a/gen/Network/AWS/S3/Types/Product.hs
+++ b/gen/Network/AWS/S3/Types/Product.hs
@@ -33,2654 +33,3547 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'aimuDaysAfterInitiation'
-abortIncompleteMultipartUpload
-    :: AbortIncompleteMultipartUpload
-abortIncompleteMultipartUpload =
-    AbortIncompleteMultipartUpload'
-    { _aimuDaysAfterInitiation = Nothing
-    }
-
--- | Indicates the number of days that must pass since initiation for Lifecycle to abort an Incomplete Multipart Upload.
-aimuDaysAfterInitiation :: Lens' AbortIncompleteMultipartUpload (Maybe Int)
-aimuDaysAfterInitiation = lens _aimuDaysAfterInitiation (\ s a -> s{_aimuDaysAfterInitiation = a});
-
-instance FromXML AbortIncompleteMultipartUpload where
-        parseXML x
-          = AbortIncompleteMultipartUpload' <$>
-              (x .@? "DaysAfterInitiation")
-
-instance Hashable AbortIncompleteMultipartUpload
-
-instance NFData AbortIncompleteMultipartUpload
-
-instance ToXML AbortIncompleteMultipartUpload where
-        toXML AbortIncompleteMultipartUpload'{..}
-          = mconcat
-              ["DaysAfterInitiation" @= _aimuDaysAfterInitiation]
-
--- | /See:/ 'accelerateConfiguration' smart constructor.
-newtype AccelerateConfiguration = AccelerateConfiguration'
-    { _acStatus :: Maybe BucketAccelerateStatus
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AccelerateConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'acStatus'
-accelerateConfiguration
-    :: AccelerateConfiguration
-accelerateConfiguration =
-    AccelerateConfiguration'
-    { _acStatus = Nothing
-    }
-
--- | The accelerate configuration of the bucket.
-acStatus :: Lens' AccelerateConfiguration (Maybe BucketAccelerateStatus)
-acStatus = lens _acStatus (\ s a -> s{_acStatus = a});
-
-instance Hashable AccelerateConfiguration
-
-instance NFData AccelerateConfiguration
-
-instance ToXML AccelerateConfiguration where
-        toXML AccelerateConfiguration'{..}
-          = mconcat ["Status" @= _acStatus]
-
--- | /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 Hashable AccessControlPolicy
-
-instance NFData AccessControlPolicy
-
-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")
-
-instance Hashable Bucket
-
-instance NFData Bucket
-
--- | /See:/ 'bucketLifecycleConfiguration' smart constructor.
-newtype BucketLifecycleConfiguration = BucketLifecycleConfiguration'
-    { _blcRules :: [LifecycleRule]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BucketLifecycleConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'blcRules'
-bucketLifecycleConfiguration
-    :: BucketLifecycleConfiguration
-bucketLifecycleConfiguration =
-    BucketLifecycleConfiguration'
-    { _blcRules = mempty
-    }
-
--- | Undocumented member.
-blcRules :: Lens' BucketLifecycleConfiguration [LifecycleRule]
-blcRules = lens _blcRules (\ s a -> s{_blcRules = a}) . _Coerce;
-
-instance Hashable BucketLifecycleConfiguration
-
-instance NFData BucketLifecycleConfiguration
-
-instance ToXML BucketLifecycleConfiguration where
-        toXML BucketLifecycleConfiguration'{..}
-          = mconcat [toXMLList "Rule" _blcRules]
-
--- | /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 Hashable BucketLoggingStatus
-
-instance NFData BucketLoggingStatus
-
-instance ToXML BucketLoggingStatus where
-        toXML BucketLoggingStatus'{..}
-          = mconcat ["LoggingEnabled" @= _blsLoggingEnabled]
-
--- | /See:/ 'corsConfiguration' smart constructor.
-newtype CORSConfiguration = CORSConfiguration'
-    { _ccCORSRules :: [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 = mempty
-    }
-
--- | Undocumented member.
-ccCORSRules :: Lens' CORSConfiguration [CORSRule]
-ccCORSRules = lens _ccCORSRules (\ s a -> s{_ccCORSRules = a}) . _Coerce;
-
-instance Hashable CORSConfiguration
-
-instance NFData CORSConfiguration
-
-instance ToXML CORSConfiguration where
-        toXML CORSConfiguration'{..}
-          = mconcat [toXMLList "CORSRule" _ccCORSRules]
-
--- | /See:/ 'corsRule' smart constructor.
-data CORSRule = CORSRule'
-    { _crMaxAgeSeconds  :: !(Maybe Int)
-    , _crAllowedHeaders :: !(Maybe [Text])
-    , _crExposeHeaders  :: !(Maybe [Text])
-    , _crAllowedMethods :: ![Text]
-    , _crAllowedOrigins :: ![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:
---
--- * 'crMaxAgeSeconds'
---
--- * 'crAllowedHeaders'
---
--- * 'crExposeHeaders'
---
--- * 'crAllowedMethods'
---
--- * 'crAllowedOrigins'
-corsRule
-    :: CORSRule
-corsRule =
-    CORSRule'
-    { _crMaxAgeSeconds = Nothing
-    , _crAllowedHeaders = Nothing
-    , _crExposeHeaders = Nothing
-    , _crAllowedMethods = mempty
-    , _crAllowedOrigins = mempty
-    }
-
--- | 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 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;
-
--- | 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}) . _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}) . _Coerce;
-
-instance FromXML CORSRule where
-        parseXML x
-          = CORSRule' <$>
-              (x .@? "MaxAgeSeconds") <*>
-                (may (parseXMLList "AllowedHeader") x)
-                <*> (may (parseXMLList "ExposeHeader") x)
-                <*> (parseXMLList "AllowedMethod" x)
-                <*> (parseXMLList "AllowedOrigin" x)
-
-instance Hashable CORSRule
-
-instance NFData CORSRule
-
-instance ToXML CORSRule where
-        toXML CORSRule'{..}
-          = mconcat
-              ["MaxAgeSeconds" @= _crMaxAgeSeconds,
-               toXML
-                 (toXMLList "AllowedHeader" <$> _crAllowedHeaders),
-               toXML
-                 (toXMLList "ExposeHeader" <$> _crExposeHeaders),
-               toXMLList "AllowedMethod" _crAllowedMethods,
-               toXMLList "AllowedOrigin" _crAllowedOrigins]
-
--- | /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")
-
-instance Hashable CommonPrefix
-
-instance NFData CommonPrefix
-
--- | /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 Hashable CompletedMultipartUpload
-
-instance NFData CompletedMultipartUpload
-
-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 Hashable CompletedPart
-
-instance NFData CompletedPart
-
-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 Hashable Condition
-
-instance NFData Condition
-
-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")
-
-instance Hashable CopyObjectResult
-
-instance NFData CopyObjectResult
-
--- | /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")
-
-instance Hashable CopyPartResult
-
-instance NFData CopyPartResult
-
--- | /See:/ 'createBucketConfiguration' smart constructor.
-newtype CreateBucketConfiguration = CreateBucketConfiguration'
-    { _cbcLocationConstraint :: Maybe LocationConstraint
-    } 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 LocationConstraint)
-cbcLocationConstraint = lens _cbcLocationConstraint (\ s a -> s{_cbcLocationConstraint = a});
-
-instance Hashable CreateBucketConfiguration
-
-instance NFData CreateBucketConfiguration
-
-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 Hashable Delete
-
-instance NFData Delete
-
-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")
-
-instance Hashable DeleteMarkerEntry
-
-instance NFData DeleteMarkerEntry
-
--- | /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")
-
-instance Hashable DeletedObject
-
-instance NFData DeletedObject
-
--- | /See:/ 'destination' smart constructor.
-data Destination = Destination'
-    { _dStorageClass :: !(Maybe StorageClass)
-    , _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:
---
--- * 'dStorageClass'
---
--- * 'dBucket'
-destination
-    :: BucketName -- ^ 'dBucket'
-    -> Destination
-destination pBucket_ =
-    Destination'
-    { _dStorageClass = Nothing
-    , _dBucket = pBucket_
-    }
-
--- | The class of storage used to store the object.
-dStorageClass :: Lens' Destination (Maybe StorageClass)
-dStorageClass = lens _dStorageClass (\ s a -> s{_dStorageClass = a});
-
--- | 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 .@? "StorageClass") <*> (x .@ "Bucket")
-
-instance Hashable Destination
-
-instance NFData Destination
-
-instance ToXML Destination where
-        toXML Destination'{..}
-          = mconcat
-              ["StorageClass" @= _dStorageClass,
-               "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 Hashable ErrorDocument
-
-instance NFData ErrorDocument
-
-instance ToXML ErrorDocument where
-        toXML ErrorDocument'{..} = mconcat ["Key" @= _edKey]
-
--- | Container for key value pair that defines the criteria for the filter rule.
---
--- /See:/ 'filterRule' smart constructor.
-data FilterRule = FilterRule'
-    { _frValue :: !(Maybe Text)
-    , _frName  :: !(Maybe FilterRuleName)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'FilterRule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'frValue'
---
--- * 'frName'
-filterRule
-    :: FilterRule
-filterRule =
-    FilterRule'
-    { _frValue = Nothing
-    , _frName = Nothing
-    }
-
--- | Undocumented member.
-frValue :: Lens' FilterRule (Maybe Text)
-frValue = lens _frValue (\ s a -> s{_frValue = a});
-
--- | Object key name prefix or suffix identifying one or more objects to which the filtering rule applies. Maximum prefix length can be up to 1,024 characters. Overlapping prefixes and suffixes are not supported. For more information, go to <http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html Configuring Event Notifications> in the Amazon Simple Storage Service Developer Guide.
-frName :: Lens' FilterRule (Maybe FilterRuleName)
-frName = lens _frName (\ s a -> s{_frName = a});
-
-instance FromXML FilterRule where
-        parseXML x
-          = FilterRule' <$> (x .@? "Value") <*> (x .@? "Name")
-
-instance Hashable FilterRule
-
-instance NFData FilterRule
-
-instance ToXML FilterRule where
-        toXML FilterRule'{..}
-          = mconcat ["Value" @= _frValue, "Name" @= _frName]
-
--- | /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 Hashable Grant
-
-instance NFData Grant
-
-instance ToXML Grant where
-        toXML Grant'{..}
-          = mconcat
-              ["Permission" @= _gPermission,
-               "Grantee" @= _gGrantee]
-
--- | /See:/ 'grantee' smart constructor.
-data Grantee = Grantee'
-    { _gURI          :: !(Maybe Text)
-    , _gEmailAddress :: !(Maybe Text)
-    , _gDisplayName  :: !(Maybe Text)
-    , _gId           :: !(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'
---
--- * 'gDisplayName'
---
--- * 'gId'
---
--- * 'gType'
-grantee
-    :: Type -- ^ 'gType'
-    -> Grantee
-grantee pType_ =
-    Grantee'
-    { _gURI = Nothing
-    , _gEmailAddress = Nothing
-    , _gDisplayName = Nothing
-    , _gId = 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});
-
--- | Screen name of the grantee.
-gDisplayName :: Lens' Grantee (Maybe Text)
-gDisplayName = lens _gDisplayName (\ s a -> s{_gDisplayName = 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});
-
-instance FromXML Grantee where
-        parseXML x
-          = Grantee' <$>
-              (x .@? "URI") <*> (x .@? "EmailAddress") <*>
-                (x .@? "DisplayName")
-                <*> (x .@? "ID")
-                <*> (x .@ "xsi:type")
-
-instance Hashable Grantee
-
-instance NFData Grantee
-
-instance ToXML Grantee where
-        toXML Grantee'{..}
-          = mconcat
-              ["URI" @= _gURI, "EmailAddress" @= _gEmailAddress,
-               "DisplayName" @= _gDisplayName, "ID" @= _gId,
-               "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 Hashable IndexDocument
-
-instance NFData IndexDocument
-
-instance ToXML IndexDocument where
-        toXML IndexDocument'{..}
-          = mconcat ["Suffix" @= _idSuffix]
-
--- | /See:/ 'initiator' smart constructor.
-data Initiator = Initiator'
-    { _iDisplayName :: !(Maybe Text)
-    , _iId          :: !(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:
---
--- * 'iDisplayName'
---
--- * 'iId'
-initiator
-    :: Initiator
-initiator =
-    Initiator'
-    { _iDisplayName = Nothing
-    , _iId = 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 Hashable Initiator
-
-instance NFData Initiator
-
--- | Container for specifying the AWS Lambda notification configuration.
---
--- /See:/ 'lambdaFunctionConfiguration' smart constructor.
-data LambdaFunctionConfiguration = LambdaFunctionConfiguration'
-    { _lfcId                :: !(Maybe Text)
-    , _lfcFilter            :: !(Maybe NotificationConfigurationFilter)
-    , _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'
---
--- * 'lfcFilter'
---
--- * 'lfcLambdaFunctionARN'
---
--- * 'lfcEvents'
-lambdaFunctionConfiguration
-    :: Text -- ^ 'lfcLambdaFunctionARN'
-    -> LambdaFunctionConfiguration
-lambdaFunctionConfiguration pLambdaFunctionARN_ =
-    LambdaFunctionConfiguration'
-    { _lfcId = Nothing
-    , _lfcFilter = Nothing
-    , _lfcLambdaFunctionARN = pLambdaFunctionARN_
-    , _lfcEvents = mempty
-    }
-
--- | Undocumented member.
-lfcId :: Lens' LambdaFunctionConfiguration (Maybe Text)
-lfcId = lens _lfcId (\ s a -> s{_lfcId = a});
-
--- | Undocumented member.
-lfcFilter :: Lens' LambdaFunctionConfiguration (Maybe NotificationConfigurationFilter)
-lfcFilter = lens _lfcFilter (\ s a -> s{_lfcFilter = 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 .@? "Filter") <*>
-                (x .@ "CloudFunction")
-                <*> (parseXMLList "Event" x)
-
-instance Hashable LambdaFunctionConfiguration
-
-instance NFData LambdaFunctionConfiguration
-
-instance ToXML LambdaFunctionConfiguration where
-        toXML LambdaFunctionConfiguration'{..}
-          = mconcat
-              ["Id" @= _lfcId, "Filter" @= _lfcFilter,
-               "CloudFunction" @= _lfcLambdaFunctionARN,
-               toXMLList "Event" _lfcEvents]
-
--- | /See:/ 'lifecycleExpiration' smart constructor.
-data LifecycleExpiration = LifecycleExpiration'
-    { _leDays                      :: !(Maybe Int)
-    , _leDate                      :: !(Maybe RFC822)
-    , _leExpiredObjectDeleteMarker :: !(Maybe Bool)
-    } 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'
---
--- * 'leExpiredObjectDeleteMarker'
-lifecycleExpiration
-    :: LifecycleExpiration
-lifecycleExpiration =
-    LifecycleExpiration'
-    { _leDays = Nothing
-    , _leDate = Nothing
-    , _leExpiredObjectDeleteMarker = 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;
-
--- | Indicates whether Amazon S3 will remove a delete marker with no noncurrent versions. If set to true, the delete marker will be expired; if set to false the policy takes no action. This cannot be specified with Days or Date in a Lifecycle Expiration Policy.
-leExpiredObjectDeleteMarker :: Lens' LifecycleExpiration (Maybe Bool)
-leExpiredObjectDeleteMarker = lens _leExpiredObjectDeleteMarker (\ s a -> s{_leExpiredObjectDeleteMarker = a});
-
-instance FromXML LifecycleExpiration where
-        parseXML x
-          = LifecycleExpiration' <$>
-              (x .@? "Days") <*> (x .@? "Date") <*>
-                (x .@? "ExpiredObjectDeleteMarker")
-
-instance Hashable LifecycleExpiration
-
-instance NFData LifecycleExpiration
-
-instance ToXML LifecycleExpiration where
-        toXML LifecycleExpiration'{..}
-          = mconcat
-              ["Days" @= _leDays, "Date" @= _leDate,
-               "ExpiredObjectDeleteMarker" @=
-                 _leExpiredObjectDeleteMarker]
-
--- | /See:/ 'lifecycleRule' smart constructor.
-data LifecycleRule = LifecycleRule'
-    { _lrTransitions                    :: !(Maybe [Transition])
-    , _lrNoncurrentVersionExpiration    :: !(Maybe NoncurrentVersionExpiration)
-    , _lrNoncurrentVersionTransitions   :: !(Maybe [NoncurrentVersionTransition])
-    , _lrExpiration                     :: !(Maybe LifecycleExpiration)
-    , _lrId                             :: !(Maybe Text)
-    , _lrAbortIncompleteMultipartUpload :: !(Maybe AbortIncompleteMultipartUpload)
-    , _lrPrefix                         :: !Text
-    , _lrStatus                         :: !ExpirationStatus
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'LifecycleRule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lrTransitions'
---
--- * 'lrNoncurrentVersionExpiration'
---
--- * 'lrNoncurrentVersionTransitions'
---
--- * 'lrExpiration'
---
--- * 'lrId'
---
--- * 'lrAbortIncompleteMultipartUpload'
---
--- * 'lrPrefix'
---
--- * 'lrStatus'
-lifecycleRule
-    :: Text -- ^ 'lrPrefix'
-    -> ExpirationStatus -- ^ 'lrStatus'
-    -> LifecycleRule
-lifecycleRule pPrefix_ pStatus_ =
-    LifecycleRule'
-    { _lrTransitions = Nothing
-    , _lrNoncurrentVersionExpiration = Nothing
-    , _lrNoncurrentVersionTransitions = Nothing
-    , _lrExpiration = Nothing
-    , _lrId = Nothing
-    , _lrAbortIncompleteMultipartUpload = Nothing
-    , _lrPrefix = pPrefix_
-    , _lrStatus = pStatus_
-    }
-
--- | Undocumented member.
-lrTransitions :: Lens' LifecycleRule [Transition]
-lrTransitions = lens _lrTransitions (\ s a -> s{_lrTransitions = a}) . _Default . _Coerce;
-
--- | Undocumented member.
-lrNoncurrentVersionExpiration :: Lens' LifecycleRule (Maybe NoncurrentVersionExpiration)
-lrNoncurrentVersionExpiration = lens _lrNoncurrentVersionExpiration (\ s a -> s{_lrNoncurrentVersionExpiration = a});
-
--- | Undocumented member.
-lrNoncurrentVersionTransitions :: Lens' LifecycleRule [NoncurrentVersionTransition]
-lrNoncurrentVersionTransitions = lens _lrNoncurrentVersionTransitions (\ s a -> s{_lrNoncurrentVersionTransitions = a}) . _Default . _Coerce;
-
--- | Undocumented member.
-lrExpiration :: Lens' LifecycleRule (Maybe LifecycleExpiration)
-lrExpiration = lens _lrExpiration (\ s a -> s{_lrExpiration = a});
-
--- | Unique identifier for the rule. The value cannot be longer than 255 characters.
-lrId :: Lens' LifecycleRule (Maybe Text)
-lrId = lens _lrId (\ s a -> s{_lrId = a});
-
--- | Undocumented member.
-lrAbortIncompleteMultipartUpload :: Lens' LifecycleRule (Maybe AbortIncompleteMultipartUpload)
-lrAbortIncompleteMultipartUpload = lens _lrAbortIncompleteMultipartUpload (\ s a -> s{_lrAbortIncompleteMultipartUpload = a});
-
--- | Prefix identifying one or more objects to which the rule applies.
-lrPrefix :: Lens' LifecycleRule Text
-lrPrefix = lens _lrPrefix (\ s a -> s{_lrPrefix = a});
-
--- | If \'Enabled\', the rule is currently being applied. If \'Disabled\', the rule is not currently being applied.
-lrStatus :: Lens' LifecycleRule ExpirationStatus
-lrStatus = lens _lrStatus (\ s a -> s{_lrStatus = a});
-
-instance FromXML LifecycleRule where
-        parseXML x
-          = LifecycleRule' <$>
-              (may (parseXMLList "Transition") x) <*>
-                (x .@? "NoncurrentVersionExpiration")
-                <*>
-                (may (parseXMLList "NoncurrentVersionTransition") x)
-                <*> (x .@? "Expiration")
-                <*> (x .@? "ID")
-                <*> (x .@? "AbortIncompleteMultipartUpload")
-                <*> (x .@ "Prefix")
-                <*> (x .@ "Status")
-
-instance Hashable LifecycleRule
-
-instance NFData LifecycleRule
-
-instance ToXML LifecycleRule where
-        toXML LifecycleRule'{..}
-          = mconcat
-              [toXML (toXMLList "Transition" <$> _lrTransitions),
-               "NoncurrentVersionExpiration" @=
-                 _lrNoncurrentVersionExpiration,
-               toXML
-                 (toXMLList "NoncurrentVersionTransition" <$>
-                    _lrNoncurrentVersionTransitions),
-               "Expiration" @= _lrExpiration, "ID" @= _lrId,
-               "AbortIncompleteMultipartUpload" @=
-                 _lrAbortIncompleteMultipartUpload,
-               "Prefix" @= _lrPrefix, "Status" @= _lrStatus]
-
--- | /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 Hashable LoggingEnabled
-
-instance NFData LoggingEnabled
-
-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")
-
-instance Hashable MultipartUpload
-
-instance NFData MultipartUpload
-
--- | 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 <http://docs.aws.amazon.com/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 Hashable NoncurrentVersionExpiration
-
-instance NFData NoncurrentVersionExpiration
-
-instance ToXML NoncurrentVersionExpiration where
-        toXML NoncurrentVersionExpiration'{..}
-          = mconcat ["NoncurrentDays" @= _nveNoncurrentDays]
-
--- | Container for the transition rule that describes when noncurrent objects transition to the STANDARD_IA or 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 STANDARD_IA or 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 <http://docs.aws.amazon.com/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 Hashable NoncurrentVersionTransition
-
-instance NFData NoncurrentVersionTransition
-
-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 Hashable NotificationConfiguration
-
-instance NFData NotificationConfiguration
-
-instance ToXML NotificationConfiguration where
-        toXML NotificationConfiguration'{..}
-          = mconcat
-              [toXML
-                 (toXMLList "QueueConfiguration" <$>
-                    _ncQueueConfigurations),
-               toXML
-                 (toXMLList "TopicConfiguration" <$>
-                    _ncTopicConfigurations),
-               toXML
-                 (toXMLList "CloudFunctionConfiguration" <$>
-                    _ncLambdaFunctionConfigurations)]
-
--- | Container for object key name filtering rules. For information about key name filtering, go to <http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html Configuring Event Notifications> in the Amazon Simple Storage Service Developer Guide.
---
--- /See:/ 'notificationConfigurationFilter' smart constructor.
-newtype NotificationConfigurationFilter = NotificationConfigurationFilter'
-    { _ncfKey :: Maybe S3KeyFilter
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NotificationConfigurationFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ncfKey'
-notificationConfigurationFilter
-    :: NotificationConfigurationFilter
-notificationConfigurationFilter =
-    NotificationConfigurationFilter'
-    { _ncfKey = Nothing
-    }
-
--- | Undocumented member.
-ncfKey :: Lens' NotificationConfigurationFilter (Maybe S3KeyFilter)
-ncfKey = lens _ncfKey (\ s a -> s{_ncfKey = a});
-
-instance FromXML NotificationConfigurationFilter
-         where
-        parseXML x
-          = NotificationConfigurationFilter' <$>
-              (x .@? "S3Key")
-
-instance Hashable NotificationConfigurationFilter
-
-instance NFData NotificationConfigurationFilter
-
-instance ToXML NotificationConfigurationFilter where
-        toXML NotificationConfigurationFilter'{..}
-          = mconcat ["S3Key" @= _ncfKey]
-
--- | /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")
-
-instance Hashable Object
-
-instance NFData Object
-
--- | /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 Hashable ObjectIdentifier
-
-instance NFData ObjectIdentifier
-
-instance ToXML ObjectIdentifier where
-        toXML ObjectIdentifier'{..}
-          = mconcat
-              ["VersionId" @= _oiVersionId, "Key" @= _oiKey]
-
--- | /See:/ 'objectVersion' smart constructor.
-data ObjectVersion = ObjectVersion'
-    { _ovETag         :: !(Maybe ETag)
-    , _ovVersionId    :: !(Maybe ObjectVersionId)
-    , _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:
---
--- * 'ovETag'
---
--- * 'ovVersionId'
---
--- * 'ovSize'
---
--- * 'ovIsLatest'
---
--- * 'ovOwner'
---
--- * 'ovKey'
---
--- * 'ovStorageClass'
---
--- * 'ovLastModified'
-objectVersion
-    :: ObjectVersion
-objectVersion =
-    ObjectVersion'
-    { _ovETag = Nothing
-    , _ovVersionId = Nothing
-    , _ovSize = Nothing
-    , _ovIsLatest = Nothing
-    , _ovOwner = Nothing
-    , _ovKey = Nothing
-    , _ovStorageClass = Nothing
-    , _ovLastModified = Nothing
-    }
-
--- | Undocumented member.
-ovETag :: Lens' ObjectVersion (Maybe ETag)
-ovETag = lens _ovETag (\ s a -> s{_ovETag = a});
-
--- | Version ID of an object.
-ovVersionId :: Lens' ObjectVersion (Maybe ObjectVersionId)
-ovVersionId = lens _ovVersionId (\ s a -> s{_ovVersionId = 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 .@? "ETag") <*> (x .@? "VersionId") <*>
-                (x .@? "Size")
-                <*> (x .@? "IsLatest")
-                <*> (x .@? "Owner")
-                <*> (x .@? "Key")
-                <*> (x .@? "StorageClass")
-                <*> (x .@? "LastModified")
-
-instance Hashable ObjectVersion
-
-instance NFData ObjectVersion
-
--- | /See:/ 'owner' smart constructor.
-data Owner = Owner'
-    { _oDisplayName :: !(Maybe Text)
-    , _oId          :: !(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:
---
--- * 'oDisplayName'
---
--- * 'oId'
-owner
-    :: Owner
-owner =
-    Owner'
-    { _oDisplayName = Nothing
-    , _oId = Nothing
-    }
-
--- | Undocumented member.
-oDisplayName :: Lens' Owner (Maybe Text)
-oDisplayName = lens _oDisplayName (\ s a -> s{_oDisplayName = a});
-
--- | Undocumented member.
-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 Hashable Owner
-
-instance NFData Owner
-
-instance ToXML Owner where
-        toXML Owner'{..}
-          = mconcat
-              ["DisplayName" @= _oDisplayName, "ID" @= _oId]
-
--- | /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")
-
-instance Hashable Part
-
-instance NFData Part
-
--- | 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)
-    , _qcFilter   :: !(Maybe NotificationConfigurationFilter)
-    , _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'
---
--- * 'qcFilter'
---
--- * 'qcQueueARN'
---
--- * 'qcEvents'
-queueConfiguration
-    :: Text -- ^ 'qcQueueARN'
-    -> QueueConfiguration
-queueConfiguration pQueueARN_ =
-    QueueConfiguration'
-    { _qcId = Nothing
-    , _qcFilter = Nothing
-    , _qcQueueARN = pQueueARN_
-    , _qcEvents = mempty
-    }
-
--- | Undocumented member.
-qcId :: Lens' QueueConfiguration (Maybe Text)
-qcId = lens _qcId (\ s a -> s{_qcId = a});
-
--- | Undocumented member.
-qcFilter :: Lens' QueueConfiguration (Maybe NotificationConfigurationFilter)
-qcFilter = lens _qcFilter (\ s a -> s{_qcFilter = 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 .@? "Filter") <*> (x .@ "Queue")
-                <*> (parseXMLList "Event" x)
-
-instance Hashable QueueConfiguration
-
-instance NFData QueueConfiguration
-
-instance ToXML QueueConfiguration where
-        toXML QueueConfiguration'{..}
-          = mconcat
-              ["Id" @= _qcId, "Filter" @= _qcFilter,
-               "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 Hashable Redirect
-
-instance NFData Redirect
-
-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 Hashable RedirectAllRequestsTo
-
-instance NFData RedirectAllRequestsTo
-
-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 Hashable ReplicationConfiguration
-
-instance NFData ReplicationConfiguration
-
-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 Hashable ReplicationRule
-
-instance NFData ReplicationRule
-
-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 Hashable RequestPaymentConfiguration
-
-instance NFData RequestPaymentConfiguration
-
-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 Hashable RestoreRequest
-
-instance NFData RestoreRequest
-
-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 Hashable RoutingRule
-
-instance NFData RoutingRule
-
-instance ToXML RoutingRule where
-        toXML RoutingRule'{..}
-          = mconcat
-              ["Condition" @= _rrCondition,
-               "Redirect" @= _rrRedirect]
-
--- | Container for object key name prefix and suffix filtering rules.
---
--- /See:/ 's3KeyFilter' smart constructor.
-newtype S3KeyFilter = S3KeyFilter'
-    { _skfFilterRules :: Maybe [FilterRule]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'S3KeyFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'skfFilterRules'
-s3KeyFilter
-    :: S3KeyFilter
-s3KeyFilter =
-    S3KeyFilter'
-    { _skfFilterRules = Nothing
-    }
-
--- | Undocumented member.
-skfFilterRules :: Lens' S3KeyFilter [FilterRule]
-skfFilterRules = lens _skfFilterRules (\ s a -> s{_skfFilterRules = a}) . _Default . _Coerce;
-
-instance FromXML S3KeyFilter where
-        parseXML x
-          = S3KeyFilter' <$>
-              (may (parseXMLList "FilterRule") x)
-
-instance Hashable S3KeyFilter
-
-instance NFData S3KeyFilter
-
-instance ToXML S3KeyFilter where
-        toXML S3KeyFilter'{..}
-          = mconcat
-              [toXML (toXMLList "FilterRule" <$> _skfFilterRules)]
-
--- | /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")
-
-instance Hashable S3ServiceError
-
-instance NFData S3ServiceError
-
--- | /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 Hashable Tag
-
-instance NFData Tag
-
-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 Hashable Tagging
-
-instance NFData Tagging
-
-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 Hashable TargetGrant
-
-instance NFData TargetGrant
-
-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)
-    , _tcFilter   :: !(Maybe NotificationConfigurationFilter)
-    , _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'
---
--- * 'tcFilter'
---
--- * 'tcTopicARN'
---
--- * 'tcEvents'
-topicConfiguration
-    :: Text -- ^ 'tcTopicARN'
-    -> TopicConfiguration
-topicConfiguration pTopicARN_ =
-    TopicConfiguration'
-    { _tcId = Nothing
-    , _tcFilter = Nothing
-    , _tcTopicARN = pTopicARN_
-    , _tcEvents = mempty
-    }
-
--- | Undocumented member.
-tcId :: Lens' TopicConfiguration (Maybe Text)
-tcId = lens _tcId (\ s a -> s{_tcId = a});
-
--- | Undocumented member.
-tcFilter :: Lens' TopicConfiguration (Maybe NotificationConfigurationFilter)
-tcFilter = lens _tcFilter (\ s a -> s{_tcFilter = 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 .@? "Filter") <*> (x .@ "Topic")
-                <*> (parseXMLList "Event" x)
-
-instance Hashable TopicConfiguration
-
-instance NFData TopicConfiguration
-
-instance ToXML TopicConfiguration where
-        toXML TopicConfiguration'{..}
-          = mconcat
-              ["Id" @= _tcId, "Filter" @= _tcFilter,
-               "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 Hashable Transition
-
-instance NFData Transition
-
-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 Hashable VersioningConfiguration
-
-instance NFData VersioningConfiguration
-
-instance ToXML VersioningConfiguration where
-        toXML VersioningConfiguration'{..}
-          = mconcat
-              ["Status" @= _vcStatus, "MfaDelete" @= _vcMFADelete]
-
--- | /See:/ 'websiteConfiguration' smart constructor.
-data WebsiteConfiguration = WebsiteConfiguration'
-    { _wcRedirectAllRequestsTo :: !(Maybe RedirectAllRequestsTo)
-    , _wcErrorDocument         :: !(Maybe ErrorDocument)
-    , _wcIndexDocument         :: !(Maybe IndexDocument)
-    , _wcRoutingRules          :: !(Maybe [RoutingRule])
-    } 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'
---
--- * 'wcIndexDocument'
---
--- * 'wcRoutingRules'
+-- * 'aimuDaysAfterInitiation' - Indicates the number of days that must pass since initiation for Lifecycle to abort an Incomplete Multipart Upload.
+abortIncompleteMultipartUpload
+    :: AbortIncompleteMultipartUpload
+abortIncompleteMultipartUpload =
+    AbortIncompleteMultipartUpload'
+    { _aimuDaysAfterInitiation = Nothing
+    }
+
+-- | Indicates the number of days that must pass since initiation for Lifecycle to abort an Incomplete Multipart Upload.
+aimuDaysAfterInitiation :: Lens' AbortIncompleteMultipartUpload (Maybe Int)
+aimuDaysAfterInitiation = lens _aimuDaysAfterInitiation (\ s a -> s{_aimuDaysAfterInitiation = a});
+
+instance FromXML AbortIncompleteMultipartUpload where
+        parseXML x
+          = AbortIncompleteMultipartUpload' <$>
+              (x .@? "DaysAfterInitiation")
+
+instance Hashable AbortIncompleteMultipartUpload
+
+instance NFData AbortIncompleteMultipartUpload
+
+instance ToXML AbortIncompleteMultipartUpload where
+        toXML AbortIncompleteMultipartUpload'{..}
+          = mconcat
+              ["DaysAfterInitiation" @= _aimuDaysAfterInitiation]
+
+-- | /See:/ 'accelerateConfiguration' smart constructor.
+newtype AccelerateConfiguration = AccelerateConfiguration'
+    { _acStatus :: Maybe BucketAccelerateStatus
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AccelerateConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acStatus' - The accelerate configuration of the bucket.
+accelerateConfiguration
+    :: AccelerateConfiguration
+accelerateConfiguration =
+    AccelerateConfiguration'
+    { _acStatus = Nothing
+    }
+
+-- | The accelerate configuration of the bucket.
+acStatus :: Lens' AccelerateConfiguration (Maybe BucketAccelerateStatus)
+acStatus = lens _acStatus (\ s a -> s{_acStatus = a});
+
+instance Hashable AccelerateConfiguration
+
+instance NFData AccelerateConfiguration
+
+instance ToXML AccelerateConfiguration where
+        toXML AccelerateConfiguration'{..}
+          = mconcat ["Status" @= _acStatus]
+
+-- | /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' - A list of grants.
+--
+-- * 'acpOwner' - Undocumented member.
+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 Hashable AccessControlPolicy
+
+instance NFData AccessControlPolicy
+
+instance ToXML AccessControlPolicy where
+        toXML AccessControlPolicy'{..}
+          = mconcat
+              ["AccessControlList" @=
+                 toXML (toXMLList "Grant" <$> _acpGrants),
+               "Owner" @= _acpOwner]
+
+-- | /See:/ 'analyticsAndOperator' smart constructor.
+data AnalyticsAndOperator = AnalyticsAndOperator'
+    { _aaoPrefix :: !(Maybe Text)
+    , _aaoTags   :: !(Maybe [Tag])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnalyticsAndOperator' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aaoPrefix' - The prefix to use when evaluating an AND predicate.
+--
+-- * 'aaoTags' - The list of tags to use when evaluating an AND predicate.
+analyticsAndOperator
+    :: AnalyticsAndOperator
+analyticsAndOperator =
+    AnalyticsAndOperator'
+    { _aaoPrefix = Nothing
+    , _aaoTags = Nothing
+    }
+
+-- | The prefix to use when evaluating an AND predicate.
+aaoPrefix :: Lens' AnalyticsAndOperator (Maybe Text)
+aaoPrefix = lens _aaoPrefix (\ s a -> s{_aaoPrefix = a});
+
+-- | The list of tags to use when evaluating an AND predicate.
+aaoTags :: Lens' AnalyticsAndOperator [Tag]
+aaoTags = lens _aaoTags (\ s a -> s{_aaoTags = a}) . _Default . _Coerce;
+
+instance FromXML AnalyticsAndOperator where
+        parseXML x
+          = AnalyticsAndOperator' <$>
+              (x .@? "Prefix") <*>
+                (x .@? "Tag" .!@ mempty >>= may (parseXMLList "Tag"))
+
+instance Hashable AnalyticsAndOperator
+
+instance NFData AnalyticsAndOperator
+
+instance ToXML AnalyticsAndOperator where
+        toXML AnalyticsAndOperator'{..}
+          = mconcat
+              ["Prefix" @= _aaoPrefix,
+               "Tag" @= toXML (toXMLList "Tag" <$> _aaoTags)]
+
+-- | /See:/ 'analyticsConfiguration' smart constructor.
+data AnalyticsConfiguration = AnalyticsConfiguration'
+    { _acFilter               :: !(Maybe AnalyticsFilter)
+    , _acId                   :: !Text
+    , _acStorageClassAnalysis :: !StorageClassAnalysis
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnalyticsConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acFilter' - The filter used to describe a set of objects for analyses. A filter must have exactly one prefix, one tag, or one conjunction (AnalyticsAndOperator). If no filter is provided, all objects will be considered in any analysis.
+--
+-- * 'acId' - The identifier used to represent an analytics configuration.
+--
+-- * 'acStorageClassAnalysis' - If present, it indicates that data related to access patterns will be collected and made available to analyze the tradeoffs between different storage classes.
+analyticsConfiguration
+    :: Text -- ^ 'acId'
+    -> StorageClassAnalysis -- ^ 'acStorageClassAnalysis'
+    -> AnalyticsConfiguration
+analyticsConfiguration pId_ pStorageClassAnalysis_ =
+    AnalyticsConfiguration'
+    { _acFilter = Nothing
+    , _acId = pId_
+    , _acStorageClassAnalysis = pStorageClassAnalysis_
+    }
+
+-- | The filter used to describe a set of objects for analyses. A filter must have exactly one prefix, one tag, or one conjunction (AnalyticsAndOperator). If no filter is provided, all objects will be considered in any analysis.
+acFilter :: Lens' AnalyticsConfiguration (Maybe AnalyticsFilter)
+acFilter = lens _acFilter (\ s a -> s{_acFilter = a});
+
+-- | The identifier used to represent an analytics configuration.
+acId :: Lens' AnalyticsConfiguration Text
+acId = lens _acId (\ s a -> s{_acId = a});
+
+-- | If present, it indicates that data related to access patterns will be collected and made available to analyze the tradeoffs between different storage classes.
+acStorageClassAnalysis :: Lens' AnalyticsConfiguration StorageClassAnalysis
+acStorageClassAnalysis = lens _acStorageClassAnalysis (\ s a -> s{_acStorageClassAnalysis = a});
+
+instance FromXML AnalyticsConfiguration where
+        parseXML x
+          = AnalyticsConfiguration' <$>
+              (x .@? "Filter") <*> (x .@ "Id") <*>
+                (x .@ "StorageClassAnalysis")
+
+instance Hashable AnalyticsConfiguration
+
+instance NFData AnalyticsConfiguration
+
+instance ToXML AnalyticsConfiguration where
+        toXML AnalyticsConfiguration'{..}
+          = mconcat
+              ["Filter" @= _acFilter, "Id" @= _acId,
+               "StorageClassAnalysis" @= _acStorageClassAnalysis]
+
+-- | /See:/ 'analyticsExportDestination' smart constructor.
+newtype AnalyticsExportDestination = AnalyticsExportDestination'
+    { _aedS3BucketDestination :: AnalyticsS3BucketDestination
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnalyticsExportDestination' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aedS3BucketDestination' - A destination signifying output to an S3 bucket.
+analyticsExportDestination
+    :: AnalyticsS3BucketDestination -- ^ 'aedS3BucketDestination'
+    -> AnalyticsExportDestination
+analyticsExportDestination pS3BucketDestination_ =
+    AnalyticsExportDestination'
+    { _aedS3BucketDestination = pS3BucketDestination_
+    }
+
+-- | A destination signifying output to an S3 bucket.
+aedS3BucketDestination :: Lens' AnalyticsExportDestination AnalyticsS3BucketDestination
+aedS3BucketDestination = lens _aedS3BucketDestination (\ s a -> s{_aedS3BucketDestination = a});
+
+instance FromXML AnalyticsExportDestination where
+        parseXML x
+          = AnalyticsExportDestination' <$>
+              (x .@ "S3BucketDestination")
+
+instance Hashable AnalyticsExportDestination
+
+instance NFData AnalyticsExportDestination
+
+instance ToXML AnalyticsExportDestination where
+        toXML AnalyticsExportDestination'{..}
+          = mconcat
+              ["S3BucketDestination" @= _aedS3BucketDestination]
+
+-- | /See:/ 'analyticsFilter' smart constructor.
+data AnalyticsFilter = AnalyticsFilter'
+    { _afTag    :: !(Maybe Tag)
+    , _afPrefix :: !(Maybe Text)
+    , _afAnd    :: !(Maybe AnalyticsAndOperator)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnalyticsFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'afTag' - The tag to use when evaluating an analytics filter.
+--
+-- * 'afPrefix' - The prefix to use when evaluating an analytics filter.
+--
+-- * 'afAnd' - A conjunction (logical AND) of predicates, which is used in evaluating an analytics filter. The operator must have at least two predicates.
+analyticsFilter
+    :: AnalyticsFilter
+analyticsFilter =
+    AnalyticsFilter'
+    { _afTag = Nothing
+    , _afPrefix = Nothing
+    , _afAnd = Nothing
+    }
+
+-- | The tag to use when evaluating an analytics filter.
+afTag :: Lens' AnalyticsFilter (Maybe Tag)
+afTag = lens _afTag (\ s a -> s{_afTag = a});
+
+-- | The prefix to use when evaluating an analytics filter.
+afPrefix :: Lens' AnalyticsFilter (Maybe Text)
+afPrefix = lens _afPrefix (\ s a -> s{_afPrefix = a});
+
+-- | A conjunction (logical AND) of predicates, which is used in evaluating an analytics filter. The operator must have at least two predicates.
+afAnd :: Lens' AnalyticsFilter (Maybe AnalyticsAndOperator)
+afAnd = lens _afAnd (\ s a -> s{_afAnd = a});
+
+instance FromXML AnalyticsFilter where
+        parseXML x
+          = AnalyticsFilter' <$>
+              (x .@? "Tag") <*> (x .@? "Prefix") <*> (x .@? "And")
+
+instance Hashable AnalyticsFilter
+
+instance NFData AnalyticsFilter
+
+instance ToXML AnalyticsFilter where
+        toXML AnalyticsFilter'{..}
+          = mconcat
+              ["Tag" @= _afTag, "Prefix" @= _afPrefix,
+               "And" @= _afAnd]
+
+-- | /See:/ 'analyticsS3BucketDestination' smart constructor.
+data AnalyticsS3BucketDestination = AnalyticsS3BucketDestination'
+    { _asbdBucketAccountId :: !(Maybe Text)
+    , _asbdPrefix          :: !(Maybe Text)
+    , _asbdFormat          :: !AnalyticsS3ExportFileFormat
+    , _asbdBucket          :: !BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnalyticsS3BucketDestination' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'asbdBucketAccountId' - The account ID that owns the destination bucket. If no account ID is provided, the owner will not be validated prior to exporting data.
+--
+-- * 'asbdPrefix' - The prefix to use when exporting data. The exported data begins with this prefix.
+--
+-- * 'asbdFormat' - The file format used when exporting data to Amazon S3.
+--
+-- * 'asbdBucket' - The Amazon resource name (ARN) of the bucket to which data is exported.
+analyticsS3BucketDestination
+    :: AnalyticsS3ExportFileFormat -- ^ 'asbdFormat'
+    -> BucketName -- ^ 'asbdBucket'
+    -> AnalyticsS3BucketDestination
+analyticsS3BucketDestination pFormat_ pBucket_ =
+    AnalyticsS3BucketDestination'
+    { _asbdBucketAccountId = Nothing
+    , _asbdPrefix = Nothing
+    , _asbdFormat = pFormat_
+    , _asbdBucket = pBucket_
+    }
+
+-- | The account ID that owns the destination bucket. If no account ID is provided, the owner will not be validated prior to exporting data.
+asbdBucketAccountId :: Lens' AnalyticsS3BucketDestination (Maybe Text)
+asbdBucketAccountId = lens _asbdBucketAccountId (\ s a -> s{_asbdBucketAccountId = a});
+
+-- | The prefix to use when exporting data. The exported data begins with this prefix.
+asbdPrefix :: Lens' AnalyticsS3BucketDestination (Maybe Text)
+asbdPrefix = lens _asbdPrefix (\ s a -> s{_asbdPrefix = a});
+
+-- | The file format used when exporting data to Amazon S3.
+asbdFormat :: Lens' AnalyticsS3BucketDestination AnalyticsS3ExportFileFormat
+asbdFormat = lens _asbdFormat (\ s a -> s{_asbdFormat = a});
+
+-- | The Amazon resource name (ARN) of the bucket to which data is exported.
+asbdBucket :: Lens' AnalyticsS3BucketDestination BucketName
+asbdBucket = lens _asbdBucket (\ s a -> s{_asbdBucket = a});
+
+instance FromXML AnalyticsS3BucketDestination where
+        parseXML x
+          = AnalyticsS3BucketDestination' <$>
+              (x .@? "BucketAccountId") <*> (x .@? "Prefix") <*>
+                (x .@ "Format")
+                <*> (x .@ "Bucket")
+
+instance Hashable AnalyticsS3BucketDestination
+
+instance NFData AnalyticsS3BucketDestination
+
+instance ToXML AnalyticsS3BucketDestination where
+        toXML AnalyticsS3BucketDestination'{..}
+          = mconcat
+              ["BucketAccountId" @= _asbdBucketAccountId,
+               "Prefix" @= _asbdPrefix, "Format" @= _asbdFormat,
+               "Bucket" @= _asbdBucket]
+
+-- | /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' - Date the bucket was created.
+--
+-- * 'bName' - The name of the bucket.
+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")
+
+instance Hashable Bucket
+
+instance NFData Bucket
+
+-- | /See:/ 'bucketLifecycleConfiguration' smart constructor.
+newtype BucketLifecycleConfiguration = BucketLifecycleConfiguration'
+    { _blcRules :: [LifecycleRule]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BucketLifecycleConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'blcRules' - Undocumented member.
+bucketLifecycleConfiguration
+    :: BucketLifecycleConfiguration
+bucketLifecycleConfiguration =
+    BucketLifecycleConfiguration'
+    { _blcRules = mempty
+    }
+
+-- | Undocumented member.
+blcRules :: Lens' BucketLifecycleConfiguration [LifecycleRule]
+blcRules = lens _blcRules (\ s a -> s{_blcRules = a}) . _Coerce;
+
+instance Hashable BucketLifecycleConfiguration
+
+instance NFData BucketLifecycleConfiguration
+
+instance ToXML BucketLifecycleConfiguration where
+        toXML BucketLifecycleConfiguration'{..}
+          = mconcat [toXMLList "Rule" _blcRules]
+
+-- | /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' - Undocumented member.
+bucketLoggingStatus
+    :: BucketLoggingStatus
+bucketLoggingStatus =
+    BucketLoggingStatus'
+    { _blsLoggingEnabled = Nothing
+    }
+
+-- | Undocumented member.
+blsLoggingEnabled :: Lens' BucketLoggingStatus (Maybe LoggingEnabled)
+blsLoggingEnabled = lens _blsLoggingEnabled (\ s a -> s{_blsLoggingEnabled = a});
+
+instance Hashable BucketLoggingStatus
+
+instance NFData BucketLoggingStatus
+
+instance ToXML BucketLoggingStatus where
+        toXML BucketLoggingStatus'{..}
+          = mconcat ["LoggingEnabled" @= _blsLoggingEnabled]
+
+-- | /See:/ 'corsConfiguration' smart constructor.
+newtype CORSConfiguration = CORSConfiguration'
+    { _ccCORSRules :: [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' - Undocumented member.
+corsConfiguration
+    :: CORSConfiguration
+corsConfiguration =
+    CORSConfiguration'
+    { _ccCORSRules = mempty
+    }
+
+-- | Undocumented member.
+ccCORSRules :: Lens' CORSConfiguration [CORSRule]
+ccCORSRules = lens _ccCORSRules (\ s a -> s{_ccCORSRules = a}) . _Coerce;
+
+instance Hashable CORSConfiguration
+
+instance NFData CORSConfiguration
+
+instance ToXML CORSConfiguration where
+        toXML CORSConfiguration'{..}
+          = mconcat [toXMLList "CORSRule" _ccCORSRules]
+
+-- | /See:/ 'corsRule' smart constructor.
+data CORSRule = CORSRule'
+    { _crMaxAgeSeconds  :: !(Maybe Int)
+    , _crAllowedHeaders :: !(Maybe [Text])
+    , _crExposeHeaders  :: !(Maybe [Text])
+    , _crAllowedMethods :: ![Text]
+    , _crAllowedOrigins :: ![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:
+--
+-- * 'crMaxAgeSeconds' - The time in seconds that your browser is to cache the preflight response for the specified resource.
+--
+-- * 'crAllowedHeaders' - Specifies which headers are allowed in a pre-flight OPTIONS request.
+--
+-- * 'crExposeHeaders' - 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).
+--
+-- * 'crAllowedMethods' - Identifies HTTP methods that the domain/origin specified in the rule is allowed to execute.
+--
+-- * 'crAllowedOrigins' - One or more origins you want customers to be able to access the bucket from.
+corsRule
+    :: CORSRule
+corsRule =
+    CORSRule'
+    { _crMaxAgeSeconds = Nothing
+    , _crAllowedHeaders = Nothing
+    , _crExposeHeaders = Nothing
+    , _crAllowedMethods = mempty
+    , _crAllowedOrigins = mempty
+    }
+
+-- | 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 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;
+
+-- | 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}) . _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}) . _Coerce;
+
+instance FromXML CORSRule where
+        parseXML x
+          = CORSRule' <$>
+              (x .@? "MaxAgeSeconds") <*>
+                (may (parseXMLList "AllowedHeader") x)
+                <*> (may (parseXMLList "ExposeHeader") x)
+                <*> (parseXMLList "AllowedMethod" x)
+                <*> (parseXMLList "AllowedOrigin" x)
+
+instance Hashable CORSRule
+
+instance NFData CORSRule
+
+instance ToXML CORSRule where
+        toXML CORSRule'{..}
+          = mconcat
+              ["MaxAgeSeconds" @= _crMaxAgeSeconds,
+               toXML
+                 (toXMLList "AllowedHeader" <$> _crAllowedHeaders),
+               toXML
+                 (toXMLList "ExposeHeader" <$> _crExposeHeaders),
+               toXMLList "AllowedMethod" _crAllowedMethods,
+               toXMLList "AllowedOrigin" _crAllowedOrigins]
+
+-- | /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' - Undocumented member.
+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")
+
+instance Hashable CommonPrefix
+
+instance NFData CommonPrefix
+
+-- | /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' - Undocumented member.
+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 Hashable CompletedMultipartUpload
+
+instance NFData CompletedMultipartUpload
+
+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' - Part number that identifies the part. This is a positive integer between 1 and 10,000.
+--
+-- * 'cpETag' - Entity tag returned when the part was uploaded.
+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 Hashable CompletedPart
+
+instance NFData CompletedPart
+
+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' - 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.
+--
+-- * 'cHTTPErrorCodeReturnedEquals' - 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.
+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 Hashable Condition
+
+instance NFData Condition
+
+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' - Undocumented member.
+--
+-- * 'corLastModified' - Undocumented member.
+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")
+
+instance Hashable CopyObjectResult
+
+instance NFData CopyObjectResult
+
+-- | /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' - Entity tag of the object.
+--
+-- * 'cprLastModified' - Date and time at which the object was uploaded.
+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")
+
+instance Hashable CopyPartResult
+
+instance NFData CopyPartResult
+
+-- | /See:/ 'createBucketConfiguration' smart constructor.
+newtype CreateBucketConfiguration = CreateBucketConfiguration'
+    { _cbcLocationConstraint :: Maybe LocationConstraint
+    } 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' - Specifies the region where the bucket will be created. If you don't specify a region, the bucket will be created in US Standard.
+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 LocationConstraint)
+cbcLocationConstraint = lens _cbcLocationConstraint (\ s a -> s{_cbcLocationConstraint = a});
+
+instance Hashable CreateBucketConfiguration
+
+instance NFData CreateBucketConfiguration
+
+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' - Element to enable quiet mode for the request. When you add this element, you must set its value to true.
+--
+-- * 'dObjects' - Undocumented member.
+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 Hashable Delete
+
+instance NFData Delete
+
+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' - Version ID of an object.
+--
+-- * 'dmeIsLatest' - Specifies whether the object is (true) or is not (false) the latest version of an object.
+--
+-- * 'dmeOwner' - Undocumented member.
+--
+-- * 'dmeKey' - The object key.
+--
+-- * 'dmeLastModified' - Date and time the object was last modified.
+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")
+
+instance Hashable DeleteMarkerEntry
+
+instance NFData DeleteMarkerEntry
+
+-- | /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' - Undocumented member.
+--
+-- * 'dDeleteMarker' - Undocumented member.
+--
+-- * 'dDeleteMarkerVersionId' - Undocumented member.
+--
+-- * 'dKey' - Undocumented member.
+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")
+
+instance Hashable DeletedObject
+
+instance NFData DeletedObject
+
+-- | /See:/ 'destination' smart constructor.
+data Destination = Destination'
+    { _dStorageClass :: !(Maybe StorageClass)
+    , _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:
+--
+-- * 'dStorageClass' - The class of storage used to store the object.
+--
+-- * 'dBucket' - Amazon resource name (ARN) of the bucket where you want Amazon S3 to store replicas of the object identified by the rule.
+destination
+    :: BucketName -- ^ 'dBucket'
+    -> Destination
+destination pBucket_ =
+    Destination'
+    { _dStorageClass = Nothing
+    , _dBucket = pBucket_
+    }
+
+-- | The class of storage used to store the object.
+dStorageClass :: Lens' Destination (Maybe StorageClass)
+dStorageClass = lens _dStorageClass (\ s a -> s{_dStorageClass = a});
+
+-- | 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 .@? "StorageClass") <*> (x .@ "Bucket")
+
+instance Hashable Destination
+
+instance NFData Destination
+
+instance ToXML Destination where
+        toXML Destination'{..}
+          = mconcat
+              ["StorageClass" @= _dStorageClass,
+               "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' - The object key name to use when a 4XX class error occurs.
+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 Hashable ErrorDocument
+
+instance NFData ErrorDocument
+
+instance ToXML ErrorDocument where
+        toXML ErrorDocument'{..} = mconcat ["Key" @= _edKey]
+
+-- | Container for key value pair that defines the criteria for the filter rule.
+--
+-- /See:/ 'filterRule' smart constructor.
+data FilterRule = FilterRule'
+    { _frValue :: !(Maybe Text)
+    , _frName  :: !(Maybe FilterRuleName)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FilterRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'frValue' - Undocumented member.
+--
+-- * 'frName' - <http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html Configuring Event Notifications>
+filterRule
+    :: FilterRule
+filterRule =
+    FilterRule'
+    { _frValue = Nothing
+    , _frName = Nothing
+    }
+
+-- | Undocumented member.
+frValue :: Lens' FilterRule (Maybe Text)
+frValue = lens _frValue (\ s a -> s{_frValue = a});
+
+-- | <http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html Configuring Event Notifications>
+frName :: Lens' FilterRule (Maybe FilterRuleName)
+frName = lens _frName (\ s a -> s{_frName = a});
+
+instance FromXML FilterRule where
+        parseXML x
+          = FilterRule' <$> (x .@? "Value") <*> (x .@? "Name")
+
+instance Hashable FilterRule
+
+instance NFData FilterRule
+
+instance ToXML FilterRule where
+        toXML FilterRule'{..}
+          = mconcat ["Value" @= _frValue, "Name" @= _frName]
+
+-- | /See:/ 'glacierJobParameters' smart constructor.
+newtype GlacierJobParameters = GlacierJobParameters'
+    { _gjpTier :: Tier
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GlacierJobParameters' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gjpTier' - Glacier retrieval tier at which the restore will be processed.
+glacierJobParameters
+    :: Tier -- ^ 'gjpTier'
+    -> GlacierJobParameters
+glacierJobParameters pTier_ =
+    GlacierJobParameters'
+    { _gjpTier = pTier_
+    }
+
+-- | Glacier retrieval tier at which the restore will be processed.
+gjpTier :: Lens' GlacierJobParameters Tier
+gjpTier = lens _gjpTier (\ s a -> s{_gjpTier = a});
+
+instance Hashable GlacierJobParameters
+
+instance NFData GlacierJobParameters
+
+instance ToXML GlacierJobParameters where
+        toXML GlacierJobParameters'{..}
+          = mconcat ["Tier" @= _gjpTier]
+
+-- | /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' - Specifies the permission given to the grantee.
+--
+-- * 'gGrantee' - Undocumented member.
+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 Hashable Grant
+
+instance NFData Grant
+
+instance ToXML Grant where
+        toXML Grant'{..}
+          = mconcat
+              ["Permission" @= _gPermission,
+               "Grantee" @= _gGrantee]
+
+-- | /See:/ 'grantee' smart constructor.
+data Grantee = Grantee'
+    { _gURI          :: !(Maybe Text)
+    , _gEmailAddress :: !(Maybe Text)
+    , _gDisplayName  :: !(Maybe Text)
+    , _gId           :: !(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' - URI of the grantee group.
+--
+-- * 'gEmailAddress' - Email address of the grantee.
+--
+-- * 'gDisplayName' - Screen name of the grantee.
+--
+-- * 'gId' - The canonical user ID of the grantee.
+--
+-- * 'gType' - Type of grantee
+grantee
+    :: Type -- ^ 'gType'
+    -> Grantee
+grantee pType_ =
+    Grantee'
+    { _gURI = Nothing
+    , _gEmailAddress = Nothing
+    , _gDisplayName = Nothing
+    , _gId = 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});
+
+-- | Screen name of the grantee.
+gDisplayName :: Lens' Grantee (Maybe Text)
+gDisplayName = lens _gDisplayName (\ s a -> s{_gDisplayName = 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});
+
+instance FromXML Grantee where
+        parseXML x
+          = Grantee' <$>
+              (x .@? "URI") <*> (x .@? "EmailAddress") <*>
+                (x .@? "DisplayName")
+                <*> (x .@? "ID")
+                <*> (x .@ "xsi:type")
+
+instance Hashable Grantee
+
+instance NFData Grantee
+
+instance ToXML Grantee where
+        toXML Grantee'{..}
+          = mconcat
+              ["URI" @= _gURI, "EmailAddress" @= _gEmailAddress,
+               "DisplayName" @= _gDisplayName, "ID" @= _gId,
+               "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' - 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.
+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 Hashable IndexDocument
+
+instance NFData IndexDocument
+
+instance ToXML IndexDocument where
+        toXML IndexDocument'{..}
+          = mconcat ["Suffix" @= _idSuffix]
+
+-- | /See:/ 'initiator' smart constructor.
+data Initiator = Initiator'
+    { _iDisplayName :: !(Maybe Text)
+    , _iId          :: !(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:
+--
+-- * 'iDisplayName' - Name of the Principal.
+--
+-- * 'iId' - 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.
+initiator
+    :: Initiator
+initiator =
+    Initiator'
+    { _iDisplayName = Nothing
+    , _iId = 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 Hashable Initiator
+
+instance NFData Initiator
+
+-- | /See:/ 'inventoryConfiguration' smart constructor.
+data InventoryConfiguration = InventoryConfiguration'
+    { _icOptionalFields         :: !(Maybe [InventoryOptionalField])
+    , _icFilter                 :: !(Maybe InventoryFilter)
+    , _icDestination            :: !InventoryDestination
+    , _icIsEnabled              :: !Bool
+    , _icId                     :: !Text
+    , _icIncludedObjectVersions :: !InventoryIncludedObjectVersions
+    , _icSchedule               :: !InventorySchedule
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InventoryConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'icOptionalFields' - Contains the optional fields that are included in the inventory results.
+--
+-- * 'icFilter' - Specifies an inventory filter. The inventory only includes objects that meet the filter's criteria.
+--
+-- * 'icDestination' - Contains information about where to publish the inventory results.
+--
+-- * 'icIsEnabled' - Specifies whether the inventory is enabled or disabled.
+--
+-- * 'icId' - The ID used to identify the inventory configuration.
+--
+-- * 'icIncludedObjectVersions' - Specifies which object version(s) to included in the inventory results.
+--
+-- * 'icSchedule' - Specifies the schedule for generating inventory results.
+inventoryConfiguration
+    :: InventoryDestination -- ^ 'icDestination'
+    -> Bool -- ^ 'icIsEnabled'
+    -> Text -- ^ 'icId'
+    -> InventoryIncludedObjectVersions -- ^ 'icIncludedObjectVersions'
+    -> InventorySchedule -- ^ 'icSchedule'
+    -> InventoryConfiguration
+inventoryConfiguration pDestination_ pIsEnabled_ pId_ pIncludedObjectVersions_ pSchedule_ =
+    InventoryConfiguration'
+    { _icOptionalFields = Nothing
+    , _icFilter = Nothing
+    , _icDestination = pDestination_
+    , _icIsEnabled = pIsEnabled_
+    , _icId = pId_
+    , _icIncludedObjectVersions = pIncludedObjectVersions_
+    , _icSchedule = pSchedule_
+    }
+
+-- | Contains the optional fields that are included in the inventory results.
+icOptionalFields :: Lens' InventoryConfiguration [InventoryOptionalField]
+icOptionalFields = lens _icOptionalFields (\ s a -> s{_icOptionalFields = a}) . _Default . _Coerce;
+
+-- | Specifies an inventory filter. The inventory only includes objects that meet the filter's criteria.
+icFilter :: Lens' InventoryConfiguration (Maybe InventoryFilter)
+icFilter = lens _icFilter (\ s a -> s{_icFilter = a});
+
+-- | Contains information about where to publish the inventory results.
+icDestination :: Lens' InventoryConfiguration InventoryDestination
+icDestination = lens _icDestination (\ s a -> s{_icDestination = a});
+
+-- | Specifies whether the inventory is enabled or disabled.
+icIsEnabled :: Lens' InventoryConfiguration Bool
+icIsEnabled = lens _icIsEnabled (\ s a -> s{_icIsEnabled = a});
+
+-- | The ID used to identify the inventory configuration.
+icId :: Lens' InventoryConfiguration Text
+icId = lens _icId (\ s a -> s{_icId = a});
+
+-- | Specifies which object version(s) to included in the inventory results.
+icIncludedObjectVersions :: Lens' InventoryConfiguration InventoryIncludedObjectVersions
+icIncludedObjectVersions = lens _icIncludedObjectVersions (\ s a -> s{_icIncludedObjectVersions = a});
+
+-- | Specifies the schedule for generating inventory results.
+icSchedule :: Lens' InventoryConfiguration InventorySchedule
+icSchedule = lens _icSchedule (\ s a -> s{_icSchedule = a});
+
+instance FromXML InventoryConfiguration where
+        parseXML x
+          = InventoryConfiguration' <$>
+              (x .@? "OptionalFields" .!@ mempty >>=
+                 may (parseXMLList "Field"))
+                <*> (x .@? "Filter")
+                <*> (x .@ "Destination")
+                <*> (x .@ "IsEnabled")
+                <*> (x .@ "Id")
+                <*> (x .@ "IncludedObjectVersions")
+                <*> (x .@ "Schedule")
+
+instance Hashable InventoryConfiguration
+
+instance NFData InventoryConfiguration
+
+instance ToXML InventoryConfiguration where
+        toXML InventoryConfiguration'{..}
+          = mconcat
+              ["OptionalFields" @=
+                 toXML (toXMLList "Field" <$> _icOptionalFields),
+               "Filter" @= _icFilter,
+               "Destination" @= _icDestination,
+               "IsEnabled" @= _icIsEnabled, "Id" @= _icId,
+               "IncludedObjectVersions" @=
+                 _icIncludedObjectVersions,
+               "Schedule" @= _icSchedule]
+
+-- | /See:/ 'inventoryDestination' smart constructor.
+newtype InventoryDestination = InventoryDestination'
+    { _idS3BucketDestination :: InventoryS3BucketDestination
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InventoryDestination' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'idS3BucketDestination' - Contains the bucket name, file format, bucket owner (optional), and prefix (optional) where inventory results are published.
+inventoryDestination
+    :: InventoryS3BucketDestination -- ^ 'idS3BucketDestination'
+    -> InventoryDestination
+inventoryDestination pS3BucketDestination_ =
+    InventoryDestination'
+    { _idS3BucketDestination = pS3BucketDestination_
+    }
+
+-- | Contains the bucket name, file format, bucket owner (optional), and prefix (optional) where inventory results are published.
+idS3BucketDestination :: Lens' InventoryDestination InventoryS3BucketDestination
+idS3BucketDestination = lens _idS3BucketDestination (\ s a -> s{_idS3BucketDestination = a});
+
+instance FromXML InventoryDestination where
+        parseXML x
+          = InventoryDestination' <$>
+              (x .@ "S3BucketDestination")
+
+instance Hashable InventoryDestination
+
+instance NFData InventoryDestination
+
+instance ToXML InventoryDestination where
+        toXML InventoryDestination'{..}
+          = mconcat
+              ["S3BucketDestination" @= _idS3BucketDestination]
+
+-- | /See:/ 'inventoryFilter' smart constructor.
+newtype InventoryFilter = InventoryFilter'
+    { _ifPrefix :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InventoryFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ifPrefix' - The prefix that an object must have to be included in the inventory results.
+inventoryFilter
+    :: Text -- ^ 'ifPrefix'
+    -> InventoryFilter
+inventoryFilter pPrefix_ =
+    InventoryFilter'
+    { _ifPrefix = pPrefix_
+    }
+
+-- | The prefix that an object must have to be included in the inventory results.
+ifPrefix :: Lens' InventoryFilter Text
+ifPrefix = lens _ifPrefix (\ s a -> s{_ifPrefix = a});
+
+instance FromXML InventoryFilter where
+        parseXML x = InventoryFilter' <$> (x .@ "Prefix")
+
+instance Hashable InventoryFilter
+
+instance NFData InventoryFilter
+
+instance ToXML InventoryFilter where
+        toXML InventoryFilter'{..}
+          = mconcat ["Prefix" @= _ifPrefix]
+
+-- | /See:/ 'inventoryS3BucketDestination' smart constructor.
+data InventoryS3BucketDestination = InventoryS3BucketDestination'
+    { _isbdPrefix    :: !(Maybe Text)
+    , _isbdAccountId :: !(Maybe Text)
+    , _isbdBucket    :: !BucketName
+    , _isbdFormat    :: !InventoryFormat
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InventoryS3BucketDestination' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'isbdPrefix' - The prefix that is prepended to all inventory results.
+--
+-- * 'isbdAccountId' - The ID of the account that owns the destination bucket.
+--
+-- * 'isbdBucket' - The Amazon resource name (ARN) of the bucket where inventory results will be published.
+--
+-- * 'isbdFormat' - Specifies the output format of the inventory results.
+inventoryS3BucketDestination
+    :: BucketName -- ^ 'isbdBucket'
+    -> InventoryFormat -- ^ 'isbdFormat'
+    -> InventoryS3BucketDestination
+inventoryS3BucketDestination pBucket_ pFormat_ =
+    InventoryS3BucketDestination'
+    { _isbdPrefix = Nothing
+    , _isbdAccountId = Nothing
+    , _isbdBucket = pBucket_
+    , _isbdFormat = pFormat_
+    }
+
+-- | The prefix that is prepended to all inventory results.
+isbdPrefix :: Lens' InventoryS3BucketDestination (Maybe Text)
+isbdPrefix = lens _isbdPrefix (\ s a -> s{_isbdPrefix = a});
+
+-- | The ID of the account that owns the destination bucket.
+isbdAccountId :: Lens' InventoryS3BucketDestination (Maybe Text)
+isbdAccountId = lens _isbdAccountId (\ s a -> s{_isbdAccountId = a});
+
+-- | The Amazon resource name (ARN) of the bucket where inventory results will be published.
+isbdBucket :: Lens' InventoryS3BucketDestination BucketName
+isbdBucket = lens _isbdBucket (\ s a -> s{_isbdBucket = a});
+
+-- | Specifies the output format of the inventory results.
+isbdFormat :: Lens' InventoryS3BucketDestination InventoryFormat
+isbdFormat = lens _isbdFormat (\ s a -> s{_isbdFormat = a});
+
+instance FromXML InventoryS3BucketDestination where
+        parseXML x
+          = InventoryS3BucketDestination' <$>
+              (x .@? "Prefix") <*> (x .@? "AccountId") <*>
+                (x .@ "Bucket")
+                <*> (x .@ "Format")
+
+instance Hashable InventoryS3BucketDestination
+
+instance NFData InventoryS3BucketDestination
+
+instance ToXML InventoryS3BucketDestination where
+        toXML InventoryS3BucketDestination'{..}
+          = mconcat
+              ["Prefix" @= _isbdPrefix,
+               "AccountId" @= _isbdAccountId,
+               "Bucket" @= _isbdBucket, "Format" @= _isbdFormat]
+
+-- | /See:/ 'inventorySchedule' smart constructor.
+newtype InventorySchedule = InventorySchedule'
+    { _isFrequency :: InventoryFrequency
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InventorySchedule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'isFrequency' - Specifies how frequently inventory results are produced.
+inventorySchedule
+    :: InventoryFrequency -- ^ 'isFrequency'
+    -> InventorySchedule
+inventorySchedule pFrequency_ =
+    InventorySchedule'
+    { _isFrequency = pFrequency_
+    }
+
+-- | Specifies how frequently inventory results are produced.
+isFrequency :: Lens' InventorySchedule InventoryFrequency
+isFrequency = lens _isFrequency (\ s a -> s{_isFrequency = a});
+
+instance FromXML InventorySchedule where
+        parseXML x
+          = InventorySchedule' <$> (x .@ "Frequency")
+
+instance Hashable InventorySchedule
+
+instance NFData InventorySchedule
+
+instance ToXML InventorySchedule where
+        toXML InventorySchedule'{..}
+          = mconcat ["Frequency" @= _isFrequency]
+
+-- | Container for specifying the AWS Lambda notification configuration.
+--
+-- /See:/ 'lambdaFunctionConfiguration' smart constructor.
+data LambdaFunctionConfiguration = LambdaFunctionConfiguration'
+    { _lfcId                :: !(Maybe Text)
+    , _lfcFilter            :: !(Maybe NotificationConfigurationFilter)
+    , _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' - Undocumented member.
+--
+-- * 'lfcFilter' - Undocumented member.
+--
+-- * 'lfcLambdaFunctionARN' - Lambda cloud function ARN that Amazon S3 can invoke when it detects events of the specified type.
+--
+-- * 'lfcEvents' - Undocumented member.
+lambdaFunctionConfiguration
+    :: Text -- ^ 'lfcLambdaFunctionARN'
+    -> LambdaFunctionConfiguration
+lambdaFunctionConfiguration pLambdaFunctionARN_ =
+    LambdaFunctionConfiguration'
+    { _lfcId = Nothing
+    , _lfcFilter = Nothing
+    , _lfcLambdaFunctionARN = pLambdaFunctionARN_
+    , _lfcEvents = mempty
+    }
+
+-- | Undocumented member.
+lfcId :: Lens' LambdaFunctionConfiguration (Maybe Text)
+lfcId = lens _lfcId (\ s a -> s{_lfcId = a});
+
+-- | Undocumented member.
+lfcFilter :: Lens' LambdaFunctionConfiguration (Maybe NotificationConfigurationFilter)
+lfcFilter = lens _lfcFilter (\ s a -> s{_lfcFilter = 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 .@? "Filter") <*>
+                (x .@ "CloudFunction")
+                <*> (parseXMLList "Event" x)
+
+instance Hashable LambdaFunctionConfiguration
+
+instance NFData LambdaFunctionConfiguration
+
+instance ToXML LambdaFunctionConfiguration where
+        toXML LambdaFunctionConfiguration'{..}
+          = mconcat
+              ["Id" @= _lfcId, "Filter" @= _lfcFilter,
+               "CloudFunction" @= _lfcLambdaFunctionARN,
+               toXMLList "Event" _lfcEvents]
+
+-- | /See:/ 'lifecycleExpiration' smart constructor.
+data LifecycleExpiration = LifecycleExpiration'
+    { _leDays                      :: !(Maybe Int)
+    , _leDate                      :: !(Maybe RFC822)
+    , _leExpiredObjectDeleteMarker :: !(Maybe Bool)
+    } 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' - Indicates the lifetime, in days, of the objects that are subject to the rule. The value must be a non-zero positive integer.
+--
+-- * 'leDate' - Indicates at what date the object is to be moved or deleted. Should be in GMT ISO 8601 Format.
+--
+-- * 'leExpiredObjectDeleteMarker' - Indicates whether Amazon S3 will remove a delete marker with no noncurrent versions. If set to true, the delete marker will be expired; if set to false the policy takes no action. This cannot be specified with Days or Date in a Lifecycle Expiration Policy.
+lifecycleExpiration
+    :: LifecycleExpiration
+lifecycleExpiration =
+    LifecycleExpiration'
+    { _leDays = Nothing
+    , _leDate = Nothing
+    , _leExpiredObjectDeleteMarker = 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;
+
+-- | Indicates whether Amazon S3 will remove a delete marker with no noncurrent versions. If set to true, the delete marker will be expired; if set to false the policy takes no action. This cannot be specified with Days or Date in a Lifecycle Expiration Policy.
+leExpiredObjectDeleteMarker :: Lens' LifecycleExpiration (Maybe Bool)
+leExpiredObjectDeleteMarker = lens _leExpiredObjectDeleteMarker (\ s a -> s{_leExpiredObjectDeleteMarker = a});
+
+instance FromXML LifecycleExpiration where
+        parseXML x
+          = LifecycleExpiration' <$>
+              (x .@? "Days") <*> (x .@? "Date") <*>
+                (x .@? "ExpiredObjectDeleteMarker")
+
+instance Hashable LifecycleExpiration
+
+instance NFData LifecycleExpiration
+
+instance ToXML LifecycleExpiration where
+        toXML LifecycleExpiration'{..}
+          = mconcat
+              ["Days" @= _leDays, "Date" @= _leDate,
+               "ExpiredObjectDeleteMarker" @=
+                 _leExpiredObjectDeleteMarker]
+
+-- | /See:/ 'lifecycleRule' smart constructor.
+data LifecycleRule = LifecycleRule'
+    { _lrTransitions                    :: !(Maybe [Transition])
+    , _lrNoncurrentVersionExpiration    :: !(Maybe NoncurrentVersionExpiration)
+    , _lrPrefix                         :: !(Maybe Text)
+    , _lrNoncurrentVersionTransitions   :: !(Maybe [NoncurrentVersionTransition])
+    , _lrExpiration                     :: !(Maybe LifecycleExpiration)
+    , _lrId                             :: !(Maybe Text)
+    , _lrFilter                         :: !(Maybe LifecycleRuleFilter)
+    , _lrAbortIncompleteMultipartUpload :: !(Maybe AbortIncompleteMultipartUpload)
+    , _lrStatus                         :: !ExpirationStatus
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LifecycleRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lrTransitions' - Undocumented member.
+--
+-- * 'lrNoncurrentVersionExpiration' - Undocumented member.
+--
+-- * 'lrPrefix' - Prefix identifying one or more objects to which the rule applies. This is deprecated; use Filter instead.
+--
+-- * 'lrNoncurrentVersionTransitions' - Undocumented member.
+--
+-- * 'lrExpiration' - Undocumented member.
+--
+-- * 'lrId' - Unique identifier for the rule. The value cannot be longer than 255 characters.
+--
+-- * 'lrFilter' - Undocumented member.
+--
+-- * 'lrAbortIncompleteMultipartUpload' - Undocumented member.
+--
+-- * 'lrStatus' - If 'Enabled', the rule is currently being applied. If 'Disabled', the rule is not currently being applied.
+lifecycleRule
+    :: ExpirationStatus -- ^ 'lrStatus'
+    -> LifecycleRule
+lifecycleRule pStatus_ =
+    LifecycleRule'
+    { _lrTransitions = Nothing
+    , _lrNoncurrentVersionExpiration = Nothing
+    , _lrPrefix = Nothing
+    , _lrNoncurrentVersionTransitions = Nothing
+    , _lrExpiration = Nothing
+    , _lrId = Nothing
+    , _lrFilter = Nothing
+    , _lrAbortIncompleteMultipartUpload = Nothing
+    , _lrStatus = pStatus_
+    }
+
+-- | Undocumented member.
+lrTransitions :: Lens' LifecycleRule [Transition]
+lrTransitions = lens _lrTransitions (\ s a -> s{_lrTransitions = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+lrNoncurrentVersionExpiration :: Lens' LifecycleRule (Maybe NoncurrentVersionExpiration)
+lrNoncurrentVersionExpiration = lens _lrNoncurrentVersionExpiration (\ s a -> s{_lrNoncurrentVersionExpiration = a});
+
+-- | Prefix identifying one or more objects to which the rule applies. This is deprecated; use Filter instead.
+lrPrefix :: Lens' LifecycleRule (Maybe Text)
+lrPrefix = lens _lrPrefix (\ s a -> s{_lrPrefix = a});
+
+-- | Undocumented member.
+lrNoncurrentVersionTransitions :: Lens' LifecycleRule [NoncurrentVersionTransition]
+lrNoncurrentVersionTransitions = lens _lrNoncurrentVersionTransitions (\ s a -> s{_lrNoncurrentVersionTransitions = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+lrExpiration :: Lens' LifecycleRule (Maybe LifecycleExpiration)
+lrExpiration = lens _lrExpiration (\ s a -> s{_lrExpiration = a});
+
+-- | Unique identifier for the rule. The value cannot be longer than 255 characters.
+lrId :: Lens' LifecycleRule (Maybe Text)
+lrId = lens _lrId (\ s a -> s{_lrId = a});
+
+-- | Undocumented member.
+lrFilter :: Lens' LifecycleRule (Maybe LifecycleRuleFilter)
+lrFilter = lens _lrFilter (\ s a -> s{_lrFilter = a});
+
+-- | Undocumented member.
+lrAbortIncompleteMultipartUpload :: Lens' LifecycleRule (Maybe AbortIncompleteMultipartUpload)
+lrAbortIncompleteMultipartUpload = lens _lrAbortIncompleteMultipartUpload (\ s a -> s{_lrAbortIncompleteMultipartUpload = a});
+
+-- | If 'Enabled', the rule is currently being applied. If 'Disabled', the rule is not currently being applied.
+lrStatus :: Lens' LifecycleRule ExpirationStatus
+lrStatus = lens _lrStatus (\ s a -> s{_lrStatus = a});
+
+instance FromXML LifecycleRule where
+        parseXML x
+          = LifecycleRule' <$>
+              (may (parseXMLList "Transition") x) <*>
+                (x .@? "NoncurrentVersionExpiration")
+                <*> (x .@? "Prefix")
+                <*>
+                (may (parseXMLList "NoncurrentVersionTransition") x)
+                <*> (x .@? "Expiration")
+                <*> (x .@? "ID")
+                <*> (x .@? "Filter")
+                <*> (x .@? "AbortIncompleteMultipartUpload")
+                <*> (x .@ "Status")
+
+instance Hashable LifecycleRule
+
+instance NFData LifecycleRule
+
+instance ToXML LifecycleRule where
+        toXML LifecycleRule'{..}
+          = mconcat
+              [toXML (toXMLList "Transition" <$> _lrTransitions),
+               "NoncurrentVersionExpiration" @=
+                 _lrNoncurrentVersionExpiration,
+               "Prefix" @= _lrPrefix,
+               toXML
+                 (toXMLList "NoncurrentVersionTransition" <$>
+                    _lrNoncurrentVersionTransitions),
+               "Expiration" @= _lrExpiration, "ID" @= _lrId,
+               "Filter" @= _lrFilter,
+               "AbortIncompleteMultipartUpload" @=
+                 _lrAbortIncompleteMultipartUpload,
+               "Status" @= _lrStatus]
+
+-- | This is used in a Lifecycle Rule Filter to apply a logical AND to two or more predicates. The Lifecycle Rule will apply to any object matching all of the predicates configured inside the And operator.
+--
+-- /See:/ 'lifecycleRuleAndOperator' smart constructor.
+data LifecycleRuleAndOperator = LifecycleRuleAndOperator'
+    { _lraoPrefix :: !(Maybe Text)
+    , _lraoTags   :: !(Maybe [Tag])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LifecycleRuleAndOperator' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lraoPrefix' - Undocumented member.
+--
+-- * 'lraoTags' - All of these tags must exist in the object's tag set in order for the rule to apply.
+lifecycleRuleAndOperator
+    :: LifecycleRuleAndOperator
+lifecycleRuleAndOperator =
+    LifecycleRuleAndOperator'
+    { _lraoPrefix = Nothing
+    , _lraoTags = Nothing
+    }
+
+-- | Undocumented member.
+lraoPrefix :: Lens' LifecycleRuleAndOperator (Maybe Text)
+lraoPrefix = lens _lraoPrefix (\ s a -> s{_lraoPrefix = a});
+
+-- | All of these tags must exist in the object's tag set in order for the rule to apply.
+lraoTags :: Lens' LifecycleRuleAndOperator [Tag]
+lraoTags = lens _lraoTags (\ s a -> s{_lraoTags = a}) . _Default . _Coerce;
+
+instance FromXML LifecycleRuleAndOperator where
+        parseXML x
+          = LifecycleRuleAndOperator' <$>
+              (x .@? "Prefix") <*>
+                (x .@? "Tag" .!@ mempty >>= may (parseXMLList "Tag"))
+
+instance Hashable LifecycleRuleAndOperator
+
+instance NFData LifecycleRuleAndOperator
+
+instance ToXML LifecycleRuleAndOperator where
+        toXML LifecycleRuleAndOperator'{..}
+          = mconcat
+              ["Prefix" @= _lraoPrefix,
+               "Tag" @= toXML (toXMLList "Tag" <$> _lraoTags)]
+
+-- | The Filter is used to identify objects that a Lifecycle Rule applies to. A Filter must have exactly one of Prefix, Tag, or And specified.
+--
+-- /See:/ 'lifecycleRuleFilter' smart constructor.
+data LifecycleRuleFilter = LifecycleRuleFilter'
+    { _lrfTag    :: !(Maybe Tag)
+    , _lrfPrefix :: !(Maybe Text)
+    , _lrfAnd    :: !(Maybe LifecycleRuleAndOperator)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LifecycleRuleFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lrfTag' - This tag must exist in the object's tag set in order for the rule to apply.
+--
+-- * 'lrfPrefix' - Prefix identifying one or more objects to which the rule applies.
+--
+-- * 'lrfAnd' - Undocumented member.
+lifecycleRuleFilter
+    :: LifecycleRuleFilter
+lifecycleRuleFilter =
+    LifecycleRuleFilter'
+    { _lrfTag = Nothing
+    , _lrfPrefix = Nothing
+    , _lrfAnd = Nothing
+    }
+
+-- | This tag must exist in the object's tag set in order for the rule to apply.
+lrfTag :: Lens' LifecycleRuleFilter (Maybe Tag)
+lrfTag = lens _lrfTag (\ s a -> s{_lrfTag = a});
+
+-- | Prefix identifying one or more objects to which the rule applies.
+lrfPrefix :: Lens' LifecycleRuleFilter (Maybe Text)
+lrfPrefix = lens _lrfPrefix (\ s a -> s{_lrfPrefix = a});
+
+-- | Undocumented member.
+lrfAnd :: Lens' LifecycleRuleFilter (Maybe LifecycleRuleAndOperator)
+lrfAnd = lens _lrfAnd (\ s a -> s{_lrfAnd = a});
+
+instance FromXML LifecycleRuleFilter where
+        parseXML x
+          = LifecycleRuleFilter' <$>
+              (x .@? "Tag") <*> (x .@? "Prefix") <*> (x .@? "And")
+
+instance Hashable LifecycleRuleFilter
+
+instance NFData LifecycleRuleFilter
+
+instance ToXML LifecycleRuleFilter where
+        toXML LifecycleRuleFilter'{..}
+          = mconcat
+              ["Tag" @= _lrfTag, "Prefix" @= _lrfPrefix,
+               "And" @= _lrfAnd]
+
+-- | /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' - 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.
+--
+-- * 'leTargetGrants' - Undocumented member.
+--
+-- * 'leTargetPrefix' - This element lets you specify a prefix for the keys that the log files will be stored under.
+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 Hashable LoggingEnabled
+
+instance NFData LoggingEnabled
+
+instance ToXML LoggingEnabled where
+        toXML LoggingEnabled'{..}
+          = mconcat
+              ["TargetBucket" @= _leTargetBucket,
+               "TargetGrants" @=
+                 toXML (toXMLList "Grant" <$> _leTargetGrants),
+               "TargetPrefix" @= _leTargetPrefix]
+
+-- | /See:/ 'metricsAndOperator' smart constructor.
+data MetricsAndOperator = MetricsAndOperator'
+    { _maoPrefix :: !(Maybe Text)
+    , _maoTags   :: !(Maybe [Tag])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MetricsAndOperator' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'maoPrefix' - The prefix used when evaluating an AND predicate.
+--
+-- * 'maoTags' - The list of tags used when evaluating an AND predicate.
+metricsAndOperator
+    :: MetricsAndOperator
+metricsAndOperator =
+    MetricsAndOperator'
+    { _maoPrefix = Nothing
+    , _maoTags = Nothing
+    }
+
+-- | The prefix used when evaluating an AND predicate.
+maoPrefix :: Lens' MetricsAndOperator (Maybe Text)
+maoPrefix = lens _maoPrefix (\ s a -> s{_maoPrefix = a});
+
+-- | The list of tags used when evaluating an AND predicate.
+maoTags :: Lens' MetricsAndOperator [Tag]
+maoTags = lens _maoTags (\ s a -> s{_maoTags = a}) . _Default . _Coerce;
+
+instance FromXML MetricsAndOperator where
+        parseXML x
+          = MetricsAndOperator' <$>
+              (x .@? "Prefix") <*>
+                (x .@? "Tag" .!@ mempty >>= may (parseXMLList "Tag"))
+
+instance Hashable MetricsAndOperator
+
+instance NFData MetricsAndOperator
+
+instance ToXML MetricsAndOperator where
+        toXML MetricsAndOperator'{..}
+          = mconcat
+              ["Prefix" @= _maoPrefix,
+               "Tag" @= toXML (toXMLList "Tag" <$> _maoTags)]
+
+-- | /See:/ 'metricsConfiguration' smart constructor.
+data MetricsConfiguration = MetricsConfiguration'
+    { _mcFilter :: !(Maybe MetricsFilter)
+    , _mcId     :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MetricsConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcFilter' - Specifies a metrics configuration filter. The metrics configuration will only include objects that meet the filter's criteria. A filter must be a prefix, a tag, or a conjunction (MetricsAndOperator).
+--
+-- * 'mcId' - The ID used to identify the metrics configuration.
+metricsConfiguration
+    :: Text -- ^ 'mcId'
+    -> MetricsConfiguration
+metricsConfiguration pId_ =
+    MetricsConfiguration'
+    { _mcFilter = Nothing
+    , _mcId = pId_
+    }
+
+-- | Specifies a metrics configuration filter. The metrics configuration will only include objects that meet the filter's criteria. A filter must be a prefix, a tag, or a conjunction (MetricsAndOperator).
+mcFilter :: Lens' MetricsConfiguration (Maybe MetricsFilter)
+mcFilter = lens _mcFilter (\ s a -> s{_mcFilter = a});
+
+-- | The ID used to identify the metrics configuration.
+mcId :: Lens' MetricsConfiguration Text
+mcId = lens _mcId (\ s a -> s{_mcId = a});
+
+instance FromXML MetricsConfiguration where
+        parseXML x
+          = MetricsConfiguration' <$>
+              (x .@? "Filter") <*> (x .@ "Id")
+
+instance Hashable MetricsConfiguration
+
+instance NFData MetricsConfiguration
+
+instance ToXML MetricsConfiguration where
+        toXML MetricsConfiguration'{..}
+          = mconcat ["Filter" @= _mcFilter, "Id" @= _mcId]
+
+-- | /See:/ 'metricsFilter' smart constructor.
+data MetricsFilter = MetricsFilter'
+    { _mfTag    :: !(Maybe Tag)
+    , _mfPrefix :: !(Maybe Text)
+    , _mfAnd    :: !(Maybe MetricsAndOperator)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MetricsFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mfTag' - The tag used when evaluating a metrics filter.
+--
+-- * 'mfPrefix' - The prefix used when evaluating a metrics filter.
+--
+-- * 'mfAnd' - A conjunction (logical AND) of predicates, which is used in evaluating a metrics filter. The operator must have at least two predicates, and an object must match all of the predicates in order for the filter to apply.
+metricsFilter
+    :: MetricsFilter
+metricsFilter =
+    MetricsFilter'
+    { _mfTag = Nothing
+    , _mfPrefix = Nothing
+    , _mfAnd = Nothing
+    }
+
+-- | The tag used when evaluating a metrics filter.
+mfTag :: Lens' MetricsFilter (Maybe Tag)
+mfTag = lens _mfTag (\ s a -> s{_mfTag = a});
+
+-- | The prefix used when evaluating a metrics filter.
+mfPrefix :: Lens' MetricsFilter (Maybe Text)
+mfPrefix = lens _mfPrefix (\ s a -> s{_mfPrefix = a});
+
+-- | A conjunction (logical AND) of predicates, which is used in evaluating a metrics filter. The operator must have at least two predicates, and an object must match all of the predicates in order for the filter to apply.
+mfAnd :: Lens' MetricsFilter (Maybe MetricsAndOperator)
+mfAnd = lens _mfAnd (\ s a -> s{_mfAnd = a});
+
+instance FromXML MetricsFilter where
+        parseXML x
+          = MetricsFilter' <$>
+              (x .@? "Tag") <*> (x .@? "Prefix") <*> (x .@? "And")
+
+instance Hashable MetricsFilter
+
+instance NFData MetricsFilter
+
+instance ToXML MetricsFilter where
+        toXML MetricsFilter'{..}
+          = mconcat
+              ["Tag" @= _mfTag, "Prefix" @= _mfPrefix,
+               "And" @= _mfAnd]
+
+-- | /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' - Date and time at which the multipart upload was initiated.
+--
+-- * 'muInitiator' - Identifies who initiated the multipart upload.
+--
+-- * 'muOwner' - Undocumented member.
+--
+-- * 'muKey' - Key of the object for which the multipart upload was initiated.
+--
+-- * 'muStorageClass' - The class of storage used to store the object.
+--
+-- * 'muUploadId' - Upload ID that identifies the multipart upload.
+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")
+
+instance Hashable MultipartUpload
+
+instance NFData MultipartUpload
+
+-- | 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' - <http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
+noncurrentVersionExpiration
+    :: Int -- ^ 'nveNoncurrentDays'
+    -> NoncurrentVersionExpiration
+noncurrentVersionExpiration pNoncurrentDays_ =
+    NoncurrentVersionExpiration'
+    { _nveNoncurrentDays = pNoncurrentDays_
+    }
+
+-- | <http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
+nveNoncurrentDays :: Lens' NoncurrentVersionExpiration Int
+nveNoncurrentDays = lens _nveNoncurrentDays (\ s a -> s{_nveNoncurrentDays = a});
+
+instance FromXML NoncurrentVersionExpiration where
+        parseXML x
+          = NoncurrentVersionExpiration' <$>
+              (x .@ "NoncurrentDays")
+
+instance Hashable NoncurrentVersionExpiration
+
+instance NFData NoncurrentVersionExpiration
+
+instance ToXML NoncurrentVersionExpiration where
+        toXML NoncurrentVersionExpiration'{..}
+          = mconcat ["NoncurrentDays" @= _nveNoncurrentDays]
+
+-- | Container for the transition rule that describes when noncurrent objects transition to the STANDARD_IA or 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 STANDARD_IA or 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' - <http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
+--
+-- * 'nvtStorageClass' - The class of storage used to store the object.
+noncurrentVersionTransition
+    :: Int -- ^ 'nvtNoncurrentDays'
+    -> TransitionStorageClass -- ^ 'nvtStorageClass'
+    -> NoncurrentVersionTransition
+noncurrentVersionTransition pNoncurrentDays_ pStorageClass_ =
+    NoncurrentVersionTransition'
+    { _nvtNoncurrentDays = pNoncurrentDays_
+    , _nvtStorageClass = pStorageClass_
+    }
+
+-- | <http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
+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 Hashable NoncurrentVersionTransition
+
+instance NFData NoncurrentVersionTransition
+
+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' - Undocumented member.
+--
+-- * 'ncTopicConfigurations' - Undocumented member.
+--
+-- * 'ncLambdaFunctionConfigurations' - Undocumented member.
+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 Hashable NotificationConfiguration
+
+instance NFData NotificationConfiguration
+
+instance ToXML NotificationConfiguration where
+        toXML NotificationConfiguration'{..}
+          = mconcat
+              [toXML
+                 (toXMLList "QueueConfiguration" <$>
+                    _ncQueueConfigurations),
+               toXML
+                 (toXMLList "TopicConfiguration" <$>
+                    _ncTopicConfigurations),
+               toXML
+                 (toXMLList "CloudFunctionConfiguration" <$>
+                    _ncLambdaFunctionConfigurations)]
+
+-- | <http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html Configuring Event Notifications>
+--
+-- /See:/ 'notificationConfigurationFilter' smart constructor.
+newtype NotificationConfigurationFilter = NotificationConfigurationFilter'
+    { _ncfKey :: Maybe S3KeyFilter
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NotificationConfigurationFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ncfKey' - Undocumented member.
+notificationConfigurationFilter
+    :: NotificationConfigurationFilter
+notificationConfigurationFilter =
+    NotificationConfigurationFilter'
+    { _ncfKey = Nothing
+    }
+
+-- | Undocumented member.
+ncfKey :: Lens' NotificationConfigurationFilter (Maybe S3KeyFilter)
+ncfKey = lens _ncfKey (\ s a -> s{_ncfKey = a});
+
+instance FromXML NotificationConfigurationFilter
+         where
+        parseXML x
+          = NotificationConfigurationFilter' <$>
+              (x .@? "S3Key")
+
+instance Hashable NotificationConfigurationFilter
+
+instance NFData NotificationConfigurationFilter
+
+instance ToXML NotificationConfigurationFilter where
+        toXML NotificationConfigurationFilter'{..}
+          = mconcat ["S3Key" @= _ncfKey]
+
+-- | /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' - Undocumented member.
+--
+-- * 'oETag' - Undocumented member.
+--
+-- * 'oSize' - Undocumented member.
+--
+-- * 'oKey' - Undocumented member.
+--
+-- * 'oStorageClass' - The class of storage used to store the object.
+--
+-- * 'oLastModified' - Undocumented member.
+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")
+
+instance Hashable Object
+
+instance NFData Object
+
+-- | /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' - VersionId for the specific version of the object to delete.
+--
+-- * 'oiKey' - Key name of the object to delete.
+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 Hashable ObjectIdentifier
+
+instance NFData ObjectIdentifier
+
+instance ToXML ObjectIdentifier where
+        toXML ObjectIdentifier'{..}
+          = mconcat
+              ["VersionId" @= _oiVersionId, "Key" @= _oiKey]
+
+-- | /See:/ 'objectVersion' smart constructor.
+data ObjectVersion = ObjectVersion'
+    { _ovETag         :: !(Maybe ETag)
+    , _ovVersionId    :: !(Maybe ObjectVersionId)
+    , _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:
+--
+-- * 'ovETag' - Undocumented member.
+--
+-- * 'ovVersionId' - Version ID of an object.
+--
+-- * 'ovSize' - Size in bytes of the object.
+--
+-- * 'ovIsLatest' - Specifies whether the object is (true) or is not (false) the latest version of an object.
+--
+-- * 'ovOwner' - Undocumented member.
+--
+-- * 'ovKey' - The object key.
+--
+-- * 'ovStorageClass' - The class of storage used to store the object.
+--
+-- * 'ovLastModified' - Date and time the object was last modified.
+objectVersion
+    :: ObjectVersion
+objectVersion =
+    ObjectVersion'
+    { _ovETag = Nothing
+    , _ovVersionId = Nothing
+    , _ovSize = Nothing
+    , _ovIsLatest = Nothing
+    , _ovOwner = Nothing
+    , _ovKey = Nothing
+    , _ovStorageClass = Nothing
+    , _ovLastModified = Nothing
+    }
+
+-- | Undocumented member.
+ovETag :: Lens' ObjectVersion (Maybe ETag)
+ovETag = lens _ovETag (\ s a -> s{_ovETag = a});
+
+-- | Version ID of an object.
+ovVersionId :: Lens' ObjectVersion (Maybe ObjectVersionId)
+ovVersionId = lens _ovVersionId (\ s a -> s{_ovVersionId = 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 .@? "ETag") <*> (x .@? "VersionId") <*>
+                (x .@? "Size")
+                <*> (x .@? "IsLatest")
+                <*> (x .@? "Owner")
+                <*> (x .@? "Key")
+                <*> (x .@? "StorageClass")
+                <*> (x .@? "LastModified")
+
+instance Hashable ObjectVersion
+
+instance NFData ObjectVersion
+
+-- | /See:/ 'owner' smart constructor.
+data Owner = Owner'
+    { _oDisplayName :: !(Maybe Text)
+    , _oId          :: !(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:
+--
+-- * 'oDisplayName' - Undocumented member.
+--
+-- * 'oId' - Undocumented member.
+owner
+    :: Owner
+owner =
+    Owner'
+    { _oDisplayName = Nothing
+    , _oId = Nothing
+    }
+
+-- | Undocumented member.
+oDisplayName :: Lens' Owner (Maybe Text)
+oDisplayName = lens _oDisplayName (\ s a -> s{_oDisplayName = a});
+
+-- | Undocumented member.
+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 Hashable Owner
+
+instance NFData Owner
+
+instance ToXML Owner where
+        toXML Owner'{..}
+          = mconcat
+              ["DisplayName" @= _oDisplayName, "ID" @= _oId]
+
+-- | /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' - Entity tag returned when the part was uploaded.
+--
+-- * 'pSize' - Size of the uploaded part data.
+--
+-- * 'pPartNumber' - Part number identifying the part. This is a positive integer between 1 and 10,000.
+--
+-- * 'pLastModified' - Date and time at which the part was uploaded.
+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")
+
+instance Hashable Part
+
+instance NFData Part
+
+-- | 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)
+    , _qcFilter   :: !(Maybe NotificationConfigurationFilter)
+    , _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' - Undocumented member.
+--
+-- * 'qcFilter' - Undocumented member.
+--
+-- * 'qcQueueARN' - Amazon SQS queue ARN to which Amazon S3 will publish a message when it detects events of specified type.
+--
+-- * 'qcEvents' - Undocumented member.
+queueConfiguration
+    :: Text -- ^ 'qcQueueARN'
+    -> QueueConfiguration
+queueConfiguration pQueueARN_ =
+    QueueConfiguration'
+    { _qcId = Nothing
+    , _qcFilter = Nothing
+    , _qcQueueARN = pQueueARN_
+    , _qcEvents = mempty
+    }
+
+-- | Undocumented member.
+qcId :: Lens' QueueConfiguration (Maybe Text)
+qcId = lens _qcId (\ s a -> s{_qcId = a});
+
+-- | Undocumented member.
+qcFilter :: Lens' QueueConfiguration (Maybe NotificationConfigurationFilter)
+qcFilter = lens _qcFilter (\ s a -> s{_qcFilter = 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 .@? "Filter") <*> (x .@ "Queue")
+                <*> (parseXMLList "Event" x)
+
+instance Hashable QueueConfiguration
+
+instance NFData QueueConfiguration
+
+instance ToXML QueueConfiguration where
+        toXML QueueConfiguration'{..}
+          = mconcat
+              ["Id" @= _qcId, "Filter" @= _qcFilter,
+               "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' - The host name to use in the redirect request.
+--
+-- * 'rProtocol' - Protocol to use (http, https) when redirecting requests. The default is the protocol that is used in the original request.
+--
+-- * 'rHTTPRedirectCode' - The HTTP redirect code to use on the response. Not required if one of the siblings is present.
+--
+-- * 'rReplaceKeyWith' - 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.
+--
+-- * 'rReplaceKeyPrefixWith' - 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.
+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 Hashable Redirect
+
+instance NFData Redirect
+
+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' - Protocol to use (http, https) when redirecting requests. The default is the protocol that is used in the original request.
+--
+-- * 'rartHostName' - Name of the host where requests will be redirected.
+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 Hashable RedirectAllRequestsTo
+
+instance NFData RedirectAllRequestsTo
+
+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' - Amazon Resource Name (ARN) of an IAM role for Amazon S3 to assume when replicating the objects.
+--
+-- * 'rcRules' - Container for information about a particular replication rule. Replication configuration must have at least one rule and can contain up to 1,000 rules.
+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 Hashable ReplicationConfiguration
+
+instance NFData ReplicationConfiguration
+
+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' - Unique identifier for the rule. The value cannot be longer than 255 characters.
+--
+-- * 'rrPrefix' - 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.
+--
+-- * 'rrStatus' - The rule is ignored if status is not Enabled.
+--
+-- * 'rrDestination' - Undocumented member.
+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 Hashable ReplicationRule
+
+instance NFData ReplicationRule
+
+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' - Specifies who pays for the download and request fees.
+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 Hashable RequestPaymentConfiguration
+
+instance NFData RequestPaymentConfiguration
+
+instance ToXML RequestPaymentConfiguration where
+        toXML RequestPaymentConfiguration'{..}
+          = mconcat ["Payer" @= _rpcPayer]
+
+-- | /See:/ 'restoreRequest' smart constructor.
+data RestoreRequest = RestoreRequest'
+    { _rrGlacierJobParameters :: !(Maybe GlacierJobParameters)
+    , _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:
+--
+-- * 'rrGlacierJobParameters' - Glacier related prameters pertaining to this job.
+--
+-- * 'rrDays' - Lifetime of the active copy in days
+restoreRequest
+    :: Int -- ^ 'rrDays'
+    -> RestoreRequest
+restoreRequest pDays_ =
+    RestoreRequest'
+    { _rrGlacierJobParameters = Nothing
+    , _rrDays = pDays_
+    }
+
+-- | Glacier related prameters pertaining to this job.
+rrGlacierJobParameters :: Lens' RestoreRequest (Maybe GlacierJobParameters)
+rrGlacierJobParameters = lens _rrGlacierJobParameters (\ s a -> s{_rrGlacierJobParameters = a});
+
+-- | Lifetime of the active copy in days
+rrDays :: Lens' RestoreRequest Int
+rrDays = lens _rrDays (\ s a -> s{_rrDays = a});
+
+instance Hashable RestoreRequest
+
+instance NFData RestoreRequest
+
+instance ToXML RestoreRequest where
+        toXML RestoreRequest'{..}
+          = mconcat
+              ["GlacierJobParameters" @= _rrGlacierJobParameters,
+               "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' - 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.
+--
+-- * 'rrRedirect' - 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.
+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 Hashable RoutingRule
+
+instance NFData RoutingRule
+
+instance ToXML RoutingRule where
+        toXML RoutingRule'{..}
+          = mconcat
+              ["Condition" @= _rrCondition,
+               "Redirect" @= _rrRedirect]
+
+-- | Container for object key name prefix and suffix filtering rules.
+--
+-- /See:/ 's3KeyFilter' smart constructor.
+newtype S3KeyFilter = S3KeyFilter'
+    { _skfFilterRules :: Maybe [FilterRule]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'S3KeyFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'skfFilterRules' - Undocumented member.
+s3KeyFilter
+    :: S3KeyFilter
+s3KeyFilter =
+    S3KeyFilter'
+    { _skfFilterRules = Nothing
+    }
+
+-- | Undocumented member.
+skfFilterRules :: Lens' S3KeyFilter [FilterRule]
+skfFilterRules = lens _skfFilterRules (\ s a -> s{_skfFilterRules = a}) . _Default . _Coerce;
+
+instance FromXML S3KeyFilter where
+        parseXML x
+          = S3KeyFilter' <$>
+              (may (parseXMLList "FilterRule") x)
+
+instance Hashable S3KeyFilter
+
+instance NFData S3KeyFilter
+
+instance ToXML S3KeyFilter where
+        toXML S3KeyFilter'{..}
+          = mconcat
+              [toXML (toXMLList "FilterRule" <$> _skfFilterRules)]
+
+-- | /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' - Undocumented member.
+--
+-- * 'sseKey' - Undocumented member.
+--
+-- * 'sseCode' - Undocumented member.
+--
+-- * 'sseMessage' - Undocumented member.
+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")
+
+instance Hashable S3ServiceError
+
+instance NFData S3ServiceError
+
+-- | /See:/ 'storageClassAnalysis' smart constructor.
+newtype StorageClassAnalysis = StorageClassAnalysis'
+    { _scaDataExport :: Maybe StorageClassAnalysisDataExport
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StorageClassAnalysis' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scaDataExport' - A container used to describe how data related to the storage class analysis should be exported.
+storageClassAnalysis
+    :: StorageClassAnalysis
+storageClassAnalysis =
+    StorageClassAnalysis'
+    { _scaDataExport = Nothing
+    }
+
+-- | A container used to describe how data related to the storage class analysis should be exported.
+scaDataExport :: Lens' StorageClassAnalysis (Maybe StorageClassAnalysisDataExport)
+scaDataExport = lens _scaDataExport (\ s a -> s{_scaDataExport = a});
+
+instance FromXML StorageClassAnalysis where
+        parseXML x
+          = StorageClassAnalysis' <$> (x .@? "DataExport")
+
+instance Hashable StorageClassAnalysis
+
+instance NFData StorageClassAnalysis
+
+instance ToXML StorageClassAnalysis where
+        toXML StorageClassAnalysis'{..}
+          = mconcat ["DataExport" @= _scaDataExport]
+
+-- | /See:/ 'storageClassAnalysisDataExport' smart constructor.
+data StorageClassAnalysisDataExport = StorageClassAnalysisDataExport'
+    { _scadeOutputSchemaVersion :: !StorageClassAnalysisSchemaVersion
+    , _scadeDestination         :: !AnalyticsExportDestination
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StorageClassAnalysisDataExport' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scadeOutputSchemaVersion' - The version of the output schema to use when exporting data. Must be V_1.
+--
+-- * 'scadeDestination' - The place to store the data for an analysis.
+storageClassAnalysisDataExport
+    :: StorageClassAnalysisSchemaVersion -- ^ 'scadeOutputSchemaVersion'
+    -> AnalyticsExportDestination -- ^ 'scadeDestination'
+    -> StorageClassAnalysisDataExport
+storageClassAnalysisDataExport pOutputSchemaVersion_ pDestination_ =
+    StorageClassAnalysisDataExport'
+    { _scadeOutputSchemaVersion = pOutputSchemaVersion_
+    , _scadeDestination = pDestination_
+    }
+
+-- | The version of the output schema to use when exporting data. Must be V_1.
+scadeOutputSchemaVersion :: Lens' StorageClassAnalysisDataExport StorageClassAnalysisSchemaVersion
+scadeOutputSchemaVersion = lens _scadeOutputSchemaVersion (\ s a -> s{_scadeOutputSchemaVersion = a});
+
+-- | The place to store the data for an analysis.
+scadeDestination :: Lens' StorageClassAnalysisDataExport AnalyticsExportDestination
+scadeDestination = lens _scadeDestination (\ s a -> s{_scadeDestination = a});
+
+instance FromXML StorageClassAnalysisDataExport where
+        parseXML x
+          = StorageClassAnalysisDataExport' <$>
+              (x .@ "OutputSchemaVersion") <*> (x .@ "Destination")
+
+instance Hashable StorageClassAnalysisDataExport
+
+instance NFData StorageClassAnalysisDataExport
+
+instance ToXML StorageClassAnalysisDataExport where
+        toXML StorageClassAnalysisDataExport'{..}
+          = mconcat
+              ["OutputSchemaVersion" @= _scadeOutputSchemaVersion,
+               "Destination" @= _scadeDestination]
+
+-- | /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' - Name of the tag.
+--
+-- * 'tagValue' - Value of the tag.
+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 Hashable Tag
+
+instance NFData Tag
+
+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' - Undocumented member.
+tagging
+    :: Tagging
+tagging =
+    Tagging'
+    { _tTagSet = mempty
+    }
+
+-- | Undocumented member.
+tTagSet :: Lens' Tagging [Tag]
+tTagSet = lens _tTagSet (\ s a -> s{_tTagSet = a}) . _Coerce;
+
+instance Hashable Tagging
+
+instance NFData Tagging
+
+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' - Logging permissions assigned to the Grantee for the bucket.
+--
+-- * 'tgGrantee' - Undocumented member.
+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 Hashable TargetGrant
+
+instance NFData TargetGrant
+
+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)
+    , _tcFilter   :: !(Maybe NotificationConfigurationFilter)
+    , _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' - Undocumented member.
+--
+-- * 'tcFilter' - Undocumented member.
+--
+-- * 'tcTopicARN' - Amazon SNS topic ARN to which Amazon S3 will publish a message when it detects events of specified type.
+--
+-- * 'tcEvents' - Undocumented member.
+topicConfiguration
+    :: Text -- ^ 'tcTopicARN'
+    -> TopicConfiguration
+topicConfiguration pTopicARN_ =
+    TopicConfiguration'
+    { _tcId = Nothing
+    , _tcFilter = Nothing
+    , _tcTopicARN = pTopicARN_
+    , _tcEvents = mempty
+    }
+
+-- | Undocumented member.
+tcId :: Lens' TopicConfiguration (Maybe Text)
+tcId = lens _tcId (\ s a -> s{_tcId = a});
+
+-- | Undocumented member.
+tcFilter :: Lens' TopicConfiguration (Maybe NotificationConfigurationFilter)
+tcFilter = lens _tcFilter (\ s a -> s{_tcFilter = 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 .@? "Filter") <*> (x .@ "Topic")
+                <*> (parseXMLList "Event" x)
+
+instance Hashable TopicConfiguration
+
+instance NFData TopicConfiguration
+
+instance ToXML TopicConfiguration where
+        toXML TopicConfiguration'{..}
+          = mconcat
+              ["Id" @= _tcId, "Filter" @= _tcFilter,
+               "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' - Indicates the lifetime, in days, of the objects that are subject to the rule. The value must be a non-zero positive integer.
+--
+-- * 'tDate' - Indicates at what date the object is to be moved or deleted. Should be in GMT ISO 8601 Format.
+--
+-- * 'tStorageClass' - The class of storage used to store the object.
+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 Hashable Transition
+
+instance NFData Transition
+
+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' - The versioning state of the bucket.
+--
+-- * 'vcMFADelete' - 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.
+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 Hashable VersioningConfiguration
+
+instance NFData VersioningConfiguration
+
+instance ToXML VersioningConfiguration where
+        toXML VersioningConfiguration'{..}
+          = mconcat
+              ["Status" @= _vcStatus, "MfaDelete" @= _vcMFADelete]
+
+-- | /See:/ 'websiteConfiguration' smart constructor.
+data WebsiteConfiguration = WebsiteConfiguration'
+    { _wcRedirectAllRequestsTo :: !(Maybe RedirectAllRequestsTo)
+    , _wcErrorDocument         :: !(Maybe ErrorDocument)
+    , _wcIndexDocument         :: !(Maybe IndexDocument)
+    , _wcRoutingRules          :: !(Maybe [RoutingRule])
+    } 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' - Undocumented member.
+--
+-- * 'wcErrorDocument' - Undocumented member.
+--
+-- * 'wcIndexDocument' - Undocumented member.
+--
+-- * 'wcRoutingRules' - Undocumented member.
 websiteConfiguration
     :: WebsiteConfiguration
 websiteConfiguration =
diff --git a/gen/Network/AWS/S3/Types/Sum.hs b/gen/Network/AWS/S3/Types/Sum.hs
--- a/gen/Network/AWS/S3/Types/Sum.hs
+++ b/gen/Network/AWS/S3/Types/Sum.hs
@@ -20,6 +20,32 @@
 import           Network.AWS.Prelude
 import           Network.AWS.S3.Internal
 
+data AnalyticsS3ExportFileFormat =
+    CSV
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText AnalyticsS3ExportFileFormat where
+    parser = takeLowerText >>= \case
+        "csv" -> pure CSV
+        e -> fromTextError $ "Failure parsing AnalyticsS3ExportFileFormat from value: '" <> e
+           <> "'. Accepted values: csv"
+
+instance ToText AnalyticsS3ExportFileFormat where
+    toText = \case
+        CSV -> "CSV"
+
+instance Hashable     AnalyticsS3ExportFileFormat
+instance NFData       AnalyticsS3ExportFileFormat
+instance ToByteString AnalyticsS3ExportFileFormat
+instance ToQuery      AnalyticsS3ExportFileFormat
+instance ToHeader     AnalyticsS3ExportFileFormat
+
+instance FromXML AnalyticsS3ExportFileFormat where
+    parseXML = parseXMLText "AnalyticsS3ExportFileFormat"
+
+instance ToXML AnalyticsS3ExportFileFormat where
+    toXML = toXMLText
+
 data BucketAccelerateStatus
     = BASEnabled
     | BASSuspended
@@ -278,6 +304,131 @@
 instance ToXML FilterRuleName where
     toXML = toXMLText
 
+data InventoryFormat =
+    IFCSV
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText InventoryFormat where
+    parser = takeLowerText >>= \case
+        "csv" -> pure IFCSV
+        e -> fromTextError $ "Failure parsing InventoryFormat from value: '" <> e
+           <> "'. Accepted values: csv"
+
+instance ToText InventoryFormat where
+    toText = \case
+        IFCSV -> "CSV"
+
+instance Hashable     InventoryFormat
+instance NFData       InventoryFormat
+instance ToByteString InventoryFormat
+instance ToQuery      InventoryFormat
+instance ToHeader     InventoryFormat
+
+instance FromXML InventoryFormat where
+    parseXML = parseXMLText "InventoryFormat"
+
+instance ToXML InventoryFormat where
+    toXML = toXMLText
+
+data InventoryFrequency
+    = Daily
+    | Weekly
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText InventoryFrequency where
+    parser = takeLowerText >>= \case
+        "daily" -> pure Daily
+        "weekly" -> pure Weekly
+        e -> fromTextError $ "Failure parsing InventoryFrequency from value: '" <> e
+           <> "'. Accepted values: daily, weekly"
+
+instance ToText InventoryFrequency where
+    toText = \case
+        Daily -> "Daily"
+        Weekly -> "Weekly"
+
+instance Hashable     InventoryFrequency
+instance NFData       InventoryFrequency
+instance ToByteString InventoryFrequency
+instance ToQuery      InventoryFrequency
+instance ToHeader     InventoryFrequency
+
+instance FromXML InventoryFrequency where
+    parseXML = parseXMLText "InventoryFrequency"
+
+instance ToXML InventoryFrequency where
+    toXML = toXMLText
+
+data InventoryIncludedObjectVersions
+    = All
+    | Current
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText InventoryIncludedObjectVersions where
+    parser = takeLowerText >>= \case
+        "all" -> pure All
+        "current" -> pure Current
+        e -> fromTextError $ "Failure parsing InventoryIncludedObjectVersions from value: '" <> e
+           <> "'. Accepted values: all, current"
+
+instance ToText InventoryIncludedObjectVersions where
+    toText = \case
+        All -> "All"
+        Current -> "Current"
+
+instance Hashable     InventoryIncludedObjectVersions
+instance NFData       InventoryIncludedObjectVersions
+instance ToByteString InventoryIncludedObjectVersions
+instance ToQuery      InventoryIncludedObjectVersions
+instance ToHeader     InventoryIncludedObjectVersions
+
+instance FromXML InventoryIncludedObjectVersions where
+    parseXML = parseXMLText "InventoryIncludedObjectVersions"
+
+instance ToXML InventoryIncludedObjectVersions where
+    toXML = toXMLText
+
+data InventoryOptionalField
+    = FieldETag
+    | FieldIsMultipartUploaded
+    | FieldLastModifiedDate
+    | FieldReplicationStatus
+    | FieldSize
+    | FieldStorageClass
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText InventoryOptionalField where
+    parser = takeLowerText >>= \case
+        "etag" -> pure FieldETag
+        "ismultipartuploaded" -> pure FieldIsMultipartUploaded
+        "lastmodifieddate" -> pure FieldLastModifiedDate
+        "replicationstatus" -> pure FieldReplicationStatus
+        "size" -> pure FieldSize
+        "storageclass" -> pure FieldStorageClass
+        e -> fromTextError $ "Failure parsing InventoryOptionalField from value: '" <> e
+           <> "'. Accepted values: etag, ismultipartuploaded, lastmodifieddate, replicationstatus, size, storageclass"
+
+instance ToText InventoryOptionalField where
+    toText = \case
+        FieldETag -> "ETag"
+        FieldIsMultipartUploaded -> "IsMultipartUploaded"
+        FieldLastModifiedDate -> "LastModifiedDate"
+        FieldReplicationStatus -> "ReplicationStatus"
+        FieldSize -> "Size"
+        FieldStorageClass -> "StorageClass"
+
+instance Hashable     InventoryOptionalField
+instance NFData       InventoryOptionalField
+instance ToByteString InventoryOptionalField
+instance ToQuery      InventoryOptionalField
+instance ToHeader     InventoryOptionalField
+
+instance FromXML InventoryOptionalField where
+    parseXML = parseXMLText "InventoryOptionalField"
+
+instance ToXML InventoryOptionalField where
+    toXML = toXMLText
+
 data MFADelete
     = MDDisabled
     | MDEnabled
@@ -331,21 +482,21 @@
     parseXML = parseXMLText "MFADeleteStatus"
 
 data MetadataDirective
-    = Copy
-    | Replace
+    = MDCopy
+    | MDReplace
     deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
 
 instance FromText MetadataDirective where
     parser = takeLowerText >>= \case
-        "copy" -> pure Copy
-        "replace" -> pure Replace
+        "copy" -> pure MDCopy
+        "replace" -> pure MDReplace
         e -> fromTextError $ "Failure parsing MetadataDirective from value: '" <> e
            <> "'. Accepted values: copy, replace"
 
 instance ToText MetadataDirective where
     toText = \case
-        Copy -> "COPY"
-        Replace -> "REPLACE"
+        MDCopy -> "COPY"
+        MDReplace -> "REPLACE"
 
 instance Hashable     MetadataDirective
 instance NFData       MetadataDirective
@@ -633,7 +784,7 @@
 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
+-- | 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,Bounded,Data,Typeable,Generic)
@@ -716,6 +867,87 @@
     parseXML = parseXMLText "StorageClass"
 
 instance ToXML StorageClass where
+    toXML = toXMLText
+
+data StorageClassAnalysisSchemaVersion =
+    V1
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText StorageClassAnalysisSchemaVersion where
+    parser = takeLowerText >>= \case
+        "v_1" -> pure V1
+        e -> fromTextError $ "Failure parsing StorageClassAnalysisSchemaVersion from value: '" <> e
+           <> "'. Accepted values: v_1"
+
+instance ToText StorageClassAnalysisSchemaVersion where
+    toText = \case
+        V1 -> "V_1"
+
+instance Hashable     StorageClassAnalysisSchemaVersion
+instance NFData       StorageClassAnalysisSchemaVersion
+instance ToByteString StorageClassAnalysisSchemaVersion
+instance ToQuery      StorageClassAnalysisSchemaVersion
+instance ToHeader     StorageClassAnalysisSchemaVersion
+
+instance FromXML StorageClassAnalysisSchemaVersion where
+    parseXML = parseXMLText "StorageClassAnalysisSchemaVersion"
+
+instance ToXML StorageClassAnalysisSchemaVersion where
+    toXML = toXMLText
+
+data TaggingDirective
+    = Copy
+    | Replace
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText TaggingDirective where
+    parser = takeLowerText >>= \case
+        "copy" -> pure Copy
+        "replace" -> pure Replace
+        e -> fromTextError $ "Failure parsing TaggingDirective from value: '" <> e
+           <> "'. Accepted values: copy, replace"
+
+instance ToText TaggingDirective where
+    toText = \case
+        Copy -> "COPY"
+        Replace -> "REPLACE"
+
+instance Hashable     TaggingDirective
+instance NFData       TaggingDirective
+instance ToByteString TaggingDirective
+instance ToQuery      TaggingDirective
+instance ToHeader     TaggingDirective
+
+instance ToXML TaggingDirective where
+    toXML = toXMLText
+
+data Tier
+    = TBulk
+    | TExpedited
+    | TStandard
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText Tier where
+    parser = takeLowerText >>= \case
+        "bulk" -> pure TBulk
+        "expedited" -> pure TExpedited
+        "standard" -> pure TStandard
+        e -> fromTextError $ "Failure parsing Tier from value: '" <> e
+           <> "'. Accepted values: bulk, expedited, standard"
+
+instance ToText Tier where
+    toText = \case
+        TBulk -> "Bulk"
+        TExpedited -> "Expedited"
+        TStandard -> "Standard"
+
+instance Hashable     Tier
+instance NFData       Tier
+instance ToByteString Tier
+instance ToQuery      Tier
+instance ToHeader     Tier
+
+instance ToXML Tier where
     toXML = toXMLText
 
 data TransitionStorageClass
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
@@ -20,7 +20,9 @@
 --
 -- 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.
+--
 module Network.AWS.S3.UploadPart
     (
     -- * Creating a Request
@@ -78,27 +80,27 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'upContentLength'
+-- * 'upContentLength' - Size of the body in bytes. This parameter is useful when the size of the body cannot be determined automatically.
 --
--- * 'upSSECustomerAlgorithm'
+-- * 'upSSECustomerAlgorithm' - Specifies the algorithm to use to when encrypting the object (e.g., AES256).
 --
--- * 'upSSECustomerKey'
+-- * 'upSSECustomerKey' - 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.
 --
--- * 'upRequestPayer'
+-- * 'upRequestPayer' - Undocumented member.
 --
--- * 'upSSECustomerKeyMD5'
+-- * 'upSSECustomerKeyMD5' - 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.
 --
--- * 'upContentMD5'
+-- * 'upContentMD5' - The base64-encoded 128-bit MD5 digest of the part data.
 --
--- * 'upBucket'
+-- * 'upBucket' - Name of the bucket to which the multipart upload was initiated.
 --
--- * 'upKey'
+-- * 'upKey' - Object key for which the multipart upload was initiated.
 --
--- * 'upPartNumber'
+-- * 'upPartNumber' - Part number of part being uploaded. This is a positive integer between 1 and 10,000.
 --
--- * 'upUploadId'
+-- * 'upUploadId' - Upload ID identifying the multipart upload whose part is being uploaded.
 --
--- * 'upBody'
+-- * 'upBody' - Object data.
 uploadPart
     :: BucketName -- ^ 'upBucket'
     -> ObjectKey -- ^ 'upKey'
@@ -225,19 +227,19 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'uprsRequestCharged'
+-- * 'uprsRequestCharged' - Undocumented member.
 --
--- * 'uprsETag'
+-- * 'uprsETag' - Entity tag for the uploaded object.
 --
--- * 'uprsSSECustomerAlgorithm'
+-- * 'uprsSSECustomerAlgorithm' - If server-side encryption with a customer-provided encryption key was requested, the response will include this header confirming the encryption algorithm used.
 --
--- * 'uprsSSECustomerKeyMD5'
+-- * 'uprsSSECustomerKeyMD5' - 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.
 --
--- * 'uprsSSEKMSKeyId'
+-- * 'uprsSSEKMSKeyId' - If present, specifies the ID of the AWS Key Management Service (KMS) master encryption key that was used for the object.
 --
--- * 'uprsServerSideEncryption'
+-- * 'uprsServerSideEncryption' - The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 --
--- * 'uprsResponseStatus'
+-- * 'uprsResponseStatus' - -- | The response status code.
 uploadPartResponse
     :: Int -- ^ 'uprsResponseStatus'
     -> UploadPartResponse
@@ -276,7 +278,7 @@
 uprsServerSideEncryption :: Lens' UploadPartResponse (Maybe ServerSideEncryption)
 uprsServerSideEncryption = lens _uprsServerSideEncryption (\ s a -> s{_uprsServerSideEncryption = a});
 
--- | The response status code.
+-- | -- | The response status code.
 uprsResponseStatus :: Lens' UploadPartResponse Int
 uprsResponseStatus = lens _uprsResponseStatus (\ s a -> s{_uprsResponseStatus = 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
@@ -89,39 +89,39 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'upcCopySourceIfModifiedSince'
+-- * 'upcCopySourceIfModifiedSince' - Copies the object if it has been modified since the specified time.
 --
--- * 'upcCopySourceIfUnmodifiedSince'
+-- * 'upcCopySourceIfUnmodifiedSince' - Copies the object if it hasn't been modified since the specified time.
 --
--- * 'upcCopySourceRange'
+-- * 'upcCopySourceRange' - 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.
 --
--- * 'upcCopySourceSSECustomerKeyMD5'
+-- * 'upcCopySourceSSECustomerKeyMD5' - 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.
 --
--- * 'upcCopySourceIfNoneMatch'
+-- * 'upcCopySourceIfNoneMatch' - Copies the object if its entity tag (ETag) is different than the specified ETag.
 --
--- * 'upcSSECustomerAlgorithm'
+-- * 'upcSSECustomerAlgorithm' - Specifies the algorithm to use to when encrypting the object (e.g., AES256).
 --
--- * 'upcSSECustomerKey'
+-- * 'upcSSECustomerKey' - 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.
 --
--- * 'upcRequestPayer'
+-- * 'upcRequestPayer' - Undocumented member.
 --
--- * 'upcCopySourceIfMatch'
+-- * 'upcCopySourceIfMatch' - Copies the object if its entity tag (ETag) matches the specified tag.
 --
--- * 'upcSSECustomerKeyMD5'
+-- * 'upcSSECustomerKeyMD5' - 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.
 --
--- * 'upcCopySourceSSECustomerKey'
+-- * 'upcCopySourceSSECustomerKey' - 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.
 --
--- * 'upcCopySourceSSECustomerAlgorithm'
+-- * 'upcCopySourceSSECustomerAlgorithm' - Specifies the algorithm to use when decrypting the source object (e.g., AES256).
 --
--- * 'upcBucket'
+-- * 'upcBucket' - Undocumented member.
 --
--- * 'upcCopySource'
+-- * 'upcCopySource' - The name of the source bucket and key name of the source object, separated by a slash (/). Must be URL-encoded.
 --
--- * 'upcKey'
+-- * 'upcKey' - Undocumented member.
 --
--- * 'upcPartNumber'
+-- * 'upcPartNumber' - Part number of part being copied. This is a positive integer between 1 and 10,000.
 --
--- * 'upcUploadId'
+-- * 'upcUploadId' - Upload ID identifying the multipart upload whose part is being copied.
 uploadPartCopy
     :: BucketName -- ^ 'upcBucket'
     -> Text -- ^ 'upcCopySource'
@@ -154,7 +154,7 @@
 upcCopySourceIfModifiedSince :: Lens' UploadPartCopy (Maybe UTCTime)
 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;
 
@@ -202,7 +202,7 @@
 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.
+-- | 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});
 
@@ -294,21 +294,21 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'upcrsRequestCharged'
+-- * 'upcrsRequestCharged' - Undocumented member.
 --
--- * 'upcrsCopyPartResult'
+-- * 'upcrsCopyPartResult' - Undocumented member.
 --
--- * 'upcrsSSECustomerAlgorithm'
+-- * 'upcrsSSECustomerAlgorithm' - If server-side encryption with a customer-provided encryption key was requested, the response will include this header confirming the encryption algorithm used.
 --
--- * 'upcrsCopySourceVersionId'
+-- * 'upcrsCopySourceVersionId' - The version of the source object that was copied, if you have enabled versioning on the source bucket.
 --
--- * 'upcrsSSECustomerKeyMD5'
+-- * 'upcrsSSECustomerKeyMD5' - 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.
 --
--- * 'upcrsSSEKMSKeyId'
+-- * 'upcrsSSEKMSKeyId' - If present, specifies the ID of the AWS Key Management Service (KMS) master encryption key that was used for the object.
 --
--- * 'upcrsServerSideEncryption'
+-- * 'upcrsServerSideEncryption' - The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 --
--- * 'upcrsResponseStatus'
+-- * 'upcrsResponseStatus' - -- | The response status code.
 uploadPartCopyResponse
     :: Int -- ^ 'upcrsResponseStatus'
     -> UploadPartCopyResponse
@@ -352,7 +352,7 @@
 upcrsServerSideEncryption :: Lens' UploadPartCopyResponse (Maybe ServerSideEncryption)
 upcrsServerSideEncryption = lens _upcrsServerSideEncryption (\ s a -> s{_upcrsServerSideEncryption = a});
 
--- | The response status code.
+-- | -- | The response status code.
 upcrsResponseStatus :: Lens' UploadPartCopyResponse Int
 upcrsResponseStatus = lens _upcrsResponseStatus (\ s a -> s{_upcrsResponseStatus = 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
@@ -24,8 +24,7 @@
 import           Network.AWS.S3.Types
 import           Network.AWS.Waiter
 
--- | Polls 'Network.AWS.S3.HeadObject' every 5 seconds until a
--- successful state is reached. An error is returned after 20 failed checks.
+-- | 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
@@ -35,8 +34,7 @@
     , _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.
+-- | 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
@@ -47,8 +45,7 @@
                        , 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.
+-- | 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
@@ -59,8 +56,7 @@
                        , matchStatus 404 AcceptRetry]
     }
 
--- | Polls 'Network.AWS.S3.HeadBucket' every 5 seconds until a
--- successful state is reached. An error is returned after 20 failed checks.
+-- | 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
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
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
@@ -33,17 +33,21 @@
     , keyPrefix
     , keyName
     , keyComponents
+
+    -- * Website Endpoints
+    , getWebsiteEndpoint
     ) where
 
-import           Data.String
-import qualified Data.Text            as Text
-import           Network.AWS.Data.Log
-import           Network.AWS.Data.XML
-import           Network.AWS.Lens     (IndexedTraversal', Iso', Prism',
-                                       Traversal')
-import           Network.AWS.Lens     (iso, prism, traversed, _1, _2)
-import           Network.AWS.Prelude
+import Data.String (IsString)
 
+import Network.AWS.Data.Log
+import Network.AWS.Data.XML
+import Network.AWS.Lens     (IndexedTraversal', Iso', Prism', Traversal')
+import Network.AWS.Lens     (iso, prism, traversed, _1, _2)
+import Network.AWS.Prelude
+
+import qualified Data.Text as Text
+
 newtype BucketName = BucketName Text
     deriving
         ( Eq
@@ -250,3 +254,12 @@
         | otherwise               = h <> suf <> t
 
     suf = Text.singleton c
+
+-- | Get the S3 website endpoint for a specific region.
+--
+-- When you configure your bucket as a website, the website is available using
+-- this region-specific website endpoint.
+--
+-- /See:/ <http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_website_region_endpoints Amazon Simple Storage Service Website Endpoints>.
+getWebsiteEndpoint :: Region -> Text
+getWebsiteEndpoint reg = "s3-website-" <> toText reg <> ".amazonaws.com"
diff --git a/test/Test/AWS/Gen/S3.hs b/test/Test/AWS/Gen/S3.hs
--- a/test/Test/AWS/Gen/S3.hs
+++ b/test/Test/AWS/Gen/S3.hs
@@ -40,6 +40,9 @@
 --         , requestPutBucketLogging $
 --             putBucketLogging
 --
+--         , requestGetBucketMetricsConfiguration $
+--             getBucketMetricsConfiguration
+--
 --         , requestListBuckets $
 --             listBuckets
 --
@@ -58,15 +61,33 @@
 --         , requestPutBucketTagging $
 --             putBucketTagging
 --
+--         , requestGetBucketInventoryConfiguration $
+--             getBucketInventoryConfiguration
+--
+--         , requestPutBucketInventoryConfiguration $
+--             putBucketInventoryConfiguration
+--
 --         , requestGetBucketLocation $
 --             getBucketLocation
 --
+--         , requestListBucketInventoryConfigurations $
+--             listBucketInventoryConfigurations
+--
+--         , requestDeleteBucketInventoryConfiguration $
+--             deleteBucketInventoryConfiguration
+--
 --         , requestGetBucketNotificationConfiguration $
 --             getBucketNotificationConfiguration
 --
 --         , requestPutBucketAccelerateConfiguration $
 --             putBucketAccelerateConfiguration
 --
+--         , requestPutBucketMetricsConfiguration $
+--             putBucketMetricsConfiguration
+--
+--         , requestDeleteBucketMetricsConfiguration $
+--             deleteBucketMetricsConfiguration
+--
 --         , requestListObjectsV $
 --             listObjectsV
 --
@@ -97,6 +118,15 @@
 --         , requestPutBucketLifecycleConfiguration $
 --             putBucketLifecycleConfiguration
 --
+--         , requestPutBucketAnalyticsConfiguration $
+--             putBucketAnalyticsConfiguration
+--
+--         , requestListBucketAnalyticsConfigurations $
+--             listBucketAnalyticsConfigurations
+--
+--         , requestDeleteBucketAnalyticsConfiguration $
+--             deleteBucketAnalyticsConfiguration
+--
 --         , requestCreateMultipartUpload $
 --             createMultipartUpload
 --
@@ -172,6 +202,9 @@
 --         , requestCopyObject $
 --             copyObject
 --
+--         , requestListBucketMetricsConfigurations $
+--             listBucketMetricsConfigurations
+--
 --         , requestGetBucketPolicy $
 --             getBucketPolicy
 --
@@ -184,12 +217,24 @@
 --         , requestGetBucketLifecycleConfiguration $
 --             getBucketLifecycleConfiguration
 --
+--         , requestGetBucketAnalyticsConfiguration $
+--             getBucketAnalyticsConfiguration
+--
+--         , requestGetObjectTagging $
+--             getObjectTagging
+--
 --         , requestListParts $
 --             listParts
 --
+--         , requestDeleteObjectTagging $
+--             deleteObjectTagging
+--
 --         , requestUploadPartCopy $
 --             uploadPartCopy
 --
+--         , requestPutObjectTagging $
+--             putObjectTagging
+--
 --         , requestPutBucketACL $
 --             putBucketACL
 --
@@ -208,6 +253,9 @@
 --         , responsePutBucketLogging $
 --             putBucketLoggingResponse
 --
+--         , responseGetBucketMetricsConfiguration $
+--             getBucketMetricsConfigurationResponse
+--
 --         , responseListBuckets $
 --             listBucketsResponse
 --
@@ -226,15 +274,33 @@
 --         , responsePutBucketTagging $
 --             putBucketTaggingResponse
 --
+--         , responseGetBucketInventoryConfiguration $
+--             getBucketInventoryConfigurationResponse
+--
+--         , responsePutBucketInventoryConfiguration $
+--             putBucketInventoryConfigurationResponse
+--
 --         , responseGetBucketLocation $
 --             getBucketLocationResponse
 --
+--         , responseListBucketInventoryConfigurations $
+--             listBucketInventoryConfigurationsResponse
+--
+--         , responseDeleteBucketInventoryConfiguration $
+--             deleteBucketInventoryConfigurationResponse
+--
 --         , responseGetBucketNotificationConfiguration $
 --             notificationConfiguration
 --
 --         , responsePutBucketAccelerateConfiguration $
 --             putBucketAccelerateConfigurationResponse
 --
+--         , responsePutBucketMetricsConfiguration $
+--             putBucketMetricsConfigurationResponse
+--
+--         , responseDeleteBucketMetricsConfiguration $
+--             deleteBucketMetricsConfigurationResponse
+--
 --         , responseListObjectsV $
 --             listObjectsVResponse
 --
@@ -265,6 +331,15 @@
 --         , responsePutBucketLifecycleConfiguration $
 --             putBucketLifecycleConfigurationResponse
 --
+--         , responsePutBucketAnalyticsConfiguration $
+--             putBucketAnalyticsConfigurationResponse
+--
+--         , responseListBucketAnalyticsConfigurations $
+--             listBucketAnalyticsConfigurationsResponse
+--
+--         , responseDeleteBucketAnalyticsConfiguration $
+--             deleteBucketAnalyticsConfigurationResponse
+--
 --         , responseCreateMultipartUpload $
 --             createMultipartUploadResponse
 --
@@ -340,6 +415,9 @@
 --         , responseCopyObject $
 --             copyObjectResponse
 --
+--         , responseListBucketMetricsConfigurations $
+--             listBucketMetricsConfigurationsResponse
+--
 --         , responseGetBucketPolicy $
 --             getBucketPolicyResponse
 --
@@ -352,12 +430,24 @@
 --         , responseGetBucketLifecycleConfiguration $
 --             getBucketLifecycleConfigurationResponse
 --
+--         , responseGetBucketAnalyticsConfiguration $
+--             getBucketAnalyticsConfigurationResponse
+--
+--         , responseGetObjectTagging $
+--             getObjectTaggingResponse
+--
 --         , responseListParts $
 --             listPartsResponse
 --
+--         , responseDeleteObjectTagging $
+--             deleteObjectTaggingResponse
+--
 --         , responseUploadPartCopy $
 --             uploadPartCopyResponse
 --
+--         , responsePutObjectTagging $
+--             putObjectTaggingResponse
+--
 --         , responsePutBucketACL $
 --             putBucketACLResponse
 --
@@ -381,6 +471,11 @@
     "PutBucketLogging"
     "fixture/PutBucketLogging.yaml"
 
+requestGetBucketMetricsConfiguration :: GetBucketMetricsConfiguration -> TestTree
+requestGetBucketMetricsConfiguration = req
+    "GetBucketMetricsConfiguration"
+    "fixture/GetBucketMetricsConfiguration.yaml"
+
 requestListBuckets :: ListBuckets -> TestTree
 requestListBuckets = req
     "ListBuckets"
@@ -411,11 +506,31 @@
     "PutBucketTagging"
     "fixture/PutBucketTagging.yaml"
 
+requestGetBucketInventoryConfiguration :: GetBucketInventoryConfiguration -> TestTree
+requestGetBucketInventoryConfiguration = req
+    "GetBucketInventoryConfiguration"
+    "fixture/GetBucketInventoryConfiguration.yaml"
+
+requestPutBucketInventoryConfiguration :: PutBucketInventoryConfiguration -> TestTree
+requestPutBucketInventoryConfiguration = req
+    "PutBucketInventoryConfiguration"
+    "fixture/PutBucketInventoryConfiguration.yaml"
+
 requestGetBucketLocation :: GetBucketLocation -> TestTree
 requestGetBucketLocation = req
     "GetBucketLocation"
     "fixture/GetBucketLocation.yaml"
 
+requestListBucketInventoryConfigurations :: ListBucketInventoryConfigurations -> TestTree
+requestListBucketInventoryConfigurations = req
+    "ListBucketInventoryConfigurations"
+    "fixture/ListBucketInventoryConfigurations.yaml"
+
+requestDeleteBucketInventoryConfiguration :: DeleteBucketInventoryConfiguration -> TestTree
+requestDeleteBucketInventoryConfiguration = req
+    "DeleteBucketInventoryConfiguration"
+    "fixture/DeleteBucketInventoryConfiguration.yaml"
+
 requestGetBucketNotificationConfiguration :: GetBucketNotificationConfiguration -> TestTree
 requestGetBucketNotificationConfiguration = req
     "GetBucketNotificationConfiguration"
@@ -426,6 +541,16 @@
     "PutBucketAccelerateConfiguration"
     "fixture/PutBucketAccelerateConfiguration.yaml"
 
+requestPutBucketMetricsConfiguration :: PutBucketMetricsConfiguration -> TestTree
+requestPutBucketMetricsConfiguration = req
+    "PutBucketMetricsConfiguration"
+    "fixture/PutBucketMetricsConfiguration.yaml"
+
+requestDeleteBucketMetricsConfiguration :: DeleteBucketMetricsConfiguration -> TestTree
+requestDeleteBucketMetricsConfiguration = req
+    "DeleteBucketMetricsConfiguration"
+    "fixture/DeleteBucketMetricsConfiguration.yaml"
+
 requestListObjectsV :: ListObjectsV -> TestTree
 requestListObjectsV = req
     "ListObjectsV"
@@ -476,6 +601,21 @@
     "PutBucketLifecycleConfiguration"
     "fixture/PutBucketLifecycleConfiguration.yaml"
 
+requestPutBucketAnalyticsConfiguration :: PutBucketAnalyticsConfiguration -> TestTree
+requestPutBucketAnalyticsConfiguration = req
+    "PutBucketAnalyticsConfiguration"
+    "fixture/PutBucketAnalyticsConfiguration.yaml"
+
+requestListBucketAnalyticsConfigurations :: ListBucketAnalyticsConfigurations -> TestTree
+requestListBucketAnalyticsConfigurations = req
+    "ListBucketAnalyticsConfigurations"
+    "fixture/ListBucketAnalyticsConfigurations.yaml"
+
+requestDeleteBucketAnalyticsConfiguration :: DeleteBucketAnalyticsConfiguration -> TestTree
+requestDeleteBucketAnalyticsConfiguration = req
+    "DeleteBucketAnalyticsConfiguration"
+    "fixture/DeleteBucketAnalyticsConfiguration.yaml"
+
 requestCreateMultipartUpload :: CreateMultipartUpload -> TestTree
 requestCreateMultipartUpload = req
     "CreateMultipartUpload"
@@ -596,6 +736,11 @@
     "CopyObject"
     "fixture/CopyObject.yaml"
 
+requestListBucketMetricsConfigurations :: ListBucketMetricsConfigurations -> TestTree
+requestListBucketMetricsConfigurations = req
+    "ListBucketMetricsConfigurations"
+    "fixture/ListBucketMetricsConfigurations.yaml"
+
 requestGetBucketPolicy :: GetBucketPolicy -> TestTree
 requestGetBucketPolicy = req
     "GetBucketPolicy"
@@ -616,16 +761,36 @@
     "GetBucketLifecycleConfiguration"
     "fixture/GetBucketLifecycleConfiguration.yaml"
 
+requestGetBucketAnalyticsConfiguration :: GetBucketAnalyticsConfiguration -> TestTree
+requestGetBucketAnalyticsConfiguration = req
+    "GetBucketAnalyticsConfiguration"
+    "fixture/GetBucketAnalyticsConfiguration.yaml"
+
+requestGetObjectTagging :: GetObjectTagging -> TestTree
+requestGetObjectTagging = req
+    "GetObjectTagging"
+    "fixture/GetObjectTagging.yaml"
+
 requestListParts :: ListParts -> TestTree
 requestListParts = req
     "ListParts"
     "fixture/ListParts.yaml"
 
+requestDeleteObjectTagging :: DeleteObjectTagging -> TestTree
+requestDeleteObjectTagging = req
+    "DeleteObjectTagging"
+    "fixture/DeleteObjectTagging.yaml"
+
 requestUploadPartCopy :: UploadPartCopy -> TestTree
 requestUploadPartCopy = req
     "UploadPartCopy"
     "fixture/UploadPartCopy.yaml"
 
+requestPutObjectTagging :: PutObjectTagging -> TestTree
+requestPutObjectTagging = req
+    "PutObjectTagging"
+    "fixture/PutObjectTagging.yaml"
+
 requestPutBucketACL :: PutBucketACL -> TestTree
 requestPutBucketACL = req
     "PutBucketACL"
@@ -661,6 +826,13 @@
     s3
     (Proxy :: Proxy PutBucketLogging)
 
+responseGetBucketMetricsConfiguration :: GetBucketMetricsConfigurationResponse -> TestTree
+responseGetBucketMetricsConfiguration = res
+    "GetBucketMetricsConfigurationResponse"
+    "fixture/GetBucketMetricsConfigurationResponse.proto"
+    s3
+    (Proxy :: Proxy GetBucketMetricsConfiguration)
+
 responseListBuckets :: ListBucketsResponse -> TestTree
 responseListBuckets = res
     "ListBucketsResponse"
@@ -703,6 +875,20 @@
     s3
     (Proxy :: Proxy PutBucketTagging)
 
+responseGetBucketInventoryConfiguration :: GetBucketInventoryConfigurationResponse -> TestTree
+responseGetBucketInventoryConfiguration = res
+    "GetBucketInventoryConfigurationResponse"
+    "fixture/GetBucketInventoryConfigurationResponse.proto"
+    s3
+    (Proxy :: Proxy GetBucketInventoryConfiguration)
+
+responsePutBucketInventoryConfiguration :: PutBucketInventoryConfigurationResponse -> TestTree
+responsePutBucketInventoryConfiguration = res
+    "PutBucketInventoryConfigurationResponse"
+    "fixture/PutBucketInventoryConfigurationResponse.proto"
+    s3
+    (Proxy :: Proxy PutBucketInventoryConfiguration)
+
 responseGetBucketLocation :: GetBucketLocationResponse -> TestTree
 responseGetBucketLocation = res
     "GetBucketLocationResponse"
@@ -710,6 +896,20 @@
     s3
     (Proxy :: Proxy GetBucketLocation)
 
+responseListBucketInventoryConfigurations :: ListBucketInventoryConfigurationsResponse -> TestTree
+responseListBucketInventoryConfigurations = res
+    "ListBucketInventoryConfigurationsResponse"
+    "fixture/ListBucketInventoryConfigurationsResponse.proto"
+    s3
+    (Proxy :: Proxy ListBucketInventoryConfigurations)
+
+responseDeleteBucketInventoryConfiguration :: DeleteBucketInventoryConfigurationResponse -> TestTree
+responseDeleteBucketInventoryConfiguration = res
+    "DeleteBucketInventoryConfigurationResponse"
+    "fixture/DeleteBucketInventoryConfigurationResponse.proto"
+    s3
+    (Proxy :: Proxy DeleteBucketInventoryConfiguration)
+
 responseGetBucketNotificationConfiguration :: NotificationConfiguration -> TestTree
 responseGetBucketNotificationConfiguration = res
     "GetBucketNotificationConfigurationResponse"
@@ -724,6 +924,20 @@
     s3
     (Proxy :: Proxy PutBucketAccelerateConfiguration)
 
+responsePutBucketMetricsConfiguration :: PutBucketMetricsConfigurationResponse -> TestTree
+responsePutBucketMetricsConfiguration = res
+    "PutBucketMetricsConfigurationResponse"
+    "fixture/PutBucketMetricsConfigurationResponse.proto"
+    s3
+    (Proxy :: Proxy PutBucketMetricsConfiguration)
+
+responseDeleteBucketMetricsConfiguration :: DeleteBucketMetricsConfigurationResponse -> TestTree
+responseDeleteBucketMetricsConfiguration = res
+    "DeleteBucketMetricsConfigurationResponse"
+    "fixture/DeleteBucketMetricsConfigurationResponse.proto"
+    s3
+    (Proxy :: Proxy DeleteBucketMetricsConfiguration)
+
 responseListObjectsV :: ListObjectsVResponse -> TestTree
 responseListObjectsV = res
     "ListObjectsVResponse"
@@ -787,6 +1001,27 @@
     s3
     (Proxy :: Proxy PutBucketLifecycleConfiguration)
 
+responsePutBucketAnalyticsConfiguration :: PutBucketAnalyticsConfigurationResponse -> TestTree
+responsePutBucketAnalyticsConfiguration = res
+    "PutBucketAnalyticsConfigurationResponse"
+    "fixture/PutBucketAnalyticsConfigurationResponse.proto"
+    s3
+    (Proxy :: Proxy PutBucketAnalyticsConfiguration)
+
+responseListBucketAnalyticsConfigurations :: ListBucketAnalyticsConfigurationsResponse -> TestTree
+responseListBucketAnalyticsConfigurations = res
+    "ListBucketAnalyticsConfigurationsResponse"
+    "fixture/ListBucketAnalyticsConfigurationsResponse.proto"
+    s3
+    (Proxy :: Proxy ListBucketAnalyticsConfigurations)
+
+responseDeleteBucketAnalyticsConfiguration :: DeleteBucketAnalyticsConfigurationResponse -> TestTree
+responseDeleteBucketAnalyticsConfiguration = res
+    "DeleteBucketAnalyticsConfigurationResponse"
+    "fixture/DeleteBucketAnalyticsConfigurationResponse.proto"
+    s3
+    (Proxy :: Proxy DeleteBucketAnalyticsConfiguration)
+
 responseCreateMultipartUpload :: CreateMultipartUploadResponse -> TestTree
 responseCreateMultipartUpload = res
     "CreateMultipartUploadResponse"
@@ -955,6 +1190,13 @@
     s3
     (Proxy :: Proxy CopyObject)
 
+responseListBucketMetricsConfigurations :: ListBucketMetricsConfigurationsResponse -> TestTree
+responseListBucketMetricsConfigurations = res
+    "ListBucketMetricsConfigurationsResponse"
+    "fixture/ListBucketMetricsConfigurationsResponse.proto"
+    s3
+    (Proxy :: Proxy ListBucketMetricsConfigurations)
+
 responseGetBucketPolicy :: GetBucketPolicyResponse -> TestTree
 responseGetBucketPolicy = res
     "GetBucketPolicyResponse"
@@ -983,6 +1225,20 @@
     s3
     (Proxy :: Proxy GetBucketLifecycleConfiguration)
 
+responseGetBucketAnalyticsConfiguration :: GetBucketAnalyticsConfigurationResponse -> TestTree
+responseGetBucketAnalyticsConfiguration = res
+    "GetBucketAnalyticsConfigurationResponse"
+    "fixture/GetBucketAnalyticsConfigurationResponse.proto"
+    s3
+    (Proxy :: Proxy GetBucketAnalyticsConfiguration)
+
+responseGetObjectTagging :: GetObjectTaggingResponse -> TestTree
+responseGetObjectTagging = res
+    "GetObjectTaggingResponse"
+    "fixture/GetObjectTaggingResponse.proto"
+    s3
+    (Proxy :: Proxy GetObjectTagging)
+
 responseListParts :: ListPartsResponse -> TestTree
 responseListParts = res
     "ListPartsResponse"
@@ -990,12 +1246,26 @@
     s3
     (Proxy :: Proxy ListParts)
 
+responseDeleteObjectTagging :: DeleteObjectTaggingResponse -> TestTree
+responseDeleteObjectTagging = res
+    "DeleteObjectTaggingResponse"
+    "fixture/DeleteObjectTaggingResponse.proto"
+    s3
+    (Proxy :: Proxy DeleteObjectTagging)
+
 responseUploadPartCopy :: UploadPartCopyResponse -> TestTree
 responseUploadPartCopy = res
     "UploadPartCopyResponse"
     "fixture/UploadPartCopyResponse.proto"
     s3
     (Proxy :: Proxy UploadPartCopy)
+
+responsePutObjectTagging :: PutObjectTaggingResponse -> TestTree
+responsePutObjectTagging = res
+    "PutObjectTaggingResponse"
+    "fixture/PutObjectTaggingResponse.proto"
+    s3
+    (Proxy :: Proxy PutObjectTagging)
 
 responsePutBucketACL :: PutBucketACLResponse -> TestTree
 responsePutBucketACL = res
