diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.3.5`
+`1.3.6`
 
 
 ## 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.5
+version:               1.3.6
 synopsis:              Amazon Simple Storage Service SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -108,7 +108,7 @@
         , Network.AWS.S3.Types.Sum
 
     build-depends:
-          amazonka-core == 1.3.5.*
+          amazonka-core == 1.3.6.*
         , base          >= 4.7     && < 5
         , lens >= 4.4
         , text >= 1.1
@@ -130,9 +130,9 @@
         , Test.AWS.S3.Internal
 
     build-depends:
-          amazonka-core == 1.3.5.*
-        , amazonka-test == 1.3.5.*
-        , amazonka-s3 == 1.3.5.*
+          amazonka-core == 1.3.6.*
+        , amazonka-test == 1.3.6.*
+        , amazonka-s3 == 1.3.6.*
         , base
         , bytestring
         , lens
diff --git a/fixture/PutObjectACLWithBody.yaml b/fixture/PutObjectACLWithBody.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutObjectACLWithBody.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+path: /bucket-body/key-body
+query: ?acl=
+headers:
+  Authorization: AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=da48913e8c9c160827cf36c4de3d3e414f946dcde4311926a7bbf7a6ef5cdd7a
+  Host: s3.amazonaws.com
+  X-Amz-Date: 20091028T223200Z
+  X-Amz-Content-SHA256: d4c88048f8806fddc4b32ec5901ba6c1f390cb13f65ce695d30da0905d47fc98
+body: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><AccessControlPolicy xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\"><AccessControlList><Grant><Permission>WRITE</Permission></Grant></AccessControlList><Owner><ID>foo-oid</ID></Owner></AccessControlPolicy>"
diff --git a/fixture/PutObjectACLWithHeaders.yaml b/fixture/PutObjectACLWithHeaders.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutObjectACLWithHeaders.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+path: /bucket-headers/key-headers
+query: ?acl=
+headers:
+  Authorization: AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-acl;x-amz-content-sha256;x-amz-date, Signature=1a314ae21378ddf88489174a6f73a72506621bda8016520fa9e8efb24c6be9c2
+  Host: s3.amazonaws.com
+  X-Amz-Date: 20091028T223200Z
+  X-Amz-Content-SHA256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+  X-Amz-ACL: bucket-owner-read
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
@@ -297,9 +297,6 @@
     -- ** Type
     , Type (..)
 
-    -- ** UploadPartRequestServerSideEncryption
-    , UploadPartRequestServerSideEncryption (..)
-
     -- ** AccessControlPolicy
     , AccessControlPolicy
     , accessControlPolicy
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
@@ -87,7 +87,7 @@
 -- | /See:/ 'getBucketLocationResponse' smart constructor.
 data GetBucketLocationResponse = GetBucketLocationResponse'
     { _grsResponseStatus     :: !Int
-    , _grsLocationConstraint :: !Region
+    , _grsLocationConstraint :: !LocationConstraint
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'GetBucketLocationResponse' with the minimum fields required to make a request.
@@ -99,7 +99,7 @@
 -- * 'grsLocationConstraint'
 getBucketLocationResponse
     :: Int -- ^ 'grsResponseStatus'
-    -> Region -- ^ 'grsLocationConstraint'
+    -> LocationConstraint -- ^ 'grsLocationConstraint'
     -> GetBucketLocationResponse
 getBucketLocationResponse pResponseStatus_ pLocationConstraint_ =
     GetBucketLocationResponse'
@@ -112,5 +112,5 @@
 grsResponseStatus = lens _grsResponseStatus (\ s a -> s{_grsResponseStatus = a});
 
 -- | Undocumented member.
-grsLocationConstraint :: Lens' GetBucketLocationResponse Region
+grsLocationConstraint :: Lens' GetBucketLocationResponse LocationConstraint
 grsLocationConstraint = lens _grsLocationConstraint (\ s a -> s{_grsLocationConstraint = 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
@@ -98,9 +98,6 @@
     -- * Type
     , Type (..)
 
-    -- * UploadPartRequestServerSideEncryption
-    , UploadPartRequestServerSideEncryption (..)
-
     -- * AccessControlPolicy
     , AccessControlPolicy
     , accessControlPolicy
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
@@ -454,7 +454,7 @@
 
 -- | /See:/ 'createBucketConfiguration' smart constructor.
 newtype CreateBucketConfiguration = CreateBucketConfiguration'
-    { _cbcLocationConstraint :: Maybe Region
+    { _cbcLocationConstraint :: Maybe LocationConstraint
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'CreateBucketConfiguration' with the minimum fields required to make a request.
@@ -471,7 +471,7 @@
 
 -- | Specifies the region where the bucket will be created. If you don\'t
 -- specify a region, the bucket will be created in US Standard.
-cbcLocationConstraint :: Lens' CreateBucketConfiguration (Maybe Region)
+cbcLocationConstraint :: Lens' CreateBucketConfiguration (Maybe LocationConstraint)
 cbcLocationConstraint = lens _cbcLocationConstraint (\ s a -> s{_cbcLocationConstraint = a});
 
 instance ToXML CreateBucketConfiguration where
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
@@ -732,27 +732,3 @@
 
 instance ToXML Type where
     toXML = toXMLText
-
--- | The Server-side encryption algorithm used when storing this object in S3
--- (e.g., AES256).
-data UploadPartRequestServerSideEncryption =
-    UPRSSEAES256
-    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
-
-instance FromText UploadPartRequestServerSideEncryption where
-    parser = takeLowerText >>= \case
-        "aes256" -> pure UPRSSEAES256
-        e -> fromTextError $ "Failure parsing UploadPartRequestServerSideEncryption from value: '" <> e
-           <> "'. Accepted values: AES256"
-
-instance ToText UploadPartRequestServerSideEncryption where
-    toText = \case
-        UPRSSEAES256 -> "AES256"
-
-instance Hashable     UploadPartRequestServerSideEncryption
-instance ToByteString UploadPartRequestServerSideEncryption
-instance ToQuery      UploadPartRequestServerSideEncryption
-instance ToHeader     UploadPartRequestServerSideEncryption
-
-instance ToXML UploadPartRequestServerSideEncryption where
-    toXML = toXMLText
diff --git a/gen/Network/AWS/S3/UploadPart.hs b/gen/Network/AWS/S3/UploadPart.hs
--- a/gen/Network/AWS/S3/UploadPart.hs
+++ b/gen/Network/AWS/S3/UploadPart.hs
@@ -39,7 +39,6 @@
     , upRequestPayer
     , upSSECustomerKeyMD5
     , upContentMD5
-    , upServerSideEncryption
     , upBucket
     , upKey
     , upPartNumber
@@ -73,7 +72,6 @@
     , _upRequestPayer         :: !(Maybe RequestPayer)
     , _upSSECustomerKeyMD5    :: !(Maybe Text)
     , _upContentMD5           :: !(Maybe Text)
-    , _upServerSideEncryption :: !(Maybe UploadPartRequestServerSideEncryption)
     , _upBucket               :: !BucketName
     , _upKey                  :: !ObjectKey
     , _upPartNumber           :: !Int
@@ -97,8 +95,6 @@
 --
 -- * 'upContentMD5'
 --
--- * 'upServerSideEncryption'
---
 -- * 'upBucket'
 --
 -- * 'upKey'
@@ -123,7 +119,6 @@
     , _upRequestPayer = Nothing
     , _upSSECustomerKeyMD5 = Nothing
     , _upContentMD5 = Nothing
-    , _upServerSideEncryption = Nothing
     , _upBucket = pBucket_
     , _upKey = pKey_
     , _upPartNumber = pPartNumber_
@@ -166,10 +161,6 @@
 upContentMD5 = lens _upContentMD5 (\ s a -> s{_upContentMD5 = a});
 
 -- | Undocumented member.
-upServerSideEncryption :: Lens' UploadPart (Maybe UploadPartRequestServerSideEncryption)
-upServerSideEncryption = lens _upServerSideEncryption (\ s a -> s{_upServerSideEncryption = a});
-
--- | Undocumented member.
 upBucket :: Lens' UploadPart BucketName
 upBucket = lens _upBucket (\ s a -> s{_upBucket = a});
 
@@ -223,9 +214,7 @@
                "x-amz-request-payer" =# _upRequestPayer,
                "x-amz-server-side-encryption-customer-key-MD5" =#
                  _upSSECustomerKeyMD5,
-               "Content-MD5" =# _upContentMD5,
-               "x-amz-server-side-encryption" =#
-                 _upServerSideEncryption]
+               "Content-MD5" =# _upContentMD5]
 
 instance ToPath UploadPart where
         toPath UploadPart'{..}
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
@@ -3,7 +3,9 @@
 {-# LANGUAGE DeriveGeneric              #-}
 {-# LANGUAGE FlexibleContexts           #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase                 #-}
 {-# LANGUAGE MultiWayIf                 #-}
+{-# LANGUAGE OverloadedStrings          #-}
 {-# LANGUAGE RankNTypes                 #-}
 
 -- |
@@ -15,12 +17,18 @@
 -- Portability : non-portable (GHC extensions)
 --
 module Network.AWS.S3.Internal
-    ( Region          (..)
-    , BucketName      (..)
-    , ETag            (..)
-    , ObjectVersionId (..)
+    ( Region             (..)
+    , BucketName         (..)
+    , ETag               (..)
+    , ObjectVersionId    (..)
+
+    -- * Bucket Location
+    , LocationConstraint (..)
+    , _LocationConstraint
+
+    -- * Object Key
     , Delimiter
-    , ObjectKey       (..)
+    , ObjectKey          (..)
     , _ObjectKey
     , keyPrefix
     , keyName
@@ -92,6 +100,42 @@
         , ToQuery
         , ToLog
         )
+
+newtype LocationConstraint = LocationConstraint { constraintRegion :: Region }
+    deriving
+        ( Eq
+        , Ord
+        , Read
+        , Show
+        , Data
+        , Typeable
+        , Generic
+        , ToText
+        , ToByteString
+        , ToLog
+        )
+
+_LocationConstraint :: Iso' LocationConstraint Region
+_LocationConstraint = iso constraintRegion LocationConstraint
+
+instance FromText LocationConstraint where
+    parser = LocationConstraint <$> (parser <|> go)
+      where
+        go = takeLowerText >>= \case
+            ""   -> pure NorthVirginia
+            "eu" -> pure Ireland
+            e    -> fromTextError $
+                "Failure parsing LocationConstraint from " <> e
+
+instance FromXML LocationConstraint where
+    parseXML = \case
+        [] -> pure (LocationConstraint NorthVirginia)
+        ns -> parseXMLText "LocationConstraint" ns
+
+instance ToXML LocationConstraint where
+    toXML = \case
+        LocationConstraint NorthVirginia -> XNull
+        LocationConstraint r             -> toXMLText r
 
 newtype ObjectKey = ObjectKey Text
     deriving
diff --git a/test/Test/AWS/S3.hs b/test/Test/AWS/S3.hs
--- a/test/Test/AWS/S3.hs
+++ b/test/Test/AWS/S3.hs
@@ -20,7 +20,6 @@
 import           Test.AWS.Gen.S3
 import           Test.AWS.Prelude
 import           Test.AWS.S3.Internal
-import           Test.Tasty
 
 tests :: [TestTree]
 tests =
@@ -39,6 +38,18 @@
 
         , testListMultipartUploads $
             listMultipartUploads "foo-bucket" & lmuMaxUploads ?~ 3
+
+        , testPutObjectACLWithBody $
+            putObjectACL "bucket-body" "key-body"
+                & poaAccessControlPolicy ?~
+                    ( accessControlPolicy
+                        & acpGrants .~ [grant & gPermission ?~ PWrite]
+                        & acpOwner  ?~ (owner & oId         ?~ "foo-oid")
+                    )
+
+        , testPutObjectACLWithHeaders $
+            putObjectACL "bucket-headers" "key-headers"
+                & poaACL ?~ OBucketOwnerRead
         ]
 
     , testGroup "response"
diff --git a/test/Test/AWS/S3/Internal.hs b/test/Test/AWS/S3/Internal.hs
--- a/test/Test/AWS/S3/Internal.hs
+++ b/test/Test/AWS/S3/Internal.hs
@@ -13,8 +13,10 @@
 
 module Test.AWS.S3.Internal where
 
+import           Data.Time
 import           Network.AWS.Prelude
 import           Network.AWS.S3
+import           Test.AWS.Fixture
 import           Test.AWS.Prelude
 import           Test.Tasty
 import           Test.Tasty.HUnit
@@ -43,3 +45,13 @@
   where
     enc :: ObjectKey -> ByteString
     enc = toBS . escapePath . rawPath
+
+testPutObjectACLWithBody :: PutObjectACL -> TestTree
+testPutObjectACLWithBody = req
+    "PutObjectACLWithBody"
+    "fixture/PutObjectACLWithBody.yaml"
+
+testPutObjectACLWithHeaders :: PutObjectACL -> TestTree
+testPutObjectACLWithHeaders = req
+    "PutObjectACLWithHeaders"
+    "fixture/PutObjectACLWithHeaders.yaml"
