diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,24 +1,103 @@
 # Amazon Key Management Service SDK
 
-> _Warning:_ This is an experimental preview release which is still under heavy development and not intended for public consumption, _caveat emptor_!
-
+* [Version](#version)
 * [Description](#description)
 * [Contribute](#contribute)
 * [Licence](#licence)
 
+
+## Version
+
+`1.0.0`
+
+
 ## Description
 
-Amazon Key Management Service (KMS) is a managed service that makes it easy
-for you to create and control the encryption keys used to encrypt your data,
-and uses Hardware Security Modules (HSMs) to protect the security of your
-keys. Amazon Key Management Service is integrated with other Amazon services
-including Amazon EBS, Amazon S3, and Amazon Redshift. Amazon Key Management
-Service is also integrated with Amazon CloudTrail to provide you with logs of
-all key usage to help meet your regulatory and compliance needs.
+AWS Key Management Service
 
+AWS Key Management Service (KMS) is an encryption and key management web
+service. This guide describes the KMS actions that you can call
+programmatically. For general information about KMS, see the
+<http://docs.aws.amazon.com/kms/latest/developerguide/overview.html AWS Key Management Service Developer Guide>
+
+AWS provides SDKs that consist of libraries and sample code for various
+programming languages and platforms (Java, Ruby, .Net, iOS, Android,
+etc.). The SDKs provide a convenient way to create programmatic access
+to KMS and AWS. For example, the SDKs take care of tasks such as signing
+requests (see below), managing errors, and retrying requests
+automatically. For more information about the AWS SDKs, including how to
+download and install them, see
+<http://aws.amazon.com/tools/ Tools for Amazon Web Services>.
+
+We recommend that you use the AWS SDKs to make programmatic API calls to
+KMS.
+
+Clients must support TLS (Transport Layer Security) 1.0. We recommend
+TLS 1.2. Clients must also support cipher suites with Perfect Forward
+Secrecy (PFS) such as Ephemeral Diffie-Hellman (DHE) or Elliptic Curve
+Ephemeral Diffie-Hellman (ECDHE). Most modern systems such as Java 7 and
+later support these modes.
+
+__Signing Requests__
+
+Requests must be signed by using an access key ID and a secret access
+key. We strongly recommend that you do not use your AWS account access
+key ID and secret key for everyday work with KMS. Instead, use the
+access key ID and secret access key for an IAM user, or you can use the
+AWS Security Token Service to generate temporary security credentials
+that you can use to sign requests.
+
+All KMS operations require
+<http://docs.aws.amazon.com/general/latest/gr/signature-version-4.html Signature Version 4>.
+
+__Recording API Requests__
+
+KMS supports AWS CloudTrail, a service that records AWS API calls and
+related events for your AWS account and delivers them to an Amazon S3
+bucket that you specify. By using the information collected by
+CloudTrail, you can determine what requests were made to KMS, who made
+the request, when it was made, and so on. To learn more about
+CloudTrail, including how to turn it on and find your log files, see the
+<http://docs.aws.amazon.com/awscloudtrail/latest/userguide/whatiscloudtrail.html AWS CloudTrail User Guide>
+
+__Additional Resources__
+
+For more information about credentials and request signing, see the
+following:
+
+-   <http://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html AWS Security Credentials>.
+    This topic provides general information about the types of
+    credentials used for accessing AWS.
+-   <http://docs.aws.amazon.com/STS/latest/UsingSTS/ AWS Security Token Service>.
+    This guide describes how to create and use temporary security
+    credentials.
+-   <http://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html Signing AWS API Requests>.
+    This set of topics walks you through the process of signing a
+    request using an access key ID and a secret access key.
+
+__Commonly Used APIs__
+
+Of the APIs discussed in this guide, the following will prove the most
+useful for most applications. You will likely perform actions other than
+these, such as creating keys and assigning policies, by using the
+console.
+
+-   Encrypt
+-   Decrypt
+-   GenerateDataKey
+-   GenerateDataKeyWithoutPlaintext
+
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-kms)
 and the [AWS API Reference](http://docs.aws.amazon.com/kms/latest/APIReference/Welcome.html).
 
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information and sending requests.
+
+Use of lenses is required for constructing and manipulating types.
+This is due to the amount of nesting of AWS types and transparency regarding
+de/serialisation into more palatable Haskell values.
+The provided lenses should be compatible with any of the major lens libraries
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
 
 ## Contribute
 
diff --git a/amazonka-kms.cabal b/amazonka-kms.cabal
--- a/amazonka-kms.cabal
+++ b/amazonka-kms.cabal
@@ -1,31 +1,105 @@
 name:                  amazonka-kms
-version:               0.3.6
+version:               1.0.0
 synopsis:              Amazon Key Management Service SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
 license-file:          LICENSE
 author:                Brendan Hay
 maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2013-2014 Brendan Hay
+copyright:             Copyright (c) 2013-2015 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 extra-source-files:    README.md
 cabal-version:         >= 1.10
 
 description:
-    Amazon Key Management Service (KMS) is a managed service that makes it easy
-    for you to create and control the encryption keys used to encrypt your data,
-    and uses Hardware Security Modules (HSMs) to protect the security of your
-    keys. Amazon Key Management Service is integrated with other Amazon services
-    including Amazon EBS, Amazon S3, and Amazon Redshift. Amazon Key Management
-    Service is also integrated with Amazon CloudTrail to provide you with logs of
-    all key usage to help meet your regulatory and compliance needs.
+    AWS Key Management Service
 
+    AWS Key Management Service (KMS) is an encryption and key management web
+    service. This guide describes the KMS actions that you can call
+    programmatically. For general information about KMS, see the
+    <http://docs.aws.amazon.com/kms/latest/developerguide/overview.html AWS Key Management Service Developer Guide>
+
+    AWS provides SDKs that consist of libraries and sample code for various
+    programming languages and platforms (Java, Ruby, .Net, iOS, Android,
+    etc.). The SDKs provide a convenient way to create programmatic access
+    to KMS and AWS. For example, the SDKs take care of tasks such as signing
+    requests (see below), managing errors, and retrying requests
+    automatically. For more information about the AWS SDKs, including how to
+    download and install them, see
+    <http://aws.amazon.com/tools/ Tools for Amazon Web Services>.
+
+    We recommend that you use the AWS SDKs to make programmatic API calls to
+    KMS.
+
+    Clients must support TLS (Transport Layer Security) 1.0. We recommend
+    TLS 1.2. Clients must also support cipher suites with Perfect Forward
+    Secrecy (PFS) such as Ephemeral Diffie-Hellman (DHE) or Elliptic Curve
+    Ephemeral Diffie-Hellman (ECDHE). Most modern systems such as Java 7 and
+    later support these modes.
+
+    __Signing Requests__
+
+    Requests must be signed by using an access key ID and a secret access
+    key. We strongly recommend that you do not use your AWS account access
+    key ID and secret key for everyday work with KMS. Instead, use the
+    access key ID and secret access key for an IAM user, or you can use the
+    AWS Security Token Service to generate temporary security credentials
+    that you can use to sign requests.
+
+    All KMS operations require
+    <http://docs.aws.amazon.com/general/latest/gr/signature-version-4.html Signature Version 4>.
+
+    __Recording API Requests__
+
+    KMS supports AWS CloudTrail, a service that records AWS API calls and
+    related events for your AWS account and delivers them to an Amazon S3
+    bucket that you specify. By using the information collected by
+    CloudTrail, you can determine what requests were made to KMS, who made
+    the request, when it was made, and so on. To learn more about
+    CloudTrail, including how to turn it on and find your log files, see the
+    <http://docs.aws.amazon.com/awscloudtrail/latest/userguide/whatiscloudtrail.html AWS CloudTrail User Guide>
+
+    __Additional Resources__
+
+    For more information about credentials and request signing, see the
+    following:
+
+    -   <http://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html AWS Security Credentials>.
+        This topic provides general information about the types of
+        credentials used for accessing AWS.
+    -   <http://docs.aws.amazon.com/STS/latest/UsingSTS/ AWS Security Token Service>.
+        This guide describes how to create and use temporary security
+        credentials.
+    -   <http://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html Signing AWS API Requests>.
+        This set of topics walks you through the process of signing a
+        request using an access key ID and a secret access key.
+
+    __Commonly Used APIs__
+
+    Of the APIs discussed in this guide, the following will prove the most
+    useful for most applications. You will likely perform actions other than
+    these, such as creating keys and assigning policies, by using the
+    console.
+
+    -   Encrypt
+    -   Decrypt
+    -   GenerateDataKey
+    -   GenerateDataKeyWithoutPlaintext
     .
-    /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/Welcome.html AWS API Reference>
+    The types from this library are intended to be used with
+    <http://hackage.haskell.org/package/amazonka amazonka>, which provides
+    mechanisms for specifying AuthN/AuthZ information and sending requests.
     .
-    /Warning:/ This is an experimental preview release which is still under
-    heavy development and not intended for public consumption, caveat emptor!
+    Use of lenses is required for constructing and manipulating types.
+    This is due to the amount of nesting of AWS types and transparency regarding
+    de/serialisation into more palatable Haskell values.
+    The provided lenses should be compatible with any of the major lens libraries
+    such as <http://hackage.haskell.org/package/lens lens> or
+    <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+    .
+    See "Network.AWS.KMS" and the <http://docs.aws.amazon.com/kms/latest/APIReference/Welcome.html AWS API Reference>
+    to get started.
 
 source-repository head
     type:     git
@@ -66,9 +140,40 @@
         , Network.AWS.KMS.Types
         , Network.AWS.KMS.UpdateAlias
         , Network.AWS.KMS.UpdateKeyDescription
+        , Network.AWS.KMS.Waiters
 
     other-modules:
+          Network.AWS.KMS.Types.Product
+        , Network.AWS.KMS.Types.Sum
 
     build-depends:
-          amazonka-core == 0.3.6.*
+          amazonka-core == 1.0.0.*
         , base          >= 4.7     && < 5
+
+test-suite amazonka-kms-test
+    type:              exitcode-stdio-1.0
+    default-language:  Haskell2010
+    hs-source-dirs:    test
+    main-is:           Main.hs
+
+    ghc-options:       -Wall -threaded
+
+    -- This is not comprehensive if modules have manually been added.
+    -- It exists to ensure cabal 'somewhat' detects test module changes.
+    other-modules:
+          Test.AWS.KMS
+        , Test.AWS.Gen.KMS
+        , Test.AWS.KMS.Internal
+
+    build-depends:
+          amazonka-core == 1.0.0
+        , amazonka-test == 1.0.0
+        , amazonka-kms == 1.0.0
+        , base
+        , bytestring
+        , lens
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/gen/Network/AWS/KMS.hs b/gen/Network/AWS/KMS.hs
--- a/gen/Network/AWS/KMS.hs
+++ b/gen/Network/AWS/KMS.hs
@@ -1,76 +1,335 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Amazon Key Management Service (KMS) is a managed service that makes it easy
--- for you to create and control the encryption keys used to encrypt your data,
--- and uses Hardware Security Modules (HSMs) to protect the security of your
--- keys. Amazon Key Management Service is integrated with other Amazon services
--- including Amazon EBS, Amazon S3, and Amazon Redshift. Amazon Key Management
--- Service is also integrated with Amazon CloudTrail to provide you with logs of
--- all key usage to help meet your regulatory and compliance needs.
+-- AWS Key Management Service
+--
+-- AWS Key Management Service (KMS) is an encryption and key management web
+-- service. This guide describes the KMS actions that you can call
+-- programmatically. For general information about KMS, see the
+-- <http://docs.aws.amazon.com/kms/latest/developerguide/overview.html AWS Key Management Service Developer Guide>
+--
+-- AWS provides SDKs that consist of libraries and sample code for various
+-- programming languages and platforms (Java, Ruby, .Net, iOS, Android,
+-- etc.). The SDKs provide a convenient way to create programmatic access
+-- to KMS and AWS. For example, the SDKs take care of tasks such as signing
+-- requests (see below), managing errors, and retrying requests
+-- automatically. For more information about the AWS SDKs, including how to
+-- download and install them, see
+-- <http://aws.amazon.com/tools/ Tools for Amazon Web Services>.
+--
+-- We recommend that you use the AWS SDKs to make programmatic API calls to
+-- KMS.
+--
+-- Clients must support TLS (Transport Layer Security) 1.0. We recommend
+-- TLS 1.2. Clients must also support cipher suites with Perfect Forward
+-- Secrecy (PFS) such as Ephemeral Diffie-Hellman (DHE) or Elliptic Curve
+-- Ephemeral Diffie-Hellman (ECDHE). Most modern systems such as Java 7 and
+-- later support these modes.
+--
+-- __Signing Requests__
+--
+-- Requests must be signed by using an access key ID and a secret access
+-- key. We strongly recommend that you do not use your AWS account access
+-- key ID and secret key for everyday work with KMS. Instead, use the
+-- access key ID and secret access key for an IAM user, or you can use the
+-- AWS Security Token Service to generate temporary security credentials
+-- that you can use to sign requests.
+--
+-- All KMS operations require
+-- <http://docs.aws.amazon.com/general/latest/gr/signature-version-4.html Signature Version 4>.
+--
+-- __Recording API Requests__
+--
+-- KMS supports AWS CloudTrail, a service that records AWS API calls and
+-- related events for your AWS account and delivers them to an Amazon S3
+-- bucket that you specify. By using the information collected by
+-- CloudTrail, you can determine what requests were made to KMS, who made
+-- the request, when it was made, and so on. To learn more about
+-- CloudTrail, including how to turn it on and find your log files, see the
+-- <http://docs.aws.amazon.com/awscloudtrail/latest/userguide/whatiscloudtrail.html AWS CloudTrail User Guide>
+--
+-- __Additional Resources__
+--
+-- For more information about credentials and request signing, see the
+-- following:
+--
+-- -   <http://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html AWS Security Credentials>.
+--     This topic provides general information about the types of
+--     credentials used for accessing AWS.
+-- -   <http://docs.aws.amazon.com/STS/latest/UsingSTS/ AWS Security Token Service>.
+--     This guide describes how to create and use temporary security
+--     credentials.
+-- -   <http://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html Signing AWS API Requests>.
+--     This set of topics walks you through the process of signing a
+--     request using an access key ID and a secret access key.
+--
+-- __Commonly Used APIs__
+--
+-- Of the APIs discussed in this guide, the following will prove the most
+-- useful for most applications. You will likely perform actions other than
+-- these, such as creating keys and assigning policies, by using the
+-- console.
+--
+-- -   Encrypt
+-- -   Decrypt
+-- -   GenerateDataKey
+-- -   GenerateDataKeyWithoutPlaintext
+--
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/Welcome.html AWS API Reference>
 module Network.AWS.KMS
-    ( module Network.AWS.KMS.CreateAlias
-    , module Network.AWS.KMS.CreateGrant
-    , module Network.AWS.KMS.CreateKey
-    , module Network.AWS.KMS.Decrypt
-    , module Network.AWS.KMS.DeleteAlias
-    , module Network.AWS.KMS.DescribeKey
-    , module Network.AWS.KMS.DisableKey
+    (
+    -- * Service
+      KMS
+
+    -- * Errors
+    -- $errors
+
+    -- ** InvalidMarkerException
+    , _InvalidMarkerException
+
+    -- ** InvalidKeyUsageException
+    , _InvalidKeyUsageException
+
+    -- ** UnsupportedOperationException
+    , _UnsupportedOperationException
+
+    -- ** MalformedPolicyDocumentException
+    , _MalformedPolicyDocumentException
+
+    -- ** DisabledException
+    , _DisabledException
+
+    -- ** KeyUnavailableException
+    , _KeyUnavailableException
+
+    -- ** KMSInternalException
+    , _KMSInternalException
+
+    -- ** NotFoundException
+    , _NotFoundException
+
+    -- ** InvalidAliasNameException
+    , _InvalidAliasNameException
+
+    -- ** InvalidARNException
+    , _InvalidARNException
+
+    -- ** DependencyTimeoutException
+    , _DependencyTimeoutException
+
+    -- ** InvalidGrantTokenException
+    , _InvalidGrantTokenException
+
+    -- ** InvalidCiphertextException
+    , _InvalidCiphertextException
+
+    -- ** LimitExceededException
+    , _LimitExceededException
+
+    -- ** AlreadyExistsException
+    , _AlreadyExistsException
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** DisableKeyRotation
     , module Network.AWS.KMS.DisableKeyRotation
-    , module Network.AWS.KMS.EnableKey
-    , module Network.AWS.KMS.EnableKeyRotation
-    , module Network.AWS.KMS.Encrypt
-    , module Network.AWS.KMS.GenerateDataKey
+
+    -- ** GenerateDataKeyWithoutPlaintext
     , module Network.AWS.KMS.GenerateDataKeyWithoutPlaintext
+
+    -- ** ListGrants
+    , module Network.AWS.KMS.ListGrants
+
+    -- ** Encrypt
+    , module Network.AWS.KMS.Encrypt
+
+    -- ** EnableKeyRotation
+    , module Network.AWS.KMS.EnableKeyRotation
+
+    -- ** CreateGrant
+    , module Network.AWS.KMS.CreateGrant
+
+    -- ** CreateAlias
+    , module Network.AWS.KMS.CreateAlias
+
+    -- ** ListAliases
+    , module Network.AWS.KMS.ListAliases
+
+    -- ** GenerateRandom
     , module Network.AWS.KMS.GenerateRandom
-    , module Network.AWS.KMS.GetKeyPolicy
+
+    -- ** DisableKey
+    , module Network.AWS.KMS.DisableKey
+
+    -- ** CreateKey
+    , module Network.AWS.KMS.CreateKey
+
+    -- ** RetireGrant
+    , module Network.AWS.KMS.RetireGrant
+
+    -- ** ListKeys
+    , module Network.AWS.KMS.ListKeys
+
+    -- ** GetKeyRotationStatus
     , module Network.AWS.KMS.GetKeyRotationStatus
-    , module Network.AWS.KMS.ListAliases
-    , module Network.AWS.KMS.ListGrants
+
+    -- ** GenerateDataKey
+    , module Network.AWS.KMS.GenerateDataKey
+
+    -- ** DeleteAlias
+    , module Network.AWS.KMS.DeleteAlias
+
+    -- ** UpdateAlias
+    , module Network.AWS.KMS.UpdateAlias
+
+    -- ** DescribeKey
+    , module Network.AWS.KMS.DescribeKey
+
+    -- ** Decrypt
+    , module Network.AWS.KMS.Decrypt
+
+    -- ** UpdateKeyDescription
+    , module Network.AWS.KMS.UpdateKeyDescription
+
+    -- ** ReEncrypt
+    , module Network.AWS.KMS.ReEncrypt
+
+    -- ** ListKeyPolicies
     , module Network.AWS.KMS.ListKeyPolicies
-    , module Network.AWS.KMS.ListKeys
+
+    -- ** EnableKey
+    , module Network.AWS.KMS.EnableKey
+
+    -- ** PutKeyPolicy
     , module Network.AWS.KMS.PutKeyPolicy
-    , module Network.AWS.KMS.ReEncrypt
-    , module Network.AWS.KMS.RetireGrant
+
+    -- ** RevokeGrant
     , module Network.AWS.KMS.RevokeGrant
-    , module Network.AWS.KMS.Types
-    , module Network.AWS.KMS.UpdateAlias
-    , module Network.AWS.KMS.UpdateKeyDescription
+
+    -- ** GetKeyPolicy
+    , module Network.AWS.KMS.GetKeyPolicy
+
+    -- * Types
+
+    -- ** DataKeySpec
+    , DataKeySpec (..)
+
+    -- ** GrantOperation
+    , GrantOperation (..)
+
+    -- ** KeyUsageType
+    , KeyUsageType (..)
+
+    -- ** AliasListEntry
+    , AliasListEntry
+    , aliasListEntry
+    , aleTargetKeyId
+    , aleAliasName
+    , aleAliasARN
+
+    -- ** GrantConstraints
+    , GrantConstraints
+    , grantConstraints
+    , gcEncryptionContextEquals
+    , gcEncryptionContextSubset
+
+    -- ** GrantListEntry
+    , GrantListEntry
+    , grantListEntry
+    , gleRetiringPrincipal
+    , gleIssuingAccount
+    , gleGrantId
+    , gleConstraints
+    , gleGranteePrincipal
+    , gleOperations
+
+    -- ** KeyListEntry
+    , KeyListEntry
+    , keyListEntry
+    , kleKeyARN
+    , kleKeyId
+
+    -- ** KeyMetadata
+    , KeyMetadata
+    , keyMetadata
+    , kmARN
+    , kmEnabled
+    , kmAWSAccountId
+    , kmKeyUsage
+    , kmCreationDate
+    , kmDescription
+    , kmKeyId
     ) where
 
-import Network.AWS.KMS.CreateAlias
-import Network.AWS.KMS.CreateGrant
-import Network.AWS.KMS.CreateKey
-import Network.AWS.KMS.Decrypt
-import Network.AWS.KMS.DeleteAlias
-import Network.AWS.KMS.DescribeKey
-import Network.AWS.KMS.DisableKey
-import Network.AWS.KMS.DisableKeyRotation
-import Network.AWS.KMS.EnableKey
-import Network.AWS.KMS.EnableKeyRotation
-import Network.AWS.KMS.Encrypt
-import Network.AWS.KMS.GenerateDataKey
-import Network.AWS.KMS.GenerateDataKeyWithoutPlaintext
-import Network.AWS.KMS.GenerateRandom
-import Network.AWS.KMS.GetKeyPolicy
-import Network.AWS.KMS.GetKeyRotationStatus
-import Network.AWS.KMS.ListAliases
-import Network.AWS.KMS.ListGrants
-import Network.AWS.KMS.ListKeyPolicies
-import Network.AWS.KMS.ListKeys
-import Network.AWS.KMS.PutKeyPolicy
-import Network.AWS.KMS.ReEncrypt
-import Network.AWS.KMS.RetireGrant
-import Network.AWS.KMS.RevokeGrant
-import Network.AWS.KMS.Types
-import Network.AWS.KMS.UpdateAlias
-import Network.AWS.KMS.UpdateKeyDescription
+import           Network.AWS.KMS.CreateAlias
+import           Network.AWS.KMS.CreateGrant
+import           Network.AWS.KMS.CreateKey
+import           Network.AWS.KMS.Decrypt
+import           Network.AWS.KMS.DeleteAlias
+import           Network.AWS.KMS.DescribeKey
+import           Network.AWS.KMS.DisableKey
+import           Network.AWS.KMS.DisableKeyRotation
+import           Network.AWS.KMS.EnableKey
+import           Network.AWS.KMS.EnableKeyRotation
+import           Network.AWS.KMS.Encrypt
+import           Network.AWS.KMS.GenerateDataKey
+import           Network.AWS.KMS.GenerateDataKeyWithoutPlaintext
+import           Network.AWS.KMS.GenerateRandom
+import           Network.AWS.KMS.GetKeyPolicy
+import           Network.AWS.KMS.GetKeyRotationStatus
+import           Network.AWS.KMS.ListAliases
+import           Network.AWS.KMS.ListGrants
+import           Network.AWS.KMS.ListKeyPolicies
+import           Network.AWS.KMS.ListKeys
+import           Network.AWS.KMS.PutKeyPolicy
+import           Network.AWS.KMS.ReEncrypt
+import           Network.AWS.KMS.RetireGrant
+import           Network.AWS.KMS.RevokeGrant
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.UpdateAlias
+import           Network.AWS.KMS.UpdateKeyDescription
+import           Network.AWS.KMS.Waiters
+
+{- $errors
+Error matchers are designed for use with the functions provided by
+<http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+This allows catching (and rethrowing) service specific errors returned
+by 'KMS'.
+-}
+
+{- $operations
+Some AWS operations return results that are incomplete and require subsequent
+requests in order to obtain the entire result set. The process of sending
+subsequent requests to continue where a previous request left off is called
+pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+1000 objects at a time, and you must send subsequent requests with the
+appropriate Marker in order to retrieve the next page of results.
+
+Operations that have an 'AWSPager' instance can transparently perform subsequent
+requests, correctly setting Markers and other request facets to iterate through
+the entire result set of a truncated API operation. Operations which support
+this have an additional note in the documentation.
+
+Many operations have the ability to filter results on the server side. See the
+individual operation parameters for details.
+-}
+
+{- $waiters
+Waiters poll by repeatedly sending a request until some remote success condition
+configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+determines how many attempts should be made, in addition to delay and retry strategies.
+-}
diff --git a/gen/Network/AWS/KMS/CreateAlias.hs b/gen/Network/AWS/KMS/CreateAlias.hs
--- a/gen/Network/AWS/KMS/CreateAlias.hs
+++ b/gen/Network/AWS/KMS/CreateAlias.hs
@@ -1,122 +1,132 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.CreateAlias
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Creates a display name for a customer master key. An alias can be used to
--- identify a key and should be unique. The console enforces a one-to-one
--- mapping between the alias and a key. An alias name can contain only
--- alphanumeric characters, forward slashes (/), underscores (_), and dashes
--- (-). An alias must start with the word "alias" followed by a forward slash
--- (alias/). An alias that begins with "aws" after the forward slash
--- (alias/aws...) is reserved by Amazon Web Services (AWS).
+-- Creates a display name for a customer master key. An alias can be used
+-- to identify a key and should be unique. The console enforces a
+-- one-to-one mapping between the alias and a key. An alias name can
+-- contain only alphanumeric characters, forward slashes (\/), underscores
+-- (_), and dashes (-). An alias must start with the word \"alias\"
+-- followed by a forward slash (alias\/). An alias that begins with \"aws\"
+-- after the forward slash (alias\/aws...) is reserved by Amazon Web
+-- Services (AWS).
 --
--- To associate an alias with a different key, call 'UpdateAlias'.
+-- To associate an alias with a different key, call UpdateAlias.
 --
 -- Note that you cannot create or update an alias that represents a key in
 -- another account.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html AWS API Reference> for CreateAlias.
 module Network.AWS.KMS.CreateAlias
     (
-    -- * Request
-      CreateAlias
-    -- ** Request constructor
-    , createAlias
-    -- ** Request lenses
+    -- * Creating a Request
+      createAlias
+    , CreateAlias
+    -- * Request Lenses
     , caAliasName
     , caTargetKeyId
 
-    -- * Response
-    , CreateAliasResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createAliasResponse
+    , CreateAliasResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data CreateAlias = CreateAlias
-    { _caAliasName   :: Text
-    , _caTargetKeyId :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'createAlias' smart constructor.
+data CreateAlias = CreateAlias'
+    { _caAliasName   :: !Text
+    , _caTargetKeyId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CreateAlias' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CreateAlias' with the minimum fields required to make a request.
 --
--- * 'caAliasName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'caTargetKeyId' @::@ 'Text'
+-- * 'caAliasName'
 --
-createAlias :: Text -- ^ 'caAliasName'
-            -> Text -- ^ 'caTargetKeyId'
-            -> CreateAlias
-createAlias p1 p2 = CreateAlias
-    { _caAliasName   = p1
-    , _caTargetKeyId = p2
+-- * 'caTargetKeyId'
+createAlias
+    :: Text -- ^ 'caAliasName'
+    -> Text -- ^ 'caTargetKeyId'
+    -> CreateAlias
+createAlias pAliasName_ pTargetKeyId_ =
+    CreateAlias'
+    { _caAliasName = pAliasName_
+    , _caTargetKeyId = pTargetKeyId_
     }
 
 -- | String that contains the display name. The name must start with the word
--- "alias" followed by a forward slash (alias/). Aliases that begin with
--- "alias/AWS" are reserved.
+-- \"alias\" followed by a forward slash (alias\/). Aliases that begin with
+-- \"alias\/AWS\" are reserved.
 caAliasName :: Lens' CreateAlias Text
-caAliasName = lens _caAliasName (\s a -> s { _caAliasName = a })
+caAliasName = lens _caAliasName (\ s a -> s{_caAliasName = a});
 
--- | An identifier of the key for which you are creating the alias. This value
--- cannot be another alias but can be a globally unique identifier or a fully
--- specified ARN to a key.  Key ARN Example -
--- arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012 Globally Unique Key ID Example - 12345678-1234-1234-1234-123456789012
+-- | An identifier of the key for which you are creating the alias. This
+-- value cannot be another alias but can be a globally unique identifier or
+-- a fully specified ARN to a key.
 --
+-- -   Key ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   Globally Unique Key ID Example -
+--     12345678-1234-1234-1234-123456789012
 caTargetKeyId :: Lens' CreateAlias Text
-caTargetKeyId = lens _caTargetKeyId (\s a -> s { _caTargetKeyId = a })
+caTargetKeyId = lens _caTargetKeyId (\ s a -> s{_caTargetKeyId = a});
 
-data CreateAliasResponse = CreateAliasResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest CreateAlias where
+        type Sv CreateAlias = KMS
+        type Rs CreateAlias = CreateAliasResponse
+        request = postJSON
+        response = receiveNull CreateAliasResponse'
 
--- | 'CreateAliasResponse' constructor.
-createAliasResponse :: CreateAliasResponse
-createAliasResponse = CreateAliasResponse
+instance ToHeaders CreateAlias where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.CreateAlias" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON CreateAlias where
+        toJSON CreateAlias'{..}
+          = object
+              ["AliasName" .= _caAliasName,
+               "TargetKeyId" .= _caTargetKeyId]
+
 instance ToPath CreateAlias where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery CreateAlias where
-    toQuery = const mempty
-
-instance ToHeaders CreateAlias
-
-instance ToJSON CreateAlias where
-    toJSON CreateAlias{..} = object
-        [ "AliasName"   .= _caAliasName
-        , "TargetKeyId" .= _caTargetKeyId
-        ]
+        toQuery = const mempty
 
-instance AWSRequest CreateAlias where
-    type Sv CreateAlias = KMS
-    type Rs CreateAlias = CreateAliasResponse
+-- | /See:/ 'createAliasResponse' smart constructor.
+data CreateAliasResponse =
+    CreateAliasResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "CreateAlias"
-    response = nullResponse CreateAliasResponse
+-- | Creates a value of 'CreateAliasResponse' with the minimum fields required to make a request.
+--
+createAliasResponse
+    :: CreateAliasResponse
+createAliasResponse = CreateAliasResponse'
diff --git a/gen/Network/AWS/KMS/CreateGrant.hs b/gen/Network/AWS/KMS/CreateGrant.hs
--- a/gen/Network/AWS/KMS/CreateGrant.hs
+++ b/gen/Network/AWS/KMS/CreateGrant.hs
@@ -1,186 +1,217 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.CreateGrant
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Adds a grant to a key to specify who can access the key and under what
--- conditions. Grants are alternate permission mechanisms to key policies. For
--- more information about grants, see <http://docs.aws.amazon.com/kms/latest/developerguide/grants.html Grants> in the developer guide. If a grant
--- is absent, access to the key is evaluated based on IAM policies attached to
--- the user.  'ListGrants' 'RetireGrant' 'RevokeGrant'
+-- Adds a grant to a key to specify who can access the key and under what
+-- conditions. Grants are alternate permission mechanisms to key policies.
+-- For more information about grants, see
+-- <http://docs.aws.amazon.com/kms/latest/developerguide/grants.html Grants>
+-- in the developer guide. If a grant is absent, access to the key is
+-- evaluated based on IAM policies attached to the user.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html>
+-- 1.  ListGrants
+-- 2.  RetireGrant
+-- 3.  RevokeGrant
+--
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html AWS API Reference> for CreateGrant.
 module Network.AWS.KMS.CreateGrant
     (
-    -- * Request
-      CreateGrant
-    -- ** Request constructor
-    , createGrant
-    -- ** Request lenses
+    -- * Creating a Request
+      createGrant
+    , CreateGrant
+    -- * Request Lenses
+    , cgRetiringPrincipal
     , cgConstraints
     , cgGrantTokens
-    , cgGranteePrincipal
-    , cgKeyId
     , cgOperations
-    , cgRetiringPrincipal
+    , cgKeyId
+    , cgGranteePrincipal
 
-    -- * Response
-    , CreateGrantResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createGrantResponse
-    -- ** Response lenses
-    , cgrGrantId
-    , cgrGrantToken
+    , CreateGrantResponse
+    -- * Response Lenses
+    , cgrsGrantId
+    , cgrsGrantToken
+    , cgrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data CreateGrant = CreateGrant
-    { _cgConstraints       :: Maybe GrantConstraints
-    , _cgGrantTokens       :: List "GrantTokens" Text
-    , _cgGranteePrincipal  :: Text
-    , _cgKeyId             :: Text
-    , _cgOperations        :: List "Operations" GrantOperation
-    , _cgRetiringPrincipal :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'createGrant' smart constructor.
+data CreateGrant = CreateGrant'
+    { _cgRetiringPrincipal :: !(Maybe Text)
+    , _cgConstraints       :: !(Maybe GrantConstraints)
+    , _cgGrantTokens       :: !(Maybe [Text])
+    , _cgOperations        :: !(Maybe [GrantOperation])
+    , _cgKeyId             :: !Text
+    , _cgGranteePrincipal  :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CreateGrant' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CreateGrant' with the minimum fields required to make a request.
 --
--- * 'cgConstraints' @::@ 'Maybe' 'GrantConstraints'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cgGrantTokens' @::@ ['Text']
+-- * 'cgRetiringPrincipal'
 --
--- * 'cgGranteePrincipal' @::@ 'Text'
+-- * 'cgConstraints'
 --
--- * 'cgKeyId' @::@ 'Text'
+-- * 'cgGrantTokens'
 --
--- * 'cgOperations' @::@ ['GrantOperation']
+-- * 'cgOperations'
 --
--- * 'cgRetiringPrincipal' @::@ 'Maybe' 'Text'
+-- * 'cgKeyId'
 --
-createGrant :: Text -- ^ 'cgKeyId'
-            -> Text -- ^ 'cgGranteePrincipal'
-            -> CreateGrant
-createGrant p1 p2 = CreateGrant
-    { _cgKeyId             = p1
-    , _cgGranteePrincipal  = p2
-    , _cgRetiringPrincipal = Nothing
-    , _cgOperations        = mempty
-    , _cgConstraints       = Nothing
-    , _cgGrantTokens       = mempty
+-- * 'cgGranteePrincipal'
+createGrant
+    :: Text -- ^ 'cgKeyId'
+    -> Text -- ^ 'cgGranteePrincipal'
+    -> CreateGrant
+createGrant pKeyId_ pGranteePrincipal_ =
+    CreateGrant'
+    { _cgRetiringPrincipal = Nothing
+    , _cgConstraints = Nothing
+    , _cgGrantTokens = Nothing
+    , _cgOperations = Nothing
+    , _cgKeyId = pKeyId_
+    , _cgGranteePrincipal = pGranteePrincipal_
     }
 
--- | Specifies the conditions under which the actions specified by the 'Operations'
--- parameter are allowed.
+-- | Principal given permission to retire the grant. For more information,
+-- see RetireGrant.
+cgRetiringPrincipal :: Lens' CreateGrant (Maybe Text)
+cgRetiringPrincipal = lens _cgRetiringPrincipal (\ s a -> s{_cgRetiringPrincipal = a});
+
+-- | Specifies the conditions under which the actions specified by the
+-- 'Operations' parameter are allowed.
 cgConstraints :: Lens' CreateGrant (Maybe GrantConstraints)
-cgConstraints = lens _cgConstraints (\s a -> s { _cgConstraints = a })
+cgConstraints = lens _cgConstraints (\ s a -> s{_cgConstraints = a});
 
--- | For more information, see <http://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#grant_token Grant Tokens>.
+-- | For more information, see
+-- <http://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#grant_token Grant Tokens>.
 cgGrantTokens :: Lens' CreateGrant [Text]
-cgGrantTokens = lens _cgGrantTokens (\s a -> s { _cgGrantTokens = a }) . _List
-
--- | Principal given permission by the grant to use the key identified by the 'keyId'
--- parameter.
-cgGranteePrincipal :: Lens' CreateGrant Text
-cgGranteePrincipal =
-    lens _cgGranteePrincipal (\s a -> s { _cgGranteePrincipal = a })
+cgGrantTokens = lens _cgGrantTokens (\ s a -> s{_cgGrantTokens = a}) . _Default . _Coerce;
 
--- | A unique identifier for the customer master key. This value can be a globally
--- unique identifier or the fully specified ARN to a key.  Key ARN Example -
--- arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012 Globally Unique Key ID Example - 12345678-1234-1234-1234-123456789012
+-- | List of operations permitted by the grant. This can be any combination
+-- of one or more of the following values:
 --
-cgKeyId :: Lens' CreateGrant Text
-cgKeyId = lens _cgKeyId (\s a -> s { _cgKeyId = a })
-
--- | List of operations permitted by the grant. This can be any combination of one
--- or more of the following values:  Decrypt Encrypt GenerateDataKey GenerateDataKeyWithoutPlaintext
--- ReEncryptFrom ReEncryptTo CreateGrant RetireGrant
+-- 1.  Decrypt
+-- 2.  Encrypt
+-- 3.  GenerateDataKey
+-- 4.  GenerateDataKeyWithoutPlaintext
+-- 5.  ReEncryptFrom
+-- 6.  ReEncryptTo
+-- 7.  CreateGrant
+-- 8.  RetireGrant
 cgOperations :: Lens' CreateGrant [GrantOperation]
-cgOperations = lens _cgOperations (\s a -> s { _cgOperations = a }) . _List
+cgOperations = lens _cgOperations (\ s a -> s{_cgOperations = a}) . _Default . _Coerce;
 
--- | Principal given permission to retire the grant. For more information, see 'RetireGrant'.
-cgRetiringPrincipal :: Lens' CreateGrant (Maybe Text)
-cgRetiringPrincipal =
-    lens _cgRetiringPrincipal (\s a -> s { _cgRetiringPrincipal = a })
+-- | A unique identifier for the customer master key. This value can be a
+-- globally unique identifier or the fully specified ARN to a key.
+--
+-- -   Key ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   Globally Unique Key ID Example -
+--     12345678-1234-1234-1234-123456789012
+cgKeyId :: Lens' CreateGrant Text
+cgKeyId = lens _cgKeyId (\ s a -> s{_cgKeyId = a});
 
-data CreateGrantResponse = CreateGrantResponse
-    { _cgrGrantId    :: Maybe Text
-    , _cgrGrantToken :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | Principal given permission by the grant to use the key identified by the
+-- 'keyId' parameter.
+cgGranteePrincipal :: Lens' CreateGrant Text
+cgGranteePrincipal = lens _cgGranteePrincipal (\ s a -> s{_cgGranteePrincipal = a});
 
--- | 'CreateGrantResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cgrGrantId' @::@ 'Maybe' 'Text'
---
--- * 'cgrGrantToken' @::@ 'Maybe' 'Text'
---
-createGrantResponse :: CreateGrantResponse
-createGrantResponse = CreateGrantResponse
-    { _cgrGrantToken = Nothing
-    , _cgrGrantId    = Nothing
-    }
+instance AWSRequest CreateGrant where
+        type Sv CreateGrant = KMS
+        type Rs CreateGrant = CreateGrantResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateGrantResponse' <$>
+                   (x .?> "GrantId") <*> (x .?> "GrantToken") <*>
+                     (pure (fromEnum s)))
 
--- | Unique grant identifier. You can use the /GrantId/ value to revoke a grant.
-cgrGrantId :: Lens' CreateGrantResponse (Maybe Text)
-cgrGrantId = lens _cgrGrantId (\s a -> s { _cgrGrantId = a })
+instance ToHeaders CreateGrant where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.CreateGrant" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | For more information, see <http://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#grant_token Grant Tokens>.
-cgrGrantToken :: Lens' CreateGrantResponse (Maybe Text)
-cgrGrantToken = lens _cgrGrantToken (\s a -> s { _cgrGrantToken = a })
+instance ToJSON CreateGrant where
+        toJSON CreateGrant'{..}
+          = object
+              ["RetiringPrincipal" .= _cgRetiringPrincipal,
+               "Constraints" .= _cgConstraints,
+               "GrantTokens" .= _cgGrantTokens,
+               "Operations" .= _cgOperations, "KeyId" .= _cgKeyId,
+               "GranteePrincipal" .= _cgGranteePrincipal]
 
 instance ToPath CreateGrant where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery CreateGrant where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders CreateGrant
+-- | /See:/ 'createGrantResponse' smart constructor.
+data CreateGrantResponse = CreateGrantResponse'
+    { _cgrsGrantId    :: !(Maybe Text)
+    , _cgrsGrantToken :: !(Maybe Text)
+    , _cgrsStatus     :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON CreateGrant where
-    toJSON CreateGrant{..} = object
-        [ "KeyId"             .= _cgKeyId
-        , "GranteePrincipal"  .= _cgGranteePrincipal
-        , "RetiringPrincipal" .= _cgRetiringPrincipal
-        , "Operations"        .= _cgOperations
-        , "Constraints"       .= _cgConstraints
-        , "GrantTokens"       .= _cgGrantTokens
-        ]
+-- | Creates a value of 'CreateGrantResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgrsGrantId'
+--
+-- * 'cgrsGrantToken'
+--
+-- * 'cgrsStatus'
+createGrantResponse
+    :: Int -- ^ 'cgrsStatus'
+    -> CreateGrantResponse
+createGrantResponse pStatus_ =
+    CreateGrantResponse'
+    { _cgrsGrantId = Nothing
+    , _cgrsGrantToken = Nothing
+    , _cgrsStatus = pStatus_
+    }
 
-instance AWSRequest CreateGrant where
-    type Sv CreateGrant = KMS
-    type Rs CreateGrant = CreateGrantResponse
+-- | Unique grant identifier. You can use the /GrantId/ value to revoke a
+-- grant.
+cgrsGrantId :: Lens' CreateGrantResponse (Maybe Text)
+cgrsGrantId = lens _cgrsGrantId (\ s a -> s{_cgrsGrantId = a});
 
-    request  = post "CreateGrant"
-    response = jsonResponse
+-- | For more information, see
+-- <http://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#grant_token Grant Tokens>.
+cgrsGrantToken :: Lens' CreateGrantResponse (Maybe Text)
+cgrsGrantToken = lens _cgrsGrantToken (\ s a -> s{_cgrsGrantToken = a});
 
-instance FromJSON CreateGrantResponse where
-    parseJSON = withObject "CreateGrantResponse" $ \o -> CreateGrantResponse
-        <$> o .:? "GrantId"
-        <*> o .:? "GrantToken"
+-- | The response status code.
+cgrsStatus :: Lens' CreateGrantResponse Int
+cgrsStatus = lens _cgrsStatus (\ s a -> s{_cgrsStatus = a});
diff --git a/gen/Network/AWS/KMS/CreateKey.hs b/gen/Network/AWS/KMS/CreateKey.hs
--- a/gen/Network/AWS/KMS/CreateKey.hs
+++ b/gen/Network/AWS/KMS/CreateKey.hs
@@ -1,137 +1,152 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.CreateKey
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Creates a customer master key. Customer master keys can be used to encrypt
--- small amounts of data (less than 4K) directly, but they are most commonly
--- used to encrypt or envelope data keys that are then used to encrypt customer
--- data. For more information about data keys, see 'GenerateDataKey' and 'GenerateDataKeyWithoutPlaintext'.
+-- Creates a customer master key. Customer master keys can be used to
+-- encrypt small amounts of data (less than 4K) directly, but they are most
+-- commonly used to encrypt or envelope data keys that are then used to
+-- encrypt customer data. For more information about data keys, see
+-- GenerateDataKey and GenerateDataKeyWithoutPlaintext.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html AWS API Reference> for CreateKey.
 module Network.AWS.KMS.CreateKey
     (
-    -- * Request
-      CreateKey
-    -- ** Request constructor
-    , createKey
-    -- ** Request lenses
-    , ckDescription
+    -- * Creating a Request
+      createKey
+    , CreateKey
+    -- * Request Lenses
     , ckKeyUsage
     , ckPolicy
+    , ckDescription
 
-    -- * Response
-    , CreateKeyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createKeyResponse
-    -- ** Response lenses
-    , ckrKeyMetadata
+    , CreateKeyResponse
+    -- * Response Lenses
+    , ckrsKeyMetadata
+    , ckrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data CreateKey = CreateKey
-    { _ckDescription :: Maybe Text
-    , _ckKeyUsage    :: Maybe KeyUsageType
-    , _ckPolicy      :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'createKey' smart constructor.
+data CreateKey = CreateKey'
+    { _ckKeyUsage    :: !(Maybe KeyUsageType)
+    , _ckPolicy      :: !(Maybe Text)
+    , _ckDescription :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CreateKey' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CreateKey' with the minimum fields required to make a request.
 --
--- * 'ckDescription' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ckKeyUsage' @::@ 'Maybe' 'KeyUsageType'
+-- * 'ckKeyUsage'
 --
--- * 'ckPolicy' @::@ 'Maybe' 'Text'
+-- * 'ckPolicy'
 --
-createKey :: CreateKey
-createKey = CreateKey
-    { _ckPolicy      = Nothing
+-- * 'ckDescription'
+createKey
+    :: CreateKey
+createKey =
+    CreateKey'
+    { _ckKeyUsage = Nothing
+    , _ckPolicy = Nothing
     , _ckDescription = Nothing
-    , _ckKeyUsage    = Nothing
     }
 
--- | Description of the key. We recommend that you choose a description that helps
--- your customer decide whether the key is appropriate for a task.
-ckDescription :: Lens' CreateKey (Maybe Text)
-ckDescription = lens _ckDescription (\s a -> s { _ckDescription = a })
-
 -- | Specifies the intended use of the key. Currently this defaults to
--- ENCRYPT/DECRYPT, and only symmetric encryption and decryption are supported.
+-- ENCRYPT\/DECRYPT, and only symmetric encryption and decryption are
+-- supported.
 ckKeyUsage :: Lens' CreateKey (Maybe KeyUsageType)
-ckKeyUsage = lens _ckKeyUsage (\s a -> s { _ckKeyUsage = a })
+ckKeyUsage = lens _ckKeyUsage (\ s a -> s{_ckKeyUsage = a});
 
--- | Policy to be attached to the key. This is required and delegates back to the
--- account. The key is the root of trust.
+-- | Policy to be attached to the key. This is required and delegates back to
+-- the account. The key is the root of trust.
 ckPolicy :: Lens' CreateKey (Maybe Text)
-ckPolicy = lens _ckPolicy (\s a -> s { _ckPolicy = a })
+ckPolicy = lens _ckPolicy (\ s a -> s{_ckPolicy = a});
 
-newtype CreateKeyResponse = CreateKeyResponse
-    { _ckrKeyMetadata :: Maybe KeyMetadata
-    } deriving (Eq, Read, Show)
+-- | Description of the key. We recommend that you choose a description that
+-- helps your customer decide whether the key is appropriate for a task.
+ckDescription :: Lens' CreateKey (Maybe Text)
+ckDescription = lens _ckDescription (\ s a -> s{_ckDescription = a});
 
--- | 'CreateKeyResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ckrKeyMetadata' @::@ 'Maybe' 'KeyMetadata'
---
-createKeyResponse :: CreateKeyResponse
-createKeyResponse = CreateKeyResponse
-    { _ckrKeyMetadata = Nothing
-    }
+instance AWSRequest CreateKey where
+        type Sv CreateKey = KMS
+        type Rs CreateKey = CreateKeyResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateKeyResponse' <$>
+                   (x .?> "KeyMetadata") <*> (pure (fromEnum s)))
 
--- | Metadata associated with the key.
-ckrKeyMetadata :: Lens' CreateKeyResponse (Maybe KeyMetadata)
-ckrKeyMetadata = lens _ckrKeyMetadata (\s a -> s { _ckrKeyMetadata = a })
+instance ToHeaders CreateKey where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.CreateKey" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON CreateKey where
+        toJSON CreateKey'{..}
+          = object
+              ["KeyUsage" .= _ckKeyUsage, "Policy" .= _ckPolicy,
+               "Description" .= _ckDescription]
+
 instance ToPath CreateKey where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery CreateKey where
-    toQuery = const mempty
-
-instance ToHeaders CreateKey
+        toQuery = const mempty
 
-instance ToJSON CreateKey where
-    toJSON CreateKey{..} = object
-        [ "Policy"      .= _ckPolicy
-        , "Description" .= _ckDescription
-        , "KeyUsage"    .= _ckKeyUsage
-        ]
+-- | /See:/ 'createKeyResponse' smart constructor.
+data CreateKeyResponse = CreateKeyResponse'
+    { _ckrsKeyMetadata :: !(Maybe KeyMetadata)
+    , _ckrsStatus      :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest CreateKey where
-    type Sv CreateKey = KMS
-    type Rs CreateKey = CreateKeyResponse
+-- | Creates a value of 'CreateKeyResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ckrsKeyMetadata'
+--
+-- * 'ckrsStatus'
+createKeyResponse
+    :: Int -- ^ 'ckrsStatus'
+    -> CreateKeyResponse
+createKeyResponse pStatus_ =
+    CreateKeyResponse'
+    { _ckrsKeyMetadata = Nothing
+    , _ckrsStatus = pStatus_
+    }
 
-    request  = post "CreateKey"
-    response = jsonResponse
+-- | Metadata associated with the key.
+ckrsKeyMetadata :: Lens' CreateKeyResponse (Maybe KeyMetadata)
+ckrsKeyMetadata = lens _ckrsKeyMetadata (\ s a -> s{_ckrsKeyMetadata = a});
 
-instance FromJSON CreateKeyResponse where
-    parseJSON = withObject "CreateKeyResponse" $ \o -> CreateKeyResponse
-        <$> o .:? "KeyMetadata"
+-- | The response status code.
+ckrsStatus :: Lens' CreateKeyResponse Int
+ckrsStatus = lens _ckrsStatus (\ s a -> s{_ckrsStatus = a});
diff --git a/gen/Network/AWS/KMS/Decrypt.hs b/gen/Network/AWS/KMS/Decrypt.hs
--- a/gen/Network/AWS/KMS/Decrypt.hs
+++ b/gen/Network/AWS/KMS/Decrypt.hs
@@ -1,158 +1,176 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.Decrypt
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Decrypts ciphertext. Ciphertext is plaintext that has been previously
--- encrypted by using any of the following functions:  'GenerateDataKey' 'GenerateDataKeyWithoutPlaintext' 'Encrypt'
+-- Decrypts ciphertext. Ciphertext is plaintext that has been previously
+-- encrypted by using any of the following functions:
 --
+-- -   GenerateDataKey
+-- -   GenerateDataKeyWithoutPlaintext
+-- -   Encrypt
+--
 -- Note that if a caller has been granted access permissions to all keys
--- (through, for example, IAM user policies that grant 'Decrypt' permission on all
--- resources), then ciphertext encrypted by using keys in other accounts where
--- the key grants access to the caller can be decrypted. To remedy this, we
--- recommend that you do not grant 'Decrypt' access in an IAM user policy. Instead
--- grant 'Decrypt' access only in key policies. If you must grant 'Decrypt' access
--- in an IAM user policy, you should scope the resource to specific keys or to
--- specific trusted accounts.
+-- (through, for example, IAM user policies that grant 'Decrypt' permission
+-- on all resources), then ciphertext encrypted by using keys in other
+-- accounts where the key grants access to the caller can be decrypted. To
+-- remedy this, we recommend that you do not grant 'Decrypt' access in an
+-- IAM user policy. Instead grant 'Decrypt' access only in key policies. If
+-- you must grant 'Decrypt' access in an IAM user policy, you should scope
+-- the resource to specific keys or to specific trusted accounts.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html AWS API Reference> for Decrypt.
 module Network.AWS.KMS.Decrypt
     (
-    -- * Request
-      Decrypt
-    -- ** Request constructor
-    , decrypt
-    -- ** Request lenses
-    , dCiphertextBlob
+    -- * Creating a Request
+      decrypt
+    , Decrypt
+    -- * Request Lenses
     , dEncryptionContext
     , dGrantTokens
+    , dCiphertextBlob
 
-    -- * Response
-    , DecryptResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , decryptResponse
-    -- ** Response lenses
-    , drKeyId
-    , drPlaintext
+    , DecryptResponse
+    -- * Response Lenses
+    , drsKeyId
+    , drsPlaintext
+    , drsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data Decrypt = Decrypt
-    { _dCiphertextBlob    :: Base64
-    , _dEncryptionContext :: Map Text Text
-    , _dGrantTokens       :: List "GrantTokens" Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'decrypt' smart constructor.
+data Decrypt = Decrypt'
+    { _dEncryptionContext :: !(Maybe (Map Text Text))
+    , _dGrantTokens       :: !(Maybe [Text])
+    , _dCiphertextBlob    :: !Base64
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'Decrypt' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'Decrypt' with the minimum fields required to make a request.
 --
--- * 'dCiphertextBlob' @::@ 'Base64'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dEncryptionContext' @::@ 'HashMap' 'Text' 'Text'
+-- * 'dEncryptionContext'
 --
--- * 'dGrantTokens' @::@ ['Text']
+-- * 'dGrantTokens'
 --
-decrypt :: Base64 -- ^ 'dCiphertextBlob'
-        -> Decrypt
-decrypt p1 = Decrypt
-    { _dCiphertextBlob    = p1
-    , _dEncryptionContext = mempty
-    , _dGrantTokens       = mempty
+-- * 'dCiphertextBlob'
+decrypt
+    :: ByteString -- ^ 'dCiphertextBlob'
+    -> Decrypt
+decrypt pCiphertextBlob_ =
+    Decrypt'
+    { _dEncryptionContext = Nothing
+    , _dGrantTokens = Nothing
+    , _dCiphertextBlob = _Base64 # pCiphertextBlob_
     }
 
--- | Ciphertext to be decrypted. The blob includes metadata.
-dCiphertextBlob :: Lens' Decrypt Base64
-dCiphertextBlob = lens _dCiphertextBlob (\s a -> s { _dCiphertextBlob = a })
-
--- | The encryption context. If this was specified in the 'Encrypt' function, it
--- must be specified here or the decryption operation will fail. For more
--- information, see <http://docs.aws.amazon.com/kms/latest/developerguide/encrypt-context.html Encryption Context>.
+-- | The encryption context. If this was specified in the Encrypt function,
+-- it must be specified here or the decryption operation will fail. For
+-- more information, see
+-- <http://docs.aws.amazon.com/kms/latest/developerguide/encrypt-context.html Encryption Context>.
 dEncryptionContext :: Lens' Decrypt (HashMap Text Text)
-dEncryptionContext =
-    lens _dEncryptionContext (\s a -> s { _dEncryptionContext = a })
-        . _Map
+dEncryptionContext = lens _dEncryptionContext (\ s a -> s{_dEncryptionContext = a}) . _Default . _Map;
 
--- | For more information, see <http://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#grant_token Grant Tokens>.
+-- | For more information, see
+-- <http://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#grant_token Grant Tokens>.
 dGrantTokens :: Lens' Decrypt [Text]
-dGrantTokens = lens _dGrantTokens (\s a -> s { _dGrantTokens = a }) . _List
+dGrantTokens = lens _dGrantTokens (\ s a -> s{_dGrantTokens = a}) . _Default . _Coerce;
 
-data DecryptResponse = DecryptResponse
-    { _drKeyId     :: Maybe Text
-    , _drPlaintext :: Maybe Base64
-    } deriving (Eq, Read, Show)
+-- | Ciphertext to be decrypted. The blob includes metadata.
+dCiphertextBlob :: Lens' Decrypt ByteString
+dCiphertextBlob = lens _dCiphertextBlob (\ s a -> s{_dCiphertextBlob = a}) . _Base64;
 
--- | 'DecryptResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'drKeyId' @::@ 'Maybe' 'Text'
---
--- * 'drPlaintext' @::@ 'Maybe' 'Base64'
---
-decryptResponse :: DecryptResponse
-decryptResponse = DecryptResponse
-    { _drKeyId     = Nothing
-    , _drPlaintext = Nothing
-    }
+instance AWSRequest Decrypt where
+        type Sv Decrypt = KMS
+        type Rs Decrypt = DecryptResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DecryptResponse' <$>
+                   (x .?> "KeyId") <*> (x .?> "Plaintext") <*>
+                     (pure (fromEnum s)))
 
--- | ARN of the key used to perform the decryption. This value is returned if no
--- errors are encountered during the operation.
-drKeyId :: Lens' DecryptResponse (Maybe Text)
-drKeyId = lens _drKeyId (\s a -> s { _drKeyId = a })
+instance ToHeaders Decrypt where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.Decrypt" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | Decrypted plaintext data. This value may not be returned if the customer
--- master key is not available or if you didn't have permission to use it.
-drPlaintext :: Lens' DecryptResponse (Maybe Base64)
-drPlaintext = lens _drPlaintext (\s a -> s { _drPlaintext = a })
+instance ToJSON Decrypt where
+        toJSON Decrypt'{..}
+          = object
+              ["EncryptionContext" .= _dEncryptionContext,
+               "GrantTokens" .= _dGrantTokens,
+               "CiphertextBlob" .= _dCiphertextBlob]
 
 instance ToPath Decrypt where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery Decrypt where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders Decrypt
+-- | /See:/ 'decryptResponse' smart constructor.
+data DecryptResponse = DecryptResponse'
+    { _drsKeyId     :: !(Maybe Text)
+    , _drsPlaintext :: !(Maybe (Sensitive Base64))
+    , _drsStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON Decrypt where
-    toJSON Decrypt{..} = object
-        [ "CiphertextBlob"    .= _dCiphertextBlob
-        , "EncryptionContext" .= _dEncryptionContext
-        , "GrantTokens"       .= _dGrantTokens
-        ]
+-- | Creates a value of 'DecryptResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drsKeyId'
+--
+-- * 'drsPlaintext'
+--
+-- * 'drsStatus'
+decryptResponse
+    :: Int -- ^ 'drsStatus'
+    -> DecryptResponse
+decryptResponse pStatus_ =
+    DecryptResponse'
+    { _drsKeyId = Nothing
+    , _drsPlaintext = Nothing
+    , _drsStatus = pStatus_
+    }
 
-instance AWSRequest Decrypt where
-    type Sv Decrypt = KMS
-    type Rs Decrypt = DecryptResponse
+-- | ARN of the key used to perform the decryption. This value is returned if
+-- no errors are encountered during the operation.
+drsKeyId :: Lens' DecryptResponse (Maybe Text)
+drsKeyId = lens _drsKeyId (\ s a -> s{_drsKeyId = a});
 
-    request  = post "Decrypt"
-    response = jsonResponse
+-- | Decrypted plaintext data. This value may not be returned if the customer
+-- master key is not available or if you didn\'t have permission to use it.
+drsPlaintext :: Lens' DecryptResponse (Maybe ByteString)
+drsPlaintext = lens _drsPlaintext (\ s a -> s{_drsPlaintext = a}) . mapping (_Sensitive . _Base64);
 
-instance FromJSON DecryptResponse where
-    parseJSON = withObject "DecryptResponse" $ \o -> DecryptResponse
-        <$> o .:? "KeyId"
-        <*> o .:? "Plaintext"
+-- | The response status code.
+drsStatus :: Lens' DecryptResponse Int
+drsStatus = lens _drsStatus (\ s a -> s{_drsStatus = a});
diff --git a/gen/Network/AWS/KMS/DeleteAlias.hs b/gen/Network/AWS/KMS/DeleteAlias.hs
--- a/gen/Network/AWS/KMS/DeleteAlias.hs
+++ b/gen/Network/AWS/KMS/DeleteAlias.hs
@@ -1,95 +1,102 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.DeleteAlias
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deletes the specified alias. To associate an alias with a different key, call 'UpdateAlias'.
+-- Deletes the specified alias. To associate an alias with a different key,
+-- call UpdateAlias.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteAlias.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteAlias.html AWS API Reference> for DeleteAlias.
 module Network.AWS.KMS.DeleteAlias
     (
-    -- * Request
-      DeleteAlias
-    -- ** Request constructor
-    , deleteAlias
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteAlias
+    , DeleteAlias
+    -- * Request Lenses
     , daAliasName
 
-    -- * Response
-    , DeleteAliasResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteAliasResponse
+    , DeleteAliasResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype DeleteAlias = DeleteAlias
+-- | /See:/ 'deleteAlias' smart constructor.
+newtype DeleteAlias = DeleteAlias'
     { _daAliasName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteAlias' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteAlias' with the minimum fields required to make a request.
 --
--- * 'daAliasName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-deleteAlias :: Text -- ^ 'daAliasName'
-            -> DeleteAlias
-deleteAlias p1 = DeleteAlias
-    { _daAliasName = p1
+-- * 'daAliasName'
+deleteAlias
+    :: Text -- ^ 'daAliasName'
+    -> DeleteAlias
+deleteAlias pAliasName_ =
+    DeleteAlias'
+    { _daAliasName = pAliasName_
     }
 
--- | The alias to be deleted. The name must start with the word "alias" followed
--- by a forward slash (alias/). Aliases that begin with "alias/AWS" are reserved.
+-- | The alias to be deleted. The name must start with the word \"alias\"
+-- followed by a forward slash (alias\/). Aliases that begin with
+-- \"alias\/AWS\" are reserved.
 daAliasName :: Lens' DeleteAlias Text
-daAliasName = lens _daAliasName (\s a -> s { _daAliasName = a })
+daAliasName = lens _daAliasName (\ s a -> s{_daAliasName = a});
 
-data DeleteAliasResponse = DeleteAliasResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteAlias where
+        type Sv DeleteAlias = KMS
+        type Rs DeleteAlias = DeleteAliasResponse
+        request = postJSON
+        response = receiveNull DeleteAliasResponse'
 
--- | 'DeleteAliasResponse' constructor.
-deleteAliasResponse :: DeleteAliasResponse
-deleteAliasResponse = DeleteAliasResponse
+instance ToHeaders DeleteAlias where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.DeleteAlias" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON DeleteAlias where
+        toJSON DeleteAlias'{..}
+          = object ["AliasName" .= _daAliasName]
+
 instance ToPath DeleteAlias where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DeleteAlias where
-    toQuery = const mempty
-
-instance ToHeaders DeleteAlias
-
-instance ToJSON DeleteAlias where
-    toJSON DeleteAlias{..} = object
-        [ "AliasName" .= _daAliasName
-        ]
+        toQuery = const mempty
 
-instance AWSRequest DeleteAlias where
-    type Sv DeleteAlias = KMS
-    type Rs DeleteAlias = DeleteAliasResponse
+-- | /See:/ 'deleteAliasResponse' smart constructor.
+data DeleteAliasResponse =
+    DeleteAliasResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "DeleteAlias"
-    response = nullResponse DeleteAliasResponse
+-- | Creates a value of 'DeleteAliasResponse' with the minimum fields required to make a request.
+--
+deleteAliasResponse
+    :: DeleteAliasResponse
+deleteAliasResponse = DeleteAliasResponse'
diff --git a/gen/Network/AWS/KMS/DescribeKey.hs b/gen/Network/AWS/KMS/DescribeKey.hs
--- a/gen/Network/AWS/KMS/DescribeKey.hs
+++ b/gen/Network/AWS/KMS/DescribeKey.hs
@@ -1,117 +1,134 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.DescribeKey
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Provides detailed information about the specified customer master key.
+-- Provides detailed information about the specified customer master key.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html AWS API Reference> for DescribeKey.
 module Network.AWS.KMS.DescribeKey
     (
-    -- * Request
-      DescribeKey
-    -- ** Request constructor
-    , describeKey
-    -- ** Request lenses
-    , dk1KeyId
+    -- * Creating a Request
+      describeKey
+    , DescribeKey
+    -- * Request Lenses
+    , dKeyId
 
-    -- * Response
-    , DescribeKeyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , describeKeyResponse
-    -- ** Response lenses
-    , dkrKeyMetadata
+    , DescribeKeyResponse
+    -- * Response Lenses
+    , dkrsKeyMetadata
+    , dkrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype DescribeKey = DescribeKey
-    { _dk1KeyId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'describeKey' smart constructor.
+newtype DescribeKey = DescribeKey'
+    { _dKeyId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DescribeKey' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DescribeKey' with the minimum fields required to make a request.
 --
--- * 'dk1KeyId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-describeKey :: Text -- ^ 'dk1KeyId'
-            -> DescribeKey
-describeKey p1 = DescribeKey
-    { _dk1KeyId = p1
+-- * 'dKeyId'
+describeKey
+    :: Text -- ^ 'dKeyId'
+    -> DescribeKey
+describeKey pKeyId_ =
+    DescribeKey'
+    { _dKeyId = pKeyId_
     }
 
--- | A unique identifier for the customer master key. This value can be a globally
--- unique identifier, a fully specified ARN to either an alias or a key, or an
--- alias name prefixed by "alias/".  Key ARN Example -
--- arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012 Alias ARN Example - arn:aws:kms:us-east-1:123456789012:alias/MyAliasName
--- Globally Unique Key ID Example - 12345678-1234-1234-1234-123456789012 Alias
--- Name Example - alias/MyAliasName
-dk1KeyId :: Lens' DescribeKey Text
-dk1KeyId = lens _dk1KeyId (\s a -> s { _dk1KeyId = a })
+-- | A unique identifier for the customer master key. This value can be a
+-- globally unique identifier, a fully specified ARN to either an alias or
+-- a key, or an alias name prefixed by \"alias\/\".
+--
+-- -   Key ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   Alias ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:alias\/MyAliasName
+-- -   Globally Unique Key ID Example -
+--     12345678-1234-1234-1234-123456789012
+-- -   Alias Name Example - alias\/MyAliasName
+dKeyId :: Lens' DescribeKey Text
+dKeyId = lens _dKeyId (\ s a -> s{_dKeyId = a});
 
-newtype DescribeKeyResponse = DescribeKeyResponse
-    { _dkrKeyMetadata :: Maybe KeyMetadata
-    } deriving (Eq, Read, Show)
+instance AWSRequest DescribeKey where
+        type Sv DescribeKey = KMS
+        type Rs DescribeKey = DescribeKeyResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeKeyResponse' <$>
+                   (x .?> "KeyMetadata") <*> (pure (fromEnum s)))
 
--- | 'DescribeKeyResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dkrKeyMetadata' @::@ 'Maybe' 'KeyMetadata'
---
-describeKeyResponse :: DescribeKeyResponse
-describeKeyResponse = DescribeKeyResponse
-    { _dkrKeyMetadata = Nothing
-    }
+instance ToHeaders DescribeKey where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.DescribeKey" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | Metadata associated with the key.
-dkrKeyMetadata :: Lens' DescribeKeyResponse (Maybe KeyMetadata)
-dkrKeyMetadata = lens _dkrKeyMetadata (\s a -> s { _dkrKeyMetadata = a })
+instance ToJSON DescribeKey where
+        toJSON DescribeKey'{..} = object ["KeyId" .= _dKeyId]
 
 instance ToPath DescribeKey where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DescribeKey where
-    toQuery = const mempty
-
-instance ToHeaders DescribeKey
+        toQuery = const mempty
 
-instance ToJSON DescribeKey where
-    toJSON DescribeKey{..} = object
-        [ "KeyId" .= _dk1KeyId
-        ]
+-- | /See:/ 'describeKeyResponse' smart constructor.
+data DescribeKeyResponse = DescribeKeyResponse'
+    { _dkrsKeyMetadata :: !(Maybe KeyMetadata)
+    , _dkrsStatus      :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest DescribeKey where
-    type Sv DescribeKey = KMS
-    type Rs DescribeKey = DescribeKeyResponse
+-- | Creates a value of 'DescribeKeyResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dkrsKeyMetadata'
+--
+-- * 'dkrsStatus'
+describeKeyResponse
+    :: Int -- ^ 'dkrsStatus'
+    -> DescribeKeyResponse
+describeKeyResponse pStatus_ =
+    DescribeKeyResponse'
+    { _dkrsKeyMetadata = Nothing
+    , _dkrsStatus = pStatus_
+    }
 
-    request  = post "DescribeKey"
-    response = jsonResponse
+-- | Metadata associated with the key.
+dkrsKeyMetadata :: Lens' DescribeKeyResponse (Maybe KeyMetadata)
+dkrsKeyMetadata = lens _dkrsKeyMetadata (\ s a -> s{_dkrsKeyMetadata = a});
 
-instance FromJSON DescribeKeyResponse where
-    parseJSON = withObject "DescribeKeyResponse" $ \o -> DescribeKeyResponse
-        <$> o .:? "KeyMetadata"
+-- | The response status code.
+dkrsStatus :: Lens' DescribeKeyResponse Int
+dkrsStatus = lens _dkrsStatus (\ s a -> s{_dkrsStatus = a});
diff --git a/gen/Network/AWS/KMS/DisableKey.hs b/gen/Network/AWS/KMS/DisableKey.hs
--- a/gen/Network/AWS/KMS/DisableKey.hs
+++ b/gen/Network/AWS/KMS/DisableKey.hs
@@ -1,97 +1,104 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.DisableKey
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Marks a key as disabled, thereby preventing its use.
+-- Marks a key as disabled, thereby preventing its use.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_DisableKey.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_DisableKey.html AWS API Reference> for DisableKey.
 module Network.AWS.KMS.DisableKey
     (
-    -- * Request
-      DisableKey
-    -- ** Request constructor
-    , disableKey
-    -- ** Request lenses
+    -- * Creating a Request
+      disableKey
+    , DisableKey
+    -- * Request Lenses
     , dkKeyId
 
-    -- * Response
-    , DisableKeyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , disableKeyResponse
+    , DisableKeyResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype DisableKey = DisableKey
+-- | /See:/ 'disableKey' smart constructor.
+newtype DisableKey = DisableKey'
     { _dkKeyId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DisableKey' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DisableKey' with the minimum fields required to make a request.
 --
--- * 'dkKeyId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-disableKey :: Text -- ^ 'dkKeyId'
-           -> DisableKey
-disableKey p1 = DisableKey
-    { _dkKeyId = p1
+-- * 'dkKeyId'
+disableKey
+    :: Text -- ^ 'dkKeyId'
+    -> DisableKey
+disableKey pKeyId_ =
+    DisableKey'
+    { _dkKeyId = pKeyId_
     }
 
--- | A unique identifier for the customer master key. This value can be a globally
--- unique identifier or the fully specified ARN to a key.  Key ARN Example -
--- arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012 Globally Unique Key ID Example - 12345678-1234-1234-1234-123456789012
+-- | A unique identifier for the customer master key. This value can be a
+-- globally unique identifier or the fully specified ARN to a key.
 --
+-- -   Key ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   Globally Unique Key ID Example -
+--     12345678-1234-1234-1234-123456789012
 dkKeyId :: Lens' DisableKey Text
-dkKeyId = lens _dkKeyId (\s a -> s { _dkKeyId = a })
+dkKeyId = lens _dkKeyId (\ s a -> s{_dkKeyId = a});
 
-data DisableKeyResponse = DisableKeyResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DisableKey where
+        type Sv DisableKey = KMS
+        type Rs DisableKey = DisableKeyResponse
+        request = postJSON
+        response = receiveNull DisableKeyResponse'
 
--- | 'DisableKeyResponse' constructor.
-disableKeyResponse :: DisableKeyResponse
-disableKeyResponse = DisableKeyResponse
+instance ToHeaders DisableKey where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.DisableKey" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON DisableKey where
+        toJSON DisableKey'{..} = object ["KeyId" .= _dkKeyId]
+
 instance ToPath DisableKey where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DisableKey where
-    toQuery = const mempty
-
-instance ToHeaders DisableKey
-
-instance ToJSON DisableKey where
-    toJSON DisableKey{..} = object
-        [ "KeyId" .= _dkKeyId
-        ]
+        toQuery = const mempty
 
-instance AWSRequest DisableKey where
-    type Sv DisableKey = KMS
-    type Rs DisableKey = DisableKeyResponse
+-- | /See:/ 'disableKeyResponse' smart constructor.
+data DisableKeyResponse =
+    DisableKeyResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "DisableKey"
-    response = nullResponse DisableKeyResponse
+-- | Creates a value of 'DisableKeyResponse' with the minimum fields required to make a request.
+--
+disableKeyResponse
+    :: DisableKeyResponse
+disableKeyResponse = DisableKeyResponse'
diff --git a/gen/Network/AWS/KMS/DisableKeyRotation.hs b/gen/Network/AWS/KMS/DisableKeyRotation.hs
--- a/gen/Network/AWS/KMS/DisableKeyRotation.hs
+++ b/gen/Network/AWS/KMS/DisableKeyRotation.hs
@@ -1,97 +1,106 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.DisableKeyRotation
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Disables rotation of the specified key.
+-- Disables rotation of the specified key.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_DisableKeyRotation.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_DisableKeyRotation.html AWS API Reference> for DisableKeyRotation.
 module Network.AWS.KMS.DisableKeyRotation
     (
-    -- * Request
-      DisableKeyRotation
-    -- ** Request constructor
-    , disableKeyRotation
-    -- ** Request lenses
+    -- * Creating a Request
+      disableKeyRotation
+    , DisableKeyRotation
+    -- * Request Lenses
     , dkrKeyId
 
-    -- * Response
-    , DisableKeyRotationResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , disableKeyRotationResponse
+    , DisableKeyRotationResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype DisableKeyRotation = DisableKeyRotation
+-- | /See:/ 'disableKeyRotation' smart constructor.
+newtype DisableKeyRotation = DisableKeyRotation'
     { _dkrKeyId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DisableKeyRotation' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DisableKeyRotation' with the minimum fields required to make a request.
 --
--- * 'dkrKeyId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-disableKeyRotation :: Text -- ^ 'dkrKeyId'
-                   -> DisableKeyRotation
-disableKeyRotation p1 = DisableKeyRotation
-    { _dkrKeyId = p1
+-- * 'dkrKeyId'
+disableKeyRotation
+    :: Text -- ^ 'dkrKeyId'
+    -> DisableKeyRotation
+disableKeyRotation pKeyId_ =
+    DisableKeyRotation'
+    { _dkrKeyId = pKeyId_
     }
 
--- | A unique identifier for the customer master key. This value can be a globally
--- unique identifier or the fully specified ARN to a key.  Key ARN Example -
--- arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012 Globally Unique Key ID Example - 12345678-1234-1234-1234-123456789012
+-- | A unique identifier for the customer master key. This value can be a
+-- globally unique identifier or the fully specified ARN to a key.
 --
+-- -   Key ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   Globally Unique Key ID Example -
+--     12345678-1234-1234-1234-123456789012
 dkrKeyId :: Lens' DisableKeyRotation Text
-dkrKeyId = lens _dkrKeyId (\s a -> s { _dkrKeyId = a })
+dkrKeyId = lens _dkrKeyId (\ s a -> s{_dkrKeyId = a});
 
-data DisableKeyRotationResponse = DisableKeyRotationResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DisableKeyRotation where
+        type Sv DisableKeyRotation = KMS
+        type Rs DisableKeyRotation =
+             DisableKeyRotationResponse
+        request = postJSON
+        response = receiveNull DisableKeyRotationResponse'
 
--- | 'DisableKeyRotationResponse' constructor.
-disableKeyRotationResponse :: DisableKeyRotationResponse
-disableKeyRotationResponse = DisableKeyRotationResponse
+instance ToHeaders DisableKeyRotation where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.DisableKeyRotation" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON DisableKeyRotation where
+        toJSON DisableKeyRotation'{..}
+          = object ["KeyId" .= _dkrKeyId]
+
 instance ToPath DisableKeyRotation where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DisableKeyRotation where
-    toQuery = const mempty
-
-instance ToHeaders DisableKeyRotation
-
-instance ToJSON DisableKeyRotation where
-    toJSON DisableKeyRotation{..} = object
-        [ "KeyId" .= _dkrKeyId
-        ]
+        toQuery = const mempty
 
-instance AWSRequest DisableKeyRotation where
-    type Sv DisableKeyRotation = KMS
-    type Rs DisableKeyRotation = DisableKeyRotationResponse
+-- | /See:/ 'disableKeyRotationResponse' smart constructor.
+data DisableKeyRotationResponse =
+    DisableKeyRotationResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "DisableKeyRotation"
-    response = nullResponse DisableKeyRotationResponse
+-- | Creates a value of 'DisableKeyRotationResponse' with the minimum fields required to make a request.
+--
+disableKeyRotationResponse
+    :: DisableKeyRotationResponse
+disableKeyRotationResponse = DisableKeyRotationResponse'
diff --git a/gen/Network/AWS/KMS/EnableKey.hs b/gen/Network/AWS/KMS/EnableKey.hs
--- a/gen/Network/AWS/KMS/EnableKey.hs
+++ b/gen/Network/AWS/KMS/EnableKey.hs
@@ -1,98 +1,105 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.EnableKey
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Marks a key as enabled, thereby permitting its use. You can have up to 25
--- enabled keys at one time.
+-- Marks a key as enabled, thereby permitting its use. You can have up to
+-- 25 enabled keys at one time.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_EnableKey.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_EnableKey.html AWS API Reference> for EnableKey.
 module Network.AWS.KMS.EnableKey
     (
-    -- * Request
-      EnableKey
-    -- ** Request constructor
-    , enableKey
-    -- ** Request lenses
+    -- * Creating a Request
+      enableKey
+    , EnableKey
+    -- * Request Lenses
     , ekKeyId
 
-    -- * Response
-    , EnableKeyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , enableKeyResponse
+    , EnableKeyResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype EnableKey = EnableKey
+-- | /See:/ 'enableKey' smart constructor.
+newtype EnableKey = EnableKey'
     { _ekKeyId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'EnableKey' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'EnableKey' with the minimum fields required to make a request.
 --
--- * 'ekKeyId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-enableKey :: Text -- ^ 'ekKeyId'
-          -> EnableKey
-enableKey p1 = EnableKey
-    { _ekKeyId = p1
+-- * 'ekKeyId'
+enableKey
+    :: Text -- ^ 'ekKeyId'
+    -> EnableKey
+enableKey pKeyId_ =
+    EnableKey'
+    { _ekKeyId = pKeyId_
     }
 
--- | A unique identifier for the customer master key. This value can be a globally
--- unique identifier or the fully specified ARN to a key.  Key ARN Example -
--- arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012 Globally Unique Key ID Example - 12345678-1234-1234-1234-123456789012
+-- | A unique identifier for the customer master key. This value can be a
+-- globally unique identifier or the fully specified ARN to a key.
 --
+-- -   Key ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   Globally Unique Key ID Example -
+--     12345678-1234-1234-1234-123456789012
 ekKeyId :: Lens' EnableKey Text
-ekKeyId = lens _ekKeyId (\s a -> s { _ekKeyId = a })
+ekKeyId = lens _ekKeyId (\ s a -> s{_ekKeyId = a});
 
-data EnableKeyResponse = EnableKeyResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest EnableKey where
+        type Sv EnableKey = KMS
+        type Rs EnableKey = EnableKeyResponse
+        request = postJSON
+        response = receiveNull EnableKeyResponse'
 
--- | 'EnableKeyResponse' constructor.
-enableKeyResponse :: EnableKeyResponse
-enableKeyResponse = EnableKeyResponse
+instance ToHeaders EnableKey where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.EnableKey" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON EnableKey where
+        toJSON EnableKey'{..} = object ["KeyId" .= _ekKeyId]
+
 instance ToPath EnableKey where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery EnableKey where
-    toQuery = const mempty
-
-instance ToHeaders EnableKey
-
-instance ToJSON EnableKey where
-    toJSON EnableKey{..} = object
-        [ "KeyId" .= _ekKeyId
-        ]
+        toQuery = const mempty
 
-instance AWSRequest EnableKey where
-    type Sv EnableKey = KMS
-    type Rs EnableKey = EnableKeyResponse
+-- | /See:/ 'enableKeyResponse' smart constructor.
+data EnableKeyResponse =
+    EnableKeyResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "EnableKey"
-    response = nullResponse EnableKeyResponse
+-- | Creates a value of 'EnableKeyResponse' with the minimum fields required to make a request.
+--
+enableKeyResponse
+    :: EnableKeyResponse
+enableKeyResponse = EnableKeyResponse'
diff --git a/gen/Network/AWS/KMS/EnableKeyRotation.hs b/gen/Network/AWS/KMS/EnableKeyRotation.hs
--- a/gen/Network/AWS/KMS/EnableKeyRotation.hs
+++ b/gen/Network/AWS/KMS/EnableKeyRotation.hs
@@ -1,97 +1,105 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.EnableKeyRotation
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Enables rotation of the specified customer master key.
+-- Enables rotation of the specified customer master key.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_EnableKeyRotation.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_EnableKeyRotation.html AWS API Reference> for EnableKeyRotation.
 module Network.AWS.KMS.EnableKeyRotation
     (
-    -- * Request
-      EnableKeyRotation
-    -- ** Request constructor
-    , enableKeyRotation
-    -- ** Request lenses
+    -- * Creating a Request
+      enableKeyRotation
+    , EnableKeyRotation
+    -- * Request Lenses
     , ekrKeyId
 
-    -- * Response
-    , EnableKeyRotationResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , enableKeyRotationResponse
+    , EnableKeyRotationResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype EnableKeyRotation = EnableKeyRotation
+-- | /See:/ 'enableKeyRotation' smart constructor.
+newtype EnableKeyRotation = EnableKeyRotation'
     { _ekrKeyId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'EnableKeyRotation' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'EnableKeyRotation' with the minimum fields required to make a request.
 --
--- * 'ekrKeyId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-enableKeyRotation :: Text -- ^ 'ekrKeyId'
-                  -> EnableKeyRotation
-enableKeyRotation p1 = EnableKeyRotation
-    { _ekrKeyId = p1
+-- * 'ekrKeyId'
+enableKeyRotation
+    :: Text -- ^ 'ekrKeyId'
+    -> EnableKeyRotation
+enableKeyRotation pKeyId_ =
+    EnableKeyRotation'
+    { _ekrKeyId = pKeyId_
     }
 
--- | A unique identifier for the customer master key. This value can be a globally
--- unique identifier or the fully specified ARN to a key.  Key ARN Example -
--- arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012 Globally Unique Key ID Example - 12345678-1234-1234-1234-123456789012
+-- | A unique identifier for the customer master key. This value can be a
+-- globally unique identifier or the fully specified ARN to a key.
 --
+-- -   Key ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   Globally Unique Key ID Example -
+--     12345678-1234-1234-1234-123456789012
 ekrKeyId :: Lens' EnableKeyRotation Text
-ekrKeyId = lens _ekrKeyId (\s a -> s { _ekrKeyId = a })
+ekrKeyId = lens _ekrKeyId (\ s a -> s{_ekrKeyId = a});
 
-data EnableKeyRotationResponse = EnableKeyRotationResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest EnableKeyRotation where
+        type Sv EnableKeyRotation = KMS
+        type Rs EnableKeyRotation = EnableKeyRotationResponse
+        request = postJSON
+        response = receiveNull EnableKeyRotationResponse'
 
--- | 'EnableKeyRotationResponse' constructor.
-enableKeyRotationResponse :: EnableKeyRotationResponse
-enableKeyRotationResponse = EnableKeyRotationResponse
+instance ToHeaders EnableKeyRotation where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.EnableKeyRotation" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON EnableKeyRotation where
+        toJSON EnableKeyRotation'{..}
+          = object ["KeyId" .= _ekrKeyId]
+
 instance ToPath EnableKeyRotation where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery EnableKeyRotation where
-    toQuery = const mempty
-
-instance ToHeaders EnableKeyRotation
-
-instance ToJSON EnableKeyRotation where
-    toJSON EnableKeyRotation{..} = object
-        [ "KeyId" .= _ekrKeyId
-        ]
+        toQuery = const mempty
 
-instance AWSRequest EnableKeyRotation where
-    type Sv EnableKeyRotation = KMS
-    type Rs EnableKeyRotation = EnableKeyRotationResponse
+-- | /See:/ 'enableKeyRotationResponse' smart constructor.
+data EnableKeyRotationResponse =
+    EnableKeyRotationResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "EnableKeyRotation"
-    response = nullResponse EnableKeyRotationResponse
+-- | Creates a value of 'EnableKeyRotationResponse' with the minimum fields required to make a request.
+--
+enableKeyRotationResponse
+    :: EnableKeyRotationResponse
+enableKeyRotationResponse = EnableKeyRotationResponse'
diff --git a/gen/Network/AWS/KMS/Encrypt.hs b/gen/Network/AWS/KMS/Encrypt.hs
--- a/gen/Network/AWS/KMS/Encrypt.hs
+++ b/gen/Network/AWS/KMS/Encrypt.hs
@@ -1,177 +1,202 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.Encrypt
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Encrypts plaintext into ciphertext by using a customer master key. The 'Encrypt'
--- function has two primary use cases:  You can encrypt up to 4 KB of arbitrary
--- data such as an RSA key, a database password, or other sensitive customer
--- information. If you are moving encrypted data from one region to another, you
--- can use this API to encrypt in the new region the plaintext data key that was
--- used to encrypt the data in the original region. This provides you with an
--- encrypted copy of the data key that can be decrypted in the new region and
--- used there to decrypt the encrypted data.
+-- Encrypts plaintext into ciphertext by using a customer master key. The
+-- 'Encrypt' function has two primary use cases:
 --
--- Unless you are moving encrypted data from one region to another, you don't
--- use this function to encrypt a generated data key within a region. You
--- retrieve data keys already encrypted by calling the 'GenerateDataKey' or 'GenerateDataKeyWithoutPlaintext' function. Data keys don't need to be encrypted again by calling 'Encrypt'.
+-- -   You can encrypt up to 4 KB of arbitrary data such as an RSA key, a
+--     database password, or other sensitive customer information.
+-- -   If you are moving encrypted data from one region to another, you can
+--     use this API to encrypt in the new region the plaintext data key
+--     that was used to encrypt the data in the original region. This
+--     provides you with an encrypted copy of the data key that can be
+--     decrypted in the new region and used there to decrypt the encrypted
+--     data.
 --
--- If you want to encrypt data locally in your application, you can use the 'GenerateDataKey' function to return a plaintext data encryption key and a copy of the key
--- encrypted under the customer master key (CMK) of your choosing.
+-- Unless you are moving encrypted data from one region to another, you
+-- don\'t use this function to encrypt a generated data key within a
+-- region. You retrieve data keys already encrypted by calling the
+-- GenerateDataKey or GenerateDataKeyWithoutPlaintext function. Data keys
+-- don\'t need to be encrypted again by calling 'Encrypt'.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html>
+-- If you want to encrypt data locally in your application, you can use the
+-- 'GenerateDataKey' function to return a plaintext data encryption key and
+-- a copy of the key encrypted under the customer master key (CMK) of your
+-- choosing.
+--
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html AWS API Reference> for Encrypt.
 module Network.AWS.KMS.Encrypt
     (
-    -- * Request
-      Encrypt
-    -- ** Request constructor
-    , encrypt
-    -- ** Request lenses
+    -- * Creating a Request
+      encrypt
+    , Encrypt
+    -- * Request Lenses
     , eEncryptionContext
     , eGrantTokens
     , eKeyId
     , ePlaintext
 
-    -- * Response
-    , EncryptResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , encryptResponse
-    -- ** Response lenses
-    , erCiphertextBlob
-    , erKeyId
+    , EncryptResponse
+    -- * Response Lenses
+    , ersKeyId
+    , ersCiphertextBlob
+    , ersStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data Encrypt = Encrypt
-    { _eEncryptionContext :: Map Text Text
-    , _eGrantTokens       :: List "GrantTokens" Text
-    , _eKeyId             :: Text
-    , _ePlaintext         :: Base64
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'encrypt' smart constructor.
+data Encrypt = Encrypt'
+    { _eEncryptionContext :: !(Maybe (Map Text Text))
+    , _eGrantTokens       :: !(Maybe [Text])
+    , _eKeyId             :: !Text
+    , _ePlaintext         :: !(Sensitive Base64)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'Encrypt' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'Encrypt' with the minimum fields required to make a request.
 --
--- * 'eEncryptionContext' @::@ 'HashMap' 'Text' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'eGrantTokens' @::@ ['Text']
+-- * 'eEncryptionContext'
 --
--- * 'eKeyId' @::@ 'Text'
+-- * 'eGrantTokens'
 --
--- * 'ePlaintext' @::@ 'Base64'
+-- * 'eKeyId'
 --
-encrypt :: Text -- ^ 'eKeyId'
-        -> Base64 -- ^ 'ePlaintext'
-        -> Encrypt
-encrypt p1 p2 = Encrypt
-    { _eKeyId             = p1
-    , _ePlaintext         = p2
-    , _eEncryptionContext = mempty
-    , _eGrantTokens       = mempty
+-- * 'ePlaintext'
+encrypt
+    :: Text -- ^ 'eKeyId'
+    -> ByteString -- ^ 'ePlaintext'
+    -> Encrypt
+encrypt pKeyId_ pPlaintext_ =
+    Encrypt'
+    { _eEncryptionContext = Nothing
+    , _eGrantTokens = Nothing
+    , _eKeyId = pKeyId_
+    , _ePlaintext = _Sensitive . _Base64 # pPlaintext_
     }
 
--- | Name/value pair that specifies the encryption context to be used for
--- authenticated encryption. If used here, the same value must be supplied to
--- the 'Decrypt' API or decryption will fail. For more information, see <http://docs.aws.amazon.com/kms/latest/developerguide/encrypt-context.html EncryptionContext>.
+-- | Name\/value pair that specifies the encryption context to be used for
+-- authenticated encryption. If used here, the same value must be supplied
+-- to the 'Decrypt' API or decryption will fail. For more information, see
+-- <http://docs.aws.amazon.com/kms/latest/developerguide/encrypt-context.html Encryption Context>.
 eEncryptionContext :: Lens' Encrypt (HashMap Text Text)
-eEncryptionContext =
-    lens _eEncryptionContext (\s a -> s { _eEncryptionContext = a })
-        . _Map
+eEncryptionContext = lens _eEncryptionContext (\ s a -> s{_eEncryptionContext = a}) . _Default . _Map;
 
--- | For more information, see <http://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#grant_token Grant Tokens>.
+-- | For more information, see
+-- <http://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#grant_token Grant Tokens>.
 eGrantTokens :: Lens' Encrypt [Text]
-eGrantTokens = lens _eGrantTokens (\s a -> s { _eGrantTokens = a }) . _List
+eGrantTokens = lens _eGrantTokens (\ s a -> s{_eGrantTokens = a}) . _Default . _Coerce;
 
--- | A unique identifier for the customer master key. This value can be a globally
--- unique identifier, a fully specified ARN to either an alias or a key, or an
--- alias name prefixed by "alias/".  Key ARN Example -
--- arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012 Alias ARN Example - arn:aws:kms:us-east-1:123456789012:alias/MyAliasName
--- Globally Unique Key ID Example - 12345678-1234-1234-1234-123456789012 Alias
--- Name Example - alias/MyAliasName
+-- | A unique identifier for the customer master key. This value can be a
+-- globally unique identifier, a fully specified ARN to either an alias or
+-- a key, or an alias name prefixed by \"alias\/\".
+--
+-- -   Key ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   Alias ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:alias\/MyAliasName
+-- -   Globally Unique Key ID Example -
+--     12345678-1234-1234-1234-123456789012
+-- -   Alias Name Example - alias\/MyAliasName
 eKeyId :: Lens' Encrypt Text
-eKeyId = lens _eKeyId (\s a -> s { _eKeyId = a })
+eKeyId = lens _eKeyId (\ s a -> s{_eKeyId = a});
 
 -- | Data to be encrypted.
-ePlaintext :: Lens' Encrypt Base64
-ePlaintext = lens _ePlaintext (\s a -> s { _ePlaintext = a })
-
-data EncryptResponse = EncryptResponse
-    { _erCiphertextBlob :: Maybe Base64
-    , _erKeyId          :: Maybe Text
-    } deriving (Eq, Read, Show)
+ePlaintext :: Lens' Encrypt ByteString
+ePlaintext = lens _ePlaintext (\ s a -> s{_ePlaintext = a}) . _Sensitive . _Base64;
 
--- | 'EncryptResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'erCiphertextBlob' @::@ 'Maybe' 'Base64'
---
--- * 'erKeyId' @::@ 'Maybe' 'Text'
---
-encryptResponse :: EncryptResponse
-encryptResponse = EncryptResponse
-    { _erCiphertextBlob = Nothing
-    , _erKeyId          = Nothing
-    }
+instance AWSRequest Encrypt where
+        type Sv Encrypt = KMS
+        type Rs Encrypt = EncryptResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 EncryptResponse' <$>
+                   (x .?> "KeyId") <*> (x .?> "CiphertextBlob") <*>
+                     (pure (fromEnum s)))
 
--- | The encrypted plaintext. If you are using the CLI, the value is Base64
--- encoded. Otherwise, it is not encoded.
-erCiphertextBlob :: Lens' EncryptResponse (Maybe Base64)
-erCiphertextBlob = lens _erCiphertextBlob (\s a -> s { _erCiphertextBlob = a })
+instance ToHeaders Encrypt where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.Encrypt" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | The ID of the key used during encryption.
-erKeyId :: Lens' EncryptResponse (Maybe Text)
-erKeyId = lens _erKeyId (\s a -> s { _erKeyId = a })
+instance ToJSON Encrypt where
+        toJSON Encrypt'{..}
+          = object
+              ["EncryptionContext" .= _eEncryptionContext,
+               "GrantTokens" .= _eGrantTokens, "KeyId" .= _eKeyId,
+               "Plaintext" .= _ePlaintext]
 
 instance ToPath Encrypt where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery Encrypt where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders Encrypt
+-- | /See:/ 'encryptResponse' smart constructor.
+data EncryptResponse = EncryptResponse'
+    { _ersKeyId          :: !(Maybe Text)
+    , _ersCiphertextBlob :: !(Maybe Base64)
+    , _ersStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON Encrypt where
-    toJSON Encrypt{..} = object
-        [ "KeyId"             .= _eKeyId
-        , "Plaintext"         .= _ePlaintext
-        , "EncryptionContext" .= _eEncryptionContext
-        , "GrantTokens"       .= _eGrantTokens
-        ]
+-- | Creates a value of 'EncryptResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ersKeyId'
+--
+-- * 'ersCiphertextBlob'
+--
+-- * 'ersStatus'
+encryptResponse
+    :: Int -- ^ 'ersStatus'
+    -> EncryptResponse
+encryptResponse pStatus_ =
+    EncryptResponse'
+    { _ersKeyId = Nothing
+    , _ersCiphertextBlob = Nothing
+    , _ersStatus = pStatus_
+    }
 
-instance AWSRequest Encrypt where
-    type Sv Encrypt = KMS
-    type Rs Encrypt = EncryptResponse
+-- | The ID of the key used during encryption.
+ersKeyId :: Lens' EncryptResponse (Maybe Text)
+ersKeyId = lens _ersKeyId (\ s a -> s{_ersKeyId = a});
 
-    request  = post "Encrypt"
-    response = jsonResponse
+-- | The encrypted plaintext. If you are using the CLI, the value is Base64
+-- encoded. Otherwise, it is not encoded.
+ersCiphertextBlob :: Lens' EncryptResponse (Maybe ByteString)
+ersCiphertextBlob = lens _ersCiphertextBlob (\ s a -> s{_ersCiphertextBlob = a}) . mapping _Base64;
 
-instance FromJSON EncryptResponse where
-    parseJSON = withObject "EncryptResponse" $ \o -> EncryptResponse
-        <$> o .:? "CiphertextBlob"
-        <*> o .:? "KeyId"
+-- | The response status code.
+ersStatus :: Lens' EncryptResponse Int
+ersStatus = lens _ersStatus (\ s a -> s{_ersStatus = a});
diff --git a/gen/Network/AWS/KMS/GenerateDataKey.hs b/gen/Network/AWS/KMS/GenerateDataKey.hs
--- a/gen/Network/AWS/KMS/GenerateDataKey.hs
+++ b/gen/Network/AWS/KMS/GenerateDataKey.hs
@@ -1,222 +1,245 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.GenerateDataKey
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Generates a data key that you can use in your application to locally encrypt
--- data. This call returns a plaintext version of the key in the 'Plaintext' field
--- of the response object and an encrypted copy of the key in the 'CiphertextBlob'
--- field. The key is encrypted by using the master key specified by the 'KeyId'
--- field. To decrypt the encrypted key, pass it to the 'Decrypt' API.
+-- Generates a data key that you can use in your application to locally
+-- encrypt data. This call returns a plaintext version of the key in the
+-- 'Plaintext' field of the response object and an encrypted copy of the
+-- key in the 'CiphertextBlob' field. The key is encrypted by using the
+-- master key specified by the 'KeyId' field. To decrypt the encrypted key,
+-- pass it to the 'Decrypt' API.
 --
 -- We recommend that you use the following pattern to locally encrypt data:
--- call the 'GenerateDataKey' API, use the key returned in the 'Plaintext' response
--- field to locally encrypt data, and then erase the plaintext data key from
--- memory. Store the encrypted data key (contained in the 'CiphertextBlob' field)
--- alongside of the locally encrypted data.
+-- call the 'GenerateDataKey' API, use the key returned in the 'Plaintext'
+-- response field to locally encrypt data, and then erase the plaintext
+-- data key from memory. Store the encrypted data key (contained in the
+-- 'CiphertextBlob' field) alongside of the locally encrypted data.
 --
--- You should not call the 'Encrypt' function to re-encrypt your data keys within
--- a region. 'GenerateDataKey' always returns the data key encrypted and tied to
--- the customer master key that will be used to decrypt it. There is no need to
--- decrypt it twice.  If you decide to use the optional 'EncryptionContext'
--- parameter, you must also store the context in full or at least store enough
--- information along with the encrypted data to be able to reconstruct the
--- context when submitting the ciphertext to the 'Decrypt' API. It is a good
--- practice to choose a context that you can reconstruct on the fly to better
--- secure the ciphertext. For more information about how this parameter is used,
--- see <http://docs.aws.amazon.com/kms/latest/developerguide/encrypt-context.html Encryption Context>.
+-- You should not call the 'Encrypt' function to re-encrypt your data keys
+-- within a region. 'GenerateDataKey' always returns the data key encrypted
+-- and tied to the customer master key that will be used to decrypt it.
+-- There is no need to decrypt it twice.
 --
--- To decrypt data, pass the encrypted data key to the 'Decrypt' API. 'Decrypt'
--- uses the associated master key to decrypt the encrypted data key and returns
--- it as plaintext. Use the plaintext data key to locally decrypt your data and
--- then erase the key from memory. You must specify the encryption context, if
--- any, that you specified when you generated the key. The encryption context is
--- logged by CloudTrail, and you can use this log to help track the use of
--- particular data.
+-- If you decide to use the optional 'EncryptionContext' parameter, you
+-- must also store the context in full or at least store enough information
+-- along with the encrypted data to be able to reconstruct the context when
+-- submitting the ciphertext to the 'Decrypt' API. It is a good practice to
+-- choose a context that you can reconstruct on the fly to better secure
+-- the ciphertext. For more information about how this parameter is used,
+-- see
+-- <http://docs.aws.amazon.com/kms/latest/developerguide/encrypt-context.html Encryption Context>.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html>
+-- To decrypt data, pass the encrypted data key to the 'Decrypt' API.
+-- 'Decrypt' uses the associated master key to decrypt the encrypted data
+-- key and returns it as plaintext. Use the plaintext data key to locally
+-- decrypt your data and then erase the key from memory. You must specify
+-- the encryption context, if any, that you specified when you generated
+-- the key. The encryption context is logged by CloudTrail, and you can use
+-- this log to help track the use of particular data.
+--
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html AWS API Reference> for GenerateDataKey.
 module Network.AWS.KMS.GenerateDataKey
     (
-    -- * Request
-      GenerateDataKey
-    -- ** Request constructor
-    , generateDataKey
-    -- ** Request lenses
+    -- * Creating a Request
+      generateDataKey
+    , GenerateDataKey
+    -- * Request Lenses
+    , gdkKeySpec
     , gdkEncryptionContext
+    , gdkNumberOfBytes
     , gdkGrantTokens
     , gdkKeyId
-    , gdkKeySpec
-    , gdkNumberOfBytes
 
-    -- * Response
-    , GenerateDataKeyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , generateDataKeyResponse
-    -- ** Response lenses
-    , gdkrCiphertextBlob
-    , gdkrKeyId
-    , gdkrPlaintext
+    , GenerateDataKeyResponse
+    -- * Response Lenses
+    , gdkrsKeyId
+    , gdkrsPlaintext
+    , gdkrsCiphertextBlob
+    , gdkrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data GenerateDataKey = GenerateDataKey
-    { _gdkEncryptionContext :: Map Text Text
-    , _gdkGrantTokens       :: List "GrantTokens" Text
-    , _gdkKeyId             :: Text
-    , _gdkKeySpec           :: Maybe DataKeySpec
-    , _gdkNumberOfBytes     :: Maybe Nat
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'generateDataKey' smart constructor.
+data GenerateDataKey = GenerateDataKey'
+    { _gdkKeySpec           :: !(Maybe DataKeySpec)
+    , _gdkEncryptionContext :: !(Maybe (Map Text Text))
+    , _gdkNumberOfBytes     :: !(Maybe Nat)
+    , _gdkGrantTokens       :: !(Maybe [Text])
+    , _gdkKeyId             :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GenerateDataKey' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GenerateDataKey' with the minimum fields required to make a request.
 --
--- * 'gdkEncryptionContext' @::@ 'HashMap' 'Text' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gdkGrantTokens' @::@ ['Text']
+-- * 'gdkKeySpec'
 --
--- * 'gdkKeyId' @::@ 'Text'
+-- * 'gdkEncryptionContext'
 --
--- * 'gdkKeySpec' @::@ 'Maybe' 'DataKeySpec'
+-- * 'gdkNumberOfBytes'
 --
--- * 'gdkNumberOfBytes' @::@ 'Maybe' 'Natural'
+-- * 'gdkGrantTokens'
 --
-generateDataKey :: Text -- ^ 'gdkKeyId'
-                -> GenerateDataKey
-generateDataKey p1 = GenerateDataKey
-    { _gdkKeyId             = p1
-    , _gdkEncryptionContext = mempty
-    , _gdkNumberOfBytes     = Nothing
-    , _gdkKeySpec           = Nothing
-    , _gdkGrantTokens       = mempty
+-- * 'gdkKeyId'
+generateDataKey
+    :: Text -- ^ 'gdkKeyId'
+    -> GenerateDataKey
+generateDataKey pKeyId_ =
+    GenerateDataKey'
+    { _gdkKeySpec = Nothing
+    , _gdkEncryptionContext = Nothing
+    , _gdkNumberOfBytes = Nothing
+    , _gdkGrantTokens = Nothing
+    , _gdkKeyId = pKeyId_
     }
 
--- | Name/value pair that contains additional data to be authenticated during the
--- encryption and decryption processes that use the key. This value is logged by
--- AWS CloudTrail to provide context around the data encrypted by the key.
+-- | Value that identifies the encryption algorithm and key size to generate
+-- a data key for. Currently this can be AES_128 or AES_256.
+gdkKeySpec :: Lens' GenerateDataKey (Maybe DataKeySpec)
+gdkKeySpec = lens _gdkKeySpec (\ s a -> s{_gdkKeySpec = a});
+
+-- | Name\/value pair that contains additional data to be authenticated
+-- during the encryption and decryption processes that use the key. This
+-- value is logged by AWS CloudTrail to provide context around the data
+-- encrypted by the key.
 gdkEncryptionContext :: Lens' GenerateDataKey (HashMap Text Text)
-gdkEncryptionContext =
-    lens _gdkEncryptionContext (\s a -> s { _gdkEncryptionContext = a })
-        . _Map
+gdkEncryptionContext = lens _gdkEncryptionContext (\ s a -> s{_gdkEncryptionContext = a}) . _Default . _Map;
 
--- | For more information, see <http://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#grant_token Grant Tokens>.
+-- | Integer that contains the number of bytes to generate. Common values are
+-- 128, 256, 512, and 1024. 1024 is the current limit. We recommend that
+-- you use the 'KeySpec' parameter instead.
+gdkNumberOfBytes :: Lens' GenerateDataKey (Maybe Natural)
+gdkNumberOfBytes = lens _gdkNumberOfBytes (\ s a -> s{_gdkNumberOfBytes = a}) . mapping _Nat;
+
+-- | For more information, see
+-- <http://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#grant_token Grant Tokens>.
 gdkGrantTokens :: Lens' GenerateDataKey [Text]
-gdkGrantTokens = lens _gdkGrantTokens (\s a -> s { _gdkGrantTokens = a }) . _List
+gdkGrantTokens = lens _gdkGrantTokens (\ s a -> s{_gdkGrantTokens = a}) . _Default . _Coerce;
 
--- | A unique identifier for the customer master key. This value can be a globally
--- unique identifier, a fully specified ARN to either an alias or a key, or an
--- alias name prefixed by "alias/".  Key ARN Example -
--- arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012 Alias ARN Example - arn:aws:kms:us-east-1:123456789012:alias/MyAliasName
--- Globally Unique Key ID Example - 12345678-1234-1234-1234-123456789012 Alias
--- Name Example - alias/MyAliasName
+-- | A unique identifier for the customer master key. This value can be a
+-- globally unique identifier, a fully specified ARN to either an alias or
+-- a key, or an alias name prefixed by \"alias\/\".
+--
+-- -   Key ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   Alias ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:alias\/MyAliasName
+-- -   Globally Unique Key ID Example -
+--     12345678-1234-1234-1234-123456789012
+-- -   Alias Name Example - alias\/MyAliasName
 gdkKeyId :: Lens' GenerateDataKey Text
-gdkKeyId = lens _gdkKeyId (\s a -> s { _gdkKeyId = a })
+gdkKeyId = lens _gdkKeyId (\ s a -> s{_gdkKeyId = a});
 
--- | Value that identifies the encryption algorithm and key size to generate a
--- data key for. Currently this can be AES_128 or AES_256.
-gdkKeySpec :: Lens' GenerateDataKey (Maybe DataKeySpec)
-gdkKeySpec = lens _gdkKeySpec (\s a -> s { _gdkKeySpec = a })
+instance AWSRequest GenerateDataKey where
+        type Sv GenerateDataKey = KMS
+        type Rs GenerateDataKey = GenerateDataKeyResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GenerateDataKeyResponse' <$>
+                   (x .?> "KeyId") <*> (x .?> "Plaintext") <*>
+                     (x .?> "CiphertextBlob")
+                     <*> (pure (fromEnum s)))
 
--- | Integer that contains the number of bytes to generate. Common values are 128,
--- 256, 512, and 1024. 1024 is the current limit. We recommend that you use the 'KeySpec' parameter instead.
-gdkNumberOfBytes :: Lens' GenerateDataKey (Maybe Natural)
-gdkNumberOfBytes = lens _gdkNumberOfBytes (\s a -> s { _gdkNumberOfBytes = a }) . mapping _Nat
+instance ToHeaders GenerateDataKey where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.GenerateDataKey" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
-data GenerateDataKeyResponse = GenerateDataKeyResponse
-    { _gdkrCiphertextBlob :: Maybe Base64
-    , _gdkrKeyId          :: Maybe Text
-    , _gdkrPlaintext      :: Maybe Base64
-    } deriving (Eq, Read, Show)
+instance ToJSON GenerateDataKey where
+        toJSON GenerateDataKey'{..}
+          = object
+              ["KeySpec" .= _gdkKeySpec,
+               "EncryptionContext" .= _gdkEncryptionContext,
+               "NumberOfBytes" .= _gdkNumberOfBytes,
+               "GrantTokens" .= _gdkGrantTokens,
+               "KeyId" .= _gdkKeyId]
 
--- | 'GenerateDataKeyResponse' constructor.
+instance ToPath GenerateDataKey where
+        toPath = const "/"
+
+instance ToQuery GenerateDataKey where
+        toQuery = const mempty
+
+-- | /See:/ 'generateDataKeyResponse' smart constructor.
+data GenerateDataKeyResponse = GenerateDataKeyResponse'
+    { _gdkrsKeyId          :: !(Maybe Text)
+    , _gdkrsPlaintext      :: !(Maybe (Sensitive Base64))
+    , _gdkrsCiphertextBlob :: !(Maybe Base64)
+    , _gdkrsStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GenerateDataKeyResponse' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gdkrCiphertextBlob' @::@ 'Maybe' 'Base64'
+-- * 'gdkrsKeyId'
 --
--- * 'gdkrKeyId' @::@ 'Maybe' 'Text'
+-- * 'gdkrsPlaintext'
 --
--- * 'gdkrPlaintext' @::@ 'Maybe' 'Base64'
+-- * 'gdkrsCiphertextBlob'
 --
-generateDataKeyResponse :: GenerateDataKeyResponse
-generateDataKeyResponse = GenerateDataKeyResponse
-    { _gdkrCiphertextBlob = Nothing
-    , _gdkrPlaintext      = Nothing
-    , _gdkrKeyId          = Nothing
+-- * 'gdkrsStatus'
+generateDataKeyResponse
+    :: Int -- ^ 'gdkrsStatus'
+    -> GenerateDataKeyResponse
+generateDataKeyResponse pStatus_ =
+    GenerateDataKeyResponse'
+    { _gdkrsKeyId = Nothing
+    , _gdkrsPlaintext = Nothing
+    , _gdkrsCiphertextBlob = Nothing
+    , _gdkrsStatus = pStatus_
     }
 
--- | Ciphertext that contains the encrypted data key. You must store the blob and
--- enough information to reconstruct the encryption context so that the data
--- encrypted by using the key can later be decrypted. You must provide both the
--- ciphertext blob and the encryption context to the 'Decrypt' API to recover the
--- plaintext data key and decrypt the object.
---
--- If you are using the CLI, the value is Base64 encoded. Otherwise, it is not
--- encoded.
-gdkrCiphertextBlob :: Lens' GenerateDataKeyResponse (Maybe Base64)
-gdkrCiphertextBlob =
-    lens _gdkrCiphertextBlob (\s a -> s { _gdkrCiphertextBlob = a })
-
 -- | System generated unique identifier of the key to be used to decrypt the
 -- encrypted copy of the data key.
-gdkrKeyId :: Lens' GenerateDataKeyResponse (Maybe Text)
-gdkrKeyId = lens _gdkrKeyId (\s a -> s { _gdkrKeyId = a })
-
--- | Plaintext that contains the data key. Use this for encryption and decryption
--- and then remove it from memory as soon as possible.
-gdkrPlaintext :: Lens' GenerateDataKeyResponse (Maybe Base64)
-gdkrPlaintext = lens _gdkrPlaintext (\s a -> s { _gdkrPlaintext = a })
-
-instance ToPath GenerateDataKey where
-    toPath = const "/"
-
-instance ToQuery GenerateDataKey where
-    toQuery = const mempty
-
-instance ToHeaders GenerateDataKey
-
-instance ToJSON GenerateDataKey where
-    toJSON GenerateDataKey{..} = object
-        [ "KeyId"             .= _gdkKeyId
-        , "EncryptionContext" .= _gdkEncryptionContext
-        , "NumberOfBytes"     .= _gdkNumberOfBytes
-        , "KeySpec"           .= _gdkKeySpec
-        , "GrantTokens"       .= _gdkGrantTokens
-        ]
+gdkrsKeyId :: Lens' GenerateDataKeyResponse (Maybe Text)
+gdkrsKeyId = lens _gdkrsKeyId (\ s a -> s{_gdkrsKeyId = a});
 
-instance AWSRequest GenerateDataKey where
-    type Sv GenerateDataKey = KMS
-    type Rs GenerateDataKey = GenerateDataKeyResponse
+-- | Plaintext that contains the data key. Use this for encryption and
+-- decryption and then remove it from memory as soon as possible.
+gdkrsPlaintext :: Lens' GenerateDataKeyResponse (Maybe ByteString)
+gdkrsPlaintext = lens _gdkrsPlaintext (\ s a -> s{_gdkrsPlaintext = a}) . mapping (_Sensitive . _Base64);
 
-    request  = post "GenerateDataKey"
-    response = jsonResponse
+-- | Ciphertext that contains the encrypted data key. You must store the blob
+-- and enough information to reconstruct the encryption context so that the
+-- data encrypted by using the key can later be decrypted. You must provide
+-- both the ciphertext blob and the encryption context to the Decrypt API
+-- to recover the plaintext data key and decrypt the object.
+--
+-- If you are using the CLI, the value is Base64 encoded. Otherwise, it is
+-- not encoded.
+gdkrsCiphertextBlob :: Lens' GenerateDataKeyResponse (Maybe ByteString)
+gdkrsCiphertextBlob = lens _gdkrsCiphertextBlob (\ s a -> s{_gdkrsCiphertextBlob = a}) . mapping _Base64;
 
-instance FromJSON GenerateDataKeyResponse where
-    parseJSON = withObject "GenerateDataKeyResponse" $ \o -> GenerateDataKeyResponse
-        <$> o .:? "CiphertextBlob"
-        <*> o .:? "KeyId"
-        <*> o .:? "Plaintext"
+-- | The response status code.
+gdkrsStatus :: Lens' GenerateDataKeyResponse Int
+gdkrsStatus = lens _gdkrsStatus (\ s a -> s{_gdkrsStatus = a});
diff --git a/gen/Network/AWS/KMS/GenerateDataKeyWithoutPlaintext.hs b/gen/Network/AWS/KMS/GenerateDataKeyWithoutPlaintext.hs
--- a/gen/Network/AWS/KMS/GenerateDataKeyWithoutPlaintext.hs
+++ b/gen/Network/AWS/KMS/GenerateDataKeyWithoutPlaintext.hs
@@ -1,185 +1,206 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.GenerateDataKeyWithoutPlaintext
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns a data key encrypted by a customer master key without the plaintext
--- copy of that key. Otherwise, this API functions exactly like 'GenerateDataKey'.
--- You can use this API to, for example, satisfy an audit requirement that an
--- encrypted key be made available without exposing the plaintext copy of that
--- key.
+-- Returns a data key encrypted by a customer master key without the
+-- plaintext copy of that key. Otherwise, this API functions exactly like
+-- GenerateDataKey. You can use this API to, for example, satisfy an audit
+-- requirement that an encrypted key be made available without exposing the
+-- plaintext copy of that key.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html AWS API Reference> for GenerateDataKeyWithoutPlaintext.
 module Network.AWS.KMS.GenerateDataKeyWithoutPlaintext
     (
-    -- * Request
-      GenerateDataKeyWithoutPlaintext
-    -- ** Request constructor
-    , generateDataKeyWithoutPlaintext
-    -- ** Request lenses
+    -- * Creating a Request
+      generateDataKeyWithoutPlaintext
+    , GenerateDataKeyWithoutPlaintext
+    -- * Request Lenses
+    , gdkwpKeySpec
     , gdkwpEncryptionContext
+    , gdkwpNumberOfBytes
     , gdkwpGrantTokens
     , gdkwpKeyId
-    , gdkwpKeySpec
-    , gdkwpNumberOfBytes
 
-    -- * Response
-    , GenerateDataKeyWithoutPlaintextResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , generateDataKeyWithoutPlaintextResponse
-    -- ** Response lenses
-    , gdkwprCiphertextBlob
-    , gdkwprKeyId
+    , GenerateDataKeyWithoutPlaintextResponse
+    -- * Response Lenses
+    , gdkwprsKeyId
+    , gdkwprsCiphertextBlob
+    , gdkwprsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data GenerateDataKeyWithoutPlaintext = GenerateDataKeyWithoutPlaintext
-    { _gdkwpEncryptionContext :: Map Text Text
-    , _gdkwpGrantTokens       :: List "GrantTokens" Text
-    , _gdkwpKeyId             :: Text
-    , _gdkwpKeySpec           :: Maybe DataKeySpec
-    , _gdkwpNumberOfBytes     :: Maybe Nat
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'generateDataKeyWithoutPlaintext' smart constructor.
+data GenerateDataKeyWithoutPlaintext = GenerateDataKeyWithoutPlaintext'
+    { _gdkwpKeySpec           :: !(Maybe DataKeySpec)
+    , _gdkwpEncryptionContext :: !(Maybe (Map Text Text))
+    , _gdkwpNumberOfBytes     :: !(Maybe Nat)
+    , _gdkwpGrantTokens       :: !(Maybe [Text])
+    , _gdkwpKeyId             :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GenerateDataKeyWithoutPlaintext' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GenerateDataKeyWithoutPlaintext' with the minimum fields required to make a request.
 --
--- * 'gdkwpEncryptionContext' @::@ 'HashMap' 'Text' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gdkwpGrantTokens' @::@ ['Text']
+-- * 'gdkwpKeySpec'
 --
--- * 'gdkwpKeyId' @::@ 'Text'
+-- * 'gdkwpEncryptionContext'
 --
--- * 'gdkwpKeySpec' @::@ 'Maybe' 'DataKeySpec'
+-- * 'gdkwpNumberOfBytes'
 --
--- * 'gdkwpNumberOfBytes' @::@ 'Maybe' 'Natural'
+-- * 'gdkwpGrantTokens'
 --
-generateDataKeyWithoutPlaintext :: Text -- ^ 'gdkwpKeyId'
-                                -> GenerateDataKeyWithoutPlaintext
-generateDataKeyWithoutPlaintext p1 = GenerateDataKeyWithoutPlaintext
-    { _gdkwpKeyId             = p1
-    , _gdkwpEncryptionContext = mempty
-    , _gdkwpKeySpec           = Nothing
-    , _gdkwpNumberOfBytes     = Nothing
-    , _gdkwpGrantTokens       = mempty
+-- * 'gdkwpKeyId'
+generateDataKeyWithoutPlaintext
+    :: Text -- ^ 'gdkwpKeyId'
+    -> GenerateDataKeyWithoutPlaintext
+generateDataKeyWithoutPlaintext pKeyId_ =
+    GenerateDataKeyWithoutPlaintext'
+    { _gdkwpKeySpec = Nothing
+    , _gdkwpEncryptionContext = Nothing
+    , _gdkwpNumberOfBytes = Nothing
+    , _gdkwpGrantTokens = Nothing
+    , _gdkwpKeyId = pKeyId_
     }
 
--- | Name:value pair that contains additional data to be authenticated during the
--- encryption and decryption processes.
+-- | Value that identifies the encryption algorithm and key size. Currently
+-- this can be AES_128 or AES_256.
+gdkwpKeySpec :: Lens' GenerateDataKeyWithoutPlaintext (Maybe DataKeySpec)
+gdkwpKeySpec = lens _gdkwpKeySpec (\ s a -> s{_gdkwpKeySpec = a});
+
+-- | Name:value pair that contains additional data to be authenticated during
+-- the encryption and decryption processes.
 gdkwpEncryptionContext :: Lens' GenerateDataKeyWithoutPlaintext (HashMap Text Text)
-gdkwpEncryptionContext =
-    lens _gdkwpEncryptionContext (\s a -> s { _gdkwpEncryptionContext = a })
-        . _Map
+gdkwpEncryptionContext = lens _gdkwpEncryptionContext (\ s a -> s{_gdkwpEncryptionContext = a}) . _Default . _Map;
 
--- | For more information, see <http://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#grant_token Grant Tokens>.
+-- | Integer that contains the number of bytes to generate. Common values are
+-- 128, 256, 512, 1024 and so on. We recommend that you use the 'KeySpec'
+-- parameter instead.
+gdkwpNumberOfBytes :: Lens' GenerateDataKeyWithoutPlaintext (Maybe Natural)
+gdkwpNumberOfBytes = lens _gdkwpNumberOfBytes (\ s a -> s{_gdkwpNumberOfBytes = a}) . mapping _Nat;
+
+-- | For more information, see
+-- <http://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#grant_token Grant Tokens>.
 gdkwpGrantTokens :: Lens' GenerateDataKeyWithoutPlaintext [Text]
-gdkwpGrantTokens = lens _gdkwpGrantTokens (\s a -> s { _gdkwpGrantTokens = a }) . _List
+gdkwpGrantTokens = lens _gdkwpGrantTokens (\ s a -> s{_gdkwpGrantTokens = a}) . _Default . _Coerce;
 
--- | A unique identifier for the customer master key. This value can be a globally
--- unique identifier, a fully specified ARN to either an alias or a key, or an
--- alias name prefixed by "alias/".  Key ARN Example -
--- arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012 Alias ARN Example - arn:aws:kms:us-east-1:123456789012:alias/MyAliasName
--- Globally Unique Key ID Example - 12345678-1234-1234-1234-123456789012 Alias
--- Name Example - alias/MyAliasName
+-- | A unique identifier for the customer master key. This value can be a
+-- globally unique identifier, a fully specified ARN to either an alias or
+-- a key, or an alias name prefixed by \"alias\/\".
+--
+-- -   Key ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   Alias ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:alias\/MyAliasName
+-- -   Globally Unique Key ID Example -
+--     12345678-1234-1234-1234-123456789012
+-- -   Alias Name Example - alias\/MyAliasName
 gdkwpKeyId :: Lens' GenerateDataKeyWithoutPlaintext Text
-gdkwpKeyId = lens _gdkwpKeyId (\s a -> s { _gdkwpKeyId = a })
+gdkwpKeyId = lens _gdkwpKeyId (\ s a -> s{_gdkwpKeyId = a});
 
--- | Value that identifies the encryption algorithm and key size. Currently this
--- can be AES_128 or AES_256.
-gdkwpKeySpec :: Lens' GenerateDataKeyWithoutPlaintext (Maybe DataKeySpec)
-gdkwpKeySpec = lens _gdkwpKeySpec (\s a -> s { _gdkwpKeySpec = a })
+instance AWSRequest GenerateDataKeyWithoutPlaintext
+         where
+        type Sv GenerateDataKeyWithoutPlaintext = KMS
+        type Rs GenerateDataKeyWithoutPlaintext =
+             GenerateDataKeyWithoutPlaintextResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GenerateDataKeyWithoutPlaintextResponse' <$>
+                   (x .?> "KeyId") <*> (x .?> "CiphertextBlob") <*>
+                     (pure (fromEnum s)))
 
--- | Integer that contains the number of bytes to generate. Common values are 128,
--- 256, 512, 1024 and so on. We recommend that you use the 'KeySpec' parameter
--- instead.
-gdkwpNumberOfBytes :: Lens' GenerateDataKeyWithoutPlaintext (Maybe Natural)
-gdkwpNumberOfBytes =
-    lens _gdkwpNumberOfBytes (\s a -> s { _gdkwpNumberOfBytes = a })
-        . mapping _Nat
+instance ToHeaders GenerateDataKeyWithoutPlaintext
+         where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.GenerateDataKeyWithoutPlaintext" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
-data GenerateDataKeyWithoutPlaintextResponse = GenerateDataKeyWithoutPlaintextResponse
-    { _gdkwprCiphertextBlob :: Maybe Base64
-    , _gdkwprKeyId          :: Maybe Text
-    } deriving (Eq, Read, Show)
+instance ToJSON GenerateDataKeyWithoutPlaintext where
+        toJSON GenerateDataKeyWithoutPlaintext'{..}
+          = object
+              ["KeySpec" .= _gdkwpKeySpec,
+               "EncryptionContext" .= _gdkwpEncryptionContext,
+               "NumberOfBytes" .= _gdkwpNumberOfBytes,
+               "GrantTokens" .= _gdkwpGrantTokens,
+               "KeyId" .= _gdkwpKeyId]
 
--- | 'GenerateDataKeyWithoutPlaintextResponse' constructor.
+instance ToPath GenerateDataKeyWithoutPlaintext where
+        toPath = const "/"
+
+instance ToQuery GenerateDataKeyWithoutPlaintext
+         where
+        toQuery = const mempty
+
+-- | /See:/ 'generateDataKeyWithoutPlaintextResponse' smart constructor.
+data GenerateDataKeyWithoutPlaintextResponse = GenerateDataKeyWithoutPlaintextResponse'
+    { _gdkwprsKeyId          :: !(Maybe Text)
+    , _gdkwprsCiphertextBlob :: !(Maybe Base64)
+    , _gdkwprsStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GenerateDataKeyWithoutPlaintextResponse' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gdkwprCiphertextBlob' @::@ 'Maybe' 'Base64'
+-- * 'gdkwprsKeyId'
 --
--- * 'gdkwprKeyId' @::@ 'Maybe' 'Text'
+-- * 'gdkwprsCiphertextBlob'
 --
-generateDataKeyWithoutPlaintextResponse :: GenerateDataKeyWithoutPlaintextResponse
-generateDataKeyWithoutPlaintextResponse = GenerateDataKeyWithoutPlaintextResponse
-    { _gdkwprCiphertextBlob = Nothing
-    , _gdkwprKeyId          = Nothing
+-- * 'gdkwprsStatus'
+generateDataKeyWithoutPlaintextResponse
+    :: Int -- ^ 'gdkwprsStatus'
+    -> GenerateDataKeyWithoutPlaintextResponse
+generateDataKeyWithoutPlaintextResponse pStatus_ =
+    GenerateDataKeyWithoutPlaintextResponse'
+    { _gdkwprsKeyId = Nothing
+    , _gdkwprsCiphertextBlob = Nothing
+    , _gdkwprsStatus = pStatus_
     }
 
--- | Ciphertext that contains the wrapped data key. You must store the blob and
--- encryption context so that the key can be used in a future decrypt operation.
---
--- If you are using the CLI, the value is Base64 encoded. Otherwise, it is not
--- encoded.
-gdkwprCiphertextBlob :: Lens' GenerateDataKeyWithoutPlaintextResponse (Maybe Base64)
-gdkwprCiphertextBlob =
-    lens _gdkwprCiphertextBlob (\s a -> s { _gdkwprCiphertextBlob = a })
-
 -- | System generated unique identifier of the key to be used to decrypt the
 -- encrypted copy of the data key.
-gdkwprKeyId :: Lens' GenerateDataKeyWithoutPlaintextResponse (Maybe Text)
-gdkwprKeyId = lens _gdkwprKeyId (\s a -> s { _gdkwprKeyId = a })
-
-instance ToPath GenerateDataKeyWithoutPlaintext where
-    toPath = const "/"
-
-instance ToQuery GenerateDataKeyWithoutPlaintext where
-    toQuery = const mempty
-
-instance ToHeaders GenerateDataKeyWithoutPlaintext
-
-instance ToJSON GenerateDataKeyWithoutPlaintext where
-    toJSON GenerateDataKeyWithoutPlaintext{..} = object
-        [ "KeyId"             .= _gdkwpKeyId
-        , "EncryptionContext" .= _gdkwpEncryptionContext
-        , "KeySpec"           .= _gdkwpKeySpec
-        , "NumberOfBytes"     .= _gdkwpNumberOfBytes
-        , "GrantTokens"       .= _gdkwpGrantTokens
-        ]
-
-instance AWSRequest GenerateDataKeyWithoutPlaintext where
-    type Sv GenerateDataKeyWithoutPlaintext = KMS
-    type Rs GenerateDataKeyWithoutPlaintext = GenerateDataKeyWithoutPlaintextResponse
+gdkwprsKeyId :: Lens' GenerateDataKeyWithoutPlaintextResponse (Maybe Text)
+gdkwprsKeyId = lens _gdkwprsKeyId (\ s a -> s{_gdkwprsKeyId = a});
 
-    request  = post "GenerateDataKeyWithoutPlaintext"
-    response = jsonResponse
+-- | Ciphertext that contains the wrapped data key. You must store the blob
+-- and encryption context so that the key can be used in a future decrypt
+-- operation.
+--
+-- If you are using the CLI, the value is Base64 encoded. Otherwise, it is
+-- not encoded.
+gdkwprsCiphertextBlob :: Lens' GenerateDataKeyWithoutPlaintextResponse (Maybe ByteString)
+gdkwprsCiphertextBlob = lens _gdkwprsCiphertextBlob (\ s a -> s{_gdkwprsCiphertextBlob = a}) . mapping _Base64;
 
-instance FromJSON GenerateDataKeyWithoutPlaintextResponse where
-    parseJSON = withObject "GenerateDataKeyWithoutPlaintextResponse" $ \o -> GenerateDataKeyWithoutPlaintextResponse
-        <$> o .:? "CiphertextBlob"
-        <*> o .:? "KeyId"
+-- | The response status code.
+gdkwprsStatus :: Lens' GenerateDataKeyWithoutPlaintextResponse Int
+gdkwprsStatus = lens _gdkwprsStatus (\ s a -> s{_gdkwprsStatus = a});
diff --git a/gen/Network/AWS/KMS/GenerateRandom.hs b/gen/Network/AWS/KMS/GenerateRandom.hs
--- a/gen/Network/AWS/KMS/GenerateRandom.hs
+++ b/gen/Network/AWS/KMS/GenerateRandom.hs
@@ -1,112 +1,125 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.GenerateRandom
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Generates an unpredictable byte string.
+-- Generates an unpredictable byte string.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateRandom.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateRandom.html AWS API Reference> for GenerateRandom.
 module Network.AWS.KMS.GenerateRandom
     (
-    -- * Request
-      GenerateRandom
-    -- ** Request constructor
-    , generateRandom
-    -- ** Request lenses
+    -- * Creating a Request
+      generateRandom
+    , GenerateRandom
+    -- * Request Lenses
     , grNumberOfBytes
 
-    -- * Response
-    , GenerateRandomResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , generateRandomResponse
-    -- ** Response lenses
-    , grrPlaintext
+    , GenerateRandomResponse
+    -- * Response Lenses
+    , grrsPlaintext
+    , grrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype GenerateRandom = GenerateRandom
+-- | /See:/ 'generateRandom' smart constructor.
+newtype GenerateRandom = GenerateRandom'
     { _grNumberOfBytes :: Maybe Nat
-    } deriving (Eq, Ord, Read, Show)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GenerateRandom' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GenerateRandom' with the minimum fields required to make a request.
 --
--- * 'grNumberOfBytes' @::@ 'Maybe' 'Natural'
+-- Use one of the following lenses to modify other fields as desired:
 --
-generateRandom :: GenerateRandom
-generateRandom = GenerateRandom
+-- * 'grNumberOfBytes'
+generateRandom
+    :: GenerateRandom
+generateRandom =
+    GenerateRandom'
     { _grNumberOfBytes = Nothing
     }
 
--- | Integer that contains the number of bytes to generate. Common values are 128,
--- 256, 512, 1024 and so on. The current limit is 1024 bytes.
+-- | Integer that contains the number of bytes to generate. Common values are
+-- 128, 256, 512, 1024 and so on. The current limit is 1024 bytes.
 grNumberOfBytes :: Lens' GenerateRandom (Maybe Natural)
-grNumberOfBytes = lens _grNumberOfBytes (\s a -> s { _grNumberOfBytes = a }) . mapping _Nat
+grNumberOfBytes = lens _grNumberOfBytes (\ s a -> s{_grNumberOfBytes = a}) . mapping _Nat;
 
-newtype GenerateRandomResponse = GenerateRandomResponse
-    { _grrPlaintext :: Maybe Base64
-    } deriving (Eq, Read, Show)
+instance AWSRequest GenerateRandom where
+        type Sv GenerateRandom = KMS
+        type Rs GenerateRandom = GenerateRandomResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GenerateRandomResponse' <$>
+                   (x .?> "Plaintext") <*> (pure (fromEnum s)))
 
--- | 'GenerateRandomResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'grrPlaintext' @::@ 'Maybe' 'Base64'
---
-generateRandomResponse :: GenerateRandomResponse
-generateRandomResponse = GenerateRandomResponse
-    { _grrPlaintext = Nothing
-    }
+instance ToHeaders GenerateRandom where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.GenerateRandom" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | Plaintext that contains the unpredictable byte string.
-grrPlaintext :: Lens' GenerateRandomResponse (Maybe Base64)
-grrPlaintext = lens _grrPlaintext (\s a -> s { _grrPlaintext = a })
+instance ToJSON GenerateRandom where
+        toJSON GenerateRandom'{..}
+          = object ["NumberOfBytes" .= _grNumberOfBytes]
 
 instance ToPath GenerateRandom where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery GenerateRandom where
-    toQuery = const mempty
-
-instance ToHeaders GenerateRandom
+        toQuery = const mempty
 
-instance ToJSON GenerateRandom where
-    toJSON GenerateRandom{..} = object
-        [ "NumberOfBytes" .= _grNumberOfBytes
-        ]
+-- | /See:/ 'generateRandomResponse' smart constructor.
+data GenerateRandomResponse = GenerateRandomResponse'
+    { _grrsPlaintext :: !(Maybe (Sensitive Base64))
+    , _grrsStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GenerateRandom where
-    type Sv GenerateRandom = KMS
-    type Rs GenerateRandom = GenerateRandomResponse
+-- | Creates a value of 'GenerateRandomResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'grrsPlaintext'
+--
+-- * 'grrsStatus'
+generateRandomResponse
+    :: Int -- ^ 'grrsStatus'
+    -> GenerateRandomResponse
+generateRandomResponse pStatus_ =
+    GenerateRandomResponse'
+    { _grrsPlaintext = Nothing
+    , _grrsStatus = pStatus_
+    }
 
-    request  = post "GenerateRandom"
-    response = jsonResponse
+-- | Plaintext that contains the unpredictable byte string.
+grrsPlaintext :: Lens' GenerateRandomResponse (Maybe ByteString)
+grrsPlaintext = lens _grrsPlaintext (\ s a -> s{_grrsPlaintext = a}) . mapping (_Sensitive . _Base64);
 
-instance FromJSON GenerateRandomResponse where
-    parseJSON = withObject "GenerateRandomResponse" $ \o -> GenerateRandomResponse
-        <$> o .:? "Plaintext"
+-- | The response status code.
+grrsStatus :: Lens' GenerateRandomResponse Int
+grrsStatus = lens _grrsStatus (\ s a -> s{_grrsStatus = a});
diff --git a/gen/Network/AWS/KMS/GetKeyPolicy.hs b/gen/Network/AWS/KMS/GetKeyPolicy.hs
--- a/gen/Network/AWS/KMS/GetKeyPolicy.hs
+++ b/gen/Network/AWS/KMS/GetKeyPolicy.hs
@@ -1,127 +1,144 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.GetKeyPolicy
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Retrieves a policy attached to the specified key.
+-- Retrieves a policy attached to the specified key.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html AWS API Reference> for GetKeyPolicy.
 module Network.AWS.KMS.GetKeyPolicy
     (
-    -- * Request
-      GetKeyPolicy
-    -- ** Request constructor
-    , getKeyPolicy
-    -- ** Request lenses
+    -- * Creating a Request
+      getKeyPolicy
+    , GetKeyPolicy
+    -- * Request Lenses
     , gkpKeyId
     , gkpPolicyName
 
-    -- * Response
-    , GetKeyPolicyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getKeyPolicyResponse
-    -- ** Response lenses
-    , gkprPolicy
+    , GetKeyPolicyResponse
+    -- * Response Lenses
+    , gkprsPolicy
+    , gkprsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data GetKeyPolicy = GetKeyPolicy
-    { _gkpKeyId      :: Text
-    , _gkpPolicyName :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'getKeyPolicy' smart constructor.
+data GetKeyPolicy = GetKeyPolicy'
+    { _gkpKeyId      :: !Text
+    , _gkpPolicyName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetKeyPolicy' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetKeyPolicy' with the minimum fields required to make a request.
 --
--- * 'gkpKeyId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gkpPolicyName' @::@ 'Text'
+-- * 'gkpKeyId'
 --
-getKeyPolicy :: Text -- ^ 'gkpKeyId'
-             -> Text -- ^ 'gkpPolicyName'
-             -> GetKeyPolicy
-getKeyPolicy p1 p2 = GetKeyPolicy
-    { _gkpKeyId      = p1
-    , _gkpPolicyName = p2
+-- * 'gkpPolicyName'
+getKeyPolicy
+    :: Text -- ^ 'gkpKeyId'
+    -> Text -- ^ 'gkpPolicyName'
+    -> GetKeyPolicy
+getKeyPolicy pKeyId_ pPolicyName_ =
+    GetKeyPolicy'
+    { _gkpKeyId = pKeyId_
+    , _gkpPolicyName = pPolicyName_
     }
 
--- | A unique identifier for the customer master key. This value can be a globally
--- unique identifier or the fully specified ARN to a key.  Key ARN Example -
--- arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012 Globally Unique Key ID Example - 12345678-1234-1234-1234-123456789012
+-- | A unique identifier for the customer master key. This value can be a
+-- globally unique identifier or the fully specified ARN to a key.
 --
+-- -   Key ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   Globally Unique Key ID Example -
+--     12345678-1234-1234-1234-123456789012
 gkpKeyId :: Lens' GetKeyPolicy Text
-gkpKeyId = lens _gkpKeyId (\s a -> s { _gkpKeyId = a })
+gkpKeyId = lens _gkpKeyId (\ s a -> s{_gkpKeyId = a});
 
 -- | String that contains the name of the policy. Currently, this must be
--- "default". Policy names can be discovered by calling 'ListKeyPolicies'.
+-- \"default\". Policy names can be discovered by calling ListKeyPolicies.
 gkpPolicyName :: Lens' GetKeyPolicy Text
-gkpPolicyName = lens _gkpPolicyName (\s a -> s { _gkpPolicyName = a })
+gkpPolicyName = lens _gkpPolicyName (\ s a -> s{_gkpPolicyName = a});
 
-newtype GetKeyPolicyResponse = GetKeyPolicyResponse
-    { _gkprPolicy :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
+instance AWSRequest GetKeyPolicy where
+        type Sv GetKeyPolicy = KMS
+        type Rs GetKeyPolicy = GetKeyPolicyResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetKeyPolicyResponse' <$>
+                   (x .?> "Policy") <*> (pure (fromEnum s)))
 
--- | 'GetKeyPolicyResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gkprPolicy' @::@ 'Maybe' 'Text'
---
-getKeyPolicyResponse :: GetKeyPolicyResponse
-getKeyPolicyResponse = GetKeyPolicyResponse
-    { _gkprPolicy = Nothing
-    }
+instance ToHeaders GetKeyPolicy where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.GetKeyPolicy" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | A policy document in JSON format.
-gkprPolicy :: Lens' GetKeyPolicyResponse (Maybe Text)
-gkprPolicy = lens _gkprPolicy (\s a -> s { _gkprPolicy = a })
+instance ToJSON GetKeyPolicy where
+        toJSON GetKeyPolicy'{..}
+          = object
+              ["KeyId" .= _gkpKeyId,
+               "PolicyName" .= _gkpPolicyName]
 
 instance ToPath GetKeyPolicy where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery GetKeyPolicy where
-    toQuery = const mempty
-
-instance ToHeaders GetKeyPolicy
+        toQuery = const mempty
 
-instance ToJSON GetKeyPolicy where
-    toJSON GetKeyPolicy{..} = object
-        [ "KeyId"      .= _gkpKeyId
-        , "PolicyName" .= _gkpPolicyName
-        ]
+-- | /See:/ 'getKeyPolicyResponse' smart constructor.
+data GetKeyPolicyResponse = GetKeyPolicyResponse'
+    { _gkprsPolicy :: !(Maybe Text)
+    , _gkprsStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetKeyPolicy where
-    type Sv GetKeyPolicy = KMS
-    type Rs GetKeyPolicy = GetKeyPolicyResponse
+-- | Creates a value of 'GetKeyPolicyResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gkprsPolicy'
+--
+-- * 'gkprsStatus'
+getKeyPolicyResponse
+    :: Int -- ^ 'gkprsStatus'
+    -> GetKeyPolicyResponse
+getKeyPolicyResponse pStatus_ =
+    GetKeyPolicyResponse'
+    { _gkprsPolicy = Nothing
+    , _gkprsStatus = pStatus_
+    }
 
-    request  = post "GetKeyPolicy"
-    response = jsonResponse
+-- | A policy document in JSON format.
+gkprsPolicy :: Lens' GetKeyPolicyResponse (Maybe Text)
+gkprsPolicy = lens _gkprsPolicy (\ s a -> s{_gkprsPolicy = a});
 
-instance FromJSON GetKeyPolicyResponse where
-    parseJSON = withObject "GetKeyPolicyResponse" $ \o -> GetKeyPolicyResponse
-        <$> o .:? "Policy"
+-- | The response status code.
+gkprsStatus :: Lens' GetKeyPolicyResponse Int
+gkprsStatus = lens _gkprsStatus (\ s a -> s{_gkprsStatus = a});
diff --git a/gen/Network/AWS/KMS/GetKeyRotationStatus.hs b/gen/Network/AWS/KMS/GetKeyRotationStatus.hs
--- a/gen/Network/AWS/KMS/GetKeyRotationStatus.hs
+++ b/gen/Network/AWS/KMS/GetKeyRotationStatus.hs
@@ -1,117 +1,133 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.GetKeyRotationStatus
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Retrieves a Boolean value that indicates whether key rotation is enabled for
--- the specified key.
+-- Retrieves a Boolean value that indicates whether key rotation is enabled
+-- for the specified key.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyRotationStatus.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyRotationStatus.html AWS API Reference> for GetKeyRotationStatus.
 module Network.AWS.KMS.GetKeyRotationStatus
     (
-    -- * Request
-      GetKeyRotationStatus
-    -- ** Request constructor
-    , getKeyRotationStatus
-    -- ** Request lenses
+    -- * Creating a Request
+      getKeyRotationStatus
+    , GetKeyRotationStatus
+    -- * Request Lenses
     , gkrsKeyId
 
-    -- * Response
-    , GetKeyRotationStatusResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getKeyRotationStatusResponse
-    -- ** Response lenses
-    , gkrsrKeyRotationEnabled
+    , GetKeyRotationStatusResponse
+    -- * Response Lenses
+    , gkrsrsKeyRotationEnabled
+    , gkrsrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype GetKeyRotationStatus = GetKeyRotationStatus
+-- | /See:/ 'getKeyRotationStatus' smart constructor.
+newtype GetKeyRotationStatus = GetKeyRotationStatus'
     { _gkrsKeyId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetKeyRotationStatus' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetKeyRotationStatus' with the minimum fields required to make a request.
 --
--- * 'gkrsKeyId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getKeyRotationStatus :: Text -- ^ 'gkrsKeyId'
-                     -> GetKeyRotationStatus
-getKeyRotationStatus p1 = GetKeyRotationStatus
-    { _gkrsKeyId = p1
+-- * 'gkrsKeyId'
+getKeyRotationStatus
+    :: Text -- ^ 'gkrsKeyId'
+    -> GetKeyRotationStatus
+getKeyRotationStatus pKeyId_ =
+    GetKeyRotationStatus'
+    { _gkrsKeyId = pKeyId_
     }
 
--- | A unique identifier for the customer master key. This value can be a globally
--- unique identifier or the fully specified ARN to a key.  Key ARN Example -
--- arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012 Globally Unique Key ID Example - 12345678-1234-1234-1234-123456789012
+-- | A unique identifier for the customer master key. This value can be a
+-- globally unique identifier or the fully specified ARN to a key.
 --
+-- -   Key ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   Globally Unique Key ID Example -
+--     12345678-1234-1234-1234-123456789012
 gkrsKeyId :: Lens' GetKeyRotationStatus Text
-gkrsKeyId = lens _gkrsKeyId (\s a -> s { _gkrsKeyId = a })
+gkrsKeyId = lens _gkrsKeyId (\ s a -> s{_gkrsKeyId = a});
 
-newtype GetKeyRotationStatusResponse = GetKeyRotationStatusResponse
-    { _gkrsrKeyRotationEnabled :: Maybe Bool
-    } deriving (Eq, Ord, Read, Show)
+instance AWSRequest GetKeyRotationStatus where
+        type Sv GetKeyRotationStatus = KMS
+        type Rs GetKeyRotationStatus =
+             GetKeyRotationStatusResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetKeyRotationStatusResponse' <$>
+                   (x .?> "KeyRotationEnabled") <*> (pure (fromEnum s)))
 
--- | 'GetKeyRotationStatusResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gkrsrKeyRotationEnabled' @::@ 'Maybe' 'Bool'
---
-getKeyRotationStatusResponse :: GetKeyRotationStatusResponse
-getKeyRotationStatusResponse = GetKeyRotationStatusResponse
-    { _gkrsrKeyRotationEnabled = Nothing
-    }
+instance ToHeaders GetKeyRotationStatus where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.GetKeyRotationStatus" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | A Boolean value that specifies whether key rotation is enabled.
-gkrsrKeyRotationEnabled :: Lens' GetKeyRotationStatusResponse (Maybe Bool)
-gkrsrKeyRotationEnabled =
-    lens _gkrsrKeyRotationEnabled (\s a -> s { _gkrsrKeyRotationEnabled = a })
+instance ToJSON GetKeyRotationStatus where
+        toJSON GetKeyRotationStatus'{..}
+          = object ["KeyId" .= _gkrsKeyId]
 
 instance ToPath GetKeyRotationStatus where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery GetKeyRotationStatus where
-    toQuery = const mempty
-
-instance ToHeaders GetKeyRotationStatus
+        toQuery = const mempty
 
-instance ToJSON GetKeyRotationStatus where
-    toJSON GetKeyRotationStatus{..} = object
-        [ "KeyId" .= _gkrsKeyId
-        ]
+-- | /See:/ 'getKeyRotationStatusResponse' smart constructor.
+data GetKeyRotationStatusResponse = GetKeyRotationStatusResponse'
+    { _gkrsrsKeyRotationEnabled :: !(Maybe Bool)
+    , _gkrsrsStatus             :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetKeyRotationStatus where
-    type Sv GetKeyRotationStatus = KMS
-    type Rs GetKeyRotationStatus = GetKeyRotationStatusResponse
+-- | Creates a value of 'GetKeyRotationStatusResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gkrsrsKeyRotationEnabled'
+--
+-- * 'gkrsrsStatus'
+getKeyRotationStatusResponse
+    :: Int -- ^ 'gkrsrsStatus'
+    -> GetKeyRotationStatusResponse
+getKeyRotationStatusResponse pStatus_ =
+    GetKeyRotationStatusResponse'
+    { _gkrsrsKeyRotationEnabled = Nothing
+    , _gkrsrsStatus = pStatus_
+    }
 
-    request  = post "GetKeyRotationStatus"
-    response = jsonResponse
+-- | A Boolean value that specifies whether key rotation is enabled.
+gkrsrsKeyRotationEnabled :: Lens' GetKeyRotationStatusResponse (Maybe Bool)
+gkrsrsKeyRotationEnabled = lens _gkrsrsKeyRotationEnabled (\ s a -> s{_gkrsrsKeyRotationEnabled = a});
 
-instance FromJSON GetKeyRotationStatusResponse where
-    parseJSON = withObject "GetKeyRotationStatusResponse" $ \o -> GetKeyRotationStatusResponse
-        <$> o .:? "KeyRotationEnabled"
+-- | The response status code.
+gkrsrsStatus :: Lens' GetKeyRotationStatusResponse Int
+gkrsrsStatus = lens _gkrsrsStatus (\ s a -> s{_gkrsrsStatus = a});
diff --git a/gen/Network/AWS/KMS/ListAliases.hs b/gen/Network/AWS/KMS/ListAliases.hs
--- a/gen/Network/AWS/KMS/ListAliases.hs
+++ b/gen/Network/AWS/KMS/ListAliases.hs
@@ -1,148 +1,164 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.ListAliases
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Lists all of the key aliases in the account.
+-- Lists all of the key aliases in the account.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html AWS API Reference> for ListAliases.
 module Network.AWS.KMS.ListAliases
     (
-    -- * Request
-      ListAliases
-    -- ** Request constructor
-    , listAliases
-    -- ** Request lenses
-    , laLimit
+    -- * Creating a Request
+      listAliases
+    , ListAliases
+    -- * Request Lenses
     , laMarker
+    , laLimit
 
-    -- * Response
-    , ListAliasesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listAliasesResponse
-    -- ** Response lenses
-    , larAliases
-    , larNextMarker
-    , larTruncated
+    , ListAliasesResponse
+    -- * Response Lenses
+    , larsTruncated
+    , larsAliases
+    , larsNextMarker
+    , larsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data ListAliases = ListAliases
-    { _laLimit  :: Maybe Nat
-    , _laMarker :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'listAliases' smart constructor.
+data ListAliases = ListAliases'
+    { _laMarker :: !(Maybe Text)
+    , _laLimit  :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListAliases' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ListAliases' with the minimum fields required to make a request.
 --
--- * 'laLimit' @::@ 'Maybe' 'Natural'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'laMarker' @::@ 'Maybe' 'Text'
+-- * 'laMarker'
 --
-listAliases :: ListAliases
-listAliases = ListAliases
-    { _laLimit  = Nothing
-    , _laMarker = Nothing
+-- * 'laLimit'
+listAliases
+    :: ListAliases
+listAliases =
+    ListAliases'
+    { _laMarker = Nothing
+    , _laLimit = Nothing
     }
 
--- | Specify this parameter when paginating results to indicate the maximum number
--- of aliases you want in each response. If there are additional aliases beyond
--- the maximum you specify, the 'Truncated' response element will be set to 'true.'
+-- | Use this parameter when paginating results, and only in a subsequent
+-- request after you\'ve received a response where the results are
+-- truncated. Set it to the value of the 'NextMarker' element in the
+-- response you just received.
+laMarker :: Lens' ListAliases (Maybe Text)
+laMarker = lens _laMarker (\ s a -> s{_laMarker = a});
+
+-- | Specify this parameter when paginating results to indicate the maximum
+-- number of aliases you want in each response. If there are additional
+-- aliases beyond the maximum you specify, the 'Truncated' response element
+-- will be set to 'true.'
 laLimit :: Lens' ListAliases (Maybe Natural)
-laLimit = lens _laLimit (\s a -> s { _laLimit = a }) . mapping _Nat
+laLimit = lens _laLimit (\ s a -> s{_laLimit = a}) . mapping _Nat;
 
--- | Use this parameter when paginating results, and only in a subsequent request
--- after you've received a response where the results are truncated. Set it to
--- the value of the 'NextMarker' element in the response you just received.
-laMarker :: Lens' ListAliases (Maybe Text)
-laMarker = lens _laMarker (\s a -> s { _laMarker = a })
+instance AWSRequest ListAliases where
+        type Sv ListAliases = KMS
+        type Rs ListAliases = ListAliasesResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListAliasesResponse' <$>
+                   (x .?> "Truncated") <*> (x .?> "Aliases" .!@ mempty)
+                     <*> (x .?> "NextMarker")
+                     <*> (pure (fromEnum s)))
 
-data ListAliasesResponse = ListAliasesResponse
-    { _larAliases    :: List "Aliases" AliasListEntry
-    , _larNextMarker :: Maybe Text
-    , _larTruncated  :: Maybe Bool
-    } deriving (Eq, Read, Show)
+instance ToHeaders ListAliases where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.ListAliases" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | 'ListAliasesResponse' constructor.
+instance ToJSON ListAliases where
+        toJSON ListAliases'{..}
+          = object ["Marker" .= _laMarker, "Limit" .= _laLimit]
+
+instance ToPath ListAliases where
+        toPath = const "/"
+
+instance ToQuery ListAliases where
+        toQuery = const mempty
+
+-- | /See:/ 'listAliasesResponse' smart constructor.
+data ListAliasesResponse = ListAliasesResponse'
+    { _larsTruncated  :: !(Maybe Bool)
+    , _larsAliases    :: !(Maybe [AliasListEntry])
+    , _larsNextMarker :: !(Maybe Text)
+    , _larsStatus     :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListAliasesResponse' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'larAliases' @::@ ['AliasListEntry']
+-- * 'larsTruncated'
 --
--- * 'larNextMarker' @::@ 'Maybe' 'Text'
+-- * 'larsAliases'
 --
--- * 'larTruncated' @::@ 'Maybe' 'Bool'
+-- * 'larsNextMarker'
 --
-listAliasesResponse :: ListAliasesResponse
-listAliasesResponse = ListAliasesResponse
-    { _larAliases    = mempty
-    , _larNextMarker = Nothing
-    , _larTruncated  = Nothing
+-- * 'larsStatus'
+listAliasesResponse
+    :: Int -- ^ 'larsStatus'
+    -> ListAliasesResponse
+listAliasesResponse pStatus_ =
+    ListAliasesResponse'
+    { _larsTruncated = Nothing
+    , _larsAliases = Nothing
+    , _larsNextMarker = Nothing
+    , _larsStatus = pStatus_
     }
 
--- | A list of key aliases in the user's account.
-larAliases :: Lens' ListAliasesResponse [AliasListEntry]
-larAliases = lens _larAliases (\s a -> s { _larAliases = a }) . _List
-
--- | If 'Truncated' is true, this value is present and contains the value to use for
--- the 'Marker' request parameter in a subsequent pagination request.
-larNextMarker :: Lens' ListAliasesResponse (Maybe Text)
-larNextMarker = lens _larNextMarker (\s a -> s { _larNextMarker = a })
-
 -- | A flag that indicates whether there are more items in the list. If your
--- results were truncated, you can make a subsequent pagination request using
--- the 'Marker' request parameter to retrieve more aliases in the list.
-larTruncated :: Lens' ListAliasesResponse (Maybe Bool)
-larTruncated = lens _larTruncated (\s a -> s { _larTruncated = a })
-
-instance ToPath ListAliases where
-    toPath = const "/"
-
-instance ToQuery ListAliases where
-    toQuery = const mempty
-
-instance ToHeaders ListAliases
-
-instance ToJSON ListAliases where
-    toJSON ListAliases{..} = object
-        [ "Limit"  .= _laLimit
-        , "Marker" .= _laMarker
-        ]
+-- results were truncated, you can make a subsequent pagination request
+-- using the 'Marker' request parameter to retrieve more aliases in the
+-- list.
+larsTruncated :: Lens' ListAliasesResponse (Maybe Bool)
+larsTruncated = lens _larsTruncated (\ s a -> s{_larsTruncated = a});
 
-instance AWSRequest ListAliases where
-    type Sv ListAliases = KMS
-    type Rs ListAliases = ListAliasesResponse
+-- | A list of key aliases in the user\'s account.
+larsAliases :: Lens' ListAliasesResponse [AliasListEntry]
+larsAliases = lens _larsAliases (\ s a -> s{_larsAliases = a}) . _Default . _Coerce;
 
-    request  = post "ListAliases"
-    response = jsonResponse
+-- | If 'Truncated' is true, this value is present and contains the value to
+-- use for the 'Marker' request parameter in a subsequent pagination
+-- request.
+larsNextMarker :: Lens' ListAliasesResponse (Maybe Text)
+larsNextMarker = lens _larsNextMarker (\ s a -> s{_larsNextMarker = a});
 
-instance FromJSON ListAliasesResponse where
-    parseJSON = withObject "ListAliasesResponse" $ \o -> ListAliasesResponse
-        <$> o .:? "Aliases" .!= mempty
-        <*> o .:? "NextMarker"
-        <*> o .:? "Truncated"
+-- | The response status code.
+larsStatus :: Lens' ListAliasesResponse Int
+larsStatus = lens _larsStatus (\ s a -> s{_larsStatus = a});
diff --git a/gen/Network/AWS/KMS/ListGrants.hs b/gen/Network/AWS/KMS/ListGrants.hs
--- a/gen/Network/AWS/KMS/ListGrants.hs
+++ b/gen/Network/AWS/KMS/ListGrants.hs
@@ -1,163 +1,182 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.ListGrants
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | List the grants for a specified key.
+-- List the grants for a specified key.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html AWS API Reference> for ListGrants.
 module Network.AWS.KMS.ListGrants
     (
-    -- * Request
-      ListGrants
-    -- ** Request constructor
-    , listGrants
-    -- ** Request lenses
-    , lgKeyId
-    , lgLimit
+    -- * Creating a Request
+      listGrants
+    , ListGrants
+    -- * Request Lenses
     , lgMarker
+    , lgLimit
+    , lgKeyId
 
-    -- * Response
-    , ListGrantsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listGrantsResponse
-    -- ** Response lenses
-    , lgrGrants
-    , lgrNextMarker
-    , lgrTruncated
+    , ListGrantsResponse
+    -- * Response Lenses
+    , lgrsTruncated
+    , lgrsGrants
+    , lgrsNextMarker
+    , lgrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data ListGrants = ListGrants
-    { _lgKeyId  :: Text
-    , _lgLimit  :: Maybe Nat
-    , _lgMarker :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'listGrants' smart constructor.
+data ListGrants = ListGrants'
+    { _lgMarker :: !(Maybe Text)
+    , _lgLimit  :: !(Maybe Nat)
+    , _lgKeyId  :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListGrants' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ListGrants' with the minimum fields required to make a request.
 --
--- * 'lgKeyId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lgLimit' @::@ 'Maybe' 'Natural'
+-- * 'lgMarker'
 --
--- * 'lgMarker' @::@ 'Maybe' 'Text'
+-- * 'lgLimit'
 --
-listGrants :: Text -- ^ 'lgKeyId'
-           -> ListGrants
-listGrants p1 = ListGrants
-    { _lgKeyId  = p1
-    , _lgLimit  = Nothing
-    , _lgMarker = Nothing
+-- * 'lgKeyId'
+listGrants
+    :: Text -- ^ 'lgKeyId'
+    -> ListGrants
+listGrants pKeyId_ =
+    ListGrants'
+    { _lgMarker = Nothing
+    , _lgLimit = Nothing
+    , _lgKeyId = pKeyId_
     }
 
--- | A unique identifier for the customer master key. This value can be a globally
--- unique identifier or the fully specified ARN to a key.  Key ARN Example -
--- arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012 Globally Unique Key ID Example - 12345678-1234-1234-1234-123456789012
+-- | Use this parameter only when paginating results, and only in a
+-- subsequent request after you\'ve received a response where the results
+-- are truncated. Set it to the value of the 'NextMarker' in the response
+-- you just received.
+lgMarker :: Lens' ListGrants (Maybe Text)
+lgMarker = lens _lgMarker (\ s a -> s{_lgMarker = a});
+
+-- | Specify this parameter only when paginating results to indicate the
+-- maximum number of grants you want listed in the response. If there are
+-- additional grants beyond the maximum you specify, the 'Truncated'
+-- response element will be set to 'true.'
+lgLimit :: Lens' ListGrants (Maybe Natural)
+lgLimit = lens _lgLimit (\ s a -> s{_lgLimit = a}) . mapping _Nat;
+
+-- | A unique identifier for the customer master key. This value can be a
+-- globally unique identifier or the fully specified ARN to a key.
 --
+-- -   Key ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   Globally Unique Key ID Example -
+--     12345678-1234-1234-1234-123456789012
 lgKeyId :: Lens' ListGrants Text
-lgKeyId = lens _lgKeyId (\s a -> s { _lgKeyId = a })
+lgKeyId = lens _lgKeyId (\ s a -> s{_lgKeyId = a});
 
--- | Specify this parameter only when paginating results to indicate the maximum
--- number of grants you want listed in the response. If there are additional
--- grants beyond the maximum you specify, the 'Truncated' response element will be
--- set to 'true.'
-lgLimit :: Lens' ListGrants (Maybe Natural)
-lgLimit = lens _lgLimit (\s a -> s { _lgLimit = a }) . mapping _Nat
+instance AWSRequest ListGrants where
+        type Sv ListGrants = KMS
+        type Rs ListGrants = ListGrantsResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListGrantsResponse' <$>
+                   (x .?> "Truncated") <*> (x .?> "Grants" .!@ mempty)
+                     <*> (x .?> "NextMarker")
+                     <*> (pure (fromEnum s)))
 
--- | Use this parameter only when paginating results, and only in a subsequent
--- request after you've received a response where the results are truncated. Set
--- it to the value of the 'NextMarker' in the response you just received.
-lgMarker :: Lens' ListGrants (Maybe Text)
-lgMarker = lens _lgMarker (\s a -> s { _lgMarker = a })
+instance ToHeaders ListGrants where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.ListGrants" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
-data ListGrantsResponse = ListGrantsResponse
-    { _lgrGrants     :: List "Grants" GrantListEntry
-    , _lgrNextMarker :: Maybe Text
-    , _lgrTruncated  :: Maybe Bool
-    } deriving (Eq, Read, Show)
+instance ToJSON ListGrants where
+        toJSON ListGrants'{..}
+          = object
+              ["Marker" .= _lgMarker, "Limit" .= _lgLimit,
+               "KeyId" .= _lgKeyId]
 
--- | 'ListGrantsResponse' constructor.
+instance ToPath ListGrants where
+        toPath = const "/"
+
+instance ToQuery ListGrants where
+        toQuery = const mempty
+
+-- | /See:/ 'listGrantsResponse' smart constructor.
+data ListGrantsResponse = ListGrantsResponse'
+    { _lgrsTruncated  :: !(Maybe Bool)
+    , _lgrsGrants     :: !(Maybe [GrantListEntry])
+    , _lgrsNextMarker :: !(Maybe Text)
+    , _lgrsStatus     :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListGrantsResponse' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lgrGrants' @::@ ['GrantListEntry']
+-- * 'lgrsTruncated'
 --
--- * 'lgrNextMarker' @::@ 'Maybe' 'Text'
+-- * 'lgrsGrants'
 --
--- * 'lgrTruncated' @::@ 'Maybe' 'Bool'
+-- * 'lgrsNextMarker'
 --
-listGrantsResponse :: ListGrantsResponse
-listGrantsResponse = ListGrantsResponse
-    { _lgrGrants     = mempty
-    , _lgrNextMarker = Nothing
-    , _lgrTruncated  = Nothing
+-- * 'lgrsStatus'
+listGrantsResponse
+    :: Int -- ^ 'lgrsStatus'
+    -> ListGrantsResponse
+listGrantsResponse pStatus_ =
+    ListGrantsResponse'
+    { _lgrsTruncated = Nothing
+    , _lgrsGrants = Nothing
+    , _lgrsNextMarker = Nothing
+    , _lgrsStatus = pStatus_
     }
 
--- | A list of grants.
-lgrGrants :: Lens' ListGrantsResponse [GrantListEntry]
-lgrGrants = lens _lgrGrants (\s a -> s { _lgrGrants = a }) . _List
-
--- | If 'Truncated' is true, this value is present and contains the value to use for
--- the 'Marker' request parameter in a subsequent pagination request.
-lgrNextMarker :: Lens' ListGrantsResponse (Maybe Text)
-lgrNextMarker = lens _lgrNextMarker (\s a -> s { _lgrNextMarker = a })
-
 -- | A flag that indicates whether there are more items in the list. If your
--- results were truncated, you can make a subsequent pagination request using
--- the 'Marker' request parameter to retrieve more grants in the list.
-lgrTruncated :: Lens' ListGrantsResponse (Maybe Bool)
-lgrTruncated = lens _lgrTruncated (\s a -> s { _lgrTruncated = a })
-
-instance ToPath ListGrants where
-    toPath = const "/"
-
-instance ToQuery ListGrants where
-    toQuery = const mempty
-
-instance ToHeaders ListGrants
-
-instance ToJSON ListGrants where
-    toJSON ListGrants{..} = object
-        [ "KeyId"  .= _lgKeyId
-        , "Limit"  .= _lgLimit
-        , "Marker" .= _lgMarker
-        ]
+-- results were truncated, you can make a subsequent pagination request
+-- using the 'Marker' request parameter to retrieve more grants in the
+-- list.
+lgrsTruncated :: Lens' ListGrantsResponse (Maybe Bool)
+lgrsTruncated = lens _lgrsTruncated (\ s a -> s{_lgrsTruncated = a});
 
-instance AWSRequest ListGrants where
-    type Sv ListGrants = KMS
-    type Rs ListGrants = ListGrantsResponse
+-- | A list of grants.
+lgrsGrants :: Lens' ListGrantsResponse [GrantListEntry]
+lgrsGrants = lens _lgrsGrants (\ s a -> s{_lgrsGrants = a}) . _Default . _Coerce;
 
-    request  = post "ListGrants"
-    response = jsonResponse
+-- | If 'Truncated' is true, this value is present and contains the value to
+-- use for the 'Marker' request parameter in a subsequent pagination
+-- request.
+lgrsNextMarker :: Lens' ListGrantsResponse (Maybe Text)
+lgrsNextMarker = lens _lgrsNextMarker (\ s a -> s{_lgrsNextMarker = a});
 
-instance FromJSON ListGrantsResponse where
-    parseJSON = withObject "ListGrantsResponse" $ \o -> ListGrantsResponse
-        <$> o .:? "Grants" .!= mempty
-        <*> o .:? "NextMarker"
-        <*> o .:? "Truncated"
+-- | The response status code.
+lgrsStatus :: Lens' ListGrantsResponse Int
+lgrsStatus = lens _lgrsStatus (\ s a -> s{_lgrsStatus = a});
diff --git a/gen/Network/AWS/KMS/ListKeyPolicies.hs b/gen/Network/AWS/KMS/ListKeyPolicies.hs
--- a/gen/Network/AWS/KMS/ListKeyPolicies.hs
+++ b/gen/Network/AWS/KMS/ListKeyPolicies.hs
@@ -1,166 +1,188 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.ListKeyPolicies
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Retrieves a list of policies attached to a key.
+-- Retrieves a list of policies attached to a key.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeyPolicies.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeyPolicies.html AWS API Reference> for ListKeyPolicies.
 module Network.AWS.KMS.ListKeyPolicies
     (
-    -- * Request
-      ListKeyPolicies
-    -- ** Request constructor
-    , listKeyPolicies
-    -- ** Request lenses
-    , lkpKeyId
-    , lkpLimit
+    -- * Creating a Request
+      listKeyPolicies
+    , ListKeyPolicies
+    -- * Request Lenses
     , lkpMarker
+    , lkpLimit
+    , lkpKeyId
 
-    -- * Response
-    , ListKeyPoliciesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listKeyPoliciesResponse
-    -- ** Response lenses
-    , lkprNextMarker
-    , lkprPolicyNames
-    , lkprTruncated
+    , ListKeyPoliciesResponse
+    -- * Response Lenses
+    , lkprsPolicyNames
+    , lkprsTruncated
+    , lkprsNextMarker
+    , lkprsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data ListKeyPolicies = ListKeyPolicies
-    { _lkpKeyId  :: Text
-    , _lkpLimit  :: Maybe Nat
-    , _lkpMarker :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'listKeyPolicies' smart constructor.
+data ListKeyPolicies = ListKeyPolicies'
+    { _lkpMarker :: !(Maybe Text)
+    , _lkpLimit  :: !(Maybe Nat)
+    , _lkpKeyId  :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListKeyPolicies' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ListKeyPolicies' with the minimum fields required to make a request.
 --
--- * 'lkpKeyId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lkpLimit' @::@ 'Maybe' 'Natural'
+-- * 'lkpMarker'
 --
--- * 'lkpMarker' @::@ 'Maybe' 'Text'
+-- * 'lkpLimit'
 --
-listKeyPolicies :: Text -- ^ 'lkpKeyId'
-                -> ListKeyPolicies
-listKeyPolicies p1 = ListKeyPolicies
-    { _lkpKeyId  = p1
-    , _lkpLimit  = Nothing
-    , _lkpMarker = Nothing
+-- * 'lkpKeyId'
+listKeyPolicies
+    :: Text -- ^ 'lkpKeyId'
+    -> ListKeyPolicies
+listKeyPolicies pKeyId_ =
+    ListKeyPolicies'
+    { _lkpMarker = Nothing
+    , _lkpLimit = Nothing
+    , _lkpKeyId = pKeyId_
     }
 
--- | A unique identifier for the customer master key. This value can be a globally
--- unique identifier, a fully specified ARN to either an alias or a key, or an
--- alias name prefixed by "alias/".  Key ARN Example -
--- arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012 Alias ARN Example - arn:aws:kms:us-east-1:123456789012:alias/MyAliasName
--- Globally Unique Key ID Example - 12345678-1234-1234-1234-123456789012 Alias
--- Name Example - alias/MyAliasName
-lkpKeyId :: Lens' ListKeyPolicies Text
-lkpKeyId = lens _lkpKeyId (\s a -> s { _lkpKeyId = a })
-
--- | Specify this parameter only when paginating results to indicate the maximum
--- number of policies you want listed in the response. If there are additional
--- policies beyond the maximum you specify, the 'Truncated' response element will
--- be set to 'true.'
-lkpLimit :: Lens' ListKeyPolicies (Maybe Natural)
-lkpLimit = lens _lkpLimit (\s a -> s { _lkpLimit = a }) . mapping _Nat
-
--- | Use this parameter only when paginating results, and only in a subsequent
--- request after you've received a response where the results are truncated. Set
--- it to the value of the 'NextMarker' in the response you just received.
+-- | Use this parameter only when paginating results, and only in a
+-- subsequent request after you\'ve received a response where the results
+-- are truncated. Set it to the value of the 'NextMarker' in the response
+-- you just received.
 lkpMarker :: Lens' ListKeyPolicies (Maybe Text)
-lkpMarker = lens _lkpMarker (\s a -> s { _lkpMarker = a })
+lkpMarker = lens _lkpMarker (\ s a -> s{_lkpMarker = a});
 
-data ListKeyPoliciesResponse = ListKeyPoliciesResponse
-    { _lkprNextMarker  :: Maybe Text
-    , _lkprPolicyNames :: List "PolicyNames" Text
-    , _lkprTruncated   :: Maybe Bool
-    } deriving (Eq, Ord, Read, Show)
+-- | Specify this parameter only when paginating results to indicate the
+-- maximum number of policies you want listed in the response. If there are
+-- additional policies beyond the maximum you specify, the 'Truncated'
+-- response element will be set to 'true.'
+lkpLimit :: Lens' ListKeyPolicies (Maybe Natural)
+lkpLimit = lens _lkpLimit (\ s a -> s{_lkpLimit = a}) . mapping _Nat;
 
--- | 'ListKeyPoliciesResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lkprNextMarker' @::@ 'Maybe' 'Text'
---
--- * 'lkprPolicyNames' @::@ ['Text']
---
--- * 'lkprTruncated' @::@ 'Maybe' 'Bool'
+-- | A unique identifier for the customer master key. This value can be a
+-- globally unique identifier, a fully specified ARN to either an alias or
+-- a key, or an alias name prefixed by \"alias\/\".
 --
-listKeyPoliciesResponse :: ListKeyPoliciesResponse
-listKeyPoliciesResponse = ListKeyPoliciesResponse
-    { _lkprPolicyNames = mempty
-    , _lkprNextMarker  = Nothing
-    , _lkprTruncated   = Nothing
-    }
+-- -   Key ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   Alias ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:alias\/MyAliasName
+-- -   Globally Unique Key ID Example -
+--     12345678-1234-1234-1234-123456789012
+-- -   Alias Name Example - alias\/MyAliasName
+lkpKeyId :: Lens' ListKeyPolicies Text
+lkpKeyId = lens _lkpKeyId (\ s a -> s{_lkpKeyId = a});
 
--- | If 'Truncated' is true, this value is present and contains the value to use for
--- the 'Marker' request parameter in a subsequent pagination request.
-lkprNextMarker :: Lens' ListKeyPoliciesResponse (Maybe Text)
-lkprNextMarker = lens _lkprNextMarker (\s a -> s { _lkprNextMarker = a })
+instance AWSRequest ListKeyPolicies where
+        type Sv ListKeyPolicies = KMS
+        type Rs ListKeyPolicies = ListKeyPoliciesResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListKeyPoliciesResponse' <$>
+                   (x .?> "PolicyNames" .!@ mempty) <*>
+                     (x .?> "Truncated")
+                     <*> (x .?> "NextMarker")
+                     <*> (pure (fromEnum s)))
 
--- | A list of policy names. Currently, there is only one policy and it is named
--- "Default".
-lkprPolicyNames :: Lens' ListKeyPoliciesResponse [Text]
-lkprPolicyNames = lens _lkprPolicyNames (\s a -> s { _lkprPolicyNames = a }) . _List
+instance ToHeaders ListKeyPolicies where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.ListKeyPolicies" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | A flag that indicates whether there are more items in the list. If your
--- results were truncated, you can make a subsequent pagination request using
--- the 'Marker' request parameter to retrieve more policies in the list.
-lkprTruncated :: Lens' ListKeyPoliciesResponse (Maybe Bool)
-lkprTruncated = lens _lkprTruncated (\s a -> s { _lkprTruncated = a })
+instance ToJSON ListKeyPolicies where
+        toJSON ListKeyPolicies'{..}
+          = object
+              ["Marker" .= _lkpMarker, "Limit" .= _lkpLimit,
+               "KeyId" .= _lkpKeyId]
 
 instance ToPath ListKeyPolicies where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery ListKeyPolicies where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders ListKeyPolicies
+-- | /See:/ 'listKeyPoliciesResponse' smart constructor.
+data ListKeyPoliciesResponse = ListKeyPoliciesResponse'
+    { _lkprsPolicyNames :: !(Maybe [Text])
+    , _lkprsTruncated   :: !(Maybe Bool)
+    , _lkprsNextMarker  :: !(Maybe Text)
+    , _lkprsStatus      :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON ListKeyPolicies where
-    toJSON ListKeyPolicies{..} = object
-        [ "KeyId"  .= _lkpKeyId
-        , "Limit"  .= _lkpLimit
-        , "Marker" .= _lkpMarker
-        ]
+-- | Creates a value of 'ListKeyPoliciesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lkprsPolicyNames'
+--
+-- * 'lkprsTruncated'
+--
+-- * 'lkprsNextMarker'
+--
+-- * 'lkprsStatus'
+listKeyPoliciesResponse
+    :: Int -- ^ 'lkprsStatus'
+    -> ListKeyPoliciesResponse
+listKeyPoliciesResponse pStatus_ =
+    ListKeyPoliciesResponse'
+    { _lkprsPolicyNames = Nothing
+    , _lkprsTruncated = Nothing
+    , _lkprsNextMarker = Nothing
+    , _lkprsStatus = pStatus_
+    }
 
-instance AWSRequest ListKeyPolicies where
-    type Sv ListKeyPolicies = KMS
-    type Rs ListKeyPolicies = ListKeyPoliciesResponse
+-- | A list of policy names. Currently, there is only one policy and it is
+-- named \"Default\".
+lkprsPolicyNames :: Lens' ListKeyPoliciesResponse [Text]
+lkprsPolicyNames = lens _lkprsPolicyNames (\ s a -> s{_lkprsPolicyNames = a}) . _Default . _Coerce;
 
-    request  = post "ListKeyPolicies"
-    response = jsonResponse
+-- | A flag that indicates whether there are more items in the list. If your
+-- results were truncated, you can make a subsequent pagination request
+-- using the 'Marker' request parameter to retrieve more policies in the
+-- list.
+lkprsTruncated :: Lens' ListKeyPoliciesResponse (Maybe Bool)
+lkprsTruncated = lens _lkprsTruncated (\ s a -> s{_lkprsTruncated = a});
 
-instance FromJSON ListKeyPoliciesResponse where
-    parseJSON = withObject "ListKeyPoliciesResponse" $ \o -> ListKeyPoliciesResponse
-        <$> o .:? "NextMarker"
-        <*> o .:? "PolicyNames" .!= mempty
-        <*> o .:? "Truncated"
+-- | If 'Truncated' is true, this value is present and contains the value to
+-- use for the 'Marker' request parameter in a subsequent pagination
+-- request.
+lkprsNextMarker :: Lens' ListKeyPoliciesResponse (Maybe Text)
+lkprsNextMarker = lens _lkprsNextMarker (\ s a -> s{_lkprsNextMarker = a});
+
+-- | The response status code.
+lkprsStatus :: Lens' ListKeyPoliciesResponse Int
+lkprsStatus = lens _lkprsStatus (\ s a -> s{_lkprsStatus = a});
diff --git a/gen/Network/AWS/KMS/ListKeys.hs b/gen/Network/AWS/KMS/ListKeys.hs
--- a/gen/Network/AWS/KMS/ListKeys.hs
+++ b/gen/Network/AWS/KMS/ListKeys.hs
@@ -1,148 +1,163 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.ListKeys
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Lists the customer master keys.
+-- Lists the customer master keys.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html AWS API Reference> for ListKeys.
 module Network.AWS.KMS.ListKeys
     (
-    -- * Request
-      ListKeys
-    -- ** Request constructor
-    , listKeys
-    -- ** Request lenses
-    , lkLimit
+    -- * Creating a Request
+      listKeys
+    , ListKeys
+    -- * Request Lenses
     , lkMarker
+    , lkLimit
 
-    -- * Response
-    , ListKeysResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listKeysResponse
-    -- ** Response lenses
-    , lkrKeys
-    , lkrNextMarker
-    , lkrTruncated
+    , ListKeysResponse
+    -- * Response Lenses
+    , lkrsTruncated
+    , lkrsKeys
+    , lkrsNextMarker
+    , lkrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data ListKeys = ListKeys
-    { _lkLimit  :: Maybe Nat
-    , _lkMarker :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'listKeys' smart constructor.
+data ListKeys = ListKeys'
+    { _lkMarker :: !(Maybe Text)
+    , _lkLimit  :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListKeys' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ListKeys' with the minimum fields required to make a request.
 --
--- * 'lkLimit' @::@ 'Maybe' 'Natural'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lkMarker' @::@ 'Maybe' 'Text'
+-- * 'lkMarker'
 --
-listKeys :: ListKeys
-listKeys = ListKeys
-    { _lkLimit  = Nothing
-    , _lkMarker = Nothing
+-- * 'lkLimit'
+listKeys
+    :: ListKeys
+listKeys =
+    ListKeys'
+    { _lkMarker = Nothing
+    , _lkLimit = Nothing
     }
 
--- | Specify this parameter only when paginating results to indicate the maximum
--- number of keys you want listed in the response. If there are additional keys
--- beyond the maximum you specify, the 'Truncated' response element will be set to 'true.'
+-- | Use this parameter only when paginating results, and only in a
+-- subsequent request after you\'ve received a response where the results
+-- are truncated. Set it to the value of the 'NextMarker' in the response
+-- you just received.
+lkMarker :: Lens' ListKeys (Maybe Text)
+lkMarker = lens _lkMarker (\ s a -> s{_lkMarker = a});
+
+-- | Specify this parameter only when paginating results to indicate the
+-- maximum number of keys you want listed in the response. If there are
+-- additional keys beyond the maximum you specify, the 'Truncated' response
+-- element will be set to 'true.'
 lkLimit :: Lens' ListKeys (Maybe Natural)
-lkLimit = lens _lkLimit (\s a -> s { _lkLimit = a }) . mapping _Nat
+lkLimit = lens _lkLimit (\ s a -> s{_lkLimit = a}) . mapping _Nat;
 
--- | Use this parameter only when paginating results, and only in a subsequent
--- request after you've received a response where the results are truncated. Set
--- it to the value of the 'NextMarker' in the response you just received.
-lkMarker :: Lens' ListKeys (Maybe Text)
-lkMarker = lens _lkMarker (\s a -> s { _lkMarker = a })
+instance AWSRequest ListKeys where
+        type Sv ListKeys = KMS
+        type Rs ListKeys = ListKeysResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListKeysResponse' <$>
+                   (x .?> "Truncated") <*> (x .?> "Keys" .!@ mempty) <*>
+                     (x .?> "NextMarker")
+                     <*> (pure (fromEnum s)))
 
-data ListKeysResponse = ListKeysResponse
-    { _lkrKeys       :: List "Keys" KeyListEntry
-    , _lkrNextMarker :: Maybe Text
-    , _lkrTruncated  :: Maybe Bool
-    } deriving (Eq, Read, Show)
+instance ToHeaders ListKeys where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.ListKeys" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | 'ListKeysResponse' constructor.
+instance ToJSON ListKeys where
+        toJSON ListKeys'{..}
+          = object ["Marker" .= _lkMarker, "Limit" .= _lkLimit]
+
+instance ToPath ListKeys where
+        toPath = const "/"
+
+instance ToQuery ListKeys where
+        toQuery = const mempty
+
+-- | /See:/ 'listKeysResponse' smart constructor.
+data ListKeysResponse = ListKeysResponse'
+    { _lkrsTruncated  :: !(Maybe Bool)
+    , _lkrsKeys       :: !(Maybe [KeyListEntry])
+    , _lkrsNextMarker :: !(Maybe Text)
+    , _lkrsStatus     :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListKeysResponse' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lkrKeys' @::@ ['KeyListEntry']
+-- * 'lkrsTruncated'
 --
--- * 'lkrNextMarker' @::@ 'Maybe' 'Text'
+-- * 'lkrsKeys'
 --
--- * 'lkrTruncated' @::@ 'Maybe' 'Bool'
+-- * 'lkrsNextMarker'
 --
-listKeysResponse :: ListKeysResponse
-listKeysResponse = ListKeysResponse
-    { _lkrKeys       = mempty
-    , _lkrNextMarker = Nothing
-    , _lkrTruncated  = Nothing
+-- * 'lkrsStatus'
+listKeysResponse
+    :: Int -- ^ 'lkrsStatus'
+    -> ListKeysResponse
+listKeysResponse pStatus_ =
+    ListKeysResponse'
+    { _lkrsTruncated = Nothing
+    , _lkrsKeys = Nothing
+    , _lkrsNextMarker = Nothing
+    , _lkrsStatus = pStatus_
     }
 
--- | A list of keys.
-lkrKeys :: Lens' ListKeysResponse [KeyListEntry]
-lkrKeys = lens _lkrKeys (\s a -> s { _lkrKeys = a }) . _List
-
--- | If 'Truncated' is true, this value is present and contains the value to use for
--- the 'Marker' request parameter in a subsequent pagination request.
-lkrNextMarker :: Lens' ListKeysResponse (Maybe Text)
-lkrNextMarker = lens _lkrNextMarker (\s a -> s { _lkrNextMarker = a })
-
 -- | A flag that indicates whether there are more items in the list. If your
--- results were truncated, you can make a subsequent pagination request using
--- the 'Marker' request parameter to retrieve more keys in the list.
-lkrTruncated :: Lens' ListKeysResponse (Maybe Bool)
-lkrTruncated = lens _lkrTruncated (\s a -> s { _lkrTruncated = a })
-
-instance ToPath ListKeys where
-    toPath = const "/"
-
-instance ToQuery ListKeys where
-    toQuery = const mempty
-
-instance ToHeaders ListKeys
-
-instance ToJSON ListKeys where
-    toJSON ListKeys{..} = object
-        [ "Limit"  .= _lkLimit
-        , "Marker" .= _lkMarker
-        ]
+-- results were truncated, you can make a subsequent pagination request
+-- using the 'Marker' request parameter to retrieve more keys in the list.
+lkrsTruncated :: Lens' ListKeysResponse (Maybe Bool)
+lkrsTruncated = lens _lkrsTruncated (\ s a -> s{_lkrsTruncated = a});
 
-instance AWSRequest ListKeys where
-    type Sv ListKeys = KMS
-    type Rs ListKeys = ListKeysResponse
+-- | A list of keys.
+lkrsKeys :: Lens' ListKeysResponse [KeyListEntry]
+lkrsKeys = lens _lkrsKeys (\ s a -> s{_lkrsKeys = a}) . _Default . _Coerce;
 
-    request  = post "ListKeys"
-    response = jsonResponse
+-- | If 'Truncated' is true, this value is present and contains the value to
+-- use for the 'Marker' request parameter in a subsequent pagination
+-- request.
+lkrsNextMarker :: Lens' ListKeysResponse (Maybe Text)
+lkrsNextMarker = lens _lkrsNextMarker (\ s a -> s{_lkrsNextMarker = a});
 
-instance FromJSON ListKeysResponse where
-    parseJSON = withObject "ListKeysResponse" $ \o -> ListKeysResponse
-        <$> o .:? "Keys" .!= mempty
-        <*> o .:? "NextMarker"
-        <*> o .:? "Truncated"
+-- | The response status code.
+lkrsStatus :: Lens' ListKeysResponse Int
+lkrsStatus = lens _lkrsStatus (\ s a -> s{_lkrsStatus = a});
diff --git a/gen/Network/AWS/KMS/PutKeyPolicy.hs b/gen/Network/AWS/KMS/PutKeyPolicy.hs
--- a/gen/Network/AWS/KMS/PutKeyPolicy.hs
+++ b/gen/Network/AWS/KMS/PutKeyPolicy.hs
@@ -1,120 +1,129 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.PutKeyPolicy
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Attaches a policy to the specified key.
+-- Attaches a policy to the specified key.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html AWS API Reference> for PutKeyPolicy.
 module Network.AWS.KMS.PutKeyPolicy
     (
-    -- * Request
-      PutKeyPolicy
-    -- ** Request constructor
-    , putKeyPolicy
-    -- ** Request lenses
+    -- * Creating a Request
+      putKeyPolicy
+    , PutKeyPolicy
+    -- * Request Lenses
     , pkpKeyId
-    , pkpPolicy
     , pkpPolicyName
+    , pkpPolicy
 
-    -- * Response
-    , PutKeyPolicyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , putKeyPolicyResponse
+    , PutKeyPolicyResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data PutKeyPolicy = PutKeyPolicy
-    { _pkpKeyId      :: Text
-    , _pkpPolicy     :: Text
-    , _pkpPolicyName :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'putKeyPolicy' smart constructor.
+data PutKeyPolicy = PutKeyPolicy'
+    { _pkpKeyId      :: !Text
+    , _pkpPolicyName :: !Text
+    , _pkpPolicy     :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'PutKeyPolicy' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'PutKeyPolicy' with the minimum fields required to make a request.
 --
--- * 'pkpKeyId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pkpPolicy' @::@ 'Text'
+-- * 'pkpKeyId'
 --
--- * 'pkpPolicyName' @::@ 'Text'
+-- * 'pkpPolicyName'
 --
-putKeyPolicy :: Text -- ^ 'pkpKeyId'
-             -> Text -- ^ 'pkpPolicyName'
-             -> Text -- ^ 'pkpPolicy'
-             -> PutKeyPolicy
-putKeyPolicy p1 p2 p3 = PutKeyPolicy
-    { _pkpKeyId      = p1
-    , _pkpPolicyName = p2
-    , _pkpPolicy     = p3
+-- * 'pkpPolicy'
+putKeyPolicy
+    :: Text -- ^ 'pkpKeyId'
+    -> Text -- ^ 'pkpPolicyName'
+    -> Text -- ^ 'pkpPolicy'
+    -> PutKeyPolicy
+putKeyPolicy pKeyId_ pPolicyName_ pPolicy_ =
+    PutKeyPolicy'
+    { _pkpKeyId = pKeyId_
+    , _pkpPolicyName = pPolicyName_
+    , _pkpPolicy = pPolicy_
     }
 
--- | A unique identifier for the customer master key. This value can be a globally
--- unique identifier or the fully specified ARN to a key.  Key ARN Example -
--- arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012 Globally Unique Key ID Example - 12345678-1234-1234-1234-123456789012
+-- | A unique identifier for the customer master key. This value can be a
+-- globally unique identifier or the fully specified ARN to a key.
 --
+-- -   Key ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   Globally Unique Key ID Example -
+--     12345678-1234-1234-1234-123456789012
 pkpKeyId :: Lens' PutKeyPolicy Text
-pkpKeyId = lens _pkpKeyId (\s a -> s { _pkpKeyId = a })
+pkpKeyId = lens _pkpKeyId (\ s a -> s{_pkpKeyId = a});
 
+-- | Name of the policy to be attached. Currently, the only supported name is
+-- \"default\".
+pkpPolicyName :: Lens' PutKeyPolicy Text
+pkpPolicyName = lens _pkpPolicyName (\ s a -> s{_pkpPolicyName = a});
+
 -- | The policy, in JSON format, to be attached to the key.
 pkpPolicy :: Lens' PutKeyPolicy Text
-pkpPolicy = lens _pkpPolicy (\s a -> s { _pkpPolicy = a })
+pkpPolicy = lens _pkpPolicy (\ s a -> s{_pkpPolicy = a});
 
--- | Name of the policy to be attached. Currently, the only supported name is
--- "default".
-pkpPolicyName :: Lens' PutKeyPolicy Text
-pkpPolicyName = lens _pkpPolicyName (\s a -> s { _pkpPolicyName = a })
+instance AWSRequest PutKeyPolicy where
+        type Sv PutKeyPolicy = KMS
+        type Rs PutKeyPolicy = PutKeyPolicyResponse
+        request = postJSON
+        response = receiveNull PutKeyPolicyResponse'
 
-data PutKeyPolicyResponse = PutKeyPolicyResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance ToHeaders PutKeyPolicy where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.PutKeyPolicy" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | 'PutKeyPolicyResponse' constructor.
-putKeyPolicyResponse :: PutKeyPolicyResponse
-putKeyPolicyResponse = PutKeyPolicyResponse
+instance ToJSON PutKeyPolicy where
+        toJSON PutKeyPolicy'{..}
+          = object
+              ["KeyId" .= _pkpKeyId,
+               "PolicyName" .= _pkpPolicyName,
+               "Policy" .= _pkpPolicy]
 
 instance ToPath PutKeyPolicy where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery PutKeyPolicy where
-    toQuery = const mempty
-
-instance ToHeaders PutKeyPolicy
-
-instance ToJSON PutKeyPolicy where
-    toJSON PutKeyPolicy{..} = object
-        [ "KeyId"      .= _pkpKeyId
-        , "PolicyName" .= _pkpPolicyName
-        , "Policy"     .= _pkpPolicy
-        ]
+        toQuery = const mempty
 
-instance AWSRequest PutKeyPolicy where
-    type Sv PutKeyPolicy = KMS
-    type Rs PutKeyPolicy = PutKeyPolicyResponse
+-- | /See:/ 'putKeyPolicyResponse' smart constructor.
+data PutKeyPolicyResponse =
+    PutKeyPolicyResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "PutKeyPolicy"
-    response = nullResponse PutKeyPolicyResponse
+-- | Creates a value of 'PutKeyPolicyResponse' with the minimum fields required to make a request.
+--
+putKeyPolicyResponse
+    :: PutKeyPolicyResponse
+putKeyPolicyResponse = PutKeyPolicyResponse'
diff --git a/gen/Network/AWS/KMS/ReEncrypt.hs b/gen/Network/AWS/KMS/ReEncrypt.hs
--- a/gen/Network/AWS/KMS/ReEncrypt.hs
+++ b/gen/Network/AWS/KMS/ReEncrypt.hs
@@ -1,198 +1,215 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.ReEncrypt
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Encrypts data on the server side with a new customer master key without
+-- Encrypts data on the server side with a new customer master key without
 -- exposing the plaintext of the data on the client side. The data is first
--- decrypted and then encrypted. This operation can also be used to change the
--- encryption context of a ciphertext.
+-- decrypted and then encrypted. This operation can also be used to change
+-- the encryption context of a ciphertext.
 --
--- Unlike other actions, 'ReEncrypt' is authorized twice - once as 'ReEncryptFrom'
--- on the source key and once as 'ReEncryptTo' on the destination key. We
--- therefore recommend that you include the '"action":"kms:ReEncrypt*"' statement
--- in your key policies to permit re-encryption from or to the key. The
--- statement is included automatically when you authorize use of the key through
--- the console but must be included manually when you set a policy by using the 'PutKeyPolicy' function.
+-- Unlike other actions, 'ReEncrypt' is authorized twice - once as
+-- 'ReEncryptFrom' on the source key and once as 'ReEncryptTo' on the
+-- destination key. We therefore recommend that you include the
+-- '\"action\":\"kms:ReEncrypt*\"' statement in your key policies to permit
+-- re-encryption from or to the key. The statement is included
+-- automatically when you authorize use of the key through the console but
+-- must be included manually when you set a policy by using the
+-- PutKeyPolicy function.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html AWS API Reference> for ReEncrypt.
 module Network.AWS.KMS.ReEncrypt
     (
-    -- * Request
-      ReEncrypt
-    -- ** Request constructor
-    , reEncrypt
-    -- ** Request lenses
-    , reCiphertextBlob
+    -- * Creating a Request
+      reEncrypt
+    , ReEncrypt
+    -- * Request Lenses
     , reDestinationEncryptionContext
-    , reDestinationKeyId
-    , reGrantTokens
     , reSourceEncryptionContext
+    , reGrantTokens
+    , reCiphertextBlob
+    , reDestinationKeyId
 
-    -- * Response
-    , ReEncryptResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , reEncryptResponse
-    -- ** Response lenses
-    , rerCiphertextBlob
-    , rerKeyId
-    , rerSourceKeyId
+    , ReEncryptResponse
+    -- * Response Lenses
+    , rersSourceKeyId
+    , rersKeyId
+    , rersCiphertextBlob
+    , rersStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data ReEncrypt = ReEncrypt
-    { _reCiphertextBlob               :: Base64
-    , _reDestinationEncryptionContext :: Map Text Text
-    , _reDestinationKeyId             :: Text
-    , _reGrantTokens                  :: List "GrantTokens" Text
-    , _reSourceEncryptionContext      :: Map Text Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'reEncrypt' smart constructor.
+data ReEncrypt = ReEncrypt'
+    { _reDestinationEncryptionContext :: !(Maybe (Map Text Text))
+    , _reSourceEncryptionContext      :: !(Maybe (Map Text Text))
+    , _reGrantTokens                  :: !(Maybe [Text])
+    , _reCiphertextBlob               :: !Base64
+    , _reDestinationKeyId             :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ReEncrypt' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ReEncrypt' with the minimum fields required to make a request.
 --
--- * 'reCiphertextBlob' @::@ 'Base64'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'reDestinationEncryptionContext' @::@ 'HashMap' 'Text' 'Text'
+-- * 'reDestinationEncryptionContext'
 --
--- * 'reDestinationKeyId' @::@ 'Text'
+-- * 'reSourceEncryptionContext'
 --
--- * 'reGrantTokens' @::@ ['Text']
+-- * 'reGrantTokens'
 --
--- * 'reSourceEncryptionContext' @::@ 'HashMap' 'Text' 'Text'
+-- * 'reCiphertextBlob'
 --
-reEncrypt :: Base64 -- ^ 'reCiphertextBlob'
-          -> Text -- ^ 'reDestinationKeyId'
-          -> ReEncrypt
-reEncrypt p1 p2 = ReEncrypt
-    { _reCiphertextBlob               = p1
-    , _reDestinationKeyId             = p2
-    , _reSourceEncryptionContext      = mempty
-    , _reDestinationEncryptionContext = mempty
-    , _reGrantTokens                  = mempty
+-- * 'reDestinationKeyId'
+reEncrypt
+    :: ByteString -- ^ 'reCiphertextBlob'
+    -> Text -- ^ 'reDestinationKeyId'
+    -> ReEncrypt
+reEncrypt pCiphertextBlob_ pDestinationKeyId_ =
+    ReEncrypt'
+    { _reDestinationEncryptionContext = Nothing
+    , _reSourceEncryptionContext = Nothing
+    , _reGrantTokens = Nothing
+    , _reCiphertextBlob = _Base64 # pCiphertextBlob_
+    , _reDestinationKeyId = pDestinationKeyId_
     }
 
--- | Ciphertext of the data to re-encrypt.
-reCiphertextBlob :: Lens' ReEncrypt Base64
-reCiphertextBlob = lens _reCiphertextBlob (\s a -> s { _reCiphertextBlob = a })
-
 -- | Encryption context to be used when the data is re-encrypted.
 reDestinationEncryptionContext :: Lens' ReEncrypt (HashMap Text Text)
-reDestinationEncryptionContext =
-    lens _reDestinationEncryptionContext
-        (\s a -> s { _reDestinationEncryptionContext = a })
-            . _Map
+reDestinationEncryptionContext = lens _reDestinationEncryptionContext (\ s a -> s{_reDestinationEncryptionContext = a}) . _Default . _Map;
 
--- | A unique identifier for the customer master key used to re-encrypt the data.
--- This value can be a globally unique identifier, a fully specified ARN to
--- either an alias or a key, or an alias name prefixed by "alias/".  Key ARN
--- Example -
--- arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012 Alias ARN Example - arn:aws:kms:us-east-1:123456789012:alias/MyAliasName
--- Globally Unique Key ID Example - 12345678-1234-1234-1234-123456789012 Alias
--- Name Example - alias/MyAliasName
-reDestinationKeyId :: Lens' ReEncrypt Text
-reDestinationKeyId =
-    lens _reDestinationKeyId (\s a -> s { _reDestinationKeyId = a })
+-- | Encryption context used to encrypt and decrypt the data specified in the
+-- 'CiphertextBlob' parameter.
+reSourceEncryptionContext :: Lens' ReEncrypt (HashMap Text Text)
+reSourceEncryptionContext = lens _reSourceEncryptionContext (\ s a -> s{_reSourceEncryptionContext = a}) . _Default . _Map;
 
--- | For more information, see <http://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#grant_token Grant Tokens>.
+-- | For more information, see
+-- <http://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#grant_token Grant Tokens>.
 reGrantTokens :: Lens' ReEncrypt [Text]
-reGrantTokens = lens _reGrantTokens (\s a -> s { _reGrantTokens = a }) . _List
-
--- | Encryption context used to encrypt and decrypt the data specified in the 'CiphertextBlob' parameter.
-reSourceEncryptionContext :: Lens' ReEncrypt (HashMap Text Text)
-reSourceEncryptionContext =
-    lens _reSourceEncryptionContext
-        (\s a -> s { _reSourceEncryptionContext = a })
-            . _Map
+reGrantTokens = lens _reGrantTokens (\ s a -> s{_reGrantTokens = a}) . _Default . _Coerce;
 
-data ReEncryptResponse = ReEncryptResponse
-    { _rerCiphertextBlob :: Maybe Base64
-    , _rerKeyId          :: Maybe Text
-    , _rerSourceKeyId    :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | Ciphertext of the data to re-encrypt.
+reCiphertextBlob :: Lens' ReEncrypt ByteString
+reCiphertextBlob = lens _reCiphertextBlob (\ s a -> s{_reCiphertextBlob = a}) . _Base64;
 
--- | 'ReEncryptResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'rerCiphertextBlob' @::@ 'Maybe' 'Base64'
---
--- * 'rerKeyId' @::@ 'Maybe' 'Text'
---
--- * 'rerSourceKeyId' @::@ 'Maybe' 'Text'
+-- | A unique identifier for the customer master key used to re-encrypt the
+-- data. This value can be a globally unique identifier, a fully specified
+-- ARN to either an alias or a key, or an alias name prefixed by
+-- \"alias\/\".
 --
-reEncryptResponse :: ReEncryptResponse
-reEncryptResponse = ReEncryptResponse
-    { _rerCiphertextBlob = Nothing
-    , _rerSourceKeyId    = Nothing
-    , _rerKeyId          = Nothing
-    }
+-- -   Key ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   Alias ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:alias\/MyAliasName
+-- -   Globally Unique Key ID Example -
+--     12345678-1234-1234-1234-123456789012
+-- -   Alias Name Example - alias\/MyAliasName
+reDestinationKeyId :: Lens' ReEncrypt Text
+reDestinationKeyId = lens _reDestinationKeyId (\ s a -> s{_reDestinationKeyId = a});
 
--- | The re-encrypted data. If you are using the CLI, the value is Base64 encoded.
--- Otherwise, it is not encoded.
-rerCiphertextBlob :: Lens' ReEncryptResponse (Maybe Base64)
-rerCiphertextBlob =
-    lens _rerCiphertextBlob (\s a -> s { _rerCiphertextBlob = a })
+instance AWSRequest ReEncrypt where
+        type Sv ReEncrypt = KMS
+        type Rs ReEncrypt = ReEncryptResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ReEncryptResponse' <$>
+                   (x .?> "SourceKeyId") <*> (x .?> "KeyId") <*>
+                     (x .?> "CiphertextBlob")
+                     <*> (pure (fromEnum s)))
 
--- | Unique identifier of the key used to re-encrypt the data.
-rerKeyId :: Lens' ReEncryptResponse (Maybe Text)
-rerKeyId = lens _rerKeyId (\s a -> s { _rerKeyId = a })
+instance ToHeaders ReEncrypt where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.ReEncrypt" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | Unique identifier of the key used to originally encrypt the data.
-rerSourceKeyId :: Lens' ReEncryptResponse (Maybe Text)
-rerSourceKeyId = lens _rerSourceKeyId (\s a -> s { _rerSourceKeyId = a })
+instance ToJSON ReEncrypt where
+        toJSON ReEncrypt'{..}
+          = object
+              ["DestinationEncryptionContext" .=
+                 _reDestinationEncryptionContext,
+               "SourceEncryptionContext" .=
+                 _reSourceEncryptionContext,
+               "GrantTokens" .= _reGrantTokens,
+               "CiphertextBlob" .= _reCiphertextBlob,
+               "DestinationKeyId" .= _reDestinationKeyId]
 
 instance ToPath ReEncrypt where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery ReEncrypt where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders ReEncrypt
+-- | /See:/ 'reEncryptResponse' smart constructor.
+data ReEncryptResponse = ReEncryptResponse'
+    { _rersSourceKeyId    :: !(Maybe Text)
+    , _rersKeyId          :: !(Maybe Text)
+    , _rersCiphertextBlob :: !(Maybe Base64)
+    , _rersStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON ReEncrypt where
-    toJSON ReEncrypt{..} = object
-        [ "CiphertextBlob"               .= _reCiphertextBlob
-        , "SourceEncryptionContext"      .= _reSourceEncryptionContext
-        , "DestinationKeyId"             .= _reDestinationKeyId
-        , "DestinationEncryptionContext" .= _reDestinationEncryptionContext
-        , "GrantTokens"                  .= _reGrantTokens
-        ]
+-- | Creates a value of 'ReEncryptResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rersSourceKeyId'
+--
+-- * 'rersKeyId'
+--
+-- * 'rersCiphertextBlob'
+--
+-- * 'rersStatus'
+reEncryptResponse
+    :: Int -- ^ 'rersStatus'
+    -> ReEncryptResponse
+reEncryptResponse pStatus_ =
+    ReEncryptResponse'
+    { _rersSourceKeyId = Nothing
+    , _rersKeyId = Nothing
+    , _rersCiphertextBlob = Nothing
+    , _rersStatus = pStatus_
+    }
 
-instance AWSRequest ReEncrypt where
-    type Sv ReEncrypt = KMS
-    type Rs ReEncrypt = ReEncryptResponse
+-- | Unique identifier of the key used to originally encrypt the data.
+rersSourceKeyId :: Lens' ReEncryptResponse (Maybe Text)
+rersSourceKeyId = lens _rersSourceKeyId (\ s a -> s{_rersSourceKeyId = a});
 
-    request  = post "ReEncrypt"
-    response = jsonResponse
+-- | Unique identifier of the key used to re-encrypt the data.
+rersKeyId :: Lens' ReEncryptResponse (Maybe Text)
+rersKeyId = lens _rersKeyId (\ s a -> s{_rersKeyId = a});
 
-instance FromJSON ReEncryptResponse where
-    parseJSON = withObject "ReEncryptResponse" $ \o -> ReEncryptResponse
-        <$> o .:? "CiphertextBlob"
-        <*> o .:? "KeyId"
-        <*> o .:? "SourceKeyId"
+-- | The re-encrypted data. If you are using the CLI, the value is Base64
+-- encoded. Otherwise, it is not encoded.
+rersCiphertextBlob :: Lens' ReEncryptResponse (Maybe ByteString)
+rersCiphertextBlob = lens _rersCiphertextBlob (\ s a -> s{_rersCiphertextBlob = a}) . mapping _Base64;
+
+-- | The response status code.
+rersStatus :: Lens' ReEncryptResponse Int
+rersStatus = lens _rersStatus (\ s a -> s{_rersStatus = a});
diff --git a/gen/Network/AWS/KMS/RetireGrant.hs b/gen/Network/AWS/KMS/RetireGrant.hs
--- a/gen/Network/AWS/KMS/RetireGrant.hs
+++ b/gen/Network/AWS/KMS/RetireGrant.hs
@@ -1,127 +1,142 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.RetireGrant
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Retires a grant. You can retire a grant when you're done using it to clean
--- up. You should revoke a grant when you intend to actively deny operations
--- that depend on it. The following are permitted to call this API:  The account
--- that created the grant The 'RetiringPrincipal', if present The 'GranteePrincipal', if
--- 'RetireGrant' is a grantee operation  The grant to retire must be identified by
--- its grant token or by a combination of the key ARN and the grant ID. A grant
--- token is a unique variable-length base64-encoded string. A grant ID is a 64
--- character unique identifier of a grant. Both are returned by the 'CreateGrant'
+-- Retires a grant. You can retire a grant when you\'re done using it to
+-- clean up. You should revoke a grant when you intend to actively deny
+-- operations that depend on it. The following are permitted to call this
+-- API:
+--
+-- -   The account that created the grant
+-- -   The 'RetiringPrincipal', if present
+-- -   The 'GranteePrincipal', if 'RetireGrant' is a grantee operation
+--
+-- The grant to retire must be identified by its grant token or by a
+-- combination of the key ARN and the grant ID. A grant token is a unique
+-- variable-length base64-encoded string. A grant ID is a 64 character
+-- unique identifier of a grant. Both are returned by the 'CreateGrant'
 -- function.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html AWS API Reference> for RetireGrant.
 module Network.AWS.KMS.RetireGrant
     (
-    -- * Request
-      RetireGrant
-    -- ** Request constructor
-    , retireGrant
-    -- ** Request lenses
+    -- * Creating a Request
+      retireGrant
+    , RetireGrant
+    -- * Request Lenses
+    , rgKeyId
     , rgGrantId
     , rgGrantToken
-    , rgKeyId
 
-    -- * Response
-    , RetireGrantResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , retireGrantResponse
+    , RetireGrantResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data RetireGrant = RetireGrant
-    { _rgGrantId    :: Maybe Text
-    , _rgGrantToken :: Maybe Text
-    , _rgKeyId      :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'retireGrant' smart constructor.
+data RetireGrant = RetireGrant'
+    { _rgKeyId      :: !(Maybe Text)
+    , _rgGrantId    :: !(Maybe Text)
+    , _rgGrantToken :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'RetireGrant' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'RetireGrant' with the minimum fields required to make a request.
 --
--- * 'rgGrantId' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'rgGrantToken' @::@ 'Maybe' 'Text'
+-- * 'rgKeyId'
 --
--- * 'rgKeyId' @::@ 'Maybe' 'Text'
+-- * 'rgGrantId'
 --
-retireGrant :: RetireGrant
-retireGrant = RetireGrant
-    { _rgGrantToken = Nothing
-    , _rgKeyId      = Nothing
-    , _rgGrantId    = Nothing
+-- * 'rgGrantToken'
+retireGrant
+    :: RetireGrant
+retireGrant =
+    RetireGrant'
+    { _rgKeyId = Nothing
+    , _rgGrantId = Nothing
+    , _rgGrantToken = Nothing
     }
 
--- | Unique identifier of the grant to be retired. The grant ID is returned by
--- the 'CreateGrant' function.  Grant ID Example -
--- 0123456789012345678901234567890123456789012345678901234567890123
+-- | A unique identifier for the customer master key associated with the
+-- grant. This value can be a globally unique identifier or a fully
+-- specified ARN of the key.
+--
+-- -   Key ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   Globally Unique Key ID Example -
+--     12345678-1234-1234-1234-123456789012
+rgKeyId :: Lens' RetireGrant (Maybe Text)
+rgKeyId = lens _rgKeyId (\ s a -> s{_rgKeyId = a});
+
+-- | Unique identifier of the grant to be retired. The grant ID is returned
+-- by the 'CreateGrant' function.
+--
+-- -   Grant ID Example -
+--     0123456789012345678901234567890123456789012345678901234567890123
 rgGrantId :: Lens' RetireGrant (Maybe Text)
-rgGrantId = lens _rgGrantId (\s a -> s { _rgGrantId = a })
+rgGrantId = lens _rgGrantId (\ s a -> s{_rgGrantId = a});
 
 -- | Token that identifies the grant to be retired.
 rgGrantToken :: Lens' RetireGrant (Maybe Text)
-rgGrantToken = lens _rgGrantToken (\s a -> s { _rgGrantToken = a })
+rgGrantToken = lens _rgGrantToken (\ s a -> s{_rgGrantToken = a});
 
--- | A unique identifier for the customer master key associated with the grant.
--- This value can be a globally unique identifier or a fully specified ARN of
--- the key.  Key ARN Example -
--- arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012 Globally Unique Key ID Example - 12345678-1234-1234-1234-123456789012
---
-rgKeyId :: Lens' RetireGrant (Maybe Text)
-rgKeyId = lens _rgKeyId (\s a -> s { _rgKeyId = a })
+instance AWSRequest RetireGrant where
+        type Sv RetireGrant = KMS
+        type Rs RetireGrant = RetireGrantResponse
+        request = postJSON
+        response = receiveNull RetireGrantResponse'
 
-data RetireGrantResponse = RetireGrantResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance ToHeaders RetireGrant where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.RetireGrant" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | 'RetireGrantResponse' constructor.
-retireGrantResponse :: RetireGrantResponse
-retireGrantResponse = RetireGrantResponse
+instance ToJSON RetireGrant where
+        toJSON RetireGrant'{..}
+          = object
+              ["KeyId" .= _rgKeyId, "GrantId" .= _rgGrantId,
+               "GrantToken" .= _rgGrantToken]
 
 instance ToPath RetireGrant where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery RetireGrant where
-    toQuery = const mempty
-
-instance ToHeaders RetireGrant
-
-instance ToJSON RetireGrant where
-    toJSON RetireGrant{..} = object
-        [ "GrantToken" .= _rgGrantToken
-        , "KeyId"      .= _rgKeyId
-        , "GrantId"    .= _rgGrantId
-        ]
+        toQuery = const mempty
 
-instance AWSRequest RetireGrant where
-    type Sv RetireGrant = KMS
-    type Rs RetireGrant = RetireGrantResponse
+-- | /See:/ 'retireGrantResponse' smart constructor.
+data RetireGrantResponse =
+    RetireGrantResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "RetireGrant"
-    response = nullResponse RetireGrantResponse
+-- | Creates a value of 'RetireGrantResponse' with the minimum fields required to make a request.
+--
+retireGrantResponse
+    :: RetireGrantResponse
+retireGrantResponse = RetireGrantResponse'
diff --git a/gen/Network/AWS/KMS/RevokeGrant.hs b/gen/Network/AWS/KMS/RevokeGrant.hs
--- a/gen/Network/AWS/KMS/RevokeGrant.hs
+++ b/gen/Network/AWS/KMS/RevokeGrant.hs
@@ -1,110 +1,117 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.RevokeGrant
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Revokes a grant. You can revoke a grant to actively deny operations that
+-- Revokes a grant. You can revoke a grant to actively deny operations that
 -- depend on it.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html AWS API Reference> for RevokeGrant.
 module Network.AWS.KMS.RevokeGrant
     (
-    -- * Request
-      RevokeGrant
-    -- ** Request constructor
-    , revokeGrant
-    -- ** Request lenses
-    , rg1GrantId
-    , rg1KeyId
+    -- * Creating a Request
+      revokeGrant
+    , RevokeGrant
+    -- * Request Lenses
+    , rKeyId
+    , rGrantId
 
-    -- * Response
-    , RevokeGrantResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , revokeGrantResponse
+    , RevokeGrantResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data RevokeGrant = RevokeGrant
-    { _rg1GrantId :: Text
-    , _rg1KeyId   :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'revokeGrant' smart constructor.
+data RevokeGrant = RevokeGrant'
+    { _rKeyId   :: !Text
+    , _rGrantId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'RevokeGrant' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'RevokeGrant' with the minimum fields required to make a request.
 --
--- * 'rg1GrantId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'rg1KeyId' @::@ 'Text'
+-- * 'rKeyId'
 --
-revokeGrant :: Text -- ^ 'rg1KeyId'
-            -> Text -- ^ 'rg1GrantId'
-            -> RevokeGrant
-revokeGrant p1 p2 = RevokeGrant
-    { _rg1KeyId   = p1
-    , _rg1GrantId = p2
+-- * 'rGrantId'
+revokeGrant
+    :: Text -- ^ 'rKeyId'
+    -> Text -- ^ 'rGrantId'
+    -> RevokeGrant
+revokeGrant pKeyId_ pGrantId_ =
+    RevokeGrant'
+    { _rKeyId = pKeyId_
+    , _rGrantId = pGrantId_
     }
 
+-- | A unique identifier for the customer master key associated with the
+-- grant. This value can be a globally unique identifier or the fully
+-- specified ARN to a key.
+--
+-- -   Key ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   Globally Unique Key ID Example -
+--     12345678-1234-1234-1234-123456789012
+rKeyId :: Lens' RevokeGrant Text
+rKeyId = lens _rKeyId (\ s a -> s{_rKeyId = a});
+
 -- | Identifier of the grant to be revoked.
-rg1GrantId :: Lens' RevokeGrant Text
-rg1GrantId = lens _rg1GrantId (\s a -> s { _rg1GrantId = a })
+rGrantId :: Lens' RevokeGrant Text
+rGrantId = lens _rGrantId (\ s a -> s{_rGrantId = a});
 
--- | A unique identifier for the customer master key associated with the grant.
--- This value can be a globally unique identifier or the fully specified ARN to
--- a key.  Key ARN Example -
--- arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012 Globally Unique Key ID Example - 12345678-1234-1234-1234-123456789012
---
-rg1KeyId :: Lens' RevokeGrant Text
-rg1KeyId = lens _rg1KeyId (\s a -> s { _rg1KeyId = a })
+instance AWSRequest RevokeGrant where
+        type Sv RevokeGrant = KMS
+        type Rs RevokeGrant = RevokeGrantResponse
+        request = postJSON
+        response = receiveNull RevokeGrantResponse'
 
-data RevokeGrantResponse = RevokeGrantResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance ToHeaders RevokeGrant where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.RevokeGrant" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | 'RevokeGrantResponse' constructor.
-revokeGrantResponse :: RevokeGrantResponse
-revokeGrantResponse = RevokeGrantResponse
+instance ToJSON RevokeGrant where
+        toJSON RevokeGrant'{..}
+          = object ["KeyId" .= _rKeyId, "GrantId" .= _rGrantId]
 
 instance ToPath RevokeGrant where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery RevokeGrant where
-    toQuery = const mempty
-
-instance ToHeaders RevokeGrant
-
-instance ToJSON RevokeGrant where
-    toJSON RevokeGrant{..} = object
-        [ "KeyId"   .= _rg1KeyId
-        , "GrantId" .= _rg1GrantId
-        ]
+        toQuery = const mempty
 
-instance AWSRequest RevokeGrant where
-    type Sv RevokeGrant = KMS
-    type Rs RevokeGrant = RevokeGrantResponse
+-- | /See:/ 'revokeGrantResponse' smart constructor.
+data RevokeGrantResponse =
+    RevokeGrantResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "RevokeGrant"
-    response = nullResponse RevokeGrantResponse
+-- | Creates a value of 'RevokeGrantResponse' with the minimum fields required to make a request.
+--
+revokeGrantResponse
+    :: RevokeGrantResponse
+revokeGrantResponse = RevokeGrantResponse'
diff --git a/gen/Network/AWS/KMS/Types.hs b/gen/Network/AWS/KMS/Types.hs
--- a/gen/Network/AWS/KMS/Types.hs
+++ b/gen/Network/AWS/KMS/Types.hs
@@ -1,531 +1,202 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-{-# LANGUAGE ViewPatterns                #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
 
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
 
+-- |
 -- Module      : Network.AWS.KMS.Types
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
 module Network.AWS.KMS.Types
     (
     -- * Service
       KMS
-    -- ** Error
-    , JSONError
 
-    -- * KeyUsageType
-    , KeyUsageType (..)
-
-    -- * KeyMetadata
-    , KeyMetadata
-    , keyMetadata
-    , kmAWSAccountId
-    , kmArn
-    , kmCreationDate
-    , kmDescription
-    , kmEnabled
-    , kmKeyId
-    , kmKeyUsage
+    -- * Errors
+    , _InvalidMarkerException
+    , _InvalidKeyUsageException
+    , _UnsupportedOperationException
+    , _MalformedPolicyDocumentException
+    , _DisabledException
+    , _KeyUnavailableException
+    , _KMSInternalException
+    , _NotFoundException
+    , _InvalidAliasNameException
+    , _InvalidARNException
+    , _DependencyTimeoutException
+    , _InvalidGrantTokenException
+    , _InvalidCiphertextException
+    , _LimitExceededException
+    , _AlreadyExistsException
 
     -- * DataKeySpec
     , DataKeySpec (..)
 
-    -- * GrantConstraints
-    , GrantConstraints
-    , grantConstraints
-    , gcEncryptionContextEquals
-    , gcEncryptionContextSubset
+    -- * GrantOperation
+    , GrantOperation (..)
 
+    -- * KeyUsageType
+    , KeyUsageType (..)
+
     -- * AliasListEntry
     , AliasListEntry
     , aliasListEntry
-    , aleAliasArn
-    , aleAliasName
     , aleTargetKeyId
+    , aleAliasName
+    , aleAliasARN
 
+    -- * GrantConstraints
+    , GrantConstraints
+    , grantConstraints
+    , gcEncryptionContextEquals
+    , gcEncryptionContextSubset
+
     -- * GrantListEntry
     , GrantListEntry
     , grantListEntry
-    , gleConstraints
+    , gleRetiringPrincipal
+    , gleIssuingAccount
     , gleGrantId
+    , gleConstraints
     , gleGranteePrincipal
-    , gleIssuingAccount
     , gleOperations
-    , gleRetiringPrincipal
 
-    -- * GrantOperation
-    , GrantOperation (..)
-
     -- * KeyListEntry
     , KeyListEntry
     , keyListEntry
-    , kleKeyArn
+    , kleKeyARN
     , kleKeyId
+
+    -- * KeyMetadata
+    , KeyMetadata
+    , keyMetadata
+    , kmARN
+    , kmEnabled
+    , kmAWSAccountId
+    , kmKeyUsage
+    , kmCreationDate
+    , kmDescription
+    , kmKeyId
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Signing
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.KMS.Types.Sum
+import           Network.AWS.Prelude
+import           Network.AWS.Sign.V4
 
--- | Version @2014-11-01@ of the Amazon Key Management Service service.
+-- | Version @2014-11-01@ of the Amazon Key Management Service SDK.
 data KMS
 
 instance AWSService KMS where
     type Sg KMS = V4
-    type Er KMS = JSONError
-
-    service = service'
+    service = const svc
       where
-        service' :: Service KMS
-        service' = Service
-            { _svcAbbrev       = "KMS"
-            , _svcPrefix       = "kms"
-            , _svcVersion      = "2014-11-01"
-            , _svcTargetPrefix = Just "TrentService"
-            , _svcJSONVersion  = Just "1.1"
-            , _svcHandle       = handle
-            , _svcRetry        = retry
+        svc =
+            Service
+            { _svcAbbrev = "KMS"
+            , _svcPrefix = "kms"
+            , _svcVersion = "2014-11-01"
+            , _svcEndpoint = defaultEndpoint svc
+            , _svcTimeout = Just 70
+            , _svcStatus = statusSuccess
+            , _svcError = parseJSONError
+            , _svcRetry = retry
             }
-
-        handle :: Status
-               -> Maybe (LazyByteString -> ServiceError JSONError)
-        handle = jsonError statusSuccess service'
-
-        retry :: Retry KMS
-        retry = Exponential
-            { _retryBase     = 0.05
-            , _retryGrowth   = 2
+        retry =
+            Exponential
+            { _retryBase = 5.0e-2
+            , _retryGrowth = 2
             , _retryAttempts = 5
-            , _retryCheck    = check
+            , _retryCheck = check
             }
-
-        check :: Status
-              -> JSONError
-              -> Bool
-        check (statusCode -> s) (awsErrorCode -> e)
-            | s == 500  = True -- General Server Error
-            | s == 509  = True -- Limit Exceeded
-            | s == 503  = True -- Service Unavailable
-            | otherwise = False
-
-data KeyUsageType
-    = EncryptDecrypt -- ^ ENCRYPT_DECRYPT
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable KeyUsageType
-
-instance FromText KeyUsageType where
-    parser = takeLowerText >>= \case
-        "encrypt_decrypt" -> pure EncryptDecrypt
-        e                 -> fail $
-            "Failure parsing KeyUsageType from " ++ show e
-
-instance ToText KeyUsageType where
-    toText EncryptDecrypt = "ENCRYPT_DECRYPT"
-
-instance ToByteString KeyUsageType
-instance ToHeader     KeyUsageType
-instance ToQuery      KeyUsageType
-
-instance FromJSON KeyUsageType where
-    parseJSON = parseJSONText "KeyUsageType"
-
-instance ToJSON KeyUsageType where
-    toJSON = toJSONText
-
-data KeyMetadata = KeyMetadata
-    { _kmAWSAccountId :: Maybe Text
-    , _kmArn          :: Maybe Text
-    , _kmCreationDate :: Maybe POSIX
-    , _kmDescription  :: Maybe Text
-    , _kmEnabled      :: Maybe Bool
-    , _kmKeyId        :: Text
-    , _kmKeyUsage     :: Maybe KeyUsageType
-    } deriving (Eq, Read, Show)
-
--- | 'KeyMetadata' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'kmAWSAccountId' @::@ 'Maybe' 'Text'
---
--- * 'kmArn' @::@ 'Maybe' 'Text'
---
--- * 'kmCreationDate' @::@ 'Maybe' 'UTCTime'
---
--- * 'kmDescription' @::@ 'Maybe' 'Text'
---
--- * 'kmEnabled' @::@ 'Maybe' 'Bool'
---
--- * 'kmKeyId' @::@ 'Text'
---
--- * 'kmKeyUsage' @::@ 'Maybe' 'KeyUsageType'
---
-keyMetadata :: Text -- ^ 'kmKeyId'
-            -> KeyMetadata
-keyMetadata p1 = KeyMetadata
-    { _kmKeyId        = p1
-    , _kmAWSAccountId = Nothing
-    , _kmArn          = Nothing
-    , _kmCreationDate = Nothing
-    , _kmEnabled      = Nothing
-    , _kmDescription  = Nothing
-    , _kmKeyUsage     = Nothing
-    }
-
--- | Account ID number.
-kmAWSAccountId :: Lens' KeyMetadata (Maybe Text)
-kmAWSAccountId = lens _kmAWSAccountId (\s a -> s { _kmAWSAccountId = a })
-
--- | Key ARN (Amazon Resource Name).
-kmArn :: Lens' KeyMetadata (Maybe Text)
-kmArn = lens _kmArn (\s a -> s { _kmArn = a })
-
--- | Date the key was created.
-kmCreationDate :: Lens' KeyMetadata (Maybe UTCTime)
-kmCreationDate = lens _kmCreationDate (\s a -> s { _kmCreationDate = a }) . mapping _Time
-
--- | The description of the key.
-kmDescription :: Lens' KeyMetadata (Maybe Text)
-kmDescription = lens _kmDescription (\s a -> s { _kmDescription = a })
-
--- | Value that specifies whether the key is enabled.
-kmEnabled :: Lens' KeyMetadata (Maybe Bool)
-kmEnabled = lens _kmEnabled (\s a -> s { _kmEnabled = a })
-
--- | Unique identifier for the key.
-kmKeyId :: Lens' KeyMetadata Text
-kmKeyId = lens _kmKeyId (\s a -> s { _kmKeyId = a })
-
--- | A value that specifies what operation(s) the key can perform.
-kmKeyUsage :: Lens' KeyMetadata (Maybe KeyUsageType)
-kmKeyUsage = lens _kmKeyUsage (\s a -> s { _kmKeyUsage = a })
-
-instance FromJSON KeyMetadata where
-    parseJSON = withObject "KeyMetadata" $ \o -> KeyMetadata
-        <$> o .:? "AWSAccountId"
-        <*> o .:? "Arn"
-        <*> o .:? "CreationDate"
-        <*> o .:? "Description"
-        <*> o .:? "Enabled"
-        <*> o .:  "KeyId"
-        <*> o .:? "KeyUsage"
-
-instance ToJSON KeyMetadata where
-    toJSON KeyMetadata{..} = object
-        [ "AWSAccountId" .= _kmAWSAccountId
-        , "KeyId"        .= _kmKeyId
-        , "Arn"          .= _kmArn
-        , "CreationDate" .= _kmCreationDate
-        , "Enabled"      .= _kmEnabled
-        , "Description"  .= _kmDescription
-        , "KeyUsage"     .= _kmKeyUsage
-        ]
-
-data DataKeySpec
-    = AES128 -- ^ AES_128
-    | AES256 -- ^ AES_256
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable DataKeySpec
-
-instance FromText DataKeySpec where
-    parser = takeLowerText >>= \case
-        "aes_128" -> pure AES128
-        "aes_256" -> pure AES256
-        e         -> fail $
-            "Failure parsing DataKeySpec from " ++ show e
-
-instance ToText DataKeySpec where
-    toText = \case
-        AES128 -> "AES_128"
-        AES256 -> "AES_256"
-
-instance ToByteString DataKeySpec
-instance ToHeader     DataKeySpec
-instance ToQuery      DataKeySpec
-
-instance FromJSON DataKeySpec where
-    parseJSON = parseJSONText "DataKeySpec"
-
-instance ToJSON DataKeySpec where
-    toJSON = toJSONText
-
-data GrantConstraints = GrantConstraints
-    { _gcEncryptionContextEquals :: Map Text Text
-    , _gcEncryptionContextSubset :: Map Text Text
-    } deriving (Eq, Read, Show)
-
--- | 'GrantConstraints' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gcEncryptionContextEquals' @::@ 'HashMap' 'Text' 'Text'
---
--- * 'gcEncryptionContextSubset' @::@ 'HashMap' 'Text' 'Text'
---
-grantConstraints :: GrantConstraints
-grantConstraints = GrantConstraints
-    { _gcEncryptionContextSubset = mempty
-    , _gcEncryptionContextEquals = mempty
-    }
-
--- | The constraint contains additional key/value pairs that serve to further
--- limit the grant.
-gcEncryptionContextEquals :: Lens' GrantConstraints (HashMap Text Text)
-gcEncryptionContextEquals =
-    lens _gcEncryptionContextEquals
-        (\s a -> s { _gcEncryptionContextEquals = a })
-            . _Map
-
--- | The constraint equals the full encryption context.
-gcEncryptionContextSubset :: Lens' GrantConstraints (HashMap Text Text)
-gcEncryptionContextSubset =
-    lens _gcEncryptionContextSubset
-        (\s a -> s { _gcEncryptionContextSubset = a })
-            . _Map
-
-instance FromJSON GrantConstraints where
-    parseJSON = withObject "GrantConstraints" $ \o -> GrantConstraints
-        <$> o .:? "EncryptionContextEquals" .!= mempty
-        <*> o .:? "EncryptionContextSubset" .!= mempty
-
-instance ToJSON GrantConstraints where
-    toJSON GrantConstraints{..} = object
-        [ "EncryptionContextSubset" .= _gcEncryptionContextSubset
-        , "EncryptionContextEquals" .= _gcEncryptionContextEquals
-        ]
-
-data AliasListEntry = AliasListEntry
-    { _aleAliasArn    :: Maybe Text
-    , _aleAliasName   :: Maybe Text
-    , _aleTargetKeyId :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'AliasListEntry' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'aleAliasArn' @::@ 'Maybe' 'Text'
---
--- * 'aleAliasName' @::@ 'Maybe' 'Text'
---
--- * 'aleTargetKeyId' @::@ 'Maybe' 'Text'
---
-aliasListEntry :: AliasListEntry
-aliasListEntry = AliasListEntry
-    { _aleAliasName   = Nothing
-    , _aleAliasArn    = Nothing
-    , _aleTargetKeyId = Nothing
-    }
-
--- | String that contains the key ARN.
-aleAliasArn :: Lens' AliasListEntry (Maybe Text)
-aleAliasArn = lens _aleAliasArn (\s a -> s { _aleAliasArn = a })
-
--- | String that contains the alias.
-aleAliasName :: Lens' AliasListEntry (Maybe Text)
-aleAliasName = lens _aleAliasName (\s a -> s { _aleAliasName = a })
-
--- | String that contains the key identifier pointed to by the alias.
-aleTargetKeyId :: Lens' AliasListEntry (Maybe Text)
-aleTargetKeyId = lens _aleTargetKeyId (\s a -> s { _aleTargetKeyId = a })
-
-instance FromJSON AliasListEntry where
-    parseJSON = withObject "AliasListEntry" $ \o -> AliasListEntry
-        <$> o .:? "AliasArn"
-        <*> o .:? "AliasName"
-        <*> o .:? "TargetKeyId"
-
-instance ToJSON AliasListEntry where
-    toJSON AliasListEntry{..} = object
-        [ "AliasName"   .= _aleAliasName
-        , "AliasArn"    .= _aleAliasArn
-        , "TargetKeyId" .= _aleTargetKeyId
-        ]
-
-data GrantListEntry = GrantListEntry
-    { _gleConstraints       :: Maybe GrantConstraints
-    , _gleGrantId           :: Maybe Text
-    , _gleGranteePrincipal  :: Maybe Text
-    , _gleIssuingAccount    :: Maybe Text
-    , _gleOperations        :: List "Operations" GrantOperation
-    , _gleRetiringPrincipal :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'GrantListEntry' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gleConstraints' @::@ 'Maybe' 'GrantConstraints'
---
--- * 'gleGrantId' @::@ 'Maybe' 'Text'
---
--- * 'gleGranteePrincipal' @::@ 'Maybe' 'Text'
---
--- * 'gleIssuingAccount' @::@ 'Maybe' 'Text'
---
--- * 'gleOperations' @::@ ['GrantOperation']
---
--- * 'gleRetiringPrincipal' @::@ 'Maybe' 'Text'
---
-grantListEntry :: GrantListEntry
-grantListEntry = GrantListEntry
-    { _gleGrantId           = Nothing
-    , _gleGranteePrincipal  = Nothing
-    , _gleRetiringPrincipal = Nothing
-    , _gleIssuingAccount    = Nothing
-    , _gleOperations        = mempty
-    , _gleConstraints       = Nothing
-    }
-
--- | Specifies the conditions under which the actions specified by the 'Operations'
--- parameter are allowed.
-gleConstraints :: Lens' GrantListEntry (Maybe GrantConstraints)
-gleConstraints = lens _gleConstraints (\s a -> s { _gleConstraints = a })
-
--- | Unique grant identifier.
-gleGrantId :: Lens' GrantListEntry (Maybe Text)
-gleGrantId = lens _gleGrantId (\s a -> s { _gleGrantId = a })
-
--- | The principal that receives the grant permission.
-gleGranteePrincipal :: Lens' GrantListEntry (Maybe Text)
-gleGranteePrincipal =
-    lens _gleGranteePrincipal (\s a -> s { _gleGranteePrincipal = a })
-
--- | The account under which the grant was issued.
-gleIssuingAccount :: Lens' GrantListEntry (Maybe Text)
-gleIssuingAccount =
-    lens _gleIssuingAccount (\s a -> s { _gleIssuingAccount = a })
-
--- | List of operations permitted by the grant. This can be any combination of one
--- or more of the following values:  Decrypt Encrypt GenerateDataKey GenerateDataKeyWithoutPlaintext
--- ReEncryptFrom ReEncryptTo CreateGrant
-gleOperations :: Lens' GrantListEntry [GrantOperation]
-gleOperations = lens _gleOperations (\s a -> s { _gleOperations = a }) . _List
-
--- | The principal that can retire the account.
-gleRetiringPrincipal :: Lens' GrantListEntry (Maybe Text)
-gleRetiringPrincipal =
-    lens _gleRetiringPrincipal (\s a -> s { _gleRetiringPrincipal = a })
+        check e
+          | has (hasCode "ThrottlingException" . hasStatus 400) e =
+              Just "throttling_exception"
+          | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
+          | has (hasStatus 503) e = Just "service_unavailable"
+          | has (hasStatus 500) e = Just "general_server_error"
+          | has (hasStatus 509) e = Just "limit_exceeded"
+          | otherwise = Nothing
 
-instance FromJSON GrantListEntry where
-    parseJSON = withObject "GrantListEntry" $ \o -> GrantListEntry
-        <$> o .:? "Constraints"
-        <*> o .:? "GrantId"
-        <*> o .:? "GranteePrincipal"
-        <*> o .:? "IssuingAccount"
-        <*> o .:? "Operations" .!= mempty
-        <*> o .:? "RetiringPrincipal"
+-- | The request was rejected because the marker that specifies where
+-- pagination should next begin is not valid.
+_InvalidMarkerException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidMarkerException =
+    _ServiceError . hasStatus 400 . hasCode "InvalidMarker"
 
-instance ToJSON GrantListEntry where
-    toJSON GrantListEntry{..} = object
-        [ "GrantId"           .= _gleGrantId
-        , "GranteePrincipal"  .= _gleGranteePrincipal
-        , "RetiringPrincipal" .= _gleRetiringPrincipal
-        , "IssuingAccount"    .= _gleIssuingAccount
-        , "Operations"        .= _gleOperations
-        , "Constraints"       .= _gleConstraints
-        ]
+-- | The request was rejected because the specified KeySpec parameter is not
+-- valid. The currently supported value is ENCRYPT\/DECRYPT.
+_InvalidKeyUsageException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidKeyUsageException =
+    _ServiceError . hasStatus 400 . hasCode "InvalidKeyUsage"
 
-data GrantOperation
-    = GOCreateGrant                     -- ^ CreateGrant
-    | GODecrypt                         -- ^ Decrypt
-    | GOEncrypt                         -- ^ Encrypt
-    | GOGenerateDataKey                 -- ^ GenerateDataKey
-    | GOGenerateDataKeyWithoutPlaintext -- ^ GenerateDataKeyWithoutPlaintext
-    | GOReEncryptFrom                   -- ^ ReEncryptFrom
-    | GOReEncryptTo                     -- ^ ReEncryptTo
-    | GORetireGrant                     -- ^ RetireGrant
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
+-- | The request was rejected because a specified parameter is not supported.
+_UnsupportedOperationException :: AsError a => Getting (First ServiceError) a ServiceError
+_UnsupportedOperationException =
+    _ServiceError . hasStatus 400 . hasCode "UnsupportedOperation"
 
-instance Hashable GrantOperation
+-- | The request was rejected because the specified policy is not
+-- syntactically or semantically correct.
+_MalformedPolicyDocumentException :: AsError a => Getting (First ServiceError) a ServiceError
+_MalformedPolicyDocumentException =
+    _ServiceError . hasStatus 400 . hasCode "MalformedPolicyDocument"
 
-instance FromText GrantOperation where
-    parser = takeLowerText >>= \case
-        "creategrant"                     -> pure GOCreateGrant
-        "decrypt"                         -> pure GODecrypt
-        "encrypt"                         -> pure GOEncrypt
-        "generatedatakey"                 -> pure GOGenerateDataKey
-        "generatedatakeywithoutplaintext" -> pure GOGenerateDataKeyWithoutPlaintext
-        "reencryptfrom"                   -> pure GOReEncryptFrom
-        "reencryptto"                     -> pure GOReEncryptTo
-        "retiregrant"                     -> pure GORetireGrant
-        e                                 -> fail $
-            "Failure parsing GrantOperation from " ++ show e
+-- | A request was rejected because the specified key was marked as disabled.
+_DisabledException :: AsError a => Getting (First ServiceError) a ServiceError
+_DisabledException = _ServiceError . hasStatus 409 . hasCode "Disabled"
 
-instance ToText GrantOperation where
-    toText = \case
-        GOCreateGrant                     -> "CreateGrant"
-        GODecrypt                         -> "Decrypt"
-        GOEncrypt                         -> "Encrypt"
-        GOGenerateDataKey                 -> "GenerateDataKey"
-        GOGenerateDataKeyWithoutPlaintext -> "GenerateDataKeyWithoutPlaintext"
-        GOReEncryptFrom                   -> "ReEncryptFrom"
-        GOReEncryptTo                     -> "ReEncryptTo"
-        GORetireGrant                     -> "RetireGrant"
+-- | The request was rejected because the key was disabled, not found, or
+-- otherwise not available.
+_KeyUnavailableException :: AsError a => Getting (First ServiceError) a ServiceError
+_KeyUnavailableException =
+    _ServiceError . hasStatus 500 . hasCode "KeyUnavailable"
 
-instance ToByteString GrantOperation
-instance ToHeader     GrantOperation
-instance ToQuery      GrantOperation
+-- | The request was rejected because an internal exception occurred. This
+-- error can be retried.
+_KMSInternalException :: AsError a => Getting (First ServiceError) a ServiceError
+_KMSInternalException = _ServiceError . hasStatus 500 . hasCode "KMSInternal"
 
-instance FromJSON GrantOperation where
-    parseJSON = parseJSONText "GrantOperation"
+-- | The request was rejected because the specified entity or resource could
+-- not be found.
+_NotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_NotFoundException = _ServiceError . hasStatus 404 . hasCode "NotFound"
 
-instance ToJSON GrantOperation where
-    toJSON = toJSONText
+-- | The request was rejected because the specified alias name is not valid.
+_InvalidAliasNameException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidAliasNameException =
+    _ServiceError . hasStatus 400 . hasCode "InvalidAliasName"
 
-data KeyListEntry = KeyListEntry
-    { _kleKeyArn :: Maybe Text
-    , _kleKeyId  :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | The request was rejected because a specified ARN was not valid.
+_InvalidARNException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidARNException = _ServiceError . hasStatus 400 . hasCode "InvalidArn"
 
--- | 'KeyListEntry' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'kleKeyArn' @::@ 'Maybe' 'Text'
---
--- * 'kleKeyId' @::@ 'Maybe' 'Text'
---
-keyListEntry :: KeyListEntry
-keyListEntry = KeyListEntry
-    { _kleKeyId  = Nothing
-    , _kleKeyArn = Nothing
-    }
+-- | The system timed out while trying to fulfill the request.
+_DependencyTimeoutException :: AsError a => Getting (First ServiceError) a ServiceError
+_DependencyTimeoutException =
+    _ServiceError . hasStatus 503 . hasCode "DependencyTimeout"
 
--- | ARN of the key.
-kleKeyArn :: Lens' KeyListEntry (Maybe Text)
-kleKeyArn = lens _kleKeyArn (\s a -> s { _kleKeyArn = a })
+-- | A grant token provided as part of the request is invalid.
+_InvalidGrantTokenException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidGrantTokenException =
+    _ServiceError . hasStatus 400 . hasCode "InvalidGrantToken"
 
--- | Unique identifier of the key.
-kleKeyId :: Lens' KeyListEntry (Maybe Text)
-kleKeyId = lens _kleKeyId (\s a -> s { _kleKeyId = a })
+-- | The request was rejected because the specified ciphertext has been
+-- corrupted or is otherwise invalid.
+_InvalidCiphertextException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidCiphertextException =
+    _ServiceError . hasStatus 400 . hasCode "InvalidCiphertext"
 
-instance FromJSON KeyListEntry where
-    parseJSON = withObject "KeyListEntry" $ \o -> KeyListEntry
-        <$> o .:? "KeyArn"
-        <*> o .:? "KeyId"
+-- | The request was rejected because a quota was exceeded.
+_LimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_LimitExceededException =
+    _ServiceError . hasStatus 400 . hasCode "LimitExceeded"
 
-instance ToJSON KeyListEntry where
-    toJSON KeyListEntry{..} = object
-        [ "KeyId"  .= _kleKeyId
-        , "KeyArn" .= _kleKeyArn
-        ]
+-- | The request was rejected because it attempted to create a resource that
+-- already exists.
+_AlreadyExistsException :: AsError a => Getting (First ServiceError) a ServiceError
+_AlreadyExistsException =
+    _ServiceError . hasStatus 400 . hasCode "AlreadyExists"
diff --git a/gen/Network/AWS/KMS/Types/Product.hs b/gen/Network/AWS/KMS/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/KMS/Types/Product.hs
@@ -0,0 +1,324 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.KMS.Types.Product
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.KMS.Types.Product where
+
+import           Network.AWS.KMS.Types.Sum
+import           Network.AWS.Prelude
+
+-- | Contains information about an alias.
+--
+-- /See:/ 'aliasListEntry' smart constructor.
+data AliasListEntry = AliasListEntry'
+    { _aleTargetKeyId :: !(Maybe Text)
+    , _aleAliasName   :: !(Maybe Text)
+    , _aleAliasARN    :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AliasListEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aleTargetKeyId'
+--
+-- * 'aleAliasName'
+--
+-- * 'aleAliasARN'
+aliasListEntry
+    :: AliasListEntry
+aliasListEntry =
+    AliasListEntry'
+    { _aleTargetKeyId = Nothing
+    , _aleAliasName = Nothing
+    , _aleAliasARN = Nothing
+    }
+
+-- | String that contains the key identifier pointed to by the alias.
+aleTargetKeyId :: Lens' AliasListEntry (Maybe Text)
+aleTargetKeyId = lens _aleTargetKeyId (\ s a -> s{_aleTargetKeyId = a});
+
+-- | String that contains the alias.
+aleAliasName :: Lens' AliasListEntry (Maybe Text)
+aleAliasName = lens _aleAliasName (\ s a -> s{_aleAliasName = a});
+
+-- | String that contains the key ARN.
+aleAliasARN :: Lens' AliasListEntry (Maybe Text)
+aleAliasARN = lens _aleAliasARN (\ s a -> s{_aleAliasARN = a});
+
+instance FromJSON AliasListEntry where
+        parseJSON
+          = withObject "AliasListEntry"
+              (\ x ->
+                 AliasListEntry' <$>
+                   (x .:? "TargetKeyId") <*> (x .:? "AliasName") <*>
+                     (x .:? "AliasArn"))
+
+-- | Contains constraints on the grant.
+--
+-- /See:/ 'grantConstraints' smart constructor.
+data GrantConstraints = GrantConstraints'
+    { _gcEncryptionContextEquals :: !(Maybe (Map Text Text))
+    , _gcEncryptionContextSubset :: !(Maybe (Map Text Text))
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GrantConstraints' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcEncryptionContextEquals'
+--
+-- * 'gcEncryptionContextSubset'
+grantConstraints
+    :: GrantConstraints
+grantConstraints =
+    GrantConstraints'
+    { _gcEncryptionContextEquals = Nothing
+    , _gcEncryptionContextSubset = Nothing
+    }
+
+-- | The constraint contains additional key\/value pairs that serve to
+-- further limit the grant.
+gcEncryptionContextEquals :: Lens' GrantConstraints (HashMap Text Text)
+gcEncryptionContextEquals = lens _gcEncryptionContextEquals (\ s a -> s{_gcEncryptionContextEquals = a}) . _Default . _Map;
+
+-- | The constraint equals the full encryption context.
+gcEncryptionContextSubset :: Lens' GrantConstraints (HashMap Text Text)
+gcEncryptionContextSubset = lens _gcEncryptionContextSubset (\ s a -> s{_gcEncryptionContextSubset = a}) . _Default . _Map;
+
+instance FromJSON GrantConstraints where
+        parseJSON
+          = withObject "GrantConstraints"
+              (\ x ->
+                 GrantConstraints' <$>
+                   (x .:? "EncryptionContextEquals" .!= mempty) <*>
+                     (x .:? "EncryptionContextSubset" .!= mempty))
+
+instance ToJSON GrantConstraints where
+        toJSON GrantConstraints'{..}
+          = object
+              ["EncryptionContextEquals" .=
+                 _gcEncryptionContextEquals,
+               "EncryptionContextSubset" .=
+                 _gcEncryptionContextSubset]
+
+-- | Contains information about each entry in the grant list.
+--
+-- /See:/ 'grantListEntry' smart constructor.
+data GrantListEntry = GrantListEntry'
+    { _gleRetiringPrincipal :: !(Maybe Text)
+    , _gleIssuingAccount    :: !(Maybe Text)
+    , _gleGrantId           :: !(Maybe Text)
+    , _gleConstraints       :: !(Maybe GrantConstraints)
+    , _gleGranteePrincipal  :: !(Maybe Text)
+    , _gleOperations        :: !(Maybe [GrantOperation])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GrantListEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gleRetiringPrincipal'
+--
+-- * 'gleIssuingAccount'
+--
+-- * 'gleGrantId'
+--
+-- * 'gleConstraints'
+--
+-- * 'gleGranteePrincipal'
+--
+-- * 'gleOperations'
+grantListEntry
+    :: GrantListEntry
+grantListEntry =
+    GrantListEntry'
+    { _gleRetiringPrincipal = Nothing
+    , _gleIssuingAccount = Nothing
+    , _gleGrantId = Nothing
+    , _gleConstraints = Nothing
+    , _gleGranteePrincipal = Nothing
+    , _gleOperations = Nothing
+    }
+
+-- | The principal that can retire the account.
+gleRetiringPrincipal :: Lens' GrantListEntry (Maybe Text)
+gleRetiringPrincipal = lens _gleRetiringPrincipal (\ s a -> s{_gleRetiringPrincipal = a});
+
+-- | The account under which the grant was issued.
+gleIssuingAccount :: Lens' GrantListEntry (Maybe Text)
+gleIssuingAccount = lens _gleIssuingAccount (\ s a -> s{_gleIssuingAccount = a});
+
+-- | Unique grant identifier.
+gleGrantId :: Lens' GrantListEntry (Maybe Text)
+gleGrantId = lens _gleGrantId (\ s a -> s{_gleGrantId = a});
+
+-- | Specifies the conditions under which the actions specified by the
+-- 'Operations' parameter are allowed.
+gleConstraints :: Lens' GrantListEntry (Maybe GrantConstraints)
+gleConstraints = lens _gleConstraints (\ s a -> s{_gleConstraints = a});
+
+-- | The principal that receives the grant permission.
+gleGranteePrincipal :: Lens' GrantListEntry (Maybe Text)
+gleGranteePrincipal = lens _gleGranteePrincipal (\ s a -> s{_gleGranteePrincipal = a});
+
+-- | List of operations permitted by the grant. This can be any combination
+-- of one or more of the following values:
+--
+-- 1.  Decrypt
+-- 2.  Encrypt
+-- 3.  GenerateDataKey
+-- 4.  GenerateDataKeyWithoutPlaintext
+-- 5.  ReEncryptFrom
+-- 6.  ReEncryptTo
+-- 7.  CreateGrant
+gleOperations :: Lens' GrantListEntry [GrantOperation]
+gleOperations = lens _gleOperations (\ s a -> s{_gleOperations = a}) . _Default . _Coerce;
+
+instance FromJSON GrantListEntry where
+        parseJSON
+          = withObject "GrantListEntry"
+              (\ x ->
+                 GrantListEntry' <$>
+                   (x .:? "RetiringPrincipal") <*>
+                     (x .:? "IssuingAccount")
+                     <*> (x .:? "GrantId")
+                     <*> (x .:? "Constraints")
+                     <*> (x .:? "GranteePrincipal")
+                     <*> (x .:? "Operations" .!= mempty))
+
+-- | Contains information about each entry in the key list.
+--
+-- /See:/ 'keyListEntry' smart constructor.
+data KeyListEntry = KeyListEntry'
+    { _kleKeyARN :: !(Maybe Text)
+    , _kleKeyId  :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'KeyListEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'kleKeyARN'
+--
+-- * 'kleKeyId'
+keyListEntry
+    :: KeyListEntry
+keyListEntry =
+    KeyListEntry'
+    { _kleKeyARN = Nothing
+    , _kleKeyId = Nothing
+    }
+
+-- | ARN of the key.
+kleKeyARN :: Lens' KeyListEntry (Maybe Text)
+kleKeyARN = lens _kleKeyARN (\ s a -> s{_kleKeyARN = a});
+
+-- | Unique identifier of the key.
+kleKeyId :: Lens' KeyListEntry (Maybe Text)
+kleKeyId = lens _kleKeyId (\ s a -> s{_kleKeyId = a});
+
+instance FromJSON KeyListEntry where
+        parseJSON
+          = withObject "KeyListEntry"
+              (\ x ->
+                 KeyListEntry' <$>
+                   (x .:? "KeyArn") <*> (x .:? "KeyId"))
+
+-- | Contains metadata associated with a specific key.
+--
+-- /See:/ 'keyMetadata' smart constructor.
+data KeyMetadata = KeyMetadata'
+    { _kmARN          :: !(Maybe Text)
+    , _kmEnabled      :: !(Maybe Bool)
+    , _kmAWSAccountId :: !(Maybe Text)
+    , _kmKeyUsage     :: !(Maybe KeyUsageType)
+    , _kmCreationDate :: !(Maybe POSIX)
+    , _kmDescription  :: !(Maybe Text)
+    , _kmKeyId        :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'KeyMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'kmARN'
+--
+-- * 'kmEnabled'
+--
+-- * 'kmAWSAccountId'
+--
+-- * 'kmKeyUsage'
+--
+-- * 'kmCreationDate'
+--
+-- * 'kmDescription'
+--
+-- * 'kmKeyId'
+keyMetadata
+    :: Text -- ^ 'kmKeyId'
+    -> KeyMetadata
+keyMetadata pKeyId_ =
+    KeyMetadata'
+    { _kmARN = Nothing
+    , _kmEnabled = Nothing
+    , _kmAWSAccountId = Nothing
+    , _kmKeyUsage = Nothing
+    , _kmCreationDate = Nothing
+    , _kmDescription = Nothing
+    , _kmKeyId = pKeyId_
+    }
+
+-- | Key ARN (Amazon Resource Name).
+kmARN :: Lens' KeyMetadata (Maybe Text)
+kmARN = lens _kmARN (\ s a -> s{_kmARN = a});
+
+-- | Value that specifies whether the key is enabled.
+kmEnabled :: Lens' KeyMetadata (Maybe Bool)
+kmEnabled = lens _kmEnabled (\ s a -> s{_kmEnabled = a});
+
+-- | Account ID number.
+kmAWSAccountId :: Lens' KeyMetadata (Maybe Text)
+kmAWSAccountId = lens _kmAWSAccountId (\ s a -> s{_kmAWSAccountId = a});
+
+-- | A value that specifies what operation(s) the key can perform.
+kmKeyUsage :: Lens' KeyMetadata (Maybe KeyUsageType)
+kmKeyUsage = lens _kmKeyUsage (\ s a -> s{_kmKeyUsage = a});
+
+-- | Date the key was created.
+kmCreationDate :: Lens' KeyMetadata (Maybe UTCTime)
+kmCreationDate = lens _kmCreationDate (\ s a -> s{_kmCreationDate = a}) . mapping _Time;
+
+-- | The description of the key.
+kmDescription :: Lens' KeyMetadata (Maybe Text)
+kmDescription = lens _kmDescription (\ s a -> s{_kmDescription = a});
+
+-- | Unique identifier for the key.
+kmKeyId :: Lens' KeyMetadata Text
+kmKeyId = lens _kmKeyId (\ s a -> s{_kmKeyId = a});
+
+instance FromJSON KeyMetadata where
+        parseJSON
+          = withObject "KeyMetadata"
+              (\ x ->
+                 KeyMetadata' <$>
+                   (x .:? "Arn") <*> (x .:? "Enabled") <*>
+                     (x .:? "AWSAccountId")
+                     <*> (x .:? "KeyUsage")
+                     <*> (x .:? "CreationDate")
+                     <*> (x .:? "Description")
+                     <*> (x .: "KeyId"))
diff --git a/gen/Network/AWS/KMS/Types/Sum.hs b/gen/Network/AWS/KMS/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/KMS/Types/Sum.hs
@@ -0,0 +1,116 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.KMS.Types.Sum
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.KMS.Types.Sum where
+
+import           Network.AWS.Prelude
+
+data DataKeySpec
+    = AES128
+    | AES256
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText DataKeySpec where
+    parser = takeLowerText >>= \case
+        "aes_128" -> pure AES128
+        "aes_256" -> pure AES256
+        e -> fromTextError $ "Failure parsing DataKeySpec from value: '" <> e
+           <> "'. Accepted values: aes_128, aes_256"
+
+instance ToText DataKeySpec where
+    toText = \case
+        AES128 -> "aes_128"
+        AES256 -> "aes_256"
+
+instance Hashable     DataKeySpec
+instance ToByteString DataKeySpec
+instance ToQuery      DataKeySpec
+instance ToHeader     DataKeySpec
+
+instance ToJSON DataKeySpec where
+    toJSON = toJSONText
+
+data GrantOperation
+    = CreateGrant
+    | Decrypt
+    | Encrypt
+    | GenerateDataKey
+    | GenerateDataKeyWithoutPlaintext
+    | ReEncryptFrom
+    | ReEncryptTo
+    | RetireGrant
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText GrantOperation where
+    parser = takeLowerText >>= \case
+        "creategrant" -> pure CreateGrant
+        "decrypt" -> pure Decrypt
+        "encrypt" -> pure Encrypt
+        "generatedatakey" -> pure GenerateDataKey
+        "generatedatakeywithoutplaintext" -> pure GenerateDataKeyWithoutPlaintext
+        "reencryptfrom" -> pure ReEncryptFrom
+        "reencryptto" -> pure ReEncryptTo
+        "retiregrant" -> pure RetireGrant
+        e -> fromTextError $ "Failure parsing GrantOperation from value: '" <> e
+           <> "'. Accepted values: creategrant, decrypt, encrypt, generatedatakey, generatedatakeywithoutplaintext, reencryptfrom, reencryptto, retiregrant"
+
+instance ToText GrantOperation where
+    toText = \case
+        CreateGrant -> "creategrant"
+        Decrypt -> "decrypt"
+        Encrypt -> "encrypt"
+        GenerateDataKey -> "generatedatakey"
+        GenerateDataKeyWithoutPlaintext -> "generatedatakeywithoutplaintext"
+        ReEncryptFrom -> "reencryptfrom"
+        ReEncryptTo -> "reencryptto"
+        RetireGrant -> "retiregrant"
+
+instance Hashable     GrantOperation
+instance ToByteString GrantOperation
+instance ToQuery      GrantOperation
+instance ToHeader     GrantOperation
+
+instance ToJSON GrantOperation where
+    toJSON = toJSONText
+
+instance FromJSON GrantOperation where
+    parseJSON = parseJSONText "GrantOperation"
+
+data KeyUsageType =
+    EncryptDecrypt
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText KeyUsageType where
+    parser = takeLowerText >>= \case
+        "encrypt_decrypt" -> pure EncryptDecrypt
+        e -> fromTextError $ "Failure parsing KeyUsageType from value: '" <> e
+           <> "'. Accepted values: encrypt_decrypt"
+
+instance ToText KeyUsageType where
+    toText = \case
+        EncryptDecrypt -> "encrypt_decrypt"
+
+instance Hashable     KeyUsageType
+instance ToByteString KeyUsageType
+instance ToQuery      KeyUsageType
+instance ToHeader     KeyUsageType
+
+instance ToJSON KeyUsageType where
+    toJSON = toJSONText
+
+instance FromJSON KeyUsageType where
+    parseJSON = parseJSONText "KeyUsageType"
diff --git a/gen/Network/AWS/KMS/UpdateAlias.hs b/gen/Network/AWS/KMS/UpdateAlias.hs
--- a/gen/Network/AWS/KMS/UpdateAlias.hs
+++ b/gen/Network/AWS/KMS/UpdateAlias.hs
@@ -1,123 +1,133 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.UpdateAlias
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Updates an alias to associate it with a different key.
+-- Updates an alias to associate it with a different key.
 --
--- An alias name can contain only alphanumeric characters, forward slashes (/),
--- underscores (_), and dashes (-). An alias must start with the word "alias"
--- followed by a forward slash (alias/). An alias that begins with "aws" after
--- the forward slash (alias/aws...) is reserved by Amazon Web Services (AWS).
+-- An alias name can contain only alphanumeric characters, forward slashes
+-- (\/), underscores (_), and dashes (-). An alias must start with the word
+-- \"alias\" followed by a forward slash (alias\/). An alias that begins
+-- with \"aws\" after the forward slash (alias\/aws...) is reserved by
+-- Amazon Web Services (AWS).
 --
--- An alias is not a property of a key. Therefore, an alias can be associated
--- with and disassociated from an existing key without changing the properties
--- of the key.
+-- An alias is not a property of a key. Therefore, an alias can be
+-- associated with and disassociated from an existing key without changing
+-- the properties of the key.
 --
 -- Note that you cannot create or update an alias that represents a key in
 -- another account.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateAlias.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateAlias.html AWS API Reference> for UpdateAlias.
 module Network.AWS.KMS.UpdateAlias
     (
-    -- * Request
-      UpdateAlias
-    -- ** Request constructor
-    , updateAlias
-    -- ** Request lenses
+    -- * Creating a Request
+      updateAlias
+    , UpdateAlias
+    -- * Request Lenses
     , uaAliasName
     , uaTargetKeyId
 
-    -- * Response
-    , UpdateAliasResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , updateAliasResponse
+    , UpdateAliasResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data UpdateAlias = UpdateAlias
-    { _uaAliasName   :: Text
-    , _uaTargetKeyId :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'updateAlias' smart constructor.
+data UpdateAlias = UpdateAlias'
+    { _uaAliasName   :: !Text
+    , _uaTargetKeyId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'UpdateAlias' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'UpdateAlias' with the minimum fields required to make a request.
 --
--- * 'uaAliasName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'uaTargetKeyId' @::@ 'Text'
+-- * 'uaAliasName'
 --
-updateAlias :: Text -- ^ 'uaAliasName'
-            -> Text -- ^ 'uaTargetKeyId'
-            -> UpdateAlias
-updateAlias p1 p2 = UpdateAlias
-    { _uaAliasName   = p1
-    , _uaTargetKeyId = p2
+-- * 'uaTargetKeyId'
+updateAlias
+    :: Text -- ^ 'uaAliasName'
+    -> Text -- ^ 'uaTargetKeyId'
+    -> UpdateAlias
+updateAlias pAliasName_ pTargetKeyId_ =
+    UpdateAlias'
+    { _uaAliasName = pAliasName_
+    , _uaTargetKeyId = pTargetKeyId_
     }
 
--- | String that contains the name of the alias to be modifed. The name must start
--- with the word "alias" followed by a forward slash (alias/). Aliases that
--- begin with "alias/AWS" are reserved.
+-- | String that contains the name of the alias to be modifed. The name must
+-- start with the word \"alias\" followed by a forward slash (alias\/).
+-- Aliases that begin with \"alias\/AWS\" are reserved.
 uaAliasName :: Lens' UpdateAlias Text
-uaAliasName = lens _uaAliasName (\s a -> s { _uaAliasName = a })
+uaAliasName = lens _uaAliasName (\ s a -> s{_uaAliasName = a});
 
--- | Unique identifier of the customer master key to be associated with the alias.
--- This value can be a globally unique identifier or the fully specified ARN of
--- a key.  Key ARN Example -
--- arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012 Globally Unique Key ID Example - 12345678-1234-1234-1234-123456789012
+-- | Unique identifier of the customer master key to be associated with the
+-- alias. This value can be a globally unique identifier or the fully
+-- specified ARN of a key.
 --
+-- -   Key ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   Globally Unique Key ID Example -
+--     12345678-1234-1234-1234-123456789012
 uaTargetKeyId :: Lens' UpdateAlias Text
-uaTargetKeyId = lens _uaTargetKeyId (\s a -> s { _uaTargetKeyId = a })
+uaTargetKeyId = lens _uaTargetKeyId (\ s a -> s{_uaTargetKeyId = a});
 
-data UpdateAliasResponse = UpdateAliasResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest UpdateAlias where
+        type Sv UpdateAlias = KMS
+        type Rs UpdateAlias = UpdateAliasResponse
+        request = postJSON
+        response = receiveNull UpdateAliasResponse'
 
--- | 'UpdateAliasResponse' constructor.
-updateAliasResponse :: UpdateAliasResponse
-updateAliasResponse = UpdateAliasResponse
+instance ToHeaders UpdateAlias where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.UpdateAlias" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON UpdateAlias where
+        toJSON UpdateAlias'{..}
+          = object
+              ["AliasName" .= _uaAliasName,
+               "TargetKeyId" .= _uaTargetKeyId]
+
 instance ToPath UpdateAlias where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery UpdateAlias where
-    toQuery = const mempty
-
-instance ToHeaders UpdateAlias
-
-instance ToJSON UpdateAlias where
-    toJSON UpdateAlias{..} = object
-        [ "AliasName"   .= _uaAliasName
-        , "TargetKeyId" .= _uaTargetKeyId
-        ]
+        toQuery = const mempty
 
-instance AWSRequest UpdateAlias where
-    type Sv UpdateAlias = KMS
-    type Rs UpdateAlias = UpdateAliasResponse
+-- | /See:/ 'updateAliasResponse' smart constructor.
+data UpdateAliasResponse =
+    UpdateAliasResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "UpdateAlias"
-    response = nullResponse UpdateAliasResponse
+-- | Creates a value of 'UpdateAliasResponse' with the minimum fields required to make a request.
+--
+updateAliasResponse
+    :: UpdateAliasResponse
+updateAliasResponse = UpdateAliasResponse'
diff --git a/gen/Network/AWS/KMS/UpdateKeyDescription.hs b/gen/Network/AWS/KMS/UpdateKeyDescription.hs
--- a/gen/Network/AWS/KMS/UpdateKeyDescription.hs
+++ b/gen/Network/AWS/KMS/UpdateKeyDescription.hs
@@ -1,108 +1,118 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.KMS.UpdateKeyDescription
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Updates the description of a key.
+-- Updates the description of a key.
 --
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateKeyDescription.html>
+-- /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateKeyDescription.html AWS API Reference> for UpdateKeyDescription.
 module Network.AWS.KMS.UpdateKeyDescription
     (
-    -- * Request
-      UpdateKeyDescription
-    -- ** Request constructor
-    , updateKeyDescription
-    -- ** Request lenses
-    , ukdDescription
+    -- * Creating a Request
+      updateKeyDescription
+    , UpdateKeyDescription
+    -- * Request Lenses
     , ukdKeyId
+    , ukdDescription
 
-    -- * Response
-    , UpdateKeyDescriptionResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , updateKeyDescriptionResponse
+    , UpdateKeyDescriptionResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.KMS.Types
-import qualified GHC.Exts
+import           Network.AWS.KMS.Types
+import           Network.AWS.KMS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data UpdateKeyDescription = UpdateKeyDescription
-    { _ukdDescription :: Text
-    , _ukdKeyId       :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'updateKeyDescription' smart constructor.
+data UpdateKeyDescription = UpdateKeyDescription'
+    { _ukdKeyId       :: !Text
+    , _ukdDescription :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'UpdateKeyDescription' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'UpdateKeyDescription' with the minimum fields required to make a request.
 --
--- * 'ukdDescription' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ukdKeyId' @::@ 'Text'
+-- * 'ukdKeyId'
 --
-updateKeyDescription :: Text -- ^ 'ukdKeyId'
-                     -> Text -- ^ 'ukdDescription'
-                     -> UpdateKeyDescription
-updateKeyDescription p1 p2 = UpdateKeyDescription
-    { _ukdKeyId       = p1
-    , _ukdDescription = p2
+-- * 'ukdDescription'
+updateKeyDescription
+    :: Text -- ^ 'ukdKeyId'
+    -> Text -- ^ 'ukdDescription'
+    -> UpdateKeyDescription
+updateKeyDescription pKeyId_ pDescription_ =
+    UpdateKeyDescription'
+    { _ukdKeyId = pKeyId_
+    , _ukdDescription = pDescription_
     }
 
+-- | A unique identifier for the customer master key. This value can be a
+-- globally unique identifier or the fully specified ARN to a key.
+--
+-- -   Key ARN Example -
+--     arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   Globally Unique Key ID Example -
+--     12345678-1234-1234-1234-123456789012
+ukdKeyId :: Lens' UpdateKeyDescription Text
+ukdKeyId = lens _ukdKeyId (\ s a -> s{_ukdKeyId = a});
+
 -- | New description for the key.
 ukdDescription :: Lens' UpdateKeyDescription Text
-ukdDescription = lens _ukdDescription (\s a -> s { _ukdDescription = a })
+ukdDescription = lens _ukdDescription (\ s a -> s{_ukdDescription = a});
 
--- | A unique identifier for the customer master key. This value can be a globally
--- unique identifier or the fully specified ARN to a key.  Key ARN Example -
--- arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012 Globally Unique Key ID Example - 12345678-1234-1234-1234-123456789012
---
-ukdKeyId :: Lens' UpdateKeyDescription Text
-ukdKeyId = lens _ukdKeyId (\s a -> s { _ukdKeyId = a })
+instance AWSRequest UpdateKeyDescription where
+        type Sv UpdateKeyDescription = KMS
+        type Rs UpdateKeyDescription =
+             UpdateKeyDescriptionResponse
+        request = postJSON
+        response = receiveNull UpdateKeyDescriptionResponse'
 
-data UpdateKeyDescriptionResponse = UpdateKeyDescriptionResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance ToHeaders UpdateKeyDescription where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("TrentService.UpdateKeyDescription" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | 'UpdateKeyDescriptionResponse' constructor.
-updateKeyDescriptionResponse :: UpdateKeyDescriptionResponse
-updateKeyDescriptionResponse = UpdateKeyDescriptionResponse
+instance ToJSON UpdateKeyDescription where
+        toJSON UpdateKeyDescription'{..}
+          = object
+              ["KeyId" .= _ukdKeyId,
+               "Description" .= _ukdDescription]
 
 instance ToPath UpdateKeyDescription where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery UpdateKeyDescription where
-    toQuery = const mempty
-
-instance ToHeaders UpdateKeyDescription
-
-instance ToJSON UpdateKeyDescription where
-    toJSON UpdateKeyDescription{..} = object
-        [ "KeyId"       .= _ukdKeyId
-        , "Description" .= _ukdDescription
-        ]
+        toQuery = const mempty
 
-instance AWSRequest UpdateKeyDescription where
-    type Sv UpdateKeyDescription = KMS
-    type Rs UpdateKeyDescription = UpdateKeyDescriptionResponse
+-- | /See:/ 'updateKeyDescriptionResponse' smart constructor.
+data UpdateKeyDescriptionResponse =
+    UpdateKeyDescriptionResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "UpdateKeyDescription"
-    response = nullResponse UpdateKeyDescriptionResponse
+-- | Creates a value of 'UpdateKeyDescriptionResponse' with the minimum fields required to make a request.
+--
+updateKeyDescriptionResponse
+    :: UpdateKeyDescriptionResponse
+updateKeyDescriptionResponse = UpdateKeyDescriptionResponse'
diff --git a/gen/Network/AWS/KMS/Waiters.hs b/gen/Network/AWS/KMS/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/KMS/Waiters.hs
@@ -0,0 +1,20 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.KMS.Waiters
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.KMS.Waiters where
+
+import           Network.AWS.KMS.Types
+import           Network.AWS.Prelude
+import           Network.AWS.Waiter
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,21 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Main (main) where
+
+import Test.Tasty
+import Test.AWS.KMS
+import Test.AWS.KMS.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "KMS"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/Gen/KMS.hs b/test/Test/AWS/Gen/KMS.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/KMS.hs
@@ -0,0 +1,481 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-orphans        #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.AWS.Gen.KMS
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.Gen.KMS where
+
+import Data.Proxy
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+import Network.AWS.KMS
+import Test.AWS.KMS.Internal
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ testDisableKeyRotation $
+--             disableKeyRotation
+--
+--         , testGenerateDataKeyWithoutPlaintext $
+--             generateDataKeyWithoutPlaintext
+--
+--         , testListGrants $
+--             listGrants
+--
+--         , testEncrypt $
+--             encrypt
+--
+--         , testEnableKeyRotation $
+--             enableKeyRotation
+--
+--         , testCreateGrant $
+--             createGrant
+--
+--         , testCreateAlias $
+--             createAlias
+--
+--         , testListAliases $
+--             listAliases
+--
+--         , testGenerateRandom $
+--             generateRandom
+--
+--         , testDisableKey $
+--             disableKey
+--
+--         , testCreateKey $
+--             createKey
+--
+--         , testRetireGrant $
+--             retireGrant
+--
+--         , testListKeys $
+--             listKeys
+--
+--         , testGetKeyRotationStatus $
+--             getKeyRotationStatus
+--
+--         , testGenerateDataKey $
+--             generateDataKey
+--
+--         , testDeleteAlias $
+--             deleteAlias
+--
+--         , testUpdateAlias $
+--             updateAlias
+--
+--         , testDescribeKey $
+--             describeKey
+--
+--         , testDecrypt $
+--             decrypt
+--
+--         , testUpdateKeyDescription $
+--             updateKeyDescription
+--
+--         , testReEncrypt $
+--             reEncrypt
+--
+--         , testListKeyPolicies $
+--             listKeyPolicies
+--
+--         , testEnableKey $
+--             enableKey
+--
+--         , testPutKeyPolicy $
+--             putKeyPolicy
+--
+--         , testRevokeGrant $
+--             revokeGrant
+--
+--         , testGetKeyPolicy $
+--             getKeyPolicy
+--
+--           ]
+
+--     , testGroup "response"
+--         [ testDisableKeyRotationResponse $
+--             disableKeyRotationResponse
+--
+--         , testGenerateDataKeyWithoutPlaintextResponse $
+--             generateDataKeyWithoutPlaintextResponse
+--
+--         , testListGrantsResponse $
+--             listGrantsResponse
+--
+--         , testEncryptResponse $
+--             encryptResponse
+--
+--         , testEnableKeyRotationResponse $
+--             enableKeyRotationResponse
+--
+--         , testCreateGrantResponse $
+--             createGrantResponse
+--
+--         , testCreateAliasResponse $
+--             createAliasResponse
+--
+--         , testListAliasesResponse $
+--             listAliasesResponse
+--
+--         , testGenerateRandomResponse $
+--             generateRandomResponse
+--
+--         , testDisableKeyResponse $
+--             disableKeyResponse
+--
+--         , testCreateKeyResponse $
+--             createKeyResponse
+--
+--         , testRetireGrantResponse $
+--             retireGrantResponse
+--
+--         , testListKeysResponse $
+--             listKeysResponse
+--
+--         , testGetKeyRotationStatusResponse $
+--             getKeyRotationStatusResponse
+--
+--         , testGenerateDataKeyResponse $
+--             generateDataKeyResponse
+--
+--         , testDeleteAliasResponse $
+--             deleteAliasResponse
+--
+--         , testUpdateAliasResponse $
+--             updateAliasResponse
+--
+--         , testDescribeKeyResponse $
+--             describeKeyResponse
+--
+--         , testDecryptResponse $
+--             decryptResponse
+--
+--         , testUpdateKeyDescriptionResponse $
+--             updateKeyDescriptionResponse
+--
+--         , testReEncryptResponse $
+--             reEncryptResponse
+--
+--         , testListKeyPoliciesResponse $
+--             listKeyPoliciesResponse
+--
+--         , testEnableKeyResponse $
+--             enableKeyResponse
+--
+--         , testPutKeyPolicyResponse $
+--             putKeyPolicyResponse
+--
+--         , testRevokeGrantResponse $
+--             revokeGrantResponse
+--
+--         , testGetKeyPolicyResponse $
+--             getKeyPolicyResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+testDisableKeyRotation :: DisableKeyRotation -> TestTree
+testDisableKeyRotation = req
+    "DisableKeyRotation"
+    "fixture/DisableKeyRotation"
+
+testGenerateDataKeyWithoutPlaintext :: GenerateDataKeyWithoutPlaintext -> TestTree
+testGenerateDataKeyWithoutPlaintext = req
+    "GenerateDataKeyWithoutPlaintext"
+    "fixture/GenerateDataKeyWithoutPlaintext"
+
+testListGrants :: ListGrants -> TestTree
+testListGrants = req
+    "ListGrants"
+    "fixture/ListGrants"
+
+testEncrypt :: Encrypt -> TestTree
+testEncrypt = req
+    "Encrypt"
+    "fixture/Encrypt"
+
+testEnableKeyRotation :: EnableKeyRotation -> TestTree
+testEnableKeyRotation = req
+    "EnableKeyRotation"
+    "fixture/EnableKeyRotation"
+
+testCreateGrant :: CreateGrant -> TestTree
+testCreateGrant = req
+    "CreateGrant"
+    "fixture/CreateGrant"
+
+testCreateAlias :: CreateAlias -> TestTree
+testCreateAlias = req
+    "CreateAlias"
+    "fixture/CreateAlias"
+
+testListAliases :: ListAliases -> TestTree
+testListAliases = req
+    "ListAliases"
+    "fixture/ListAliases"
+
+testGenerateRandom :: GenerateRandom -> TestTree
+testGenerateRandom = req
+    "GenerateRandom"
+    "fixture/GenerateRandom"
+
+testDisableKey :: DisableKey -> TestTree
+testDisableKey = req
+    "DisableKey"
+    "fixture/DisableKey"
+
+testCreateKey :: CreateKey -> TestTree
+testCreateKey = req
+    "CreateKey"
+    "fixture/CreateKey"
+
+testRetireGrant :: RetireGrant -> TestTree
+testRetireGrant = req
+    "RetireGrant"
+    "fixture/RetireGrant"
+
+testListKeys :: ListKeys -> TestTree
+testListKeys = req
+    "ListKeys"
+    "fixture/ListKeys"
+
+testGetKeyRotationStatus :: GetKeyRotationStatus -> TestTree
+testGetKeyRotationStatus = req
+    "GetKeyRotationStatus"
+    "fixture/GetKeyRotationStatus"
+
+testGenerateDataKey :: GenerateDataKey -> TestTree
+testGenerateDataKey = req
+    "GenerateDataKey"
+    "fixture/GenerateDataKey"
+
+testDeleteAlias :: DeleteAlias -> TestTree
+testDeleteAlias = req
+    "DeleteAlias"
+    "fixture/DeleteAlias"
+
+testUpdateAlias :: UpdateAlias -> TestTree
+testUpdateAlias = req
+    "UpdateAlias"
+    "fixture/UpdateAlias"
+
+testDescribeKey :: DescribeKey -> TestTree
+testDescribeKey = req
+    "DescribeKey"
+    "fixture/DescribeKey"
+
+testDecrypt :: Decrypt -> TestTree
+testDecrypt = req
+    "Decrypt"
+    "fixture/Decrypt"
+
+testUpdateKeyDescription :: UpdateKeyDescription -> TestTree
+testUpdateKeyDescription = req
+    "UpdateKeyDescription"
+    "fixture/UpdateKeyDescription"
+
+testReEncrypt :: ReEncrypt -> TestTree
+testReEncrypt = req
+    "ReEncrypt"
+    "fixture/ReEncrypt"
+
+testListKeyPolicies :: ListKeyPolicies -> TestTree
+testListKeyPolicies = req
+    "ListKeyPolicies"
+    "fixture/ListKeyPolicies"
+
+testEnableKey :: EnableKey -> TestTree
+testEnableKey = req
+    "EnableKey"
+    "fixture/EnableKey"
+
+testPutKeyPolicy :: PutKeyPolicy -> TestTree
+testPutKeyPolicy = req
+    "PutKeyPolicy"
+    "fixture/PutKeyPolicy"
+
+testRevokeGrant :: RevokeGrant -> TestTree
+testRevokeGrant = req
+    "RevokeGrant"
+    "fixture/RevokeGrant"
+
+testGetKeyPolicy :: GetKeyPolicy -> TestTree
+testGetKeyPolicy = req
+    "GetKeyPolicy"
+    "fixture/GetKeyPolicy"
+
+-- Responses
+
+testDisableKeyRotationResponse :: DisableKeyRotationResponse -> TestTree
+testDisableKeyRotationResponse = res
+    "DisableKeyRotationResponse"
+    "fixture/DisableKeyRotationResponse"
+    (Proxy :: Proxy DisableKeyRotation)
+
+testGenerateDataKeyWithoutPlaintextResponse :: GenerateDataKeyWithoutPlaintextResponse -> TestTree
+testGenerateDataKeyWithoutPlaintextResponse = res
+    "GenerateDataKeyWithoutPlaintextResponse"
+    "fixture/GenerateDataKeyWithoutPlaintextResponse"
+    (Proxy :: Proxy GenerateDataKeyWithoutPlaintext)
+
+testListGrantsResponse :: ListGrantsResponse -> TestTree
+testListGrantsResponse = res
+    "ListGrantsResponse"
+    "fixture/ListGrantsResponse"
+    (Proxy :: Proxy ListGrants)
+
+testEncryptResponse :: EncryptResponse -> TestTree
+testEncryptResponse = res
+    "EncryptResponse"
+    "fixture/EncryptResponse"
+    (Proxy :: Proxy Encrypt)
+
+testEnableKeyRotationResponse :: EnableKeyRotationResponse -> TestTree
+testEnableKeyRotationResponse = res
+    "EnableKeyRotationResponse"
+    "fixture/EnableKeyRotationResponse"
+    (Proxy :: Proxy EnableKeyRotation)
+
+testCreateGrantResponse :: CreateGrantResponse -> TestTree
+testCreateGrantResponse = res
+    "CreateGrantResponse"
+    "fixture/CreateGrantResponse"
+    (Proxy :: Proxy CreateGrant)
+
+testCreateAliasResponse :: CreateAliasResponse -> TestTree
+testCreateAliasResponse = res
+    "CreateAliasResponse"
+    "fixture/CreateAliasResponse"
+    (Proxy :: Proxy CreateAlias)
+
+testListAliasesResponse :: ListAliasesResponse -> TestTree
+testListAliasesResponse = res
+    "ListAliasesResponse"
+    "fixture/ListAliasesResponse"
+    (Proxy :: Proxy ListAliases)
+
+testGenerateRandomResponse :: GenerateRandomResponse -> TestTree
+testGenerateRandomResponse = res
+    "GenerateRandomResponse"
+    "fixture/GenerateRandomResponse"
+    (Proxy :: Proxy GenerateRandom)
+
+testDisableKeyResponse :: DisableKeyResponse -> TestTree
+testDisableKeyResponse = res
+    "DisableKeyResponse"
+    "fixture/DisableKeyResponse"
+    (Proxy :: Proxy DisableKey)
+
+testCreateKeyResponse :: CreateKeyResponse -> TestTree
+testCreateKeyResponse = res
+    "CreateKeyResponse"
+    "fixture/CreateKeyResponse"
+    (Proxy :: Proxy CreateKey)
+
+testRetireGrantResponse :: RetireGrantResponse -> TestTree
+testRetireGrantResponse = res
+    "RetireGrantResponse"
+    "fixture/RetireGrantResponse"
+    (Proxy :: Proxy RetireGrant)
+
+testListKeysResponse :: ListKeysResponse -> TestTree
+testListKeysResponse = res
+    "ListKeysResponse"
+    "fixture/ListKeysResponse"
+    (Proxy :: Proxy ListKeys)
+
+testGetKeyRotationStatusResponse :: GetKeyRotationStatusResponse -> TestTree
+testGetKeyRotationStatusResponse = res
+    "GetKeyRotationStatusResponse"
+    "fixture/GetKeyRotationStatusResponse"
+    (Proxy :: Proxy GetKeyRotationStatus)
+
+testGenerateDataKeyResponse :: GenerateDataKeyResponse -> TestTree
+testGenerateDataKeyResponse = res
+    "GenerateDataKeyResponse"
+    "fixture/GenerateDataKeyResponse"
+    (Proxy :: Proxy GenerateDataKey)
+
+testDeleteAliasResponse :: DeleteAliasResponse -> TestTree
+testDeleteAliasResponse = res
+    "DeleteAliasResponse"
+    "fixture/DeleteAliasResponse"
+    (Proxy :: Proxy DeleteAlias)
+
+testUpdateAliasResponse :: UpdateAliasResponse -> TestTree
+testUpdateAliasResponse = res
+    "UpdateAliasResponse"
+    "fixture/UpdateAliasResponse"
+    (Proxy :: Proxy UpdateAlias)
+
+testDescribeKeyResponse :: DescribeKeyResponse -> TestTree
+testDescribeKeyResponse = res
+    "DescribeKeyResponse"
+    "fixture/DescribeKeyResponse"
+    (Proxy :: Proxy DescribeKey)
+
+testDecryptResponse :: DecryptResponse -> TestTree
+testDecryptResponse = res
+    "DecryptResponse"
+    "fixture/DecryptResponse"
+    (Proxy :: Proxy Decrypt)
+
+testUpdateKeyDescriptionResponse :: UpdateKeyDescriptionResponse -> TestTree
+testUpdateKeyDescriptionResponse = res
+    "UpdateKeyDescriptionResponse"
+    "fixture/UpdateKeyDescriptionResponse"
+    (Proxy :: Proxy UpdateKeyDescription)
+
+testReEncryptResponse :: ReEncryptResponse -> TestTree
+testReEncryptResponse = res
+    "ReEncryptResponse"
+    "fixture/ReEncryptResponse"
+    (Proxy :: Proxy ReEncrypt)
+
+testListKeyPoliciesResponse :: ListKeyPoliciesResponse -> TestTree
+testListKeyPoliciesResponse = res
+    "ListKeyPoliciesResponse"
+    "fixture/ListKeyPoliciesResponse"
+    (Proxy :: Proxy ListKeyPolicies)
+
+testEnableKeyResponse :: EnableKeyResponse -> TestTree
+testEnableKeyResponse = res
+    "EnableKeyResponse"
+    "fixture/EnableKeyResponse"
+    (Proxy :: Proxy EnableKey)
+
+testPutKeyPolicyResponse :: PutKeyPolicyResponse -> TestTree
+testPutKeyPolicyResponse = res
+    "PutKeyPolicyResponse"
+    "fixture/PutKeyPolicyResponse"
+    (Proxy :: Proxy PutKeyPolicy)
+
+testRevokeGrantResponse :: RevokeGrantResponse -> TestTree
+testRevokeGrantResponse = res
+    "RevokeGrantResponse"
+    "fixture/RevokeGrantResponse"
+    (Proxy :: Proxy RevokeGrant)
+
+testGetKeyPolicyResponse :: GetKeyPolicyResponse -> TestTree
+testGetKeyPolicyResponse = res
+    "GetKeyPolicyResponse"
+    "fixture/GetKeyPolicyResponse"
+    (Proxy :: Proxy GetKeyPolicy)
diff --git a/test/Test/AWS/KMS.hs b/test/Test/AWS/KMS.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/KMS.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Module      : Test.AWS.KMS
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+module Test.AWS.KMS
+    ( tests
+    , fixtures
+    ) where
+
+import           Network.AWS.KMS
+import           Test.AWS.Gen.KMS
+import           Test.Tasty
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/KMS/Internal.hs b/test/Test/AWS/KMS/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/KMS/Internal.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Test.AWS.KMS.Internal
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+module Test.AWS.KMS.Internal where
+
+import Test.AWS.Prelude
