diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,13 @@
 
 ## 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. 
+    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.
 
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-kms)
 and [AWS API Reference](http://docs.aws.amazon.com/kms/latest/APIReference/Welcome.html).
diff --git a/amazonka-kms.cabal b/amazonka-kms.cabal
--- a/amazonka-kms.cabal
+++ b/amazonka-kms.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-kms
-version:               0.0.1
+version:               0.0.2
 synopsis:              Amazon Key Management Service SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
@@ -13,14 +13,13 @@
 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.
+    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.
     .
     /See:/ <http://docs.aws.amazon.com/kms/latest/APIReference/Welcome.html AWS API Reference>
     .
@@ -69,5 +68,5 @@
     other-modules:
 
     build-depends:
-          amazonka-core == 0.0.1.*
+          amazonka-core == 0.0.2.*
         , base          >= 4.7     && < 5
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
@@ -9,13 +9,12 @@
 -- Portability : non-portable (GHC extensions)
 
 -- | 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.
+-- 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.
 module Network.AWS.KMS
     ( module Network.AWS.KMS.CreateAlias
     , module Network.AWS.KMS.CreateGrant
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
@@ -22,12 +22,11 @@
 
 -- | 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. If
--- absent, access to the key is evaluated based on IAM policies attached to
--- the user. By default, grants do not expire. Grants can be listed, retired,
--- or revoked as indicated by the following APIs. Typically, when you are
--- finished using a grant, you retire it. When you want to end a grant
--- immediately, revoke it. For more information about grants, see Grants.
--- ListGrants RetireGrant RevokeGrant.
+-- absent, access to the key is evaluated based on IAM policies attached to the
+-- user. By default, grants do not expire. Grants can be listed, retired, or
+-- revoked as indicated by the following APIs. Typically, when you are finished
+-- using a grant, you retire it. When you want to end a grant immediately,
+-- revoke it. For more information about grants, see <http://docs.aws.amazon.com/kms/latest/developerguide/grants.html Grants>.  'ListGrants' 'RetireGrant' 'RevokeGrant'
 --
 -- <http://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html>
 module Network.AWS.KMS.CreateGrant
@@ -95,8 +94,8 @@
     , _cgGrantTokens       = mempty
     }
 
--- | Specifies the conditions under which the actions specified by the
--- Operations parameter are allowed.
+-- | 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 })
 
@@ -104,8 +103,8 @@
 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.
+-- | 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 })
@@ -115,14 +114,13 @@
 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.
+-- | 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
 cgOperations :: Lens' CreateGrant [GrantOperation]
 cgOperations = lens _cgOperations (\s a -> s { _cgOperations = a }) . _List
 
--- | Principal given permission to retire the grant. For more information, see
--- RetireGrant.
+-- | 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 })
@@ -146,13 +144,13 @@
     , _cgrGrantId    = Nothing
     }
 
--- | Unique grant identifier. You can use the GrantId value to revoke a grant.
+-- | 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 })
 
--- | The grant token. A grant token is a string that identifies a grant and
--- which can be used to make a grant take effect immediately. A token
--- contains all of the information necessary to create a grant.
+-- | The grant token. A grant token is a string that identifies a grant and which
+-- can be used to make a grant take effect immediately. A token contains all of
+-- the information necessary to create a grant.
 cgrGrantToken :: Lens' CreateGrantResponse (Maybe Text)
 cgrGrantToken = lens _cgrGrantToken (\s a -> s { _cgrGrantToken = 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
@@ -22,9 +22,8 @@
 
 -- | 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.
+-- 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>
 module Network.AWS.KMS.CreateKey
@@ -74,19 +73,18 @@
     , _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.
+-- | 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 })
 
--- | 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 })
 
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
@@ -21,7 +21,7 @@
 -- Portability : non-portable (GHC extensions)
 
 -- | Decrypts ciphertext. Ciphertext is plaintext that has been previously
--- encrypted by using the Encrypt function.
+-- encrypted by using the 'Encrypt' function.
 --
 -- <http://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html>
 module Network.AWS.KMS.Decrypt
@@ -77,9 +77,9 @@
 dCiphertextBlob :: Lens' Decrypt Base64
 dCiphertextBlob = lens _dCiphertextBlob (\s a -> s { _dCiphertextBlob = a })
 
--- | The encryption context. If this was specified in the Encrypt function, it
+-- | 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 Encryption Context.
+-- 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 })
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
@@ -61,8 +61,8 @@
     { _dk1KeyId = p1
     }
 
--- | Unique identifier of the customer master key to be described. This can be
--- an ARN, an alias, or a globally unique identifier.
+-- | Unique identifier of the customer master key to be described. This can be an
+-- ARN, an alias, or a globally unique identifier.
 dk1KeyId :: Lens' DescribeKey Text
 dk1KeyId = lens _dk1KeyId (\s a -> s { _dk1KeyId = 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
@@ -59,8 +59,8 @@
     { _dkKeyId = p1
     }
 
--- | Unique identifier of the customer master key to be disabled. This can be
--- an ARN, an alias, or a globally unique identifier.
+-- | Unique identifier of the customer master key to be disabled. This can be an
+-- ARN, an alias, or a globally unique identifier.
 dkKeyId :: Lens' DisableKey Text
 dkKeyId = lens _dkKeyId (\s a -> s { _dkKeyId = a })
 
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
@@ -60,8 +60,8 @@
     { _ekKeyId = p1
     }
 
--- | Unique identifier of the customer master key to be enabled. This can be
--- an ARN, an alias, or a globally unique identifier.
+-- | Unique identifier of the customer master key to be enabled. This can be an
+-- ARN, an alias, or a globally unique identifier.
 ekKeyId :: Lens' EnableKey Text
 ekKeyId = lens _ekKeyId (\s a -> s { _ekKeyId = a })
 
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
@@ -79,8 +79,7 @@
     }
 
 -- | Name:value pair that specifies the encryption context to be used for
--- authenticated encryption. For more information, see Authenticated
--- Encryption.
+-- authenticated encryption. For more information, see <http://docs.aws.amazon.com/kms/latest/developerguide/crypto_authen.html Authenticated Encryption>.
 eEncryptionContext :: Lens' Encrypt (HashMap Text Text)
 eEncryptionContext =
     lens _eEncryptionContext (\s a -> s { _eEncryptionContext = a })
@@ -91,8 +90,8 @@
 eGrantTokens :: Lens' Encrypt [Text]
 eGrantTokens = lens _eGrantTokens (\s a -> s { _eGrantTokens = a }) . _List
 
--- | Unique identifier of the customer master. This can be an ARN, an alias,
--- or the Key ID.
+-- | Unique identifier of the customer master. This can be an ARN, an alias, or
+-- the Key ID.
 eKeyId :: Lens' Encrypt Text
 eKeyId = lens _eKeyId (\s a -> s { _eKeyId = 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
@@ -20,8 +20,8 @@
 -- Stability   : experimental
 -- Portability : non-portable (GHC extensions)
 
--- | Generates a secure data key. Data keys are used to encrypt and decrypt
--- data. They are wrapped by customer master keys.
+-- | Generates a secure data key. Data keys are used to encrypt and decrypt data.
+-- They are wrapped by customer master keys.
 --
 -- <http://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html>
 module Network.AWS.KMS.GenerateDataKey
@@ -84,10 +84,9 @@
     , _gdkGrantTokens       = mempty
     }
 
--- | 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.
+-- | 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 })
@@ -108,8 +107,8 @@
 gdkKeySpec :: Lens' GenerateDataKey (Maybe DataKeySpec)
 gdkKeySpec = lens _gdkKeySpec (\s a -> s { _gdkKeySpec = a })
 
--- | Integer that contains the number of bytes to generate. Common values are
--- 128, 256, 512, 1024 and so on. 1024 is the current limit.
+-- | Integer that contains the number of bytes to generate. Common values are 128,
+-- 256, 512, 1024 and so on. 1024 is the current limit.
 gdkNumberOfBytes :: Lens' GenerateDataKey (Maybe Natural)
 gdkNumberOfBytes = lens _gdkNumberOfBytes (\s a -> s { _gdkNumberOfBytes = a }) . mapping _Nat
 
@@ -137,8 +136,8 @@
     }
 
 -- | Ciphertext that contains the wrapped key. You must store the blob and
--- encryption context so that the ciphertext can be decrypted. You must
--- provide both the ciphertext blob and the encryption context.
+-- encryption context so that the ciphertext can be decrypted. You must provide
+-- both the ciphertext blob and the encryption context.
 gdkrCiphertextBlob :: Lens' GenerateDataKeyResponse (Maybe Base64)
 gdkrCiphertextBlob =
     lens _gdkrCiphertextBlob (\s a -> s { _gdkrCiphertextBlob = 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
@@ -20,8 +20,8 @@
 -- Stability   : experimental
 -- Portability : non-portable (GHC extensions)
 
--- | Returns a key wrapped by a customer master key without the plaintext copy
--- of that key. To retrieve the plaintext, see GenerateDataKey.
+-- | Returns a key wrapped by a customer master key without the plaintext copy of
+-- that key. To retrieve the plaintext, see 'GenerateDataKey'.
 --
 -- <http://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html>
 module Network.AWS.KMS.GenerateDataKeyWithoutPlaintext
@@ -83,8 +83,8 @@
     , _gdkwpGrantTokens       = mempty
     }
 
--- | Name:value pair that contains additional data to be authenticated during
--- the encryption and decryption processes.
+-- | 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 })
@@ -100,13 +100,13 @@
 gdkwpKeyId :: Lens' GenerateDataKeyWithoutPlaintext Text
 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.
+-- | 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 })
 
--- | Integer that contains the number of bytes to generate. Common values are
--- 128, 256, 512, 1024 and so on.
+-- | Integer that contains the number of bytes to generate. Common values are 128,
+-- 256, 512, 1024 and so on.
 gdkwpNumberOfBytes :: Lens' GenerateDataKeyWithoutPlaintext (Maybe Natural)
 gdkwpNumberOfBytes =
     lens _gdkwpNumberOfBytes (\s a -> s { _gdkwpNumberOfBytes = 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
@@ -60,8 +60,8 @@
     { _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
 
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
@@ -73,7 +73,7 @@
 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 })
 
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
@@ -20,8 +20,8 @@
 -- Stability   : experimental
 -- Portability : non-portable (GHC extensions)
 
--- | 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>
 module Network.AWS.KMS.GetKeyRotationStatus
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
@@ -67,17 +67,15 @@
     , _laMarker = 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.
+-- | 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
 
--- | 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.
+-- | 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 })
 
@@ -108,14 +106,14 @@
 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.
+-- | 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.
+-- 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 })
 
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
@@ -78,16 +78,16 @@
 lgKeyId :: Lens' ListGrants Text
 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.
+-- | 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
 
 -- | 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.
+-- 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 })
 
@@ -118,14 +118,14 @@
 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.
+-- | 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.
+-- 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 })
 
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
@@ -78,16 +78,16 @@
 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.
+-- | 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.
+-- 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 })
 
@@ -114,19 +114,19 @@
     , _lkprTruncated   = Nothing
     }
 
--- | If Truncated is true, this value is present and contains the value to use
--- for the Marker request parameter in a subsequent pagination request.
+-- | 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 })
 
--- | A list of policy names. Currently, there is only one policy and it is
--- named "Default".
+-- | 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
 
 -- | 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.
+-- 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 })
 
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
@@ -67,16 +67,15 @@
     , _lkMarker = 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.
+-- | 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
 
 -- | 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.
+-- 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 })
 
@@ -107,14 +106,14 @@
 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.
+-- | 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.
+-- 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 })
 
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
@@ -108,8 +108,7 @@
 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.
+-- | Encryption context used to encrypt and decrypt the data specified in the 'CiphertextBlob' parameter.
 reSourceEncryptionContext :: Lens' ReEncrypt (HashMap Text Text)
 reSourceEncryptionContext =
     lens _reSourceEncryptionContext
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
@@ -108,7 +108,10 @@
 instance Hashable KeyUsageType
 
 instance FromText KeyUsageType where
-    parser = match "ENCRYPT_DECRYPT" EncryptDecrypt
+    parser = takeText >>= \case
+        "ENCRYPT_DECRYPT" -> pure EncryptDecrypt
+        e                 -> fail $
+            "Failure parsing KeyUsageType from " ++ show e
 
 instance ToText KeyUsageType where
     toText EncryptDecrypt = "ENCRYPT_DECRYPT"
@@ -126,7 +129,7 @@
 data KeyMetadata = KeyMetadata
     { _kmAWSAccountId :: Maybe Text
     , _kmArn          :: Maybe Text
-    , _kmCreationDate :: Maybe RFC822
+    , _kmCreationDate :: Maybe ISO8601
     , _kmDescription  :: Maybe Text
     , _kmEnabled      :: Maybe Bool
     , _kmKeyId        :: Text
@@ -220,8 +223,11 @@
 instance Hashable DataKeySpec
 
 instance FromText DataKeySpec where
-    parser = match "AES_128" AES128
-         <|> match "AES_256" AES256
+    parser = takeText >>= \case
+        "AES_128" -> pure AES128
+        "AES_256" -> pure AES256
+        e         -> fail $
+            "Failure parsing DataKeySpec from " ++ show e
 
 instance ToText DataKeySpec where
     toText = \case
@@ -366,8 +372,8 @@
     , _gleConstraints       = Nothing
     }
 
--- | Specifies the conditions under which the actions specified by the
--- Operations parameter are allowed.
+-- | 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 })
 
@@ -385,9 +391,9 @@
 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.
+-- | 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
 
@@ -429,14 +435,17 @@
 instance Hashable GrantOperation
 
 instance FromText GrantOperation where
-    parser = match "CreateGrant"                     GOCreateGrant
-         <|> match "Decrypt"                         GODecrypt
-         <|> match "Encrypt"                         GOEncrypt
-         <|> match "GenerateDataKey"                 GOGenerateDataKey
-         <|> match "GenerateDataKeyWithoutPlaintext" GOGenerateDataKeyWithoutPlaintext
-         <|> match "ReEncryptFrom"                   GOReEncryptFrom
-         <|> match "ReEncryptTo"                     GOReEncryptTo
-         <|> match "RetireGrant"                     GORetireGrant
+    parser = takeText >>= \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
 
 instance ToText GrantOperation where
     toText = \case
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
@@ -20,9 +20,7 @@
 -- Stability   : experimental
 -- Portability : non-portable (GHC extensions)
 
--- | 
---
--- <http://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateKeyDescription.html>
+-- | <http://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateKeyDescription.html>
 module Network.AWS.KMS.UpdateKeyDescription
     (
     -- * Request
