diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.3.1`
+`1.3.2`
 
 
 ## Description
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.3.1
+version:               1.3.2
 synopsis:              Amazon Simple Storage Service SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -63,7 +63,7 @@
         , Network.AWS.S3.DeleteObjects
         , Network.AWS.S3.GetBucketACL
         , Network.AWS.S3.GetBucketCORS
-        , Network.AWS.S3.GetBucketLifecycle
+        , Network.AWS.S3.GetBucketLifecycleConfiguration
         , Network.AWS.S3.GetBucketLocation
         , Network.AWS.S3.GetBucketLogging
         , Network.AWS.S3.GetBucketNotificationConfiguration
@@ -85,7 +85,7 @@
         , Network.AWS.S3.ListParts
         , Network.AWS.S3.PutBucketACL
         , Network.AWS.S3.PutBucketCORS
-        , Network.AWS.S3.PutBucketLifecycle
+        , Network.AWS.S3.PutBucketLifecycleConfiguration
         , Network.AWS.S3.PutBucketLogging
         , Network.AWS.S3.PutBucketNotificationConfiguration
         , Network.AWS.S3.PutBucketPolicy
@@ -108,7 +108,7 @@
         , Network.AWS.S3.Types.Sum
 
     build-depends:
-          amazonka-core == 1.3.1.*
+          amazonka-core == 1.3.2.*
         , base          >= 4.7     && < 5
         , lens >= 4.4
         , text >= 1.1
@@ -130,9 +130,9 @@
         , Test.AWS.S3.Internal
 
     build-depends:
-          amazonka-core == 1.3.1.*
-        , amazonka-test == 1.3.1.*
-        , amazonka-s3 == 1.3.1.*
+          amazonka-core == 1.3.2.*
+        , amazonka-test == 1.3.2.*
+        , amazonka-s3 == 1.3.2.*
         , base
         , bytestring
         , lens
diff --git a/fixture/GetBucketLifecycle.yaml b/fixture/GetBucketLifecycle.yaml
deleted file mode 100644
--- a/fixture/GetBucketLifecycle.yaml
+++ /dev/null
diff --git a/fixture/GetBucketLifecycleConfiguration.yaml b/fixture/GetBucketLifecycleConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketLifecycleConfiguration.yaml
diff --git a/fixture/GetBucketLifecycleConfigurationResponse.proto b/fixture/GetBucketLifecycleConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketLifecycleConfigurationResponse.proto
diff --git a/fixture/GetBucketLifecycleResponse.proto b/fixture/GetBucketLifecycleResponse.proto
deleted file mode 100644
--- a/fixture/GetBucketLifecycleResponse.proto
+++ /dev/null
diff --git a/fixture/PutBucketLifecycleConfiguration.yaml b/fixture/PutBucketLifecycleConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketLifecycleConfiguration.yaml
diff --git a/fixture/PutBucketLifecycleConfigurationResponse.proto b/fixture/PutBucketLifecycleConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketLifecycleConfigurationResponse.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
@@ -115,21 +115,18 @@
     -- ** DeleteBucketReplication
     , module Network.AWS.S3.DeleteBucketReplication
 
-    -- ** GetBucketLifecycle
-    , module Network.AWS.S3.GetBucketLifecycle
-
     -- ** ListObjectVersions (Paginated)
     , module Network.AWS.S3.ListObjectVersions
 
     -- ** HeadBucket
     , module Network.AWS.S3.HeadBucket
 
-    -- ** PutBucketLifecycle
-    , module Network.AWS.S3.PutBucketLifecycle
-
     -- ** DeleteBucketLifecycle
     , module Network.AWS.S3.DeleteBucketLifecycle
 
+    -- ** PutBucketLifecycleConfiguration
+    , module Network.AWS.S3.PutBucketLifecycleConfiguration
+
     -- ** CreateMultipartUpload
     , module Network.AWS.S3.CreateMultipartUpload
 
@@ -211,6 +208,9 @@
     -- ** GetBucketACL
     , module Network.AWS.S3.GetBucketACL
 
+    -- ** GetBucketLifecycleConfiguration
+    , module Network.AWS.S3.GetBucketLifecycleConfiguration
+
     -- ** ListParts (Paginated)
     , module Network.AWS.S3.ListParts
 
@@ -309,6 +309,11 @@
     , bCreationDate
     , bName
 
+    -- ** BucketLifecycleConfiguration
+    , BucketLifecycleConfiguration
+    , bucketLifecycleConfiguration
+    , blcRules
+
     -- ** BucketLoggingStatus
     , BucketLoggingStatus
     , bucketLoggingStatus
@@ -322,11 +327,11 @@
     -- ** CORSRule
     , CORSRule
     , corsRule
-    , crAllowedMethods
     , crMaxAgeSeconds
     , crAllowedHeaders
-    , crAllowedOrigins
     , crExposeHeaders
+    , crAllowedMethods
+    , crAllowedOrigins
 
     -- ** CommonPrefix
     , CommonPrefix
@@ -393,6 +398,7 @@
     -- ** Destination
     , Destination
     , destination
+    , dStorageClass
     , dBucket
 
     -- ** ErrorDocument
@@ -440,17 +446,23 @@
     , lfcLambdaFunctionARN
     , lfcEvents
 
-    -- ** LifecycleConfiguration
-    , LifecycleConfiguration
-    , lifecycleConfiguration
-    , lcRules
-
     -- ** LifecycleExpiration
     , LifecycleExpiration
     , lifecycleExpiration
     , leDays
     , leDate
 
+    -- ** LifecycleRule
+    , LifecycleRule
+    , lifecycleRule
+    , lrTransitions
+    , lrNoncurrentVersionExpiration
+    , lrNoncurrentVersionTransitions
+    , lrExpiration
+    , lrId
+    , lrPrefix
+    , lrStatus
+
     -- ** LoggingEnabled
     , LoggingEnabled
     , loggingEnabled
@@ -586,17 +598,6 @@
     , rrCondition
     , rrRedirect
 
-    -- ** Rule
-    , Rule
-    , rule
-    , rNoncurrentVersionExpiration
-    , rTransition
-    , rExpiration
-    , rNoncurrentVersionTransition
-    , rId
-    , rPrefix
-    , rStatus
-
     -- ** S3KeyFilter
     , S3KeyFilter
     , s3KeyFilter
@@ -673,7 +674,7 @@
 import           Network.AWS.S3.DeleteObjects
 import           Network.AWS.S3.GetBucketACL
 import           Network.AWS.S3.GetBucketCORS
-import           Network.AWS.S3.GetBucketLifecycle
+import           Network.AWS.S3.GetBucketLifecycleConfiguration
 import           Network.AWS.S3.GetBucketLocation
 import           Network.AWS.S3.GetBucketLogging
 import           Network.AWS.S3.GetBucketNotificationConfiguration
@@ -696,7 +697,7 @@
 import           Network.AWS.S3.ListParts
 import           Network.AWS.S3.PutBucketACL
 import           Network.AWS.S3.PutBucketCORS
-import           Network.AWS.S3.PutBucketLifecycle
+import           Network.AWS.S3.PutBucketLifecycleConfiguration
 import           Network.AWS.S3.PutBucketLogging
 import           Network.AWS.S3.PutBucketNotificationConfiguration
 import           Network.AWS.S3.PutBucketPolicy
diff --git a/gen/Network/AWS/S3/GetBucketLifecycle.hs b/gen/Network/AWS/S3/GetBucketLifecycle.hs
deleted file mode 100644
--- a/gen/Network/AWS/S3/GetBucketLifecycle.hs
+++ /dev/null
@@ -1,117 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.S3.GetBucketLifecycle
--- Copyright   : (c) 2013-2015 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Returns the lifecycle configuration information set on the bucket.
---
--- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketLifecycle.html AWS API Reference> for GetBucketLifecycle.
-module Network.AWS.S3.GetBucketLifecycle
-    (
-    -- * Creating a Request
-      getBucketLifecycle
-    , GetBucketLifecycle
-    -- * Request Lenses
-    , gBucket
-
-    -- * Destructuring the Response
-    , getBucketLifecycleResponse
-    , GetBucketLifecycleResponse
-    -- * Response Lenses
-    , gblrsRules
-    , gblrsResponseStatus
-    ) where
-
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
-
--- | /See:/ 'getBucketLifecycle' smart constructor.
-newtype GetBucketLifecycle = GetBucketLifecycle'
-    { _gBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GetBucketLifecycle' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gBucket'
-getBucketLifecycle
-    :: BucketName -- ^ 'gBucket'
-    -> GetBucketLifecycle
-getBucketLifecycle pBucket_ =
-    GetBucketLifecycle'
-    { _gBucket = pBucket_
-    }
-
--- | Undocumented member.
-gBucket :: Lens' GetBucketLifecycle BucketName
-gBucket = lens _gBucket (\ s a -> s{_gBucket = a});
-
-instance AWSRequest GetBucketLifecycle where
-        type Rs GetBucketLifecycle =
-             GetBucketLifecycleResponse
-        request = get s3
-        response
-          = receiveXML
-              (\ s h x ->
-                 GetBucketLifecycleResponse' <$>
-                   (may (parseXMLList "Rule") x) <*>
-                     (pure (fromEnum s)))
-
-instance ToHeaders GetBucketLifecycle where
-        toHeaders = const mempty
-
-instance ToPath GetBucketLifecycle where
-        toPath GetBucketLifecycle'{..}
-          = mconcat ["/", toBS _gBucket]
-
-instance ToQuery GetBucketLifecycle where
-        toQuery = const (mconcat ["lifecycle"])
-
--- | /See:/ 'getBucketLifecycleResponse' smart constructor.
-data GetBucketLifecycleResponse = GetBucketLifecycleResponse'
-    { _gblrsRules          :: !(Maybe [Rule])
-    , _gblrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GetBucketLifecycleResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gblrsRules'
---
--- * 'gblrsResponseStatus'
-getBucketLifecycleResponse
-    :: Int -- ^ 'gblrsResponseStatus'
-    -> GetBucketLifecycleResponse
-getBucketLifecycleResponse pResponseStatus_ =
-    GetBucketLifecycleResponse'
-    { _gblrsRules = Nothing
-    , _gblrsResponseStatus = pResponseStatus_
-    }
-
--- | Undocumented member.
-gblrsRules :: Lens' GetBucketLifecycleResponse [Rule]
-gblrsRules = lens _gblrsRules (\ s a -> s{_gblrsRules = a}) . _Default . _Coerce;
-
--- | The response status code.
-gblrsResponseStatus :: Lens' GetBucketLifecycleResponse Int
-gblrsResponseStatus = lens _gblrsResponseStatus (\ s a -> s{_gblrsResponseStatus = a});
diff --git a/gen/Network/AWS/S3/GetBucketLifecycleConfiguration.hs b/gen/Network/AWS/S3/GetBucketLifecycleConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/GetBucketLifecycleConfiguration.hs
@@ -0,0 +1,120 @@
+{-# 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.GetBucketLifecycleConfiguration
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the lifecycle configuration information set on the bucket.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketLifecycleConfiguration.html AWS API Reference> for GetBucketLifecycleConfiguration.
+module Network.AWS.S3.GetBucketLifecycleConfiguration
+    (
+    -- * Creating a Request
+      getBucketLifecycleConfiguration
+    , GetBucketLifecycleConfiguration
+    -- * Request Lenses
+    , gblcBucket
+
+    -- * Destructuring the Response
+    , getBucketLifecycleConfigurationResponse
+    , GetBucketLifecycleConfigurationResponse
+    -- * Response Lenses
+    , gblcrsRules
+    , gblcrsResponseStatus
+    ) where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'getBucketLifecycleConfiguration' smart constructor.
+newtype GetBucketLifecycleConfiguration = GetBucketLifecycleConfiguration'
+    { _gblcBucket :: BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetBucketLifecycleConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gblcBucket'
+getBucketLifecycleConfiguration
+    :: BucketName -- ^ 'gblcBucket'
+    -> GetBucketLifecycleConfiguration
+getBucketLifecycleConfiguration pBucket_ =
+    GetBucketLifecycleConfiguration'
+    { _gblcBucket = pBucket_
+    }
+
+-- | Undocumented member.
+gblcBucket :: Lens' GetBucketLifecycleConfiguration BucketName
+gblcBucket = lens _gblcBucket (\ s a -> s{_gblcBucket = a});
+
+instance AWSRequest GetBucketLifecycleConfiguration
+         where
+        type Rs GetBucketLifecycleConfiguration =
+             GetBucketLifecycleConfigurationResponse
+        request = get s3
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetBucketLifecycleConfigurationResponse' <$>
+                   (may (parseXMLList "Rule") x) <*>
+                     (pure (fromEnum s)))
+
+instance ToHeaders GetBucketLifecycleConfiguration
+         where
+        toHeaders = const mempty
+
+instance ToPath GetBucketLifecycleConfiguration where
+        toPath GetBucketLifecycleConfiguration'{..}
+          = mconcat ["/", toBS _gblcBucket]
+
+instance ToQuery GetBucketLifecycleConfiguration
+         where
+        toQuery = const (mconcat ["lifecycle"])
+
+-- | /See:/ 'getBucketLifecycleConfigurationResponse' smart constructor.
+data GetBucketLifecycleConfigurationResponse = GetBucketLifecycleConfigurationResponse'
+    { _gblcrsRules          :: !(Maybe [LifecycleRule])
+    , _gblcrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetBucketLifecycleConfigurationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gblcrsRules'
+--
+-- * 'gblcrsResponseStatus'
+getBucketLifecycleConfigurationResponse
+    :: Int -- ^ 'gblcrsResponseStatus'
+    -> GetBucketLifecycleConfigurationResponse
+getBucketLifecycleConfigurationResponse pResponseStatus_ =
+    GetBucketLifecycleConfigurationResponse'
+    { _gblcrsRules = Nothing
+    , _gblcrsResponseStatus = pResponseStatus_
+    }
+
+-- | Undocumented member.
+gblcrsRules :: Lens' GetBucketLifecycleConfigurationResponse [LifecycleRule]
+gblcrsRules = lens _gblcrsRules (\ s a -> s{_gblcrsRules = a}) . _Default . _Coerce;
+
+-- | 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
@@ -33,8 +33,8 @@
     , getBucketLocationResponse
     , GetBucketLocationResponse
     -- * Response Lenses
-    , getrsLocationConstraint
-    , getrsResponseStatus
+    , grsLocationConstraint
+    , grsResponseStatus
     ) where
 
 import           Network.AWS.Prelude
@@ -86,30 +86,30 @@
 
 -- | /See:/ 'getBucketLocationResponse' smart constructor.
 data GetBucketLocationResponse = GetBucketLocationResponse'
-    { _getrsLocationConstraint :: !(Maybe Region)
-    , _getrsResponseStatus     :: !Int
+    { _grsLocationConstraint :: !(Maybe Region)
+    , _grsResponseStatus     :: !Int
     } 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:
 --
--- * 'getrsLocationConstraint'
+-- * 'grsLocationConstraint'
 --
--- * 'getrsResponseStatus'
+-- * 'grsResponseStatus'
 getBucketLocationResponse
-    :: Int -- ^ 'getrsResponseStatus'
+    :: Int -- ^ 'grsResponseStatus'
     -> GetBucketLocationResponse
 getBucketLocationResponse pResponseStatus_ =
     GetBucketLocationResponse'
-    { _getrsLocationConstraint = Nothing
-    , _getrsResponseStatus = pResponseStatus_
+    { _grsLocationConstraint = Nothing
+    , _grsResponseStatus = pResponseStatus_
     }
 
 -- | Undocumented member.
-getrsLocationConstraint :: Lens' GetBucketLocationResponse (Maybe Region)
-getrsLocationConstraint = lens _getrsLocationConstraint (\ s a -> s{_getrsLocationConstraint = a});
+grsLocationConstraint :: Lens' GetBucketLocationResponse (Maybe Region)
+grsLocationConstraint = lens _grsLocationConstraint (\ s a -> s{_grsLocationConstraint = a});
 
 -- | The response status code.
-getrsResponseStatus :: Lens' GetBucketLocationResponse Int
-getrsResponseStatus = lens _getrsResponseStatus (\ s a -> s{_getrsResponseStatus = a});
+grsResponseStatus :: Lens' GetBucketLocationResponse Int
+grsResponseStatus = lens _grsResponseStatus (\ s a -> s{_grsResponseStatus = a});
diff --git a/gen/Network/AWS/S3/GetBucketLogging.hs b/gen/Network/AWS/S3/GetBucketLogging.hs
--- a/gen/Network/AWS/S3/GetBucketLogging.hs
+++ b/gen/Network/AWS/S3/GetBucketLogging.hs
@@ -28,14 +28,14 @@
       getBucketLogging
     , GetBucketLogging
     -- * Request Lenses
-    , getBucket
+    , gBucket
 
     -- * Destructuring the Response
     , getBucketLoggingResponse
     , GetBucketLoggingResponse
     -- * Response Lenses
-    , grsLoggingEnabled
-    , grsResponseStatus
+    , gblrsLoggingEnabled
+    , gblrsResponseStatus
     ) where
 
 import           Network.AWS.Prelude
@@ -46,25 +46,25 @@
 
 -- | /See:/ 'getBucketLogging' smart constructor.
 newtype GetBucketLogging = GetBucketLogging'
-    { _getBucket :: BucketName
+    { _gBucket :: BucketName
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'GetBucketLogging' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'getBucket'
+-- * 'gBucket'
 getBucketLogging
-    :: BucketName -- ^ 'getBucket'
+    :: BucketName -- ^ 'gBucket'
     -> GetBucketLogging
 getBucketLogging pBucket_ =
     GetBucketLogging'
-    { _getBucket = pBucket_
+    { _gBucket = pBucket_
     }
 
 -- | Undocumented member.
-getBucket :: Lens' GetBucketLogging BucketName
-getBucket = lens _getBucket (\ s a -> s{_getBucket = a});
+gBucket :: Lens' GetBucketLogging BucketName
+gBucket = lens _gBucket (\ s a -> s{_gBucket = a});
 
 instance AWSRequest GetBucketLogging where
         type Rs GetBucketLogging = GetBucketLoggingResponse
@@ -80,37 +80,37 @@
 
 instance ToPath GetBucketLogging where
         toPath GetBucketLogging'{..}
-          = mconcat ["/", toBS _getBucket]
+          = mconcat ["/", toBS _gBucket]
 
 instance ToQuery GetBucketLogging where
         toQuery = const (mconcat ["logging"])
 
 -- | /See:/ 'getBucketLoggingResponse' smart constructor.
 data GetBucketLoggingResponse = GetBucketLoggingResponse'
-    { _grsLoggingEnabled :: !(Maybe LoggingEnabled)
-    , _grsResponseStatus :: !Int
+    { _gblrsLoggingEnabled :: !(Maybe LoggingEnabled)
+    , _gblrsResponseStatus :: !Int
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'GetBucketLoggingResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'grsLoggingEnabled'
+-- * 'gblrsLoggingEnabled'
 --
--- * 'grsResponseStatus'
+-- * 'gblrsResponseStatus'
 getBucketLoggingResponse
-    :: Int -- ^ 'grsResponseStatus'
+    :: Int -- ^ 'gblrsResponseStatus'
     -> GetBucketLoggingResponse
 getBucketLoggingResponse pResponseStatus_ =
     GetBucketLoggingResponse'
-    { _grsLoggingEnabled = Nothing
-    , _grsResponseStatus = pResponseStatus_
+    { _gblrsLoggingEnabled = Nothing
+    , _gblrsResponseStatus = pResponseStatus_
     }
 
 -- | Undocumented member.
-grsLoggingEnabled :: Lens' GetBucketLoggingResponse (Maybe LoggingEnabled)
-grsLoggingEnabled = lens _grsLoggingEnabled (\ s a -> s{_grsLoggingEnabled = a});
+gblrsLoggingEnabled :: Lens' GetBucketLoggingResponse (Maybe LoggingEnabled)
+gblrsLoggingEnabled = lens _gblrsLoggingEnabled (\ s a -> s{_gblrsLoggingEnabled = a});
 
 -- | The response status code.
-grsResponseStatus :: Lens' GetBucketLoggingResponse Int
-grsResponseStatus = lens _grsResponseStatus (\ s a -> s{_grsResponseStatus = a});
+gblrsResponseStatus :: Lens' GetBucketLoggingResponse Int
+gblrsResponseStatus = lens _gblrsResponseStatus (\ s a -> s{_gblrsResponseStatus = a});
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
@@ -33,8 +33,8 @@
     , getBucketPolicyResponse
     , GetBucketPolicyResponse
     -- * Response Lenses
-    , gbprsPolicy
     , gbprsResponseStatus
+    , gbprsPolicy
     ) where
 
 import           Network.AWS.Prelude
@@ -69,10 +69,10 @@
         type Rs GetBucketPolicy = GetBucketPolicyResponse
         request = get s3
         response
-          = receiveXML
+          = receiveJSON
               (\ s h x ->
                  GetBucketPolicyResponse' <$>
-                   (parseXML x) <*> (pure (fromEnum s)))
+                   (pure (fromEnum s)) <*> (pure x))
 
 instance ToHeaders GetBucketPolicy where
         toHeaders = const mempty
@@ -86,30 +86,31 @@
 
 -- | /See:/ 'getBucketPolicyResponse' smart constructor.
 data GetBucketPolicyResponse = GetBucketPolicyResponse'
-    { _gbprsPolicy         :: !(Maybe Text)
-    , _gbprsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+    { _gbprsResponseStatus :: !Int
+    , _gbprsPolicy         :: !(HashMap Text Value)
+    } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'GetBucketPolicyResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gbprsPolicy'
---
 -- * 'gbprsResponseStatus'
+--
+-- * 'gbprsPolicy'
 getBucketPolicyResponse
     :: Int -- ^ 'gbprsResponseStatus'
+    -> HashMap Text Value -- ^ 'gbprsPolicy'
     -> GetBucketPolicyResponse
-getBucketPolicyResponse pResponseStatus_ =
+getBucketPolicyResponse pResponseStatus_ pPolicy_ =
     GetBucketPolicyResponse'
-    { _gbprsPolicy = Nothing
-    , _gbprsResponseStatus = pResponseStatus_
+    { _gbprsResponseStatus = pResponseStatus_
+    , _gbprsPolicy = pPolicy_
     }
 
--- | The bucket policy as a JSON document.
-gbprsPolicy :: Lens' GetBucketPolicyResponse (Maybe Text)
-gbprsPolicy = lens _gbprsPolicy (\ s a -> s{_gbprsPolicy = a});
-
 -- | The response status code.
 gbprsResponseStatus :: Lens' GetBucketPolicyResponse Int
 gbprsResponseStatus = lens _gbprsResponseStatus (\ s a -> s{_gbprsResponseStatus = a});
+
+-- | The bucket policy as a JSON document.
+gbprsPolicy :: Lens' GetBucketPolicyResponse (HashMap Text Value)
+gbprsPolicy = lens _gbprsPolicy (\ s a -> s{_gbprsPolicy = a});
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
@@ -28,8 +28,8 @@
     , PutBucketCORS
     -- * Request Lenses
     , pbcContentMD5
-    , pbcCORSConfiguration
     , pbcBucket
+    , pbcCORSConfiguration
 
     -- * Destructuring the Response
     , putBucketCORSResponse
@@ -45,8 +45,8 @@
 -- | /See:/ 'putBucketCORS' smart constructor.
 data PutBucketCORS = PutBucketCORS'
     { _pbcContentMD5        :: !(Maybe Text)
-    , _pbcCORSConfiguration :: !(Maybe CORSConfiguration)
     , _pbcBucket            :: !BucketName
+    , _pbcCORSConfiguration :: !CORSConfiguration
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'PutBucketCORS' with the minimum fields required to make a request.
@@ -55,17 +55,18 @@
 --
 -- * 'pbcContentMD5'
 --
--- * 'pbcCORSConfiguration'
---
 -- * 'pbcBucket'
+--
+-- * 'pbcCORSConfiguration'
 putBucketCORS
     :: BucketName -- ^ 'pbcBucket'
+    -> CORSConfiguration -- ^ 'pbcCORSConfiguration'
     -> PutBucketCORS
-putBucketCORS pBucket_ =
+putBucketCORS pBucket_ pCORSConfiguration_ =
     PutBucketCORS'
     { _pbcContentMD5 = Nothing
-    , _pbcCORSConfiguration = Nothing
     , _pbcBucket = pBucket_
+    , _pbcCORSConfiguration = pCORSConfiguration_
     }
 
 -- | Undocumented member.
@@ -73,12 +74,12 @@
 pbcContentMD5 = lens _pbcContentMD5 (\ s a -> s{_pbcContentMD5 = a});
 
 -- | Undocumented member.
-pbcCORSConfiguration :: Lens' PutBucketCORS (Maybe CORSConfiguration)
-pbcCORSConfiguration = lens _pbcCORSConfiguration (\ s a -> s{_pbcCORSConfiguration = a});
-
--- | Undocumented member.
 pbcBucket :: Lens' PutBucketCORS BucketName
 pbcBucket = lens _pbcBucket (\ s a -> s{_pbcBucket = a});
+
+-- | Undocumented member.
+pbcCORSConfiguration :: Lens' PutBucketCORS CORSConfiguration
+pbcCORSConfiguration = lens _pbcCORSConfiguration (\ s a -> s{_pbcCORSConfiguration = a});
 
 instance AWSRequest PutBucketCORS where
         type Rs PutBucketCORS = PutBucketCORSResponse
diff --git a/gen/Network/AWS/S3/PutBucketLifecycle.hs b/gen/Network/AWS/S3/PutBucketLifecycle.hs
deleted file mode 100644
--- a/gen/Network/AWS/S3/PutBucketLifecycle.hs
+++ /dev/null
@@ -1,117 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.S3.PutBucketLifecycle
--- Copyright   : (c) 2013-2015 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Sets lifecycle configuration for your bucket. If a lifecycle
--- configuration exists, it replaces it.
---
--- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketLifecycle.html AWS API Reference> for PutBucketLifecycle.
-module Network.AWS.S3.PutBucketLifecycle
-    (
-    -- * Creating a Request
-      putBucketLifecycle
-    , PutBucketLifecycle
-    -- * Request Lenses
-    , pContentMD5
-    , pLifecycleConfiguration
-    , pBucket
-
-    -- * Destructuring the Response
-    , putBucketLifecycleResponse
-    , PutBucketLifecycleResponse
-    ) where
-
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
-
--- | /See:/ 'putBucketLifecycle' smart constructor.
-data PutBucketLifecycle = PutBucketLifecycle'
-    { _pContentMD5             :: !(Maybe Text)
-    , _pLifecycleConfiguration :: !(Maybe LifecycleConfiguration)
-    , _pBucket                 :: !BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PutBucketLifecycle' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pContentMD5'
---
--- * 'pLifecycleConfiguration'
---
--- * 'pBucket'
-putBucketLifecycle
-    :: BucketName -- ^ 'pBucket'
-    -> PutBucketLifecycle
-putBucketLifecycle pBucket_ =
-    PutBucketLifecycle'
-    { _pContentMD5 = Nothing
-    , _pLifecycleConfiguration = Nothing
-    , _pBucket = pBucket_
-    }
-
--- | Undocumented member.
-pContentMD5 :: Lens' PutBucketLifecycle (Maybe Text)
-pContentMD5 = lens _pContentMD5 (\ s a -> s{_pContentMD5 = a});
-
--- | Undocumented member.
-pLifecycleConfiguration :: Lens' PutBucketLifecycle (Maybe LifecycleConfiguration)
-pLifecycleConfiguration = lens _pLifecycleConfiguration (\ s a -> s{_pLifecycleConfiguration = a});
-
--- | Undocumented member.
-pBucket :: Lens' PutBucketLifecycle BucketName
-pBucket = lens _pBucket (\ s a -> s{_pBucket = a});
-
-instance AWSRequest PutBucketLifecycle where
-        type Rs PutBucketLifecycle =
-             PutBucketLifecycleResponse
-        request = contentMD5 . putXML s3
-        response = receiveNull PutBucketLifecycleResponse'
-
-instance ToElement PutBucketLifecycle where
-        toElement
-          = mkElement
-              "{http://s3.amazonaws.com/doc/2006-03-01/}LifecycleConfiguration"
-              .
-              _pLifecycleConfiguration
-
-instance ToHeaders PutBucketLifecycle where
-        toHeaders PutBucketLifecycle'{..}
-          = mconcat ["Content-MD5" =# _pContentMD5]
-
-instance ToPath PutBucketLifecycle where
-        toPath PutBucketLifecycle'{..}
-          = mconcat ["/", toBS _pBucket]
-
-instance ToQuery PutBucketLifecycle where
-        toQuery = const (mconcat ["lifecycle"])
-
--- | /See:/ 'putBucketLifecycleResponse' smart constructor.
-data PutBucketLifecycleResponse =
-    PutBucketLifecycleResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PutBucketLifecycleResponse' with the minimum fields required to make a request.
---
-putBucketLifecycleResponse
-    :: PutBucketLifecycleResponse
-putBucketLifecycleResponse = PutBucketLifecycleResponse'
diff --git a/gen/Network/AWS/S3/PutBucketLifecycleConfiguration.hs b/gen/Network/AWS/S3/PutBucketLifecycleConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/PutBucketLifecycleConfiguration.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.PutBucketLifecycleConfiguration
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sets lifecycle configuration for your bucket. If a lifecycle
+-- configuration exists, it replaces it.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketLifecycleConfiguration.html AWS API Reference> for PutBucketLifecycleConfiguration.
+module Network.AWS.S3.PutBucketLifecycleConfiguration
+    (
+    -- * Creating a Request
+      putBucketLifecycleConfiguration
+    , PutBucketLifecycleConfiguration
+    -- * Request Lenses
+    , pblcLifecycleConfiguration
+    , pblcBucket
+
+    -- * Destructuring the Response
+    , putBucketLifecycleConfigurationResponse
+    , PutBucketLifecycleConfigurationResponse
+    ) where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.S3.Types
+import           Network.AWS.S3.Types.Product
+
+-- | /See:/ 'putBucketLifecycleConfiguration' smart constructor.
+data PutBucketLifecycleConfiguration = PutBucketLifecycleConfiguration'
+    { _pblcLifecycleConfiguration :: !(Maybe BucketLifecycleConfiguration)
+    , _pblcBucket                 :: !BucketName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutBucketLifecycleConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pblcLifecycleConfiguration'
+--
+-- * 'pblcBucket'
+putBucketLifecycleConfiguration
+    :: BucketName -- ^ 'pblcBucket'
+    -> PutBucketLifecycleConfiguration
+putBucketLifecycleConfiguration pBucket_ =
+    PutBucketLifecycleConfiguration'
+    { _pblcLifecycleConfiguration = Nothing
+    , _pblcBucket = pBucket_
+    }
+
+-- | Undocumented member.
+pblcLifecycleConfiguration :: Lens' PutBucketLifecycleConfiguration (Maybe BucketLifecycleConfiguration)
+pblcLifecycleConfiguration = lens _pblcLifecycleConfiguration (\ s a -> s{_pblcLifecycleConfiguration = a});
+
+-- | Undocumented member.
+pblcBucket :: Lens' PutBucketLifecycleConfiguration BucketName
+pblcBucket = lens _pblcBucket (\ s a -> s{_pblcBucket = a});
+
+instance AWSRequest PutBucketLifecycleConfiguration
+         where
+        type Rs PutBucketLifecycleConfiguration =
+             PutBucketLifecycleConfigurationResponse
+        request = putXML s3
+        response
+          = receiveNull
+              PutBucketLifecycleConfigurationResponse'
+
+instance ToElement PutBucketLifecycleConfiguration
+         where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}LifecycleConfiguration"
+              .
+              _pblcLifecycleConfiguration
+
+instance ToHeaders PutBucketLifecycleConfiguration
+         where
+        toHeaders = const mempty
+
+instance ToPath PutBucketLifecycleConfiguration where
+        toPath PutBucketLifecycleConfiguration'{..}
+          = mconcat ["/", toBS _pblcBucket]
+
+instance ToQuery PutBucketLifecycleConfiguration
+         where
+        toQuery = const (mconcat ["lifecycle"])
+
+-- | /See:/ 'putBucketLifecycleConfigurationResponse' smart constructor.
+data PutBucketLifecycleConfigurationResponse =
+    PutBucketLifecycleConfigurationResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutBucketLifecycleConfigurationResponse' with the minimum fields required to make a request.
+--
+putBucketLifecycleConfigurationResponse
+    :: PutBucketLifecycleConfigurationResponse
+putBucketLifecycleConfigurationResponse =
+    PutBucketLifecycleConfigurationResponse'
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
@@ -47,8 +47,8 @@
 data PutBucketPolicy = PutBucketPolicy'
     { _pbpContentMD5 :: !(Maybe Text)
     , _pbpBucket     :: !BucketName
-    , _pbpPolicy     :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+    , _pbpPolicy     :: !(HashMap Text Value)
+    } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'PutBucketPolicy' with the minimum fields required to make a request.
 --
@@ -61,7 +61,7 @@
 -- * 'pbpPolicy'
 putBucketPolicy
     :: BucketName -- ^ 'pbpBucket'
-    -> Text -- ^ 'pbpPolicy'
+    -> HashMap Text Value -- ^ 'pbpPolicy'
     -> PutBucketPolicy
 putBucketPolicy pBucket_ pPolicy_ =
     PutBucketPolicy'
@@ -79,16 +79,16 @@
 pbpBucket = lens _pbpBucket (\ s a -> s{_pbpBucket = a});
 
 -- | The bucket policy as a JSON document.
-pbpPolicy :: Lens' PutBucketPolicy Text
+pbpPolicy :: Lens' PutBucketPolicy (HashMap Text Value)
 pbpPolicy = lens _pbpPolicy (\ s a -> s{_pbpPolicy = a});
 
 instance AWSRequest PutBucketPolicy where
         type Rs PutBucketPolicy = PutBucketPolicyResponse
-        request = contentMD5 . putXML s3
+        request = contentMD5 . putBody s3
         response = receiveNull PutBucketPolicyResponse'
 
-instance ToElement PutBucketPolicy where
-        toElement = mkElement "Policy" . _pbpPolicy
+instance ToBody PutBucketPolicy where
+        toBody = toBody . _pbpPolicy
 
 instance ToHeaders PutBucketPolicy where
         toHeaders PutBucketPolicy'{..}
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
@@ -330,7 +330,7 @@
                      <*> (pure (fromEnum s)))
 
 instance ToBody PutObject where
-        toBody = _poBody
+        toBody = toBody . _poBody
 
 instance ToHeaders PutObject where
         toHeaders PutObject'{..}
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
@@ -110,6 +110,11 @@
     , bCreationDate
     , bName
 
+    -- * BucketLifecycleConfiguration
+    , BucketLifecycleConfiguration
+    , bucketLifecycleConfiguration
+    , blcRules
+
     -- * BucketLoggingStatus
     , BucketLoggingStatus
     , bucketLoggingStatus
@@ -123,11 +128,11 @@
     -- * CORSRule
     , CORSRule
     , corsRule
-    , crAllowedMethods
     , crMaxAgeSeconds
     , crAllowedHeaders
-    , crAllowedOrigins
     , crExposeHeaders
+    , crAllowedMethods
+    , crAllowedOrigins
 
     -- * CommonPrefix
     , CommonPrefix
@@ -194,6 +199,7 @@
     -- * Destination
     , Destination
     , destination
+    , dStorageClass
     , dBucket
 
     -- * ErrorDocument
@@ -241,17 +247,23 @@
     , lfcLambdaFunctionARN
     , lfcEvents
 
-    -- * LifecycleConfiguration
-    , LifecycleConfiguration
-    , lifecycleConfiguration
-    , lcRules
-
     -- * LifecycleExpiration
     , LifecycleExpiration
     , lifecycleExpiration
     , leDays
     , leDate
 
+    -- * LifecycleRule
+    , LifecycleRule
+    , lifecycleRule
+    , lrTransitions
+    , lrNoncurrentVersionExpiration
+    , lrNoncurrentVersionTransitions
+    , lrExpiration
+    , lrId
+    , lrPrefix
+    , lrStatus
+
     -- * LoggingEnabled
     , LoggingEnabled
     , loggingEnabled
@@ -386,17 +398,6 @@
     , routingRule
     , rrCondition
     , rrRedirect
-
-    -- * Rule
-    , Rule
-    , rule
-    , rNoncurrentVersionExpiration
-    , rTransition
-    , rExpiration
-    , rNoncurrentVersionTransition
-    , rId
-    , rPrefix
-    , rStatus
 
     -- * S3KeyFilter
     , S3KeyFilter
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
@@ -92,6 +92,31 @@
         parseXML x
           = Bucket' <$> (x .@ "CreationDate") <*> (x .@ "Name")
 
+-- | /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 ToXML BucketLifecycleConfiguration where
+        toXML BucketLifecycleConfiguration'{..}
+          = mconcat [toXMLList "Rule" _blcRules]
+
 -- | /See:/ 'bucketLoggingStatus' smart constructor.
 newtype BucketLoggingStatus = BucketLoggingStatus'
     { _blsLoggingEnabled :: Maybe LoggingEnabled
@@ -119,7 +144,7 @@
 
 -- | /See:/ 'corsConfiguration' smart constructor.
 newtype CORSConfiguration = CORSConfiguration'
-    { _ccCORSRules :: Maybe [CORSRule]
+    { _ccCORSRules :: [CORSRule]
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'CORSConfiguration' with the minimum fields required to make a request.
@@ -131,56 +156,50 @@
     :: CORSConfiguration
 corsConfiguration =
     CORSConfiguration'
-    { _ccCORSRules = Nothing
+    { _ccCORSRules = mempty
     }
 
 -- | Undocumented member.
 ccCORSRules :: Lens' CORSConfiguration [CORSRule]
-ccCORSRules = lens _ccCORSRules (\ s a -> s{_ccCORSRules = a}) . _Default . _Coerce;
+ccCORSRules = lens _ccCORSRules (\ s a -> s{_ccCORSRules = a}) . _Coerce;
 
 instance ToXML CORSConfiguration where
         toXML CORSConfiguration'{..}
-          = mconcat
-              [toXML (toXMLList "CORSRule" <$> _ccCORSRules)]
+          = mconcat [toXMLList "CORSRule" _ccCORSRules]
 
 -- | /See:/ 'corsRule' smart constructor.
 data CORSRule = CORSRule'
-    { _crAllowedMethods :: !(Maybe [Text])
-    , _crMaxAgeSeconds  :: !(Maybe Int)
+    { _crMaxAgeSeconds  :: !(Maybe Int)
     , _crAllowedHeaders :: !(Maybe [Text])
-    , _crAllowedOrigins :: !(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:
 --
--- * 'crAllowedMethods'
---
 -- * 'crMaxAgeSeconds'
 --
 -- * 'crAllowedHeaders'
 --
--- * 'crAllowedOrigins'
---
 -- * 'crExposeHeaders'
+--
+-- * 'crAllowedMethods'
+--
+-- * 'crAllowedOrigins'
 corsRule
     :: CORSRule
 corsRule =
     CORSRule'
-    { _crAllowedMethods = Nothing
-    , _crMaxAgeSeconds = Nothing
+    { _crMaxAgeSeconds = Nothing
     , _crAllowedHeaders = Nothing
-    , _crAllowedOrigins = Nothing
     , _crExposeHeaders = Nothing
+    , _crAllowedMethods = mempty
+    , _crAllowedOrigins = mempty
     }
 
--- | Identifies HTTP methods that the domain\/origin specified in the rule is
--- allowed to execute.
-crAllowedMethods :: Lens' CORSRule [Text]
-crAllowedMethods = lens _crAllowedMethods (\ s a -> s{_crAllowedMethods = a}) . _Default . _Coerce;
-
 -- | The time in seconds that your browser is to cache the preflight response
 -- for the specified resource.
 crMaxAgeSeconds :: Lens' CORSRule (Maybe Int)
@@ -190,38 +209,41 @@
 crAllowedHeaders :: Lens' CORSRule [Text]
 crAllowedHeaders = lens _crAllowedHeaders (\ s a -> s{_crAllowedHeaders = a}) . _Default . _Coerce;
 
--- | One or more origins you want customers to be able to access the bucket
--- from.
-crAllowedOrigins :: Lens' CORSRule [Text]
-crAllowedOrigins = lens _crAllowedOrigins (\ s a -> s{_crAllowedOrigins = a}) . _Default . _Coerce;
-
 -- | One or more headers in the response that you want customers to be able
 -- to access from their applications (for example, from a JavaScript
 -- XMLHttpRequest object).
 crExposeHeaders :: Lens' CORSRule [Text]
 crExposeHeaders = lens _crExposeHeaders (\ s a -> s{_crExposeHeaders = a}) . _Default . _Coerce;
 
+-- | 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' <$>
-              (may (parseXMLList "AllowedMethod") x) <*>
-                (x .@? "MaxAgeSeconds")
-                <*> (may (parseXMLList "AllowedHeader") x)
-                <*> (may (parseXMLList "AllowedOrigin") x)
+              (x .@? "MaxAgeSeconds") <*>
+                (may (parseXMLList "AllowedHeader") x)
                 <*> (may (parseXMLList "ExposeHeader") x)
+                <*> (parseXMLList "AllowedMethod" x)
+                <*> (parseXMLList "AllowedOrigin" x)
 
 instance ToXML CORSRule where
         toXML CORSRule'{..}
           = mconcat
-              [toXML
-                 (toXMLList "AllowedMethod" <$> _crAllowedMethods),
-               "MaxAgeSeconds" @= _crMaxAgeSeconds,
+              ["MaxAgeSeconds" @= _crMaxAgeSeconds,
                toXML
                  (toXMLList "AllowedHeader" <$> _crAllowedHeaders),
                toXML
-                 (toXMLList "AllowedOrigin" <$> _crAllowedOrigins),
-               toXML
-                 (toXMLList "ExposeHeader" <$> _crExposeHeaders)]
+                 (toXMLList "ExposeHeader" <$> _crExposeHeaders),
+               toXMLList "AllowedMethod" _crAllowedMethods,
+               toXMLList "AllowedOrigin" _crAllowedOrigins]
 
 -- | /See:/ 'commonPrefix' smart constructor.
 newtype CommonPrefix = CommonPrefix'
@@ -607,34 +629,46 @@
                 <*> (x .@? "Key")
 
 -- | /See:/ 'destination' smart constructor.
-newtype Destination = Destination'
-    { _dBucket :: BucketName
+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'
-    { _dBucket = pBucket_
+    { _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 .@ "Bucket")
+        parseXML x
+          = Destination' <$>
+              (x .@? "StorageClass") <*> (x .@ "Bucket")
 
 instance ToXML Destination where
         toXML Destination'{..}
-          = mconcat ["Bucket" @= _dBucket]
+          = mconcat
+              ["StorageClass" @= _dStorageClass,
+               "Bucket" @= _dBucket]
 
 -- | /See:/ 'errorDocument' smart constructor.
 newtype ErrorDocument = ErrorDocument'
@@ -949,31 +983,6 @@
                "CloudFunction" @= _lfcLambdaFunctionARN,
                toXMLList "Event" _lfcEvents]
 
--- | /See:/ 'lifecycleConfiguration' smart constructor.
-newtype LifecycleConfiguration = LifecycleConfiguration'
-    { _lcRules :: [Rule]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'LifecycleConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lcRules'
-lifecycleConfiguration
-    :: LifecycleConfiguration
-lifecycleConfiguration =
-    LifecycleConfiguration'
-    { _lcRules = mempty
-    }
-
--- | Undocumented member.
-lcRules :: Lens' LifecycleConfiguration [Rule]
-lcRules = lens _lcRules (\ s a -> s{_lcRules = a}) . _Coerce;
-
-instance ToXML LifecycleConfiguration where
-        toXML LifecycleConfiguration'{..}
-          = mconcat [toXMLList "Rule" _lcRules]
-
 -- | /See:/ 'lifecycleExpiration' smart constructor.
 data LifecycleExpiration = LifecycleExpiration'
     { _leDays :: !(Maybe Int)
@@ -1014,6 +1023,103 @@
         toXML LifecycleExpiration'{..}
           = mconcat ["Days" @= _leDays, "Date" @= _leDate]
 
+-- | /See:/ 'lifecycleRule' smart constructor.
+data LifecycleRule = LifecycleRule'
+    { _lrTransitions                  :: !(Maybe [Transition])
+    , _lrNoncurrentVersionExpiration  :: !(Maybe NoncurrentVersionExpiration)
+    , _lrNoncurrentVersionTransitions :: !(Maybe [NoncurrentVersionTransition])
+    , _lrExpiration                   :: !(Maybe LifecycleExpiration)
+    , _lrId                           :: !(Maybe Text)
+    , _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'
+--
+-- * 'lrPrefix'
+--
+-- * 'lrStatus'
+lifecycleRule
+    :: Text -- ^ 'lrPrefix'
+    -> ExpirationStatus -- ^ 'lrStatus'
+    -> LifecycleRule
+lifecycleRule pPrefix_ pStatus_ =
+    LifecycleRule'
+    { _lrTransitions = Nothing
+    , _lrNoncurrentVersionExpiration = Nothing
+    , _lrNoncurrentVersionTransitions = Nothing
+    , _lrExpiration = Nothing
+    , _lrId = 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});
+
+-- | 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 .@ "Prefix")
+                <*> (x .@ "Status")
+
+instance ToXML LifecycleRule where
+        toXML LifecycleRule'{..}
+          = mconcat
+              [toXML (toXMLList "Transition" <$> _lrTransitions),
+               "NoncurrentVersionExpiration" @=
+                 _lrNoncurrentVersionExpiration,
+               toXML
+                 (toXMLList "NoncurrentVersionTransition" <$>
+                    _lrNoncurrentVersionTransitions),
+               "Expiration" @= _lrExpiration, "ID" @= _lrId,
+               "Prefix" @= _lrPrefix, "Status" @= _lrStatus]
+
 -- | /See:/ 'loggingEnabled' smart constructor.
 data LoggingEnabled = LoggingEnabled'
     { _leTargetBucket :: !(Maybe Text)
@@ -1185,10 +1291,11 @@
           = mconcat ["NoncurrentDays" @= _nveNoncurrentDays]
 
 -- | Container for the transition rule that describes when noncurrent objects
--- transition to the GLACIER storage class. If your bucket is
--- versioning-enabled (or versioning is suspended), you can set this action
--- to request that Amazon S3 transition noncurrent object versions to the
--- GLACIER storage class at a specific period in the object\'s lifetime.
+-- 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'
@@ -2012,102 +2119,6 @@
           = mconcat
               ["Condition" @= _rrCondition,
                "Redirect" @= _rrRedirect]
-
--- | /See:/ 'rule' smart constructor.
-data Rule = Rule'
-    { _rNoncurrentVersionExpiration :: !(Maybe NoncurrentVersionExpiration)
-    , _rTransition                  :: !(Maybe Transition)
-    , _rExpiration                  :: !(Maybe LifecycleExpiration)
-    , _rNoncurrentVersionTransition :: !(Maybe NoncurrentVersionTransition)
-    , _rId                          :: !(Maybe Text)
-    , _rPrefix                      :: !Text
-    , _rStatus                      :: !ExpirationStatus
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Rule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rNoncurrentVersionExpiration'
---
--- * 'rTransition'
---
--- * 'rExpiration'
---
--- * 'rNoncurrentVersionTransition'
---
--- * 'rId'
---
--- * 'rPrefix'
---
--- * 'rStatus'
-rule
-    :: Text -- ^ 'rPrefix'
-    -> ExpirationStatus -- ^ 'rStatus'
-    -> Rule
-rule pPrefix_ pStatus_ =
-    Rule'
-    { _rNoncurrentVersionExpiration = Nothing
-    , _rTransition = Nothing
-    , _rExpiration = Nothing
-    , _rNoncurrentVersionTransition = Nothing
-    , _rId = Nothing
-    , _rPrefix = pPrefix_
-    , _rStatus = pStatus_
-    }
-
--- | Undocumented member.
-rNoncurrentVersionExpiration :: Lens' Rule (Maybe NoncurrentVersionExpiration)
-rNoncurrentVersionExpiration = lens _rNoncurrentVersionExpiration (\ s a -> s{_rNoncurrentVersionExpiration = a});
-
--- | Undocumented member.
-rTransition :: Lens' Rule (Maybe Transition)
-rTransition = lens _rTransition (\ s a -> s{_rTransition = a});
-
--- | Undocumented member.
-rExpiration :: Lens' Rule (Maybe LifecycleExpiration)
-rExpiration = lens _rExpiration (\ s a -> s{_rExpiration = a});
-
--- | Undocumented member.
-rNoncurrentVersionTransition :: Lens' Rule (Maybe NoncurrentVersionTransition)
-rNoncurrentVersionTransition = lens _rNoncurrentVersionTransition (\ s a -> s{_rNoncurrentVersionTransition = a});
-
--- | Unique identifier for the rule. The value cannot be longer than 255
--- characters.
-rId :: Lens' Rule (Maybe Text)
-rId = lens _rId (\ s a -> s{_rId = a});
-
--- | Prefix identifying one or more objects to which the rule applies.
-rPrefix :: Lens' Rule Text
-rPrefix = lens _rPrefix (\ s a -> s{_rPrefix = a});
-
--- | If \'Enabled\', the rule is currently being applied. If \'Disabled\',
--- the rule is not currently being applied.
-rStatus :: Lens' Rule ExpirationStatus
-rStatus = lens _rStatus (\ s a -> s{_rStatus = a});
-
-instance FromXML Rule where
-        parseXML x
-          = Rule' <$>
-              (x .@? "NoncurrentVersionExpiration") <*>
-                (x .@? "Transition")
-                <*> (x .@? "Expiration")
-                <*> (x .@? "NoncurrentVersionTransition")
-                <*> (x .@? "ID")
-                <*> (x .@ "Prefix")
-                <*> (x .@ "Status")
-
-instance ToXML Rule where
-        toXML Rule'{..}
-          = mconcat
-              ["NoncurrentVersionExpiration" @=
-                 _rNoncurrentVersionExpiration,
-               "Transition" @= _rTransition,
-               "Expiration" @= _rExpiration,
-               "NoncurrentVersionTransition" @=
-                 _rNoncurrentVersionTransition,
-               "ID" @= _rId, "Prefix" @= _rPrefix,
-               "Status" @= _rStatus]
 
 -- | Container for object key name prefix and suffix filtering rules.
 --
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
@@ -643,19 +643,22 @@
 data StorageClass
     = ReducedRedundancy
     | Standard
+    | StandardIa
     deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
 
 instance FromText StorageClass where
     parser = takeLowerText >>= \case
         "reduced_redundancy" -> pure ReducedRedundancy
         "standard" -> pure Standard
+        "standard_ia" -> pure StandardIa
         e -> fromTextError $ "Failure parsing StorageClass from value: '" <> e
-           <> "'. Accepted values: REDUCED_REDUNDANCY, STANDARD"
+           <> "'. Accepted values: REDUCED_REDUNDANCY, STANDARD, STANDARD_IA"
 
 instance ToText StorageClass where
     toText = \case
         ReducedRedundancy -> "REDUCED_REDUNDANCY"
         Standard -> "STANDARD"
+        StandardIa -> "STANDARD_IA"
 
 instance Hashable     StorageClass
 instance ToByteString StorageClass
@@ -668,19 +671,22 @@
 instance ToXML StorageClass where
     toXML = toXMLText
 
-data TransitionStorageClass =
-    Glacier
+data TransitionStorageClass
+    = TSCGlacier
+    | TSCStandardIa
     deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
 
 instance FromText TransitionStorageClass where
     parser = takeLowerText >>= \case
-        "glacier" -> pure Glacier
+        "glacier" -> pure TSCGlacier
+        "standard_ia" -> pure TSCStandardIa
         e -> fromTextError $ "Failure parsing TransitionStorageClass from value: '" <> e
-           <> "'. Accepted values: GLACIER"
+           <> "'. Accepted values: GLACIER, STANDARD_IA"
 
 instance ToText TransitionStorageClass where
     toText = \case
-        Glacier -> "GLACIER"
+        TSCGlacier -> "GLACIER"
+        TSCStandardIa -> "STANDARD_IA"
 
 instance Hashable     TransitionStorageClass
 instance ToByteString 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
@@ -201,7 +201,7 @@
                      <*> (pure (fromEnum s)))
 
 instance ToBody UploadPart where
-        toBody = _upBody
+        toBody = toBody . _upBody
 
 instance ToHeaders UploadPart where
         toHeaders UploadPart'{..}
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
@@ -79,21 +79,18 @@
 --         , testDeleteBucketReplication $
 --             deleteBucketReplication
 --
---         , testGetBucketLifecycle $
---             getBucketLifecycle
---
 --         , testListObjectVersions $
 --             listObjectVersions
 --
 --         , testHeadBucket $
 --             headBucket
 --
---         , testPutBucketLifecycle $
---             putBucketLifecycle
---
 --         , testDeleteBucketLifecycle $
 --             deleteBucketLifecycle
 --
+--         , testPutBucketLifecycleConfiguration $
+--             putBucketLifecycleConfiguration
+--
 --         , testCreateMultipartUpload $
 --             createMultipartUpload
 --
@@ -175,6 +172,9 @@
 --         , testGetBucketACL $
 --             getBucketACL
 --
+--         , testGetBucketLifecycleConfiguration $
+--             getBucketLifecycleConfiguration
+--
 --         , testListParts $
 --             listParts
 --
@@ -238,21 +238,18 @@
 --         , testDeleteBucketReplicationResponse $
 --             deleteBucketReplicationResponse
 --
---         , testGetBucketLifecycleResponse $
---             getBucketLifecycleResponse
---
 --         , testListObjectVersionsResponse $
 --             listObjectVersionsResponse
 --
 --         , testHeadBucketResponse $
 --             headBucketResponse
 --
---         , testPutBucketLifecycleResponse $
---             putBucketLifecycleResponse
---
 --         , testDeleteBucketLifecycleResponse $
 --             deleteBucketLifecycleResponse
 --
+--         , testPutBucketLifecycleConfigurationResponse $
+--             putBucketLifecycleConfigurationResponse
+--
 --         , testCreateMultipartUploadResponse $
 --             createMultipartUploadResponse
 --
@@ -334,6 +331,9 @@
 --         , testGetBucketACLResponse $
 --             getBucketACLResponse
 --
+--         , testGetBucketLifecycleConfigurationResponse $
+--             getBucketLifecycleConfigurationResponse
+--
 --         , testListPartsResponse $
 --             listPartsResponse
 --
@@ -428,11 +428,6 @@
     "DeleteBucketReplication"
     "fixture/DeleteBucketReplication.yaml"
 
-testGetBucketLifecycle :: GetBucketLifecycle -> TestTree
-testGetBucketLifecycle = req
-    "GetBucketLifecycle"
-    "fixture/GetBucketLifecycle.yaml"
-
 testListObjectVersions :: ListObjectVersions -> TestTree
 testListObjectVersions = req
     "ListObjectVersions"
@@ -443,16 +438,16 @@
     "HeadBucket"
     "fixture/HeadBucket.yaml"
 
-testPutBucketLifecycle :: PutBucketLifecycle -> TestTree
-testPutBucketLifecycle = req
-    "PutBucketLifecycle"
-    "fixture/PutBucketLifecycle.yaml"
-
 testDeleteBucketLifecycle :: DeleteBucketLifecycle -> TestTree
 testDeleteBucketLifecycle = req
     "DeleteBucketLifecycle"
     "fixture/DeleteBucketLifecycle.yaml"
 
+testPutBucketLifecycleConfiguration :: PutBucketLifecycleConfiguration -> TestTree
+testPutBucketLifecycleConfiguration = req
+    "PutBucketLifecycleConfiguration"
+    "fixture/PutBucketLifecycleConfiguration.yaml"
+
 testCreateMultipartUpload :: CreateMultipartUpload -> TestTree
 testCreateMultipartUpload = req
     "CreateMultipartUpload"
@@ -583,6 +578,11 @@
     "GetBucketACL"
     "fixture/GetBucketACL.yaml"
 
+testGetBucketLifecycleConfiguration :: GetBucketLifecycleConfiguration -> TestTree
+testGetBucketLifecycleConfiguration = req
+    "GetBucketLifecycleConfiguration"
+    "fixture/GetBucketLifecycleConfiguration.yaml"
+
 testListParts :: ListParts -> TestTree
 testListParts = req
     "ListParts"
@@ -712,13 +712,6 @@
     s3
     (Proxy :: Proxy DeleteBucketReplication)
 
-testGetBucketLifecycleResponse :: GetBucketLifecycleResponse -> TestTree
-testGetBucketLifecycleResponse = res
-    "GetBucketLifecycleResponse"
-    "fixture/GetBucketLifecycleResponse.proto"
-    s3
-    (Proxy :: Proxy GetBucketLifecycle)
-
 testListObjectVersionsResponse :: ListObjectVersionsResponse -> TestTree
 testListObjectVersionsResponse = res
     "ListObjectVersionsResponse"
@@ -733,13 +726,6 @@
     s3
     (Proxy :: Proxy HeadBucket)
 
-testPutBucketLifecycleResponse :: PutBucketLifecycleResponse -> TestTree
-testPutBucketLifecycleResponse = res
-    "PutBucketLifecycleResponse"
-    "fixture/PutBucketLifecycleResponse.proto"
-    s3
-    (Proxy :: Proxy PutBucketLifecycle)
-
 testDeleteBucketLifecycleResponse :: DeleteBucketLifecycleResponse -> TestTree
 testDeleteBucketLifecycleResponse = res
     "DeleteBucketLifecycleResponse"
@@ -747,6 +733,13 @@
     s3
     (Proxy :: Proxy DeleteBucketLifecycle)
 
+testPutBucketLifecycleConfigurationResponse :: PutBucketLifecycleConfigurationResponse -> TestTree
+testPutBucketLifecycleConfigurationResponse = res
+    "PutBucketLifecycleConfigurationResponse"
+    "fixture/PutBucketLifecycleConfigurationResponse.proto"
+    s3
+    (Proxy :: Proxy PutBucketLifecycleConfiguration)
+
 testCreateMultipartUploadResponse :: CreateMultipartUploadResponse -> TestTree
 testCreateMultipartUploadResponse = res
     "CreateMultipartUploadResponse"
@@ -928,6 +921,13 @@
     "fixture/GetBucketACLResponse.proto"
     s3
     (Proxy :: Proxy GetBucketACL)
+
+testGetBucketLifecycleConfigurationResponse :: GetBucketLifecycleConfigurationResponse -> TestTree
+testGetBucketLifecycleConfigurationResponse = res
+    "GetBucketLifecycleConfigurationResponse"
+    "fixture/GetBucketLifecycleConfigurationResponse.proto"
+    s3
+    (Proxy :: Proxy GetBucketLifecycleConfiguration)
 
 testListPartsResponse :: ListPartsResponse -> TestTree
 testListPartsResponse = res
