diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.2.0.1`
+`1.2.0.2`
 
 
 ## Description
diff --git a/amazonka-s3.cabal b/amazonka-s3.cabal
--- a/amazonka-s3.cabal
+++ b/amazonka-s3.cabal
@@ -1,7 +1,8 @@
 name:                  amazonka-s3
-version:               1.2.0.1
+version:               1.2.0.2
 synopsis:              Amazon Simple Storage Service SDK.
 homepage:              https://github.com/brendanhay/amazonka
+bug-reports:           https://github.com/brendanhay/amazonka/issues
 license:               OtherLicense
 license-file:          LICENSE
 author:                Brendan Hay
@@ -9,9 +10,8 @@
 copyright:             Copyright (c) 2013-2015 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
-extra-source-files:    README.md
 cabal-version:         >= 1.10
-
+extra-source-files:    README.md fixture/*.yaml fixture/*.proto
 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
@@ -121,8 +121,9 @@
 
     ghc-options:       -Wall -threaded
 
-    -- This is not comprehensive if modules have manually been added.
-    -- It exists to ensure cabal 'somewhat' detects test module changes.
+    -- This section is encoded by the template and any modules added by
+    -- hand outside these namespaces will not correctly be added to the
+    -- distribution package.
     other-modules:
           Test.AWS.S3
         , Test.AWS.Gen.S3
diff --git a/fixture/AbortMultipartUpload.yaml b/fixture/AbortMultipartUpload.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AbortMultipartUpload.yaml
diff --git a/fixture/AbortMultipartUploadResponse.proto b/fixture/AbortMultipartUploadResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AbortMultipartUploadResponse.proto
diff --git a/fixture/CompleteMultipartUpload.yaml b/fixture/CompleteMultipartUpload.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CompleteMultipartUpload.yaml
diff --git a/fixture/CompleteMultipartUploadResponse.proto b/fixture/CompleteMultipartUploadResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CompleteMultipartUploadResponse.proto
diff --git a/fixture/CopyObject.yaml b/fixture/CopyObject.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CopyObject.yaml
diff --git a/fixture/CopyObjectResponse.proto b/fixture/CopyObjectResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CopyObjectResponse.proto
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CopyObjectResult>
+  <LastModified>2009-10-28T22:32:00</LastModified>
+  <ETag>"9b2cf535f27731c974343645a3985328"</ETag>
+</CopyObjectResult>
diff --git a/fixture/CreateBucket.yaml b/fixture/CreateBucket.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBucket.yaml
diff --git a/fixture/CreateBucketResponse.proto b/fixture/CreateBucketResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBucketResponse.proto
diff --git a/fixture/CreateMultipartUpload.yaml b/fixture/CreateMultipartUpload.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateMultipartUpload.yaml
diff --git a/fixture/CreateMultipartUploadResponse.proto b/fixture/CreateMultipartUploadResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateMultipartUploadResponse.proto
diff --git a/fixture/DeleteBucket.yaml b/fixture/DeleteBucket.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucket.yaml
diff --git a/fixture/DeleteBucketCORS.yaml b/fixture/DeleteBucketCORS.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucketCORS.yaml
diff --git a/fixture/DeleteBucketCORSResponse.proto b/fixture/DeleteBucketCORSResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucketCORSResponse.proto
diff --git a/fixture/DeleteBucketLifecycle.yaml b/fixture/DeleteBucketLifecycle.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucketLifecycle.yaml
diff --git a/fixture/DeleteBucketLifecycleResponse.proto b/fixture/DeleteBucketLifecycleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucketLifecycleResponse.proto
diff --git a/fixture/DeleteBucketPolicy.yaml b/fixture/DeleteBucketPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucketPolicy.yaml
diff --git a/fixture/DeleteBucketPolicyResponse.proto b/fixture/DeleteBucketPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucketPolicyResponse.proto
diff --git a/fixture/DeleteBucketReplication.yaml b/fixture/DeleteBucketReplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucketReplication.yaml
diff --git a/fixture/DeleteBucketReplicationResponse.proto b/fixture/DeleteBucketReplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucketReplicationResponse.proto
diff --git a/fixture/DeleteBucketResponse.proto b/fixture/DeleteBucketResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucketResponse.proto
diff --git a/fixture/DeleteBucketTagging.yaml b/fixture/DeleteBucketTagging.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucketTagging.yaml
diff --git a/fixture/DeleteBucketTaggingResponse.proto b/fixture/DeleteBucketTaggingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucketTaggingResponse.proto
diff --git a/fixture/DeleteBucketWebsite.yaml b/fixture/DeleteBucketWebsite.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucketWebsite.yaml
diff --git a/fixture/DeleteBucketWebsiteResponse.proto b/fixture/DeleteBucketWebsiteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucketWebsiteResponse.proto
diff --git a/fixture/DeleteObject.yaml b/fixture/DeleteObject.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteObject.yaml
diff --git a/fixture/DeleteObjectResponse.proto b/fixture/DeleteObjectResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteObjectResponse.proto
diff --git a/fixture/DeleteObjects.yaml b/fixture/DeleteObjects.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteObjects.yaml
@@ -0,0 +1,11 @@
+---
+method: POST
+path:   /bucketname
+query:  ?delete=
+headers:
+  Host: s3.amazonaws.com
+  Authorization: AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=content-md5;host;x-amz-content-sha256;x-amz-date, Signature=8395d88802592a49a30ca19ee1e0a819a663542eddc9bfe6482e314f6ce09b58
+  Content-MD5: Baa58yLrqn+8X+KF6MwPug==
+  X-Amz-Content-SHA256: 3be5f080da935ef26665db14539913f2a45d0219d47414df168777f155b30070
+  X-Amz-Date: 20091028T223200Z
+body: <?xml version="1.0" encoding="UTF-8"?><Delete xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Object><Key>sample1.text</Key></Object><Object><Key>sample2.text</Key></Object></Delete>
diff --git a/fixture/DeleteObjectsResponse.proto b/fixture/DeleteObjectsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteObjectsResponse.proto
diff --git a/fixture/GetBucketACL.yaml b/fixture/GetBucketACL.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketACL.yaml
diff --git a/fixture/GetBucketACLResponse.proto b/fixture/GetBucketACLResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketACLResponse.proto
diff --git a/fixture/GetBucketCORS.yaml b/fixture/GetBucketCORS.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketCORS.yaml
diff --git a/fixture/GetBucketCORSResponse.proto b/fixture/GetBucketCORSResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketCORSResponse.proto
diff --git a/fixture/GetBucketLifecycle.yaml b/fixture/GetBucketLifecycle.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketLifecycle.yaml
diff --git a/fixture/GetBucketLifecycleResponse.proto b/fixture/GetBucketLifecycleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketLifecycleResponse.proto
diff --git a/fixture/GetBucketLocation.yaml b/fixture/GetBucketLocation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketLocation.yaml
diff --git a/fixture/GetBucketLocationResponse.proto b/fixture/GetBucketLocationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketLocationResponse.proto
diff --git a/fixture/GetBucketLogging.yaml b/fixture/GetBucketLogging.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketLogging.yaml
diff --git a/fixture/GetBucketLoggingResponse.proto b/fixture/GetBucketLoggingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketLoggingResponse.proto
diff --git a/fixture/GetBucketNotificationConfiguration.yaml b/fixture/GetBucketNotificationConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketNotificationConfiguration.yaml
diff --git a/fixture/GetBucketNotificationConfigurationResponse.proto b/fixture/GetBucketNotificationConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketNotificationConfigurationResponse.proto
diff --git a/fixture/GetBucketPolicy.yaml b/fixture/GetBucketPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketPolicy.yaml
diff --git a/fixture/GetBucketPolicyResponse.proto b/fixture/GetBucketPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketPolicyResponse.proto
@@ -0,0 +1,15 @@
+{
+"Version":"2008-10-17",
+"Id":"aaaa-bbbb-cccc-dddd",
+"Statement" : [
+    {
+        "Effect":"Deny",
+        "Sid":"1",
+        "Principal" : {
+            "AWS":["111122223333","444455556666"]
+        },
+        "Action":["s3:*"],
+        "Resource":"arn:aws:s3:::bucket/*"
+    }
+ ]
+}
diff --git a/fixture/GetBucketReplication.yaml b/fixture/GetBucketReplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketReplication.yaml
diff --git a/fixture/GetBucketReplicationResponse.proto b/fixture/GetBucketReplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketReplicationResponse.proto
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
+  <Rule>
+    <ID>rule1</ID>
+    <Status>Enabled</Status>
+    <Prefix></Prefix>
+    <Destination>
+      <Bucket>arn:aws:s3:::exampletargetbucket</Bucket>
+    </Destination>
+  </Rule>
+  <Role>arn:aws:iam::35667example:role/CrossRegionReplicationRoleForS3</Role>
+</ReplicationConfiguration>
diff --git a/fixture/GetBucketRequestPayment.yaml b/fixture/GetBucketRequestPayment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketRequestPayment.yaml
diff --git a/fixture/GetBucketRequestPaymentResponse.proto b/fixture/GetBucketRequestPaymentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketRequestPaymentResponse.proto
diff --git a/fixture/GetBucketTagging.yaml b/fixture/GetBucketTagging.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketTagging.yaml
diff --git a/fixture/GetBucketTaggingResponse.proto b/fixture/GetBucketTaggingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketTaggingResponse.proto
diff --git a/fixture/GetBucketVersioning.yaml b/fixture/GetBucketVersioning.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketVersioning.yaml
diff --git a/fixture/GetBucketVersioningResponse.proto b/fixture/GetBucketVersioningResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketVersioningResponse.proto
diff --git a/fixture/GetBucketWebsite.yaml b/fixture/GetBucketWebsite.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketWebsite.yaml
diff --git a/fixture/GetBucketWebsiteResponse.proto b/fixture/GetBucketWebsiteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketWebsiteResponse.proto
diff --git a/fixture/GetObject.yaml b/fixture/GetObject.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetObject.yaml
diff --git a/fixture/GetObjectACL.yaml b/fixture/GetObjectACL.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetObjectACL.yaml
diff --git a/fixture/GetObjectACLResponse.proto b/fixture/GetObjectACLResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetObjectACLResponse.proto
diff --git a/fixture/GetObjectResponse.proto b/fixture/GetObjectResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetObjectResponse.proto
diff --git a/fixture/GetObjectTorrent.yaml b/fixture/GetObjectTorrent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetObjectTorrent.yaml
diff --git a/fixture/GetObjectTorrentResponse.proto b/fixture/GetObjectTorrentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetObjectTorrentResponse.proto
diff --git a/fixture/HeadBucket.yaml b/fixture/HeadBucket.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/HeadBucket.yaml
diff --git a/fixture/HeadBucketResponse.proto b/fixture/HeadBucketResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/HeadBucketResponse.proto
diff --git a/fixture/HeadObject.yaml b/fixture/HeadObject.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/HeadObject.yaml
diff --git a/fixture/HeadObjectResponse.proto b/fixture/HeadObjectResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/HeadObjectResponse.proto
diff --git a/fixture/ListBuckets.yaml b/fixture/ListBuckets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListBuckets.yaml
diff --git a/fixture/ListBucketsResponse.proto b/fixture/ListBucketsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListBucketsResponse.proto
diff --git a/fixture/ListMultipartUploads.yaml b/fixture/ListMultipartUploads.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListMultipartUploads.yaml
@@ -0,0 +1,9 @@
+---
+method: GET
+path: /foo-bucket
+query: ?max-uploads=3&uploads=
+headers:
+  Authorization: AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=6e58e657cbe9bbd48775a6a3d471748505159f4e6cc23affb6aeb784057d7d48
+  Host: s3.amazonaws.com
+  X-Amz-Content-SHA256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+  X-Amz-Date: 20091028T223200Z
diff --git a/fixture/ListMultipartUploadsResponse.proto b/fixture/ListMultipartUploadsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListMultipartUploadsResponse.proto
diff --git a/fixture/ListObjectVersions.yaml b/fixture/ListObjectVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListObjectVersions.yaml
diff --git a/fixture/ListObjectVersionsResponse.proto b/fixture/ListObjectVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListObjectVersionsResponse.proto
diff --git a/fixture/ListObjects.yaml b/fixture/ListObjects.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListObjects.yaml
diff --git a/fixture/ListObjectsResponse.proto b/fixture/ListObjectsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListObjectsResponse.proto
diff --git a/fixture/ListParts.yaml b/fixture/ListParts.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListParts.yaml
diff --git a/fixture/ListPartsResponse.proto b/fixture/ListPartsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListPartsResponse.proto
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ListPartsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
+  <Bucket>example-bucket</Bucket>
+  <Key>example-object</Key>
+  <UploadId>XXBsb2FkIElEIGZvciBlbHZpbmcncyVcdS1tb3ZpZS5tMnRzEEEwbG9hZA</UploadId>
+  <Initiator>
+      <ID>arn:aws:iam::111122223333:user/some-user-11116a31-17b5-4fb7-9df5-b288870f11xx</ID>
+      <DisplayName>umat-user-11116a31-17b5-4fb7-9df5-b288870f11xx</DisplayName>
+  </Initiator>
+  <Owner>
+    <ID>75aa57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a</ID>
+    <DisplayName>someName</DisplayName>
+  </Owner>
+  <StorageClass>STANDARD</StorageClass>
+  <PartNumberMarker>1</PartNumberMarker>
+  <NextPartNumberMarker>3</NextPartNumberMarker>
+  <MaxParts>2</MaxParts>
+  <IsTruncated>true</IsTruncated>
+  <Part>
+    <PartNumber>2</PartNumber>
+    <LastModified>2010-11-10T20:48:34.000Z</LastModified>
+    <ETag>"7778aef83f66abc1fa1e8477f296d394"</ETag>
+    <Size>10485760</Size>
+  </Part>
+  <Part>
+    <PartNumber>3</PartNumber>
+    <LastModified>2010-11-10T20:48:33.000Z</LastModified>
+    <ETag>"aaaa18db4cc2f85cedef654fccc4a4x8"</ETag>
+    <Size>10485760</Size>
+  </Part>
+</ListPartsResult>
diff --git a/fixture/PutBucketACL.yaml b/fixture/PutBucketACL.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketACL.yaml
diff --git a/fixture/PutBucketACLResponse.proto b/fixture/PutBucketACLResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketACLResponse.proto
diff --git a/fixture/PutBucketCORS.yaml b/fixture/PutBucketCORS.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketCORS.yaml
diff --git a/fixture/PutBucketCORSResponse.proto b/fixture/PutBucketCORSResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketCORSResponse.proto
diff --git a/fixture/PutBucketLifecycle.yaml b/fixture/PutBucketLifecycle.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketLifecycle.yaml
diff --git a/fixture/PutBucketLifecycleResponse.proto b/fixture/PutBucketLifecycleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketLifecycleResponse.proto
diff --git a/fixture/PutBucketLogging.yaml b/fixture/PutBucketLogging.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketLogging.yaml
diff --git a/fixture/PutBucketLoggingResponse.proto b/fixture/PutBucketLoggingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketLoggingResponse.proto
diff --git a/fixture/PutBucketNotificationConfiguration.yaml b/fixture/PutBucketNotificationConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketNotificationConfiguration.yaml
diff --git a/fixture/PutBucketNotificationConfigurationResponse.proto b/fixture/PutBucketNotificationConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketNotificationConfigurationResponse.proto
diff --git a/fixture/PutBucketPolicy.yaml b/fixture/PutBucketPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketPolicy.yaml
diff --git a/fixture/PutBucketPolicyResponse.proto b/fixture/PutBucketPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketPolicyResponse.proto
diff --git a/fixture/PutBucketReplication.yaml b/fixture/PutBucketReplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketReplication.yaml
diff --git a/fixture/PutBucketReplicationResponse.proto b/fixture/PutBucketReplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketReplicationResponse.proto
diff --git a/fixture/PutBucketRequestPayment.yaml b/fixture/PutBucketRequestPayment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketRequestPayment.yaml
diff --git a/fixture/PutBucketRequestPaymentResponse.proto b/fixture/PutBucketRequestPaymentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketRequestPaymentResponse.proto
diff --git a/fixture/PutBucketTagging.yaml b/fixture/PutBucketTagging.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketTagging.yaml
diff --git a/fixture/PutBucketTaggingResponse.proto b/fixture/PutBucketTaggingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketTaggingResponse.proto
diff --git a/fixture/PutBucketVersioning.yaml b/fixture/PutBucketVersioning.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketVersioning.yaml
diff --git a/fixture/PutBucketVersioningResponse.proto b/fixture/PutBucketVersioningResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketVersioningResponse.proto
diff --git a/fixture/PutBucketWebsite.yaml b/fixture/PutBucketWebsite.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketWebsite.yaml
diff --git a/fixture/PutBucketWebsiteResponse.proto b/fixture/PutBucketWebsiteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketWebsiteResponse.proto
diff --git a/fixture/PutObject.yaml b/fixture/PutObject.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutObject.yaml
diff --git a/fixture/PutObjectACL.yaml b/fixture/PutObjectACL.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutObjectACL.yaml
diff --git a/fixture/PutObjectACLResponse.proto b/fixture/PutObjectACLResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutObjectACLResponse.proto
diff --git a/fixture/PutObjectResponse.proto b/fixture/PutObjectResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutObjectResponse.proto
diff --git a/fixture/RestoreObject.yaml b/fixture/RestoreObject.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RestoreObject.yaml
diff --git a/fixture/RestoreObjectResponse.proto b/fixture/RestoreObjectResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RestoreObjectResponse.proto
diff --git a/fixture/UploadPart.yaml b/fixture/UploadPart.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UploadPart.yaml
diff --git a/fixture/UploadPartCopy.yaml b/fixture/UploadPartCopy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UploadPartCopy.yaml
diff --git a/fixture/UploadPartCopyResponse.proto b/fixture/UploadPartCopyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UploadPartCopyResponse.proto
diff --git a/fixture/UploadPartResponse.proto b/fixture/UploadPartResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UploadPartResponse.proto
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
@@ -351,601 +351,601 @@
 testPutBucketRequestPayment :: PutBucketRequestPayment -> TestTree
 testPutBucketRequestPayment = req
     "PutBucketRequestPayment"
-    "fixture/PutBucketRequestPayment"
+    "fixture/PutBucketRequestPayment.yaml"
 
 testPutBucketLogging :: PutBucketLogging -> TestTree
 testPutBucketLogging = req
     "PutBucketLogging"
-    "fixture/PutBucketLogging"
+    "fixture/PutBucketLogging.yaml"
 
 testDeleteObject :: DeleteObject -> TestTree
 testDeleteObject = req
     "DeleteObject"
-    "fixture/DeleteObject"
+    "fixture/DeleteObject.yaml"
 
 testDeleteBucket :: DeleteBucket -> TestTree
 testDeleteBucket = req
     "DeleteBucket"
-    "fixture/DeleteBucket"
+    "fixture/DeleteBucket.yaml"
 
 testListBuckets :: ListBuckets -> TestTree
 testListBuckets = req
     "ListBuckets"
-    "fixture/ListBuckets"
+    "fixture/ListBuckets.yaml"
 
 testCreateBucket :: CreateBucket -> TestTree
 testCreateBucket = req
     "CreateBucket"
-    "fixture/CreateBucket"
+    "fixture/CreateBucket.yaml"
 
 testPutBucketTagging :: PutBucketTagging -> TestTree
 testPutBucketTagging = req
     "PutBucketTagging"
-    "fixture/PutBucketTagging"
+    "fixture/PutBucketTagging.yaml"
 
 testDeleteBucketTagging :: DeleteBucketTagging -> TestTree
 testDeleteBucketTagging = req
     "DeleteBucketTagging"
-    "fixture/DeleteBucketTagging"
+    "fixture/DeleteBucketTagging.yaml"
 
 testPutObjectACL :: PutObjectACL -> TestTree
 testPutObjectACL = req
     "PutObjectACL"
-    "fixture/PutObjectACL"
+    "fixture/PutObjectACL.yaml"
 
 testGetBucketNotificationConfiguration :: GetBucketNotificationConfiguration -> TestTree
 testGetBucketNotificationConfiguration = req
     "GetBucketNotificationConfiguration"
-    "fixture/GetBucketNotificationConfiguration"
+    "fixture/GetBucketNotificationConfiguration.yaml"
 
 testGetBucketLocation :: GetBucketLocation -> TestTree
 testGetBucketLocation = req
     "GetBucketLocation"
-    "fixture/GetBucketLocation"
+    "fixture/GetBucketLocation.yaml"
 
 testPutBucketReplication :: PutBucketReplication -> TestTree
 testPutBucketReplication = req
     "PutBucketReplication"
-    "fixture/PutBucketReplication"
+    "fixture/PutBucketReplication.yaml"
 
 testGetBucketWebsite :: GetBucketWebsite -> TestTree
 testGetBucketWebsite = req
     "GetBucketWebsite"
-    "fixture/GetBucketWebsite"
+    "fixture/GetBucketWebsite.yaml"
 
 testGetObject :: GetObject -> TestTree
 testGetObject = req
     "GetObject"
-    "fixture/GetObject"
+    "fixture/GetObject.yaml"
 
 testDeleteBucketReplication :: DeleteBucketReplication -> TestTree
 testDeleteBucketReplication = req
     "DeleteBucketReplication"
-    "fixture/DeleteBucketReplication"
+    "fixture/DeleteBucketReplication.yaml"
 
 testGetBucketRequestPayment :: GetBucketRequestPayment -> TestTree
 testGetBucketRequestPayment = req
     "GetBucketRequestPayment"
-    "fixture/GetBucketRequestPayment"
+    "fixture/GetBucketRequestPayment.yaml"
 
 testListObjectVersions :: ListObjectVersions -> TestTree
 testListObjectVersions = req
     "ListObjectVersions"
-    "fixture/ListObjectVersions"
+    "fixture/ListObjectVersions.yaml"
 
 testGetBucketLifecycle :: GetBucketLifecycle -> TestTree
 testGetBucketLifecycle = req
     "GetBucketLifecycle"
-    "fixture/GetBucketLifecycle"
+    "fixture/GetBucketLifecycle.yaml"
 
 testHeadBucket :: HeadBucket -> TestTree
 testHeadBucket = req
     "HeadBucket"
-    "fixture/HeadBucket"
+    "fixture/HeadBucket.yaml"
 
 testPutBucketLifecycle :: PutBucketLifecycle -> TestTree
 testPutBucketLifecycle = req
     "PutBucketLifecycle"
-    "fixture/PutBucketLifecycle"
+    "fixture/PutBucketLifecycle.yaml"
 
 testCreateMultipartUpload :: CreateMultipartUpload -> TestTree
 testCreateMultipartUpload = req
     "CreateMultipartUpload"
-    "fixture/CreateMultipartUpload"
+    "fixture/CreateMultipartUpload.yaml"
 
 testDeleteBucketLifecycle :: DeleteBucketLifecycle -> TestTree
 testDeleteBucketLifecycle = req
     "DeleteBucketLifecycle"
-    "fixture/DeleteBucketLifecycle"
+    "fixture/DeleteBucketLifecycle.yaml"
 
 testGetBucketReplication :: GetBucketReplication -> TestTree
 testGetBucketReplication = req
     "GetBucketReplication"
-    "fixture/GetBucketReplication"
+    "fixture/GetBucketReplication.yaml"
 
 testPutBucketWebsite :: PutBucketWebsite -> TestTree
 testPutBucketWebsite = req
     "PutBucketWebsite"
-    "fixture/PutBucketWebsite"
+    "fixture/PutBucketWebsite.yaml"
 
 testCompleteMultipartUpload :: CompleteMultipartUpload -> TestTree
 testCompleteMultipartUpload = req
     "CompleteMultipartUpload"
-    "fixture/CompleteMultipartUpload"
+    "fixture/CompleteMultipartUpload.yaml"
 
 testListMultipartUploads :: ListMultipartUploads -> TestTree
 testListMultipartUploads = req
     "ListMultipartUploads"
-    "fixture/ListMultipartUploads"
+    "fixture/ListMultipartUploads.yaml"
 
 testDeleteBucketWebsite :: DeleteBucketWebsite -> TestTree
 testDeleteBucketWebsite = req
     "DeleteBucketWebsite"
-    "fixture/DeleteBucketWebsite"
+    "fixture/DeleteBucketWebsite.yaml"
 
 testListObjects :: ListObjects -> TestTree
 testListObjects = req
     "ListObjects"
-    "fixture/ListObjects"
+    "fixture/ListObjects.yaml"
 
 testDeleteObjects :: DeleteObjects -> TestTree
 testDeleteObjects = req
     "DeleteObjects"
-    "fixture/DeleteObjects"
+    "fixture/DeleteObjects.yaml"
 
 testPutBucketPolicy :: PutBucketPolicy -> TestTree
 testPutBucketPolicy = req
     "PutBucketPolicy"
-    "fixture/PutBucketPolicy"
+    "fixture/PutBucketPolicy.yaml"
 
 testDeleteBucketPolicy :: DeleteBucketPolicy -> TestTree
 testDeleteBucketPolicy = req
     "DeleteBucketPolicy"
-    "fixture/DeleteBucketPolicy"
+    "fixture/DeleteBucketPolicy.yaml"
 
 testAbortMultipartUpload :: AbortMultipartUpload -> TestTree
 testAbortMultipartUpload = req
     "AbortMultipartUpload"
-    "fixture/AbortMultipartUpload"
+    "fixture/AbortMultipartUpload.yaml"
 
 testGetObjectTorrent :: GetObjectTorrent -> TestTree
 testGetObjectTorrent = req
     "GetObjectTorrent"
-    "fixture/GetObjectTorrent"
+    "fixture/GetObjectTorrent.yaml"
 
 testPutBucketCORS :: PutBucketCORS -> TestTree
 testPutBucketCORS = req
     "PutBucketCORS"
-    "fixture/PutBucketCORS"
+    "fixture/PutBucketCORS.yaml"
 
 testDeleteBucketCORS :: DeleteBucketCORS -> TestTree
 testDeleteBucketCORS = req
     "DeleteBucketCORS"
-    "fixture/DeleteBucketCORS"
+    "fixture/DeleteBucketCORS.yaml"
 
 testGetBucketVersioning :: GetBucketVersioning -> TestTree
 testGetBucketVersioning = req
     "GetBucketVersioning"
-    "fixture/GetBucketVersioning"
+    "fixture/GetBucketVersioning.yaml"
 
 testPutBucketNotificationConfiguration :: PutBucketNotificationConfiguration -> TestTree
 testPutBucketNotificationConfiguration = req
     "PutBucketNotificationConfiguration"
-    "fixture/PutBucketNotificationConfiguration"
+    "fixture/PutBucketNotificationConfiguration.yaml"
 
 testGetBucketTagging :: GetBucketTagging -> TestTree
 testGetBucketTagging = req
     "GetBucketTagging"
-    "fixture/GetBucketTagging"
+    "fixture/GetBucketTagging.yaml"
 
 testHeadObject :: HeadObject -> TestTree
 testHeadObject = req
     "HeadObject"
-    "fixture/HeadObject"
+    "fixture/HeadObject.yaml"
 
 testPutBucketVersioning :: PutBucketVersioning -> TestTree
 testPutBucketVersioning = req
     "PutBucketVersioning"
-    "fixture/PutBucketVersioning"
+    "fixture/PutBucketVersioning.yaml"
 
 testGetObjectACL :: GetObjectACL -> TestTree
 testGetObjectACL = req
     "GetObjectACL"
-    "fixture/GetObjectACL"
+    "fixture/GetObjectACL.yaml"
 
 testRestoreObject :: RestoreObject -> TestTree
 testRestoreObject = req
     "RestoreObject"
-    "fixture/RestoreObject"
+    "fixture/RestoreObject.yaml"
 
 testGetBucketCORS :: GetBucketCORS -> TestTree
 testGetBucketCORS = req
     "GetBucketCORS"
-    "fixture/GetBucketCORS"
+    "fixture/GetBucketCORS.yaml"
 
 testCopyObject :: CopyObject -> TestTree
 testCopyObject = req
     "CopyObject"
-    "fixture/CopyObject"
+    "fixture/CopyObject.yaml"
 
 testGetBucketPolicy :: GetBucketPolicy -> TestTree
 testGetBucketPolicy = req
     "GetBucketPolicy"
-    "fixture/GetBucketPolicy"
+    "fixture/GetBucketPolicy.yaml"
 
 testGetBucketLogging :: GetBucketLogging -> TestTree
 testGetBucketLogging = req
     "GetBucketLogging"
-    "fixture/GetBucketLogging"
+    "fixture/GetBucketLogging.yaml"
 
 testListParts :: ListParts -> TestTree
 testListParts = req
     "ListParts"
-    "fixture/ListParts"
+    "fixture/ListParts.yaml"
 
 testGetBucketACL :: GetBucketACL -> TestTree
 testGetBucketACL = req
     "GetBucketACL"
-    "fixture/GetBucketACL"
+    "fixture/GetBucketACL.yaml"
 
 testPutBucketACL :: PutBucketACL -> TestTree
 testPutBucketACL = req
     "PutBucketACL"
-    "fixture/PutBucketACL"
+    "fixture/PutBucketACL.yaml"
 
 testUploadPartCopy :: UploadPartCopy -> TestTree
 testUploadPartCopy = req
     "UploadPartCopy"
-    "fixture/UploadPartCopy"
+    "fixture/UploadPartCopy.yaml"
 
 -- Responses
 
 testPutBucketRequestPaymentResponse :: PutBucketRequestPaymentResponse -> TestTree
 testPutBucketRequestPaymentResponse = res
     "PutBucketRequestPaymentResponse"
-    "fixture/PutBucketRequestPaymentResponse"
+    "fixture/PutBucketRequestPaymentResponse.proto"
     s3
     (Proxy :: Proxy PutBucketRequestPayment)
 
 testPutObjectResponse :: PutObjectResponse -> TestTree
 testPutObjectResponse = res
     "PutObjectResponse"
-    "fixture/PutObjectResponse"
+    "fixture/PutObjectResponse.proto"
     s3
     (Proxy :: Proxy PutObject)
 
 testPutBucketLoggingResponse :: PutBucketLoggingResponse -> TestTree
 testPutBucketLoggingResponse = res
     "PutBucketLoggingResponse"
-    "fixture/PutBucketLoggingResponse"
+    "fixture/PutBucketLoggingResponse.proto"
     s3
     (Proxy :: Proxy PutBucketLogging)
 
 testDeleteObjectResponse :: DeleteObjectResponse -> TestTree
 testDeleteObjectResponse = res
     "DeleteObjectResponse"
-    "fixture/DeleteObjectResponse"
+    "fixture/DeleteObjectResponse.proto"
     s3
     (Proxy :: Proxy DeleteObject)
 
 testDeleteBucketResponse :: DeleteBucketResponse -> TestTree
 testDeleteBucketResponse = res
     "DeleteBucketResponse"
-    "fixture/DeleteBucketResponse"
+    "fixture/DeleteBucketResponse.proto"
     s3
     (Proxy :: Proxy DeleteBucket)
 
 testListBucketsResponse :: ListBucketsResponse -> TestTree
 testListBucketsResponse = res
     "ListBucketsResponse"
-    "fixture/ListBucketsResponse"
+    "fixture/ListBucketsResponse.proto"
     s3
     (Proxy :: Proxy ListBuckets)
 
 testCreateBucketResponse :: CreateBucketResponse -> TestTree
 testCreateBucketResponse = res
     "CreateBucketResponse"
-    "fixture/CreateBucketResponse"
+    "fixture/CreateBucketResponse.proto"
     s3
     (Proxy :: Proxy CreateBucket)
 
 testPutBucketTaggingResponse :: PutBucketTaggingResponse -> TestTree
 testPutBucketTaggingResponse = res
     "PutBucketTaggingResponse"
-    "fixture/PutBucketTaggingResponse"
+    "fixture/PutBucketTaggingResponse.proto"
     s3
     (Proxy :: Proxy PutBucketTagging)
 
 testDeleteBucketTaggingResponse :: DeleteBucketTaggingResponse -> TestTree
 testDeleteBucketTaggingResponse = res
     "DeleteBucketTaggingResponse"
-    "fixture/DeleteBucketTaggingResponse"
+    "fixture/DeleteBucketTaggingResponse.proto"
     s3
     (Proxy :: Proxy DeleteBucketTagging)
 
 testPutObjectACLResponse :: PutObjectACLResponse -> TestTree
 testPutObjectACLResponse = res
     "PutObjectACLResponse"
-    "fixture/PutObjectACLResponse"
+    "fixture/PutObjectACLResponse.proto"
     s3
     (Proxy :: Proxy PutObjectACL)
 
 testGetBucketNotificationConfigurationResponse :: NotificationConfiguration -> TestTree
 testGetBucketNotificationConfigurationResponse = res
     "GetBucketNotificationConfigurationResponse"
-    "fixture/GetBucketNotificationConfigurationResponse"
+    "fixture/GetBucketNotificationConfigurationResponse.proto"
     s3
     (Proxy :: Proxy GetBucketNotificationConfiguration)
 
 testGetBucketLocationResponse :: GetBucketLocationResponse -> TestTree
 testGetBucketLocationResponse = res
     "GetBucketLocationResponse"
-    "fixture/GetBucketLocationResponse"
+    "fixture/GetBucketLocationResponse.proto"
     s3
     (Proxy :: Proxy GetBucketLocation)
 
 testPutBucketReplicationResponse :: PutBucketReplicationResponse -> TestTree
 testPutBucketReplicationResponse = res
     "PutBucketReplicationResponse"
-    "fixture/PutBucketReplicationResponse"
+    "fixture/PutBucketReplicationResponse.proto"
     s3
     (Proxy :: Proxy PutBucketReplication)
 
 testGetBucketWebsiteResponse :: GetBucketWebsiteResponse -> TestTree
 testGetBucketWebsiteResponse = res
     "GetBucketWebsiteResponse"
-    "fixture/GetBucketWebsiteResponse"
+    "fixture/GetBucketWebsiteResponse.proto"
     s3
     (Proxy :: Proxy GetBucketWebsite)
 
 testDeleteBucketReplicationResponse :: DeleteBucketReplicationResponse -> TestTree
 testDeleteBucketReplicationResponse = res
     "DeleteBucketReplicationResponse"
-    "fixture/DeleteBucketReplicationResponse"
+    "fixture/DeleteBucketReplicationResponse.proto"
     s3
     (Proxy :: Proxy DeleteBucketReplication)
 
 testGetBucketRequestPaymentResponse :: GetBucketRequestPaymentResponse -> TestTree
 testGetBucketRequestPaymentResponse = res
     "GetBucketRequestPaymentResponse"
-    "fixture/GetBucketRequestPaymentResponse"
+    "fixture/GetBucketRequestPaymentResponse.proto"
     s3
     (Proxy :: Proxy GetBucketRequestPayment)
 
 testListObjectVersionsResponse :: ListObjectVersionsResponse -> TestTree
 testListObjectVersionsResponse = res
     "ListObjectVersionsResponse"
-    "fixture/ListObjectVersionsResponse"
+    "fixture/ListObjectVersionsResponse.proto"
     s3
     (Proxy :: Proxy ListObjectVersions)
 
 testGetBucketLifecycleResponse :: GetBucketLifecycleResponse -> TestTree
 testGetBucketLifecycleResponse = res
     "GetBucketLifecycleResponse"
-    "fixture/GetBucketLifecycleResponse"
+    "fixture/GetBucketLifecycleResponse.proto"
     s3
     (Proxy :: Proxy GetBucketLifecycle)
 
 testHeadBucketResponse :: HeadBucketResponse -> TestTree
 testHeadBucketResponse = res
     "HeadBucketResponse"
-    "fixture/HeadBucketResponse"
+    "fixture/HeadBucketResponse.proto"
     s3
     (Proxy :: Proxy HeadBucket)
 
 testPutBucketLifecycleResponse :: PutBucketLifecycleResponse -> TestTree
 testPutBucketLifecycleResponse = res
     "PutBucketLifecycleResponse"
-    "fixture/PutBucketLifecycleResponse"
+    "fixture/PutBucketLifecycleResponse.proto"
     s3
     (Proxy :: Proxy PutBucketLifecycle)
 
 testCreateMultipartUploadResponse :: CreateMultipartUploadResponse -> TestTree
 testCreateMultipartUploadResponse = res
     "CreateMultipartUploadResponse"
-    "fixture/CreateMultipartUploadResponse"
+    "fixture/CreateMultipartUploadResponse.proto"
     s3
     (Proxy :: Proxy CreateMultipartUpload)
 
 testDeleteBucketLifecycleResponse :: DeleteBucketLifecycleResponse -> TestTree
 testDeleteBucketLifecycleResponse = res
     "DeleteBucketLifecycleResponse"
-    "fixture/DeleteBucketLifecycleResponse"
+    "fixture/DeleteBucketLifecycleResponse.proto"
     s3
     (Proxy :: Proxy DeleteBucketLifecycle)
 
 testGetBucketReplicationResponse :: GetBucketReplicationResponse -> TestTree
 testGetBucketReplicationResponse = res
     "GetBucketReplicationResponse"
-    "fixture/GetBucketReplicationResponse"
+    "fixture/GetBucketReplicationResponse.proto"
     s3
     (Proxy :: Proxy GetBucketReplication)
 
 testPutBucketWebsiteResponse :: PutBucketWebsiteResponse -> TestTree
 testPutBucketWebsiteResponse = res
     "PutBucketWebsiteResponse"
-    "fixture/PutBucketWebsiteResponse"
+    "fixture/PutBucketWebsiteResponse.proto"
     s3
     (Proxy :: Proxy PutBucketWebsite)
 
 testCompleteMultipartUploadResponse :: CompleteMultipartUploadResponse -> TestTree
 testCompleteMultipartUploadResponse = res
     "CompleteMultipartUploadResponse"
-    "fixture/CompleteMultipartUploadResponse"
+    "fixture/CompleteMultipartUploadResponse.proto"
     s3
     (Proxy :: Proxy CompleteMultipartUpload)
 
 testUploadPartResponse :: UploadPartResponse -> TestTree
 testUploadPartResponse = res
     "UploadPartResponse"
-    "fixture/UploadPartResponse"
+    "fixture/UploadPartResponse.proto"
     s3
     (Proxy :: Proxy UploadPart)
 
 testListMultipartUploadsResponse :: ListMultipartUploadsResponse -> TestTree
 testListMultipartUploadsResponse = res
     "ListMultipartUploadsResponse"
-    "fixture/ListMultipartUploadsResponse"
+    "fixture/ListMultipartUploadsResponse.proto"
     s3
     (Proxy :: Proxy ListMultipartUploads)
 
 testDeleteBucketWebsiteResponse :: DeleteBucketWebsiteResponse -> TestTree
 testDeleteBucketWebsiteResponse = res
     "DeleteBucketWebsiteResponse"
-    "fixture/DeleteBucketWebsiteResponse"
+    "fixture/DeleteBucketWebsiteResponse.proto"
     s3
     (Proxy :: Proxy DeleteBucketWebsite)
 
 testListObjectsResponse :: ListObjectsResponse -> TestTree
 testListObjectsResponse = res
     "ListObjectsResponse"
-    "fixture/ListObjectsResponse"
+    "fixture/ListObjectsResponse.proto"
     s3
     (Proxy :: Proxy ListObjects)
 
 testDeleteObjectsResponse :: DeleteObjectsResponse -> TestTree
 testDeleteObjectsResponse = res
     "DeleteObjectsResponse"
-    "fixture/DeleteObjectsResponse"
+    "fixture/DeleteObjectsResponse.proto"
     s3
     (Proxy :: Proxy DeleteObjects)
 
 testPutBucketPolicyResponse :: PutBucketPolicyResponse -> TestTree
 testPutBucketPolicyResponse = res
     "PutBucketPolicyResponse"
-    "fixture/PutBucketPolicyResponse"
+    "fixture/PutBucketPolicyResponse.proto"
     s3
     (Proxy :: Proxy PutBucketPolicy)
 
 testDeleteBucketPolicyResponse :: DeleteBucketPolicyResponse -> TestTree
 testDeleteBucketPolicyResponse = res
     "DeleteBucketPolicyResponse"
-    "fixture/DeleteBucketPolicyResponse"
+    "fixture/DeleteBucketPolicyResponse.proto"
     s3
     (Proxy :: Proxy DeleteBucketPolicy)
 
 testAbortMultipartUploadResponse :: AbortMultipartUploadResponse -> TestTree
 testAbortMultipartUploadResponse = res
     "AbortMultipartUploadResponse"
-    "fixture/AbortMultipartUploadResponse"
+    "fixture/AbortMultipartUploadResponse.proto"
     s3
     (Proxy :: Proxy AbortMultipartUpload)
 
 testPutBucketCORSResponse :: PutBucketCORSResponse -> TestTree
 testPutBucketCORSResponse = res
     "PutBucketCORSResponse"
-    "fixture/PutBucketCORSResponse"
+    "fixture/PutBucketCORSResponse.proto"
     s3
     (Proxy :: Proxy PutBucketCORS)
 
 testDeleteBucketCORSResponse :: DeleteBucketCORSResponse -> TestTree
 testDeleteBucketCORSResponse = res
     "DeleteBucketCORSResponse"
-    "fixture/DeleteBucketCORSResponse"
+    "fixture/DeleteBucketCORSResponse.proto"
     s3
     (Proxy :: Proxy DeleteBucketCORS)
 
 testGetBucketVersioningResponse :: GetBucketVersioningResponse -> TestTree
 testGetBucketVersioningResponse = res
     "GetBucketVersioningResponse"
-    "fixture/GetBucketVersioningResponse"
+    "fixture/GetBucketVersioningResponse.proto"
     s3
     (Proxy :: Proxy GetBucketVersioning)
 
 testPutBucketNotificationConfigurationResponse :: PutBucketNotificationConfigurationResponse -> TestTree
 testPutBucketNotificationConfigurationResponse = res
     "PutBucketNotificationConfigurationResponse"
-    "fixture/PutBucketNotificationConfigurationResponse"
+    "fixture/PutBucketNotificationConfigurationResponse.proto"
     s3
     (Proxy :: Proxy PutBucketNotificationConfiguration)
 
 testGetBucketTaggingResponse :: GetBucketTaggingResponse -> TestTree
 testGetBucketTaggingResponse = res
     "GetBucketTaggingResponse"
-    "fixture/GetBucketTaggingResponse"
+    "fixture/GetBucketTaggingResponse.proto"
     s3
     (Proxy :: Proxy GetBucketTagging)
 
 testHeadObjectResponse :: HeadObjectResponse -> TestTree
 testHeadObjectResponse = res
     "HeadObjectResponse"
-    "fixture/HeadObjectResponse"
+    "fixture/HeadObjectResponse.proto"
     s3
     (Proxy :: Proxy HeadObject)
 
 testPutBucketVersioningResponse :: PutBucketVersioningResponse -> TestTree
 testPutBucketVersioningResponse = res
     "PutBucketVersioningResponse"
-    "fixture/PutBucketVersioningResponse"
+    "fixture/PutBucketVersioningResponse.proto"
     s3
     (Proxy :: Proxy PutBucketVersioning)
 
 testGetObjectACLResponse :: GetObjectACLResponse -> TestTree
 testGetObjectACLResponse = res
     "GetObjectACLResponse"
-    "fixture/GetObjectACLResponse"
+    "fixture/GetObjectACLResponse.proto"
     s3
     (Proxy :: Proxy GetObjectACL)
 
 testRestoreObjectResponse :: RestoreObjectResponse -> TestTree
 testRestoreObjectResponse = res
     "RestoreObjectResponse"
-    "fixture/RestoreObjectResponse"
+    "fixture/RestoreObjectResponse.proto"
     s3
     (Proxy :: Proxy RestoreObject)
 
 testGetBucketCORSResponse :: GetBucketCORSResponse -> TestTree
 testGetBucketCORSResponse = res
     "GetBucketCORSResponse"
-    "fixture/GetBucketCORSResponse"
+    "fixture/GetBucketCORSResponse.proto"
     s3
     (Proxy :: Proxy GetBucketCORS)
 
 testCopyObjectResponse :: CopyObjectResponse -> TestTree
 testCopyObjectResponse = res
     "CopyObjectResponse"
-    "fixture/CopyObjectResponse"
+    "fixture/CopyObjectResponse.proto"
     s3
     (Proxy :: Proxy CopyObject)
 
 testGetBucketPolicyResponse :: GetBucketPolicyResponse -> TestTree
 testGetBucketPolicyResponse = res
     "GetBucketPolicyResponse"
-    "fixture/GetBucketPolicyResponse"
+    "fixture/GetBucketPolicyResponse.proto"
     s3
     (Proxy :: Proxy GetBucketPolicy)
 
 testGetBucketLoggingResponse :: GetBucketLoggingResponse -> TestTree
 testGetBucketLoggingResponse = res
     "GetBucketLoggingResponse"
-    "fixture/GetBucketLoggingResponse"
+    "fixture/GetBucketLoggingResponse.proto"
     s3
     (Proxy :: Proxy GetBucketLogging)
 
 testListPartsResponse :: ListPartsResponse -> TestTree
 testListPartsResponse = res
     "ListPartsResponse"
-    "fixture/ListPartsResponse"
+    "fixture/ListPartsResponse.proto"
     s3
     (Proxy :: Proxy ListParts)
 
 testGetBucketACLResponse :: GetBucketACLResponse -> TestTree
 testGetBucketACLResponse = res
     "GetBucketACLResponse"
-    "fixture/GetBucketACLResponse"
+    "fixture/GetBucketACLResponse.proto"
     s3
     (Proxy :: Proxy GetBucketACL)
 
 testPutBucketACLResponse :: PutBucketACLResponse -> TestTree
 testPutBucketACLResponse = res
     "PutBucketACLResponse"
-    "fixture/PutBucketACLResponse"
+    "fixture/PutBucketACLResponse.proto"
     s3
     (Proxy :: Proxy PutBucketACL)
 
 testUploadPartCopyResponse :: UploadPartCopyResponse -> TestTree
 testUploadPartCopyResponse = res
     "UploadPartCopyResponse"
-    "fixture/UploadPartCopyResponse"
+    "fixture/UploadPartCopyResponse.proto"
     s3
     (Proxy :: Proxy UploadPartCopy)
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
@@ -19,12 +19,12 @@
 import           Network.AWS.S3
 import           Test.AWS.Gen.S3
 import           Test.AWS.Prelude
-import qualified Test.AWS.S3.ObjectKey as ObjectKey
+import           Test.AWS.S3.Internal
 import           Test.Tasty
 
 tests :: [TestTree]
 tests =
-    [ ObjectKey.tests
+    [ objectKeyTests
     ]
 
 fixtures :: [TestTree]
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,5 +13,33 @@
 
 module Test.AWS.S3.Internal where
 
+import           Network.AWS.Prelude
 import           Network.AWS.S3
 import           Test.AWS.Prelude
+import           Test.Tasty
+import           Test.Tasty.HUnit
+
+-- FIXME: expand, convert to quick/smallcheck properties.
+objectKeyTests :: TestTree
+objectKeyTests = testGroup "object key"
+    [ testGroup "encoding"
+        [ testCase "without delimiters" $
+            "/key" @=?
+                enc (ObjectKey "key")
+
+        , testCase "without leading prefix" $
+            "/some/obj%23ect" @=?
+                enc (ObjectKey "some/obj#ect")
+
+        , testCase "custom delimiter" $
+            "/%5Esome%5Eobj%25ect%5Efoo" @=?
+                enc (ObjectKey "^some^obj%ect^foo")
+
+        , testCase "leading prefix" $
+            "/some%3D1/path%20to/foo%3Dbar/object%20here" @=?
+                enc (ObjectKey "/some=1/path to/foo=bar/object here")
+        ]
+    ]
+  where
+    enc :: ObjectKey -> ByteString
+    enc = toBS . escapePath . rawPath
