diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,11 +1,16 @@
 # Amazon Route 53 Domains 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
 
 Pending
@@ -13,6 +18,14 @@
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-route53-domains)
 and the [AWS API Reference](http://docs.aws.amazon.com/Route53/latest/APIReference/actions-on-domain-registrations.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-route53-domains.cabal b/amazonka-route53-domains.cabal
--- a/amazonka-route53-domains.cabal
+++ b/amazonka-route53-domains.cabal
@@ -1,12 +1,12 @@
 name:                  amazonka-route53-domains
-version:               0.3.6
+version:               1.0.0
 synopsis:              Amazon Route 53 Domains 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
@@ -14,12 +14,20 @@
 
 description:
     Pending
-
     .
-    /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/actions-on-domain-registrations.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.Route53Domains" and the <http://docs.aws.amazon.com/Route53/latest/APIReference/actions-on-domain-registrations.html AWS API Reference>
+    to get started.
 
 source-repository head
     type:     git
@@ -52,9 +60,40 @@
         , Network.AWS.Route53Domains.UpdateDomainContactPrivacy
         , Network.AWS.Route53Domains.UpdateDomainNameservers
         , Network.AWS.Route53Domains.UpdateTagsForDomain
+        , Network.AWS.Route53Domains.Waiters
 
     other-modules:
+          Network.AWS.Route53Domains.Types.Product
+        , Network.AWS.Route53Domains.Types.Sum
 
     build-depends:
-          amazonka-core == 0.3.6.*
+          amazonka-core == 1.0.0.*
         , base          >= 4.7     && < 5
+
+test-suite amazonka-route53-domains-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.Route53Domains
+        , Test.AWS.Gen.Route53Domains
+        , Test.AWS.Route53Domains.Internal
+
+    build-depends:
+          amazonka-core == 1.0.0
+        , amazonka-test == 1.0.0
+        , amazonka-route53-domains == 1.0.0
+        , base
+        , bytestring
+        , lens
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/gen/Network/AWS/Route53Domains.hs b/gen/Network/AWS/Route53Domains.hs
--- a/gen/Network/AWS/Route53Domains.hs
+++ b/gen/Network/AWS/Route53Domains.hs
@@ -1,54 +1,225 @@
+{-# 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.Route53Domains
--- 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.
-
--- | Pending
+-- Pending
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/actions-on-domain-registrations.html AWS API Reference>
 module Network.AWS.Route53Domains
-    ( module Network.AWS.Route53Domains.CheckDomainAvailability
-    , module Network.AWS.Route53Domains.DeleteTagsForDomain
-    , module Network.AWS.Route53Domains.DisableDomainAutoRenew
-    , module Network.AWS.Route53Domains.DisableDomainTransferLock
-    , module Network.AWS.Route53Domains.EnableDomainAutoRenew
-    , module Network.AWS.Route53Domains.EnableDomainTransferLock
+    (
+    -- * Service
+      Route53Domains
+
+    -- * Errors
+    -- $errors
+
+    -- ** InvalidInput
+    , _InvalidInput
+
+    -- ** OperationLimitExceeded
+    , _OperationLimitExceeded
+
+    -- ** DomainLimitExceeded
+    , _DomainLimitExceeded
+
+    -- ** UnsupportedTLD
+    , _UnsupportedTLD
+
+    -- ** TLDRulesViolation
+    , _TLDRulesViolation
+
+    -- ** DuplicateRequest
+    , _DuplicateRequest
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** ListOperations (Paginated)
+    , module Network.AWS.Route53Domains.ListOperations
+
+    -- ** GetDomainDetail
     , module Network.AWS.Route53Domains.GetDomainDetail
+
+    -- ** UpdateDomainContactPrivacy
+    , module Network.AWS.Route53Domains.UpdateDomainContactPrivacy
+
+    -- ** GetOperationDetail
     , module Network.AWS.Route53Domains.GetOperationDetail
-    , module Network.AWS.Route53Domains.ListDomains
-    , module Network.AWS.Route53Domains.ListOperations
-    , module Network.AWS.Route53Domains.ListTagsForDomain
+
+    -- ** EnableDomainAutoRenew
+    , module Network.AWS.Route53Domains.EnableDomainAutoRenew
+
+    -- ** DisableDomainAutoRenew
+    , module Network.AWS.Route53Domains.DisableDomainAutoRenew
+
+    -- ** UpdateDomainContact
+    , module Network.AWS.Route53Domains.UpdateDomainContact
+
+    -- ** EnableDomainTransferLock
+    , module Network.AWS.Route53Domains.EnableDomainTransferLock
+
+    -- ** RegisterDomain
     , module Network.AWS.Route53Domains.RegisterDomain
+
+    -- ** DisableDomainTransferLock
+    , module Network.AWS.Route53Domains.DisableDomainTransferLock
+
+    -- ** CheckDomainAvailability
+    , module Network.AWS.Route53Domains.CheckDomainAvailability
+
+    -- ** ListTagsForDomain
+    , module Network.AWS.Route53Domains.ListTagsForDomain
+
+    -- ** UpdateDomainNameservers
+    , module Network.AWS.Route53Domains.UpdateDomainNameservers
+
+    -- ** RetrieveDomainAuthCode
     , module Network.AWS.Route53Domains.RetrieveDomainAuthCode
+
+    -- ** TransferDomain
     , module Network.AWS.Route53Domains.TransferDomain
-    , module Network.AWS.Route53Domains.Types
-    , module Network.AWS.Route53Domains.UpdateDomainContact
-    , module Network.AWS.Route53Domains.UpdateDomainContactPrivacy
-    , module Network.AWS.Route53Domains.UpdateDomainNameservers
+
+    -- ** DeleteTagsForDomain
+    , module Network.AWS.Route53Domains.DeleteTagsForDomain
+
+    -- ** UpdateTagsForDomain
     , module Network.AWS.Route53Domains.UpdateTagsForDomain
+
+    -- ** ListDomains (Paginated)
+    , module Network.AWS.Route53Domains.ListDomains
+
+    -- * Types
+
+    -- ** ContactType
+    , ContactType (..)
+
+    -- ** CountryCode
+    , CountryCode (..)
+
+    -- ** DomainAvailability
+    , DomainAvailability (..)
+
+    -- ** ExtraParamName
+    , ExtraParamName (..)
+
+    -- ** OperationStatus
+    , OperationStatus (..)
+
+    -- ** OperationType
+    , OperationType (..)
+
+    -- ** ContactDetail
+    , ContactDetail
+    , contactDetail
+    , cdOrganizationName
+    , cdEmail
+    , cdFax
+    , cdState
+    , cdLastName
+    , cdExtraParams
+    , cdZipCode
+    , cdAddressLine1
+    , cdCity
+    , cdPhoneNumber
+    , cdAddressLine2
+    , cdFirstName
+    , cdCountryCode
+    , cdContactType
+
+    -- ** DomainSummary
+    , DomainSummary
+    , domainSummary
+    , dsExpiry
+    , dsTransferLock
+    , dsAutoRenew
+    , dsDomainName
+
+    -- ** ExtraParam
+    , ExtraParam
+    , extraParam
+    , epName
+    , epValue
+
+    -- ** Nameserver
+    , Nameserver
+    , nameserver
+    , nGlueIPs
+    , nName
+
+    -- ** OperationSummary
+    , OperationSummary
+    , operationSummary
+    , osOperationId
+    , osStatus
+    , osType
+    , osSubmittedDate
+
+    -- ** Tag
+    , Tag
+    , tag
+    , tagValue
+    , tagKey
     ) where
 
-import Network.AWS.Route53Domains.CheckDomainAvailability
-import Network.AWS.Route53Domains.DeleteTagsForDomain
-import Network.AWS.Route53Domains.DisableDomainAutoRenew
-import Network.AWS.Route53Domains.DisableDomainTransferLock
-import Network.AWS.Route53Domains.EnableDomainAutoRenew
-import Network.AWS.Route53Domains.EnableDomainTransferLock
-import Network.AWS.Route53Domains.GetDomainDetail
-import Network.AWS.Route53Domains.GetOperationDetail
-import Network.AWS.Route53Domains.ListDomains
-import Network.AWS.Route53Domains.ListOperations
-import Network.AWS.Route53Domains.ListTagsForDomain
-import Network.AWS.Route53Domains.RegisterDomain
-import Network.AWS.Route53Domains.RetrieveDomainAuthCode
-import Network.AWS.Route53Domains.TransferDomain
-import Network.AWS.Route53Domains.Types
-import Network.AWS.Route53Domains.UpdateDomainContact
-import Network.AWS.Route53Domains.UpdateDomainContactPrivacy
-import Network.AWS.Route53Domains.UpdateDomainNameservers
-import Network.AWS.Route53Domains.UpdateTagsForDomain
+import           Network.AWS.Route53Domains.CheckDomainAvailability
+import           Network.AWS.Route53Domains.DeleteTagsForDomain
+import           Network.AWS.Route53Domains.DisableDomainAutoRenew
+import           Network.AWS.Route53Domains.DisableDomainTransferLock
+import           Network.AWS.Route53Domains.EnableDomainAutoRenew
+import           Network.AWS.Route53Domains.EnableDomainTransferLock
+import           Network.AWS.Route53Domains.GetDomainDetail
+import           Network.AWS.Route53Domains.GetOperationDetail
+import           Network.AWS.Route53Domains.ListDomains
+import           Network.AWS.Route53Domains.ListOperations
+import           Network.AWS.Route53Domains.ListTagsForDomain
+import           Network.AWS.Route53Domains.RegisterDomain
+import           Network.AWS.Route53Domains.RetrieveDomainAuthCode
+import           Network.AWS.Route53Domains.TransferDomain
+import           Network.AWS.Route53Domains.Types
+import           Network.AWS.Route53Domains.UpdateDomainContact
+import           Network.AWS.Route53Domains.UpdateDomainContactPrivacy
+import           Network.AWS.Route53Domains.UpdateDomainNameservers
+import           Network.AWS.Route53Domains.UpdateTagsForDomain
+import           Network.AWS.Route53Domains.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 'Route53Domains'.
+-}
+
+{- $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/Route53Domains/CheckDomainAvailability.hs b/gen/Network/AWS/Route53Domains/CheckDomainAvailability.hs
--- a/gen/Network/AWS/Route53Domains/CheckDomainAvailability.hs
+++ b/gen/Network/AWS/Route53Domains/CheckDomainAvailability.hs
@@ -1,111 +1,156 @@
-{-# 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.Route53Domains.CheckDomainAvailability
--- 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.
-
--- | This operation checks the availability of one domain name. You can access
--- this API without authenticating. Note that if the availability status of a
--- domain is pending, you must submit another request to determine the
--- availability of the domain name.
+-- This operation checks the availability of one domain name. You can
+-- access this API without authenticating. Note that if the availability
+-- status of a domain is pending, you must submit another request to
+-- determine the availability of the domain name.
 --
--- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-CheckDomainAvailability.html>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/api-CheckDomainAvailability.html AWS API Reference> for CheckDomainAvailability.
 module Network.AWS.Route53Domains.CheckDomainAvailability
     (
-    -- * Request
-      CheckDomainAvailability
-    -- ** Request constructor
-    , checkDomainAvailability
-    -- ** Request lenses
+    -- * Creating a Request
+      checkDomainAvailability
+    , CheckDomainAvailability
+    -- * Request Lenses
+    , cdaIdNLangCode
     , cdaDomainName
-    , cdaIdnLangCode
 
-    -- * Response
-    , CheckDomainAvailabilityResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , checkDomainAvailabilityResponse
-    -- ** Response lenses
-    , cdarAvailability
+    , CheckDomainAvailabilityResponse
+    -- * Response Lenses
+    , cdarsStatus
+    , cdarsAvailability
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Route53Domains.Types
-import qualified GHC.Exts
-
-data CheckDomainAvailability = CheckDomainAvailability
-    { _cdaDomainName  :: Text
-    , _cdaIdnLangCode :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53Domains.Types
+import           Network.AWS.Route53Domains.Types.Product
 
--- | 'CheckDomainAvailability' constructor.
+-- | The CheckDomainAvailability request contains the following elements.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'checkDomainAvailability' smart constructor.
+data CheckDomainAvailability = CheckDomainAvailability'
+    { _cdaIdNLangCode :: !(Maybe Text)
+    , _cdaDomainName  :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CheckDomainAvailability' with the minimum fields required to make a request.
 --
--- * 'cdaDomainName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cdaIdnLangCode' @::@ 'Maybe' 'Text'
+-- * 'cdaIdNLangCode'
 --
-checkDomainAvailability :: Text -- ^ 'cdaDomainName'
-                        -> CheckDomainAvailability
-checkDomainAvailability p1 = CheckDomainAvailability
-    { _cdaDomainName  = p1
-    , _cdaIdnLangCode = Nothing
+-- * 'cdaDomainName'
+checkDomainAvailability
+    :: Text -- ^ 'cdaDomainName'
+    -> CheckDomainAvailability
+checkDomainAvailability pDomainName_ =
+    CheckDomainAvailability'
+    { _cdaIdNLangCode = Nothing
+    , _cdaDomainName = pDomainName_
     }
 
+-- | Reserved for future use.
+cdaIdNLangCode :: Lens' CheckDomainAvailability (Maybe Text)
+cdaIdNLangCode = lens _cdaIdNLangCode (\ s a -> s{_cdaIdNLangCode = a});
+
 -- | The name of a domain.
 --
 -- Type: String
 --
 -- Default: None
 --
--- Constraints: The domain name can contain only the letters a through z, the
--- numbers 0 through 9, and hyphen (-). Internationalized Domain Names are not
--- supported.
+-- Constraints: The domain name can contain only the letters a through z,
+-- the numbers 0 through 9, and hyphen (-). Internationalized Domain Names
+-- are not supported.
 --
 -- Required: Yes
 cdaDomainName :: Lens' CheckDomainAvailability Text
-cdaDomainName = lens _cdaDomainName (\s a -> s { _cdaDomainName = a })
+cdaDomainName = lens _cdaDomainName (\ s a -> s{_cdaDomainName = a});
 
--- | Reserved for future use.
-cdaIdnLangCode :: Lens' CheckDomainAvailability (Maybe Text)
-cdaIdnLangCode = lens _cdaIdnLangCode (\s a -> s { _cdaIdnLangCode = a })
+instance AWSRequest CheckDomainAvailability where
+        type Sv CheckDomainAvailability = Route53Domains
+        type Rs CheckDomainAvailability =
+             CheckDomainAvailabilityResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CheckDomainAvailabilityResponse' <$>
+                   (pure (fromEnum s)) <*> (x .:> "Availability"))
 
-newtype CheckDomainAvailabilityResponse = CheckDomainAvailabilityResponse
-    { _cdarAvailability :: DomainAvailability
-    } deriving (Eq, Read, Show)
+instance ToHeaders CheckDomainAvailability where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Route53Domains_v20140515.CheckDomainAvailability"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | 'CheckDomainAvailabilityResponse' constructor.
+instance ToJSON CheckDomainAvailability where
+        toJSON CheckDomainAvailability'{..}
+          = object
+              ["IdnLangCode" .= _cdaIdNLangCode,
+               "DomainName" .= _cdaDomainName]
+
+instance ToPath CheckDomainAvailability where
+        toPath = const "/"
+
+instance ToQuery CheckDomainAvailability where
+        toQuery = const mempty
+
+-- | The CheckDomainAvailability response includes the following elements.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'checkDomainAvailabilityResponse' smart constructor.
+data CheckDomainAvailabilityResponse = CheckDomainAvailabilityResponse'
+    { _cdarsStatus       :: !Int
+    , _cdarsAvailability :: !DomainAvailability
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CheckDomainAvailabilityResponse' with the minimum fields required to make a request.
 --
--- * 'cdarAvailability' @::@ 'DomainAvailability'
+-- Use one of the following lenses to modify other fields as desired:
 --
-checkDomainAvailabilityResponse :: DomainAvailability -- ^ 'cdarAvailability'
-                                -> CheckDomainAvailabilityResponse
-checkDomainAvailabilityResponse p1 = CheckDomainAvailabilityResponse
-    { _cdarAvailability = p1
+-- * 'cdarsStatus'
+--
+-- * 'cdarsAvailability'
+checkDomainAvailabilityResponse
+    :: Int -- ^ 'cdarsStatus'
+    -> DomainAvailability -- ^ 'cdarsAvailability'
+    -> CheckDomainAvailabilityResponse
+checkDomainAvailabilityResponse pStatus_ pAvailability_ =
+    CheckDomainAvailabilityResponse'
+    { _cdarsStatus = pStatus_
+    , _cdarsAvailability = pAvailability_
     }
 
+-- | The response status code.
+cdarsStatus :: Lens' CheckDomainAvailabilityResponse Int
+cdarsStatus = lens _cdarsStatus (\ s a -> s{_cdarsStatus = a});
+
 -- | Whether the domain name is available for registering.
 --
 -- You can only register domains designated as 'AVAILABLE'.
@@ -114,38 +159,19 @@
 --
 -- Valid values:
 --
--- 'AVAILABLE' – The domain name is available.  'AVAILABLE_RESERVED' – The domain
--- name is reserved under specific conditions.  'AVAILABLE_PREORDER' – The domain
--- name is available and can be preordered.  'UNAVAILABLE' – The domain name is
--- not available.  'UNAVAILABLE_PREMIUM' – The domain name is not available.  'UNAVAILABLE_RESTRICTED' – The domain name is forbidden.  'RESERVED' – The domain name has been
--- reserved for another person or organization.  'DONT_KNOW' – The TLD registry
--- didn't reply with a definitive answer about whether the domain name is
--- available. Amazon Route 53 can return this response for a variety of reasons,
--- for example, the registry is performing maintenance. Try again later.
-cdarAvailability :: Lens' CheckDomainAvailabilityResponse DomainAvailability
-cdarAvailability = lens _cdarAvailability (\s a -> s { _cdarAvailability = a })
-
-instance ToPath CheckDomainAvailability where
-    toPath = const "/"
-
-instance ToQuery CheckDomainAvailability where
-    toQuery = const mempty
-
-instance ToHeaders CheckDomainAvailability
-
-instance ToJSON CheckDomainAvailability where
-    toJSON CheckDomainAvailability{..} = object
-        [ "DomainName"  .= _cdaDomainName
-        , "IdnLangCode" .= _cdaIdnLangCode
-        ]
-
-instance AWSRequest CheckDomainAvailability where
-    type Sv CheckDomainAvailability = Route53Domains
-    type Rs CheckDomainAvailability = CheckDomainAvailabilityResponse
-
-    request  = post "CheckDomainAvailability"
-    response = jsonResponse
-
-instance FromJSON CheckDomainAvailabilityResponse where
-    parseJSON = withObject "CheckDomainAvailabilityResponse" $ \o -> CheckDomainAvailabilityResponse
-        <$> o .:  "Availability"
+-- -   'AVAILABLE' – The domain name is available.
+-- -   'AVAILABLE_RESERVED' – The domain name is reserved under specific
+--     conditions.
+-- -   'AVAILABLE_PREORDER' – The domain name is available and can be
+--     preordered.
+-- -   'UNAVAILABLE' – The domain name is not available.
+-- -   'UNAVAILABLE_PREMIUM' – The domain name is not available.
+-- -   'UNAVAILABLE_RESTRICTED' – The domain name is forbidden.
+-- -   'RESERVED' – The domain name has been reserved for another person or
+--     organization.
+-- -   'DONT_KNOW' – The TLD registry didn\'t reply with a definitive
+--     answer about whether the domain name is available. Amazon Route 53
+--     can return this response for a variety of reasons, for example, the
+--     registry is performing maintenance. Try again later.
+cdarsAvailability :: Lens' CheckDomainAvailabilityResponse DomainAvailability
+cdarsAvailability = lens _cdarsAvailability (\ s a -> s{_cdarsAvailability = a});
diff --git a/gen/Network/AWS/Route53Domains/DeleteTagsForDomain.hs b/gen/Network/AWS/Route53Domains/DeleteTagsForDomain.hs
--- a/gen/Network/AWS/Route53Domains/DeleteTagsForDomain.hs
+++ b/gen/Network/AWS/Route53Domains/DeleteTagsForDomain.hs
@@ -1,72 +1,72 @@
-{-# 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.Route53Domains.DeleteTagsForDomain
--- 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.
-
--- | This operation deletes the specified tags for a domain.
+-- This operation deletes the specified tags for a domain.
 --
--- All tag operations are eventually consistent; subsequent operations may not
--- immediately represent all issued operations.
+-- All tag operations are eventually consistent; subsequent operations may
+-- not immediately represent all issued operations.
 --
--- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-DeleteTagsForDomain.html>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/api-DeleteTagsForDomain.html AWS API Reference> for DeleteTagsForDomain.
 module Network.AWS.Route53Domains.DeleteTagsForDomain
     (
-    -- * Request
-      DeleteTagsForDomain
-    -- ** Request constructor
-    , deleteTagsForDomain
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteTagsForDomain
+    , DeleteTagsForDomain
+    -- * Request Lenses
     , dtfdDomainName
     , dtfdTagsToDelete
 
-    -- * Response
-    , DeleteTagsForDomainResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteTagsForDomainResponse
+    , DeleteTagsForDomainResponse
+    -- * Response Lenses
+    , dtfdrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Route53Domains.Types
-import qualified GHC.Exts
-
-data DeleteTagsForDomain = DeleteTagsForDomain
-    { _dtfdDomainName   :: Text
-    , _dtfdTagsToDelete :: List "TagsToDelete" Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53Domains.Types
+import           Network.AWS.Route53Domains.Types.Product
 
--- | 'DeleteTagsForDomain' constructor.
+-- | The DeleteTagsForDomainRequest includes the following elements.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'deleteTagsForDomain' smart constructor.
+data DeleteTagsForDomain = DeleteTagsForDomain'
+    { _dtfdDomainName   :: !Text
+    , _dtfdTagsToDelete :: ![Text]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteTagsForDomain' with the minimum fields required to make a request.
 --
--- * 'dtfdDomainName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dtfdTagsToDelete' @::@ ['Text']
+-- * 'dtfdDomainName'
 --
-deleteTagsForDomain :: Text -- ^ 'dtfdDomainName'
-                    -> DeleteTagsForDomain
-deleteTagsForDomain p1 = DeleteTagsForDomain
-    { _dtfdDomainName   = p1
+-- * 'dtfdTagsToDelete'
+deleteTagsForDomain
+    :: Text -- ^ 'dtfdDomainName'
+    -> DeleteTagsForDomain
+deleteTagsForDomain pDomainName_ =
+    DeleteTagsForDomain'
+    { _dtfdDomainName = pDomainName_
     , _dtfdTagsToDelete = mempty
     }
 
@@ -78,15 +78,15 @@
 --
 -- Default: None
 --
--- Constraints: The domain name can contain only the letters a through z, the
--- numbers 0 through 9, and hyphen (-). Hyphens are allowed only when theyaposre
--- surrounded by letters, numbers, or other hyphens. You canapost specify a
--- hyphen at the beginning or end of a label. To specify an Internationalized
--- Domain Name, you must convert the name to Punycode.
+-- Constraints: The domain name can contain only the letters a through z,
+-- the numbers 0 through 9, and hyphen (-). Hyphens are allowed only when
+-- theyaposre surrounded by letters, numbers, or other hyphens. You
+-- canapost specify a hyphen at the beginning or end of a label. To specify
+-- an Internationalized Domain Name, you must convert the name to Punycode.
 --
 -- Required: Yes
 dtfdDomainName :: Lens' DeleteTagsForDomain Text
-dtfdDomainName = lens _dtfdDomainName (\s a -> s { _dtfdDomainName = a })
+dtfdDomainName = lens _dtfdDomainName (\ s a -> s{_dtfdDomainName = a});
 
 -- | A list of tag keys to delete.
 --
@@ -96,34 +96,60 @@
 --
 -- Required: No
 --
--- '>
+-- \'>
 dtfdTagsToDelete :: Lens' DeleteTagsForDomain [Text]
-dtfdTagsToDelete = lens _dtfdTagsToDelete (\s a -> s { _dtfdTagsToDelete = a }) . _List
+dtfdTagsToDelete = lens _dtfdTagsToDelete (\ s a -> s{_dtfdTagsToDelete = a}) . _Coerce;
 
-data DeleteTagsForDomainResponse = DeleteTagsForDomainResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteTagsForDomain where
+        type Sv DeleteTagsForDomain = Route53Domains
+        type Rs DeleteTagsForDomain =
+             DeleteTagsForDomainResponse
+        request = postJSON
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteTagsForDomainResponse' <$> (pure (fromEnum s)))
 
--- | 'DeleteTagsForDomainResponse' constructor.
-deleteTagsForDomainResponse :: DeleteTagsForDomainResponse
-deleteTagsForDomainResponse = DeleteTagsForDomainResponse
+instance ToHeaders DeleteTagsForDomain where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Route53Domains_v20140515.DeleteTagsForDomain" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON DeleteTagsForDomain where
+        toJSON DeleteTagsForDomain'{..}
+          = object
+              ["DomainName" .= _dtfdDomainName,
+               "TagsToDelete" .= _dtfdTagsToDelete]
+
 instance ToPath DeleteTagsForDomain where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DeleteTagsForDomain where
-    toQuery = const mempty
-
-instance ToHeaders DeleteTagsForDomain
+        toQuery = const mempty
 
-instance ToJSON DeleteTagsForDomain where
-    toJSON DeleteTagsForDomain{..} = object
-        [ "DomainName"   .= _dtfdDomainName
-        , "TagsToDelete" .= _dtfdTagsToDelete
-        ]
+-- | /See:/ 'deleteTagsForDomainResponse' smart constructor.
+newtype DeleteTagsForDomainResponse = DeleteTagsForDomainResponse'
+    { _dtfdrsStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest DeleteTagsForDomain where
-    type Sv DeleteTagsForDomain = Route53Domains
-    type Rs DeleteTagsForDomain = DeleteTagsForDomainResponse
+-- | Creates a value of 'DeleteTagsForDomainResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtfdrsStatus'
+deleteTagsForDomainResponse
+    :: Int -- ^ 'dtfdrsStatus'
+    -> DeleteTagsForDomainResponse
+deleteTagsForDomainResponse pStatus_ =
+    DeleteTagsForDomainResponse'
+    { _dtfdrsStatus = pStatus_
+    }
 
-    request  = post "DeleteTagsForDomain"
-    response = nullResponse DeleteTagsForDomainResponse
+-- | The response status code.
+dtfdrsStatus :: Lens' DeleteTagsForDomainResponse Int
+dtfdrsStatus = lens _dtfdrsStatus (\ s a -> s{_dtfdrsStatus = a});
diff --git a/gen/Network/AWS/Route53Domains/DisableDomainAutoRenew.hs b/gen/Network/AWS/Route53Domains/DisableDomainAutoRenew.hs
--- a/gen/Network/AWS/Route53Domains/DisableDomainAutoRenew.hs
+++ b/gen/Network/AWS/Route53Domains/DisableDomainAutoRenew.hs
@@ -1,98 +1,124 @@
-{-# 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.Route53Domains.DisableDomainAutoRenew
--- 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.
-
--- | This operation disables automatic renewal of domain registration for the
+-- This operation disables automatic renewal of domain registration for the
 -- specified domain.
 --
--- Caution! Amazon Route 53 doesn't have a manual renewal process, so if you
--- disable automatic renewal, registration for the domain will not be renewed
--- when the expiration date passes, and you will lose control of the domain name.
+-- Caution! Amazon Route 53 doesn\'t have a manual renewal process, so if
+-- you disable automatic renewal, registration for the domain will not be
+-- renewed when the expiration date passes, and you will lose control of
+-- the domain name.
 --
--- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-DisableDomainAutoRenew.html>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/api-DisableDomainAutoRenew.html AWS API Reference> for DisableDomainAutoRenew.
 module Network.AWS.Route53Domains.DisableDomainAutoRenew
     (
-    -- * Request
-      DisableDomainAutoRenew
-    -- ** Request constructor
-    , disableDomainAutoRenew
-    -- ** Request lenses
+    -- * Creating a Request
+      disableDomainAutoRenew
+    , DisableDomainAutoRenew
+    -- * Request Lenses
     , ddarDomainName
 
-    -- * Response
-    , DisableDomainAutoRenewResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , disableDomainAutoRenewResponse
+    , DisableDomainAutoRenewResponse
+    -- * Response Lenses
+    , ddarrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Route53Domains.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53Domains.Types
+import           Network.AWS.Route53Domains.Types.Product
 
-newtype DisableDomainAutoRenew = DisableDomainAutoRenew
+-- | /See:/ 'disableDomainAutoRenew' smart constructor.
+newtype DisableDomainAutoRenew = DisableDomainAutoRenew'
     { _ddarDomainName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DisableDomainAutoRenew' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DisableDomainAutoRenew' with the minimum fields required to make a request.
 --
--- * 'ddarDomainName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-disableDomainAutoRenew :: Text -- ^ 'ddarDomainName'
-                       -> DisableDomainAutoRenew
-disableDomainAutoRenew p1 = DisableDomainAutoRenew
-    { _ddarDomainName = p1
+-- * 'ddarDomainName'
+disableDomainAutoRenew
+    :: Text -- ^ 'ddarDomainName'
+    -> DisableDomainAutoRenew
+disableDomainAutoRenew pDomainName_ =
+    DisableDomainAutoRenew'
+    { _ddarDomainName = pDomainName_
     }
 
+-- | Undocumented member.
 ddarDomainName :: Lens' DisableDomainAutoRenew Text
-ddarDomainName = lens _ddarDomainName (\s a -> s { _ddarDomainName = a })
+ddarDomainName = lens _ddarDomainName (\ s a -> s{_ddarDomainName = a});
 
-data DisableDomainAutoRenewResponse = DisableDomainAutoRenewResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DisableDomainAutoRenew where
+        type Sv DisableDomainAutoRenew = Route53Domains
+        type Rs DisableDomainAutoRenew =
+             DisableDomainAutoRenewResponse
+        request = postJSON
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DisableDomainAutoRenewResponse' <$>
+                   (pure (fromEnum s)))
 
--- | 'DisableDomainAutoRenewResponse' constructor.
-disableDomainAutoRenewResponse :: DisableDomainAutoRenewResponse
-disableDomainAutoRenewResponse = DisableDomainAutoRenewResponse
+instance ToHeaders DisableDomainAutoRenew where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Route53Domains_v20140515.DisableDomainAutoRenew" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON DisableDomainAutoRenew where
+        toJSON DisableDomainAutoRenew'{..}
+          = object ["DomainName" .= _ddarDomainName]
+
 instance ToPath DisableDomainAutoRenew where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DisableDomainAutoRenew where
-    toQuery = const mempty
-
-instance ToHeaders DisableDomainAutoRenew
+        toQuery = const mempty
 
-instance ToJSON DisableDomainAutoRenew where
-    toJSON DisableDomainAutoRenew{..} = object
-        [ "DomainName" .= _ddarDomainName
-        ]
+-- | /See:/ 'disableDomainAutoRenewResponse' smart constructor.
+newtype DisableDomainAutoRenewResponse = DisableDomainAutoRenewResponse'
+    { _ddarrsStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest DisableDomainAutoRenew where
-    type Sv DisableDomainAutoRenew = Route53Domains
-    type Rs DisableDomainAutoRenew = DisableDomainAutoRenewResponse
+-- | Creates a value of 'DisableDomainAutoRenewResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddarrsStatus'
+disableDomainAutoRenewResponse
+    :: Int -- ^ 'ddarrsStatus'
+    -> DisableDomainAutoRenewResponse
+disableDomainAutoRenewResponse pStatus_ =
+    DisableDomainAutoRenewResponse'
+    { _ddarrsStatus = pStatus_
+    }
 
-    request  = post "DisableDomainAutoRenew"
-    response = nullResponse DisableDomainAutoRenewResponse
+-- | The response status code.
+ddarrsStatus :: Lens' DisableDomainAutoRenewResponse Int
+ddarrsStatus = lens _ddarrsStatus (\ s a -> s{_ddarrsStatus = a});
diff --git a/gen/Network/AWS/Route53Domains/DisableDomainTransferLock.hs b/gen/Network/AWS/Route53Domains/DisableDomainTransferLock.hs
--- a/gen/Network/AWS/Route53Domains/DisableDomainTransferLock.hs
+++ b/gen/Network/AWS/Route53Domains/DisableDomainTransferLock.hs
@@ -1,71 +1,72 @@
-{-# 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.Route53Domains.DisableDomainTransferLock
--- 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.
-
--- | This operation removes the transfer lock on the domain (specifically the 'clientTransferProhibited' status) to allow domain transfers. We recommend you refrain from performing
--- this action unless you intend to transfer the domain to a different
--- registrar. Successful submission returns an operation ID that you can use to
--- track the progress and completion of the action. If the request is not
--- completed successfully, the domain registrant will be notified by email.
+-- This operation removes the transfer lock on the domain (specifically the
+-- 'clientTransferProhibited' status) to allow domain transfers. We
+-- recommend you refrain from performing this action unless you intend to
+-- transfer the domain to a different registrar. Successful submission
+-- returns an operation ID that you can use to track the progress and
+-- completion of the action. If the request is not completed successfully,
+-- the domain registrant will be notified by email.
 --
--- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-DisableDomainTransferLock.html>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/api-DisableDomainTransferLock.html AWS API Reference> for DisableDomainTransferLock.
 module Network.AWS.Route53Domains.DisableDomainTransferLock
     (
-    -- * Request
-      DisableDomainTransferLock
-    -- ** Request constructor
-    , disableDomainTransferLock
-    -- ** Request lenses
+    -- * Creating a Request
+      disableDomainTransferLock
+    , DisableDomainTransferLock
+    -- * Request Lenses
     , ddtlDomainName
 
-    -- * Response
-    , DisableDomainTransferLockResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , disableDomainTransferLockResponse
-    -- ** Response lenses
-    , ddtlrOperationId
+    , DisableDomainTransferLockResponse
+    -- * Response Lenses
+    , ddtlrsStatus
+    , ddtlrsOperationId
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Route53Domains.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53Domains.Types
+import           Network.AWS.Route53Domains.Types.Product
 
-newtype DisableDomainTransferLock = DisableDomainTransferLock
+-- | The DisableDomainTransferLock request includes the following element.
+--
+-- /See:/ 'disableDomainTransferLock' smart constructor.
+newtype DisableDomainTransferLock = DisableDomainTransferLock'
     { _ddtlDomainName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DisableDomainTransferLock' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DisableDomainTransferLock' with the minimum fields required to make a request.
 --
--- * 'ddtlDomainName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-disableDomainTransferLock :: Text -- ^ 'ddtlDomainName'
-                          -> DisableDomainTransferLock
-disableDomainTransferLock p1 = DisableDomainTransferLock
-    { _ddtlDomainName = p1
+-- * 'ddtlDomainName'
+disableDomainTransferLock
+    :: Text -- ^ 'ddtlDomainName'
+    -> DisableDomainTransferLock
+disableDomainTransferLock pDomainName_ =
+    DisableDomainTransferLock'
+    { _ddtlDomainName = pDomainName_
     }
 
 -- | The name of a domain.
@@ -74,61 +75,81 @@
 --
 -- Default: None
 --
--- Constraints: The domain name can contain only the letters a through z, the
--- numbers 0 through 9, and hyphen (-). Internationalized Domain Names are not
--- supported.
+-- Constraints: The domain name can contain only the letters a through z,
+-- the numbers 0 through 9, and hyphen (-). Internationalized Domain Names
+-- are not supported.
 --
 -- Required: Yes
 ddtlDomainName :: Lens' DisableDomainTransferLock Text
-ddtlDomainName = lens _ddtlDomainName (\s a -> s { _ddtlDomainName = a })
+ddtlDomainName = lens _ddtlDomainName (\ s a -> s{_ddtlDomainName = a});
 
-newtype DisableDomainTransferLockResponse = DisableDomainTransferLockResponse
-    { _ddtlrOperationId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+instance AWSRequest DisableDomainTransferLock where
+        type Sv DisableDomainTransferLock = Route53Domains
+        type Rs DisableDomainTransferLock =
+             DisableDomainTransferLockResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DisableDomainTransferLockResponse' <$>
+                   (pure (fromEnum s)) <*> (x .:> "OperationId"))
 
--- | 'DisableDomainTransferLockResponse' constructor.
+instance ToHeaders DisableDomainTransferLock where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Route53Domains_v20140515.DisableDomainTransferLock"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DisableDomainTransferLock where
+        toJSON DisableDomainTransferLock'{..}
+          = object ["DomainName" .= _ddtlDomainName]
+
+instance ToPath DisableDomainTransferLock where
+        toPath = const "/"
+
+instance ToQuery DisableDomainTransferLock where
+        toQuery = const mempty
+
+-- | The DisableDomainTransferLock response includes the following element.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'disableDomainTransferLockResponse' smart constructor.
+data DisableDomainTransferLockResponse = DisableDomainTransferLockResponse'
+    { _ddtlrsStatus      :: !Int
+    , _ddtlrsOperationId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DisableDomainTransferLockResponse' with the minimum fields required to make a request.
 --
--- * 'ddtlrOperationId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-disableDomainTransferLockResponse :: Text -- ^ 'ddtlrOperationId'
-                                  -> DisableDomainTransferLockResponse
-disableDomainTransferLockResponse p1 = DisableDomainTransferLockResponse
-    { _ddtlrOperationId = p1
+-- * 'ddtlrsStatus'
+--
+-- * 'ddtlrsOperationId'
+disableDomainTransferLockResponse
+    :: Int -- ^ 'ddtlrsStatus'
+    -> Text -- ^ 'ddtlrsOperationId'
+    -> DisableDomainTransferLockResponse
+disableDomainTransferLockResponse pStatus_ pOperationId_ =
+    DisableDomainTransferLockResponse'
+    { _ddtlrsStatus = pStatus_
+    , _ddtlrsOperationId = pOperationId_
     }
 
--- | Identifier for tracking the progress of the request. To use this ID to query
--- the operation status, use GetOperationDetail.
+-- | The response status code.
+ddtlrsStatus :: Lens' DisableDomainTransferLockResponse Int
+ddtlrsStatus = lens _ddtlrsStatus (\ s a -> s{_ddtlrsStatus = a});
+
+-- | Identifier for tracking the progress of the request. To use this ID to
+-- query the operation status, use GetOperationDetail.
 --
 -- Type: String
 --
 -- Default: None
 --
 -- Constraints: Maximum 255 characters.
-ddtlrOperationId :: Lens' DisableDomainTransferLockResponse Text
-ddtlrOperationId = lens _ddtlrOperationId (\s a -> s { _ddtlrOperationId = a })
-
-instance ToPath DisableDomainTransferLock where
-    toPath = const "/"
-
-instance ToQuery DisableDomainTransferLock where
-    toQuery = const mempty
-
-instance ToHeaders DisableDomainTransferLock
-
-instance ToJSON DisableDomainTransferLock where
-    toJSON DisableDomainTransferLock{..} = object
-        [ "DomainName" .= _ddtlDomainName
-        ]
-
-instance AWSRequest DisableDomainTransferLock where
-    type Sv DisableDomainTransferLock = Route53Domains
-    type Rs DisableDomainTransferLock = DisableDomainTransferLockResponse
-
-    request  = post "DisableDomainTransferLock"
-    response = jsonResponse
-
-instance FromJSON DisableDomainTransferLockResponse where
-    parseJSON = withObject "DisableDomainTransferLockResponse" $ \o -> DisableDomainTransferLockResponse
-        <$> o .:  "OperationId"
+ddtlrsOperationId :: Lens' DisableDomainTransferLockResponse Text
+ddtlrsOperationId = lens _ddtlrsOperationId (\ s a -> s{_ddtlrsOperationId = a});
diff --git a/gen/Network/AWS/Route53Domains/EnableDomainAutoRenew.hs b/gen/Network/AWS/Route53Domains/EnableDomainAutoRenew.hs
--- a/gen/Network/AWS/Route53Domains/EnableDomainAutoRenew.hs
+++ b/gen/Network/AWS/Route53Domains/EnableDomainAutoRenew.hs
@@ -1,100 +1,127 @@
-{-# 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.Route53Domains.EnableDomainAutoRenew
--- 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.
-
--- | This operation configures Amazon Route 53 to automatically renew the
--- specified domain before the domain registration expires. The cost of renewing
--- your domain registration is billed to your AWS account.
+-- This operation configures Amazon Route 53 to automatically renew the
+-- specified domain before the domain registration expires. The cost of
+-- renewing your domain registration is billed to your AWS account.
 --
 -- The period during which you can renew a domain name varies by TLD. For a
--- list of TLDs and their renewal policies, see <http://wiki.gandi.net/en/domains/renew#renewal_restoration_and_deletion_times "Renewal, restoration, anddeletion times"> on the website for our registrar partner, Gandi. Route 53
--- requires that you renew before the end of the renewal period that is listed
--- on the Gandi website so we can complete processing before the deadline.
+-- list of TLDs and their renewal policies, see
+-- <http://wiki.gandi.net/en/domains/renew#renewal_restoration_and_deletion_times \"Renewal, restoration, and deletion times\">
+-- on the website for our registrar partner, Gandi. Route 53 requires that
+-- you renew before the end of the renewal period that is listed on the
+-- Gandi website so we can complete processing before the deadline.
 --
--- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-EnableDomainAutoRenew.html>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/api-EnableDomainAutoRenew.html AWS API Reference> for EnableDomainAutoRenew.
 module Network.AWS.Route53Domains.EnableDomainAutoRenew
     (
-    -- * Request
-      EnableDomainAutoRenew
-    -- ** Request constructor
-    , enableDomainAutoRenew
-    -- ** Request lenses
+    -- * Creating a Request
+      enableDomainAutoRenew
+    , EnableDomainAutoRenew
+    -- * Request Lenses
     , edarDomainName
 
-    -- * Response
-    , EnableDomainAutoRenewResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , enableDomainAutoRenewResponse
+    , EnableDomainAutoRenewResponse
+    -- * Response Lenses
+    , edarrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Route53Domains.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53Domains.Types
+import           Network.AWS.Route53Domains.Types.Product
 
-newtype EnableDomainAutoRenew = EnableDomainAutoRenew
+-- | /See:/ 'enableDomainAutoRenew' smart constructor.
+newtype EnableDomainAutoRenew = EnableDomainAutoRenew'
     { _edarDomainName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'EnableDomainAutoRenew' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'EnableDomainAutoRenew' with the minimum fields required to make a request.
 --
--- * 'edarDomainName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-enableDomainAutoRenew :: Text -- ^ 'edarDomainName'
-                      -> EnableDomainAutoRenew
-enableDomainAutoRenew p1 = EnableDomainAutoRenew
-    { _edarDomainName = p1
+-- * 'edarDomainName'
+enableDomainAutoRenew
+    :: Text -- ^ 'edarDomainName'
+    -> EnableDomainAutoRenew
+enableDomainAutoRenew pDomainName_ =
+    EnableDomainAutoRenew'
+    { _edarDomainName = pDomainName_
     }
 
+-- | Undocumented member.
 edarDomainName :: Lens' EnableDomainAutoRenew Text
-edarDomainName = lens _edarDomainName (\s a -> s { _edarDomainName = a })
+edarDomainName = lens _edarDomainName (\ s a -> s{_edarDomainName = a});
 
-data EnableDomainAutoRenewResponse = EnableDomainAutoRenewResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest EnableDomainAutoRenew where
+        type Sv EnableDomainAutoRenew = Route53Domains
+        type Rs EnableDomainAutoRenew =
+             EnableDomainAutoRenewResponse
+        request = postJSON
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 EnableDomainAutoRenewResponse' <$>
+                   (pure (fromEnum s)))
 
--- | 'EnableDomainAutoRenewResponse' constructor.
-enableDomainAutoRenewResponse :: EnableDomainAutoRenewResponse
-enableDomainAutoRenewResponse = EnableDomainAutoRenewResponse
+instance ToHeaders EnableDomainAutoRenew where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Route53Domains_v20140515.EnableDomainAutoRenew" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON EnableDomainAutoRenew where
+        toJSON EnableDomainAutoRenew'{..}
+          = object ["DomainName" .= _edarDomainName]
+
 instance ToPath EnableDomainAutoRenew where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery EnableDomainAutoRenew where
-    toQuery = const mempty
-
-instance ToHeaders EnableDomainAutoRenew
+        toQuery = const mempty
 
-instance ToJSON EnableDomainAutoRenew where
-    toJSON EnableDomainAutoRenew{..} = object
-        [ "DomainName" .= _edarDomainName
-        ]
+-- | /See:/ 'enableDomainAutoRenewResponse' smart constructor.
+newtype EnableDomainAutoRenewResponse = EnableDomainAutoRenewResponse'
+    { _edarrsStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest EnableDomainAutoRenew where
-    type Sv EnableDomainAutoRenew = Route53Domains
-    type Rs EnableDomainAutoRenew = EnableDomainAutoRenewResponse
+-- | Creates a value of 'EnableDomainAutoRenewResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edarrsStatus'
+enableDomainAutoRenewResponse
+    :: Int -- ^ 'edarrsStatus'
+    -> EnableDomainAutoRenewResponse
+enableDomainAutoRenewResponse pStatus_ =
+    EnableDomainAutoRenewResponse'
+    { _edarrsStatus = pStatus_
+    }
 
-    request  = post "EnableDomainAutoRenew"
-    response = nullResponse EnableDomainAutoRenewResponse
+-- | The response status code.
+edarrsStatus :: Lens' EnableDomainAutoRenewResponse Int
+edarrsStatus = lens _edarrsStatus (\ s a -> s{_edarrsStatus = a});
diff --git a/gen/Network/AWS/Route53Domains/EnableDomainTransferLock.hs b/gen/Network/AWS/Route53Domains/EnableDomainTransferLock.hs
--- a/gen/Network/AWS/Route53Domains/EnableDomainTransferLock.hs
+++ b/gen/Network/AWS/Route53Domains/EnableDomainTransferLock.hs
@@ -1,70 +1,70 @@
-{-# 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.Route53Domains.EnableDomainTransferLock
--- 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.
-
--- | This operation sets the transfer lock on the domain (specifically the 'clientTransferProhibited' status) to prevent domain transfers. Successful submission returns an
--- operation ID that you can use to track the progress and completion of the
--- action. If the request is not completed successfully, the domain registrant
--- will be notified by email.
+-- This operation sets the transfer lock on the domain (specifically the
+-- 'clientTransferProhibited' status) to prevent domain transfers.
+-- Successful submission returns an operation ID that you can use to track
+-- the progress and completion of the action. If the request is not
+-- completed successfully, the domain registrant will be notified by email.
 --
--- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-EnableDomainTransferLock.html>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/api-EnableDomainTransferLock.html AWS API Reference> for EnableDomainTransferLock.
 module Network.AWS.Route53Domains.EnableDomainTransferLock
     (
-    -- * Request
-      EnableDomainTransferLock
-    -- ** Request constructor
-    , enableDomainTransferLock
-    -- ** Request lenses
+    -- * Creating a Request
+      enableDomainTransferLock
+    , EnableDomainTransferLock
+    -- * Request Lenses
     , edtlDomainName
 
-    -- * Response
-    , EnableDomainTransferLockResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , enableDomainTransferLockResponse
-    -- ** Response lenses
-    , edtlrOperationId
+    , EnableDomainTransferLockResponse
+    -- * Response Lenses
+    , edtlrsStatus
+    , edtlrsOperationId
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Route53Domains.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53Domains.Types
+import           Network.AWS.Route53Domains.Types.Product
 
-newtype EnableDomainTransferLock = EnableDomainTransferLock
+-- | The EnableDomainTransferLock request includes the following element.
+--
+-- /See:/ 'enableDomainTransferLock' smart constructor.
+newtype EnableDomainTransferLock = EnableDomainTransferLock'
     { _edtlDomainName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'EnableDomainTransferLock' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'EnableDomainTransferLock' with the minimum fields required to make a request.
 --
--- * 'edtlDomainName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-enableDomainTransferLock :: Text -- ^ 'edtlDomainName'
-                         -> EnableDomainTransferLock
-enableDomainTransferLock p1 = EnableDomainTransferLock
-    { _edtlDomainName = p1
+-- * 'edtlDomainName'
+enableDomainTransferLock
+    :: Text -- ^ 'edtlDomainName'
+    -> EnableDomainTransferLock
+enableDomainTransferLock pDomainName_ =
+    EnableDomainTransferLock'
+    { _edtlDomainName = pDomainName_
     }
 
 -- | The name of a domain.
@@ -73,61 +73,81 @@
 --
 -- Default: None
 --
--- Constraints: The domain name can contain only the letters a through z, the
--- numbers 0 through 9, and hyphen (-). Internationalized Domain Names are not
--- supported.
+-- Constraints: The domain name can contain only the letters a through z,
+-- the numbers 0 through 9, and hyphen (-). Internationalized Domain Names
+-- are not supported.
 --
 -- Required: Yes
 edtlDomainName :: Lens' EnableDomainTransferLock Text
-edtlDomainName = lens _edtlDomainName (\s a -> s { _edtlDomainName = a })
+edtlDomainName = lens _edtlDomainName (\ s a -> s{_edtlDomainName = a});
 
-newtype EnableDomainTransferLockResponse = EnableDomainTransferLockResponse
-    { _edtlrOperationId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+instance AWSRequest EnableDomainTransferLock where
+        type Sv EnableDomainTransferLock = Route53Domains
+        type Rs EnableDomainTransferLock =
+             EnableDomainTransferLockResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 EnableDomainTransferLockResponse' <$>
+                   (pure (fromEnum s)) <*> (x .:> "OperationId"))
 
--- | 'EnableDomainTransferLockResponse' constructor.
+instance ToHeaders EnableDomainTransferLock where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Route53Domains_v20140515.EnableDomainTransferLock"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON EnableDomainTransferLock where
+        toJSON EnableDomainTransferLock'{..}
+          = object ["DomainName" .= _edtlDomainName]
+
+instance ToPath EnableDomainTransferLock where
+        toPath = const "/"
+
+instance ToQuery EnableDomainTransferLock where
+        toQuery = const mempty
+
+-- | The EnableDomainTransferLock response includes the following elements.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'enableDomainTransferLockResponse' smart constructor.
+data EnableDomainTransferLockResponse = EnableDomainTransferLockResponse'
+    { _edtlrsStatus      :: !Int
+    , _edtlrsOperationId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnableDomainTransferLockResponse' with the minimum fields required to make a request.
 --
--- * 'edtlrOperationId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-enableDomainTransferLockResponse :: Text -- ^ 'edtlrOperationId'
-                                 -> EnableDomainTransferLockResponse
-enableDomainTransferLockResponse p1 = EnableDomainTransferLockResponse
-    { _edtlrOperationId = p1
+-- * 'edtlrsStatus'
+--
+-- * 'edtlrsOperationId'
+enableDomainTransferLockResponse
+    :: Int -- ^ 'edtlrsStatus'
+    -> Text -- ^ 'edtlrsOperationId'
+    -> EnableDomainTransferLockResponse
+enableDomainTransferLockResponse pStatus_ pOperationId_ =
+    EnableDomainTransferLockResponse'
+    { _edtlrsStatus = pStatus_
+    , _edtlrsOperationId = pOperationId_
     }
 
--- | Identifier for tracking the progress of the request. To use this ID to query
--- the operation status, use GetOperationDetail.
+-- | The response status code.
+edtlrsStatus :: Lens' EnableDomainTransferLockResponse Int
+edtlrsStatus = lens _edtlrsStatus (\ s a -> s{_edtlrsStatus = a});
+
+-- | Identifier for tracking the progress of the request. To use this ID to
+-- query the operation status, use GetOperationDetail.
 --
 -- Type: String
 --
 -- Default: None
 --
 -- Constraints: Maximum 255 characters.
-edtlrOperationId :: Lens' EnableDomainTransferLockResponse Text
-edtlrOperationId = lens _edtlrOperationId (\s a -> s { _edtlrOperationId = a })
-
-instance ToPath EnableDomainTransferLock where
-    toPath = const "/"
-
-instance ToQuery EnableDomainTransferLock where
-    toQuery = const mempty
-
-instance ToHeaders EnableDomainTransferLock
-
-instance ToJSON EnableDomainTransferLock where
-    toJSON EnableDomainTransferLock{..} = object
-        [ "DomainName" .= _edtlDomainName
-        ]
-
-instance AWSRequest EnableDomainTransferLock where
-    type Sv EnableDomainTransferLock = Route53Domains
-    type Rs EnableDomainTransferLock = EnableDomainTransferLockResponse
-
-    request  = post "EnableDomainTransferLock"
-    response = jsonResponse
-
-instance FromJSON EnableDomainTransferLockResponse where
-    parseJSON = withObject "EnableDomainTransferLockResponse" $ \o -> EnableDomainTransferLockResponse
-        <$> o .:  "OperationId"
+edtlrsOperationId :: Lens' EnableDomainTransferLockResponse Text
+edtlrsOperationId = lens _edtlrsOperationId (\ s a -> s{_edtlrsOperationId = a});
diff --git a/gen/Network/AWS/Route53Domains/GetDomainDetail.hs b/gen/Network/AWS/Route53Domains/GetDomainDetail.hs
--- a/gen/Network/AWS/Route53Domains/GetDomainDetail.hs
+++ b/gen/Network/AWS/Route53Domains/GetDomainDetail.hs
@@ -1,88 +1,87 @@
-{-# 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.Route53Domains.GetDomainDetail
--- 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.
-
--- | This operation returns detailed information about the domain. The domain's
--- contact information is also returned as part of the output.
+-- This operation returns detailed information about the domain. The
+-- domain\'s contact information is also returned as part of the output.
 --
--- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-GetDomainDetail.html>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/api-GetDomainDetail.html AWS API Reference> for GetDomainDetail.
 module Network.AWS.Route53Domains.GetDomainDetail
     (
-    -- * Request
-      GetDomainDetail
-    -- ** Request constructor
-    , getDomainDetail
-    -- ** Request lenses
+    -- * Creating a Request
+      getDomainDetail
+    , GetDomainDetail
+    -- * Request Lenses
     , gddDomainName
 
-    -- * Response
-    , GetDomainDetailResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getDomainDetailResponse
-    -- ** Response lenses
-    , gddrAbuseContactEmail
-    , gddrAbuseContactPhone
-    , gddrAdminContact
-    , gddrAdminPrivacy
-    , gddrAutoRenew
-    , gddrCreationDate
-    , gddrDnsSec
-    , gddrDomainName
-    , gddrExpirationDate
-    , gddrNameservers
-    , gddrRegistrantContact
-    , gddrRegistrantPrivacy
-    , gddrRegistrarName
-    , gddrRegistrarUrl
-    , gddrRegistryDomainId
-    , gddrReseller
-    , gddrStatusList
-    , gddrTechContact
-    , gddrTechPrivacy
-    , gddrUpdatedDate
-    , gddrWhoIsServer
+    , GetDomainDetailResponse
+    -- * Response Lenses
+    , gddrsTechPrivacy
+    , gddrsDNSSec
+    , gddrsWhoIsServer
+    , gddrsRegistryDomainId
+    , gddrsRegistrantPrivacy
+    , gddrsUpdatedDate
+    , gddrsAdminPrivacy
+    , gddrsAbuseContactEmail
+    , gddrsRegistrarURL
+    , gddrsAutoRenew
+    , gddrsAbuseContactPhone
+    , gddrsExpirationDate
+    , gddrsCreationDate
+    , gddrsRegistrarName
+    , gddrsStatusList
+    , gddrsReseller
+    , gddrsStatus
+    , gddrsDomainName
+    , gddrsNameservers
+    , gddrsAdminContact
+    , gddrsRegistrantContact
+    , gddrsTechContact
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Route53Domains.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53Domains.Types
+import           Network.AWS.Route53Domains.Types.Product
 
-newtype GetDomainDetail = GetDomainDetail
+-- | The GetDomainDetail request includes the following element.
+--
+-- /See:/ 'getDomainDetail' smart constructor.
+newtype GetDomainDetail = GetDomainDetail'
     { _gddDomainName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetDomainDetail' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetDomainDetail' with the minimum fields required to make a request.
 --
--- * 'gddDomainName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getDomainDetail :: Text -- ^ 'gddDomainName'
-                -> GetDomainDetail
-getDomainDetail p1 = GetDomainDetail
-    { _gddDomainName = p1
+-- * 'gddDomainName'
+getDomainDetail
+    :: Text -- ^ 'gddDomainName'
+    -> GetDomainDetail
+getDomainDetail pDomainName_ =
+    GetDomainDetail'
+    { _gddDomainName = pDomainName_
     }
 
 -- | The name of a domain.
@@ -91,314 +90,332 @@
 --
 -- Default: None
 --
--- Constraints: The domain name can contain only the letters a through z, the
--- numbers 0 through 9, and hyphen (-). Internationalized Domain Names are not
--- supported.
+-- Constraints: The domain name can contain only the letters a through z,
+-- the numbers 0 through 9, and hyphen (-). Internationalized Domain Names
+-- are not supported.
 --
 -- Required: Yes
 gddDomainName :: Lens' GetDomainDetail Text
-gddDomainName = lens _gddDomainName (\s a -> s { _gddDomainName = a })
+gddDomainName = lens _gddDomainName (\ s a -> s{_gddDomainName = a});
 
-data GetDomainDetailResponse = GetDomainDetailResponse
-    { _gddrAbuseContactEmail :: Maybe Text
-    , _gddrAbuseContactPhone :: Maybe Text
-    , _gddrAdminContact      :: ContactDetail
-    , _gddrAdminPrivacy      :: Maybe Bool
-    , _gddrAutoRenew         :: Maybe Bool
-    , _gddrCreationDate      :: Maybe POSIX
-    , _gddrDnsSec            :: Maybe Text
-    , _gddrDomainName        :: Text
-    , _gddrExpirationDate    :: Maybe POSIX
-    , _gddrNameservers       :: List "Nameservers" Nameserver
-    , _gddrRegistrantContact :: ContactDetail
-    , _gddrRegistrantPrivacy :: Maybe Bool
-    , _gddrRegistrarName     :: Maybe Text
-    , _gddrRegistrarUrl      :: Maybe Text
-    , _gddrRegistryDomainId  :: Maybe Text
-    , _gddrReseller          :: Maybe Text
-    , _gddrStatusList        :: List "StatusList" Text
-    , _gddrTechContact       :: ContactDetail
-    , _gddrTechPrivacy       :: Maybe Bool
-    , _gddrUpdatedDate       :: Maybe POSIX
-    , _gddrWhoIsServer       :: Maybe Text
-    } deriving (Eq, Read, Show)
+instance AWSRequest GetDomainDetail where
+        type Sv GetDomainDetail = Route53Domains
+        type Rs GetDomainDetail = GetDomainDetailResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetDomainDetailResponse' <$>
+                   (x .?> "TechPrivacy") <*> (x .?> "DnsSec") <*>
+                     (x .?> "WhoIsServer")
+                     <*> (x .?> "RegistryDomainId")
+                     <*> (x .?> "RegistrantPrivacy")
+                     <*> (x .?> "UpdatedDate")
+                     <*> (x .?> "AdminPrivacy")
+                     <*> (x .?> "AbuseContactEmail")
+                     <*> (x .?> "RegistrarUrl")
+                     <*> (x .?> "AutoRenew")
+                     <*> (x .?> "AbuseContactPhone")
+                     <*> (x .?> "ExpirationDate")
+                     <*> (x .?> "CreationDate")
+                     <*> (x .?> "RegistrarName")
+                     <*> (x .?> "StatusList" .!@ mempty)
+                     <*> (x .?> "Reseller")
+                     <*> (pure (fromEnum s))
+                     <*> (x .:> "DomainName")
+                     <*> (x .?> "Nameservers" .!@ mempty)
+                     <*> (x .:> "AdminContact")
+                     <*> (x .:> "RegistrantContact")
+                     <*> (x .:> "TechContact"))
 
--- | 'GetDomainDetailResponse' constructor.
+instance ToHeaders GetDomainDetail where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Route53Domains_v20140515.GetDomainDetail" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetDomainDetail where
+        toJSON GetDomainDetail'{..}
+          = object ["DomainName" .= _gddDomainName]
+
+instance ToPath GetDomainDetail where
+        toPath = const "/"
+
+instance ToQuery GetDomainDetail where
+        toQuery = const mempty
+
+-- | The GetDomainDetail response includes the following elements.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'getDomainDetailResponse' smart constructor.
+data GetDomainDetailResponse = GetDomainDetailResponse'
+    { _gddrsTechPrivacy       :: !(Maybe Bool)
+    , _gddrsDNSSec            :: !(Maybe Text)
+    , _gddrsWhoIsServer       :: !(Maybe Text)
+    , _gddrsRegistryDomainId  :: !(Maybe Text)
+    , _gddrsRegistrantPrivacy :: !(Maybe Bool)
+    , _gddrsUpdatedDate       :: !(Maybe POSIX)
+    , _gddrsAdminPrivacy      :: !(Maybe Bool)
+    , _gddrsAbuseContactEmail :: !(Maybe Text)
+    , _gddrsRegistrarURL      :: !(Maybe Text)
+    , _gddrsAutoRenew         :: !(Maybe Bool)
+    , _gddrsAbuseContactPhone :: !(Maybe Text)
+    , _gddrsExpirationDate    :: !(Maybe POSIX)
+    , _gddrsCreationDate      :: !(Maybe POSIX)
+    , _gddrsRegistrarName     :: !(Maybe Text)
+    , _gddrsStatusList        :: !(Maybe [Text])
+    , _gddrsReseller          :: !(Maybe Text)
+    , _gddrsStatus            :: !Int
+    , _gddrsDomainName        :: !Text
+    , _gddrsNameservers       :: ![Nameserver]
+    , _gddrsAdminContact      :: !(Sensitive ContactDetail)
+    , _gddrsRegistrantContact :: !(Sensitive ContactDetail)
+    , _gddrsTechContact       :: !(Sensitive ContactDetail)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetDomainDetailResponse' with the minimum fields required to make a request.
 --
--- * 'gddrAbuseContactEmail' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gddrAbuseContactPhone' @::@ 'Maybe' 'Text'
+-- * 'gddrsTechPrivacy'
 --
--- * 'gddrAdminContact' @::@ 'ContactDetail'
+-- * 'gddrsDNSSec'
 --
--- * 'gddrAdminPrivacy' @::@ 'Maybe' 'Bool'
+-- * 'gddrsWhoIsServer'
 --
--- * 'gddrAutoRenew' @::@ 'Maybe' 'Bool'
+-- * 'gddrsRegistryDomainId'
 --
--- * 'gddrCreationDate' @::@ 'Maybe' 'UTCTime'
+-- * 'gddrsRegistrantPrivacy'
 --
--- * 'gddrDnsSec' @::@ 'Maybe' 'Text'
+-- * 'gddrsUpdatedDate'
 --
--- * 'gddrDomainName' @::@ 'Text'
+-- * 'gddrsAdminPrivacy'
 --
--- * 'gddrExpirationDate' @::@ 'Maybe' 'UTCTime'
+-- * 'gddrsAbuseContactEmail'
 --
--- * 'gddrNameservers' @::@ ['Nameserver']
+-- * 'gddrsRegistrarURL'
 --
--- * 'gddrRegistrantContact' @::@ 'ContactDetail'
+-- * 'gddrsAutoRenew'
 --
--- * 'gddrRegistrantPrivacy' @::@ 'Maybe' 'Bool'
+-- * 'gddrsAbuseContactPhone'
 --
--- * 'gddrRegistrarName' @::@ 'Maybe' 'Text'
+-- * 'gddrsExpirationDate'
 --
--- * 'gddrRegistrarUrl' @::@ 'Maybe' 'Text'
+-- * 'gddrsCreationDate'
 --
--- * 'gddrRegistryDomainId' @::@ 'Maybe' 'Text'
+-- * 'gddrsRegistrarName'
 --
--- * 'gddrReseller' @::@ 'Maybe' 'Text'
+-- * 'gddrsStatusList'
 --
--- * 'gddrStatusList' @::@ ['Text']
+-- * 'gddrsReseller'
 --
--- * 'gddrTechContact' @::@ 'ContactDetail'
+-- * 'gddrsStatus'
 --
--- * 'gddrTechPrivacy' @::@ 'Maybe' 'Bool'
+-- * 'gddrsDomainName'
 --
--- * 'gddrUpdatedDate' @::@ 'Maybe' 'UTCTime'
+-- * 'gddrsNameservers'
 --
--- * 'gddrWhoIsServer' @::@ 'Maybe' 'Text'
+-- * 'gddrsAdminContact'
 --
-getDomainDetailResponse :: Text -- ^ 'gddrDomainName'
-                        -> ContactDetail -- ^ 'gddrAdminContact'
-                        -> ContactDetail -- ^ 'gddrRegistrantContact'
-                        -> ContactDetail -- ^ 'gddrTechContact'
-                        -> GetDomainDetailResponse
-getDomainDetailResponse p1 p2 p3 p4 = GetDomainDetailResponse
-    { _gddrDomainName        = p1
-    , _gddrAdminContact      = p2
-    , _gddrRegistrantContact = p3
-    , _gddrTechContact       = p4
-    , _gddrNameservers       = mempty
-    , _gddrAutoRenew         = Nothing
-    , _gddrAdminPrivacy      = Nothing
-    , _gddrRegistrantPrivacy = Nothing
-    , _gddrTechPrivacy       = Nothing
-    , _gddrRegistrarName     = Nothing
-    , _gddrWhoIsServer       = Nothing
-    , _gddrRegistrarUrl      = Nothing
-    , _gddrAbuseContactEmail = Nothing
-    , _gddrAbuseContactPhone = Nothing
-    , _gddrRegistryDomainId  = Nothing
-    , _gddrCreationDate      = Nothing
-    , _gddrUpdatedDate       = Nothing
-    , _gddrExpirationDate    = Nothing
-    , _gddrReseller          = Nothing
-    , _gddrDnsSec            = Nothing
-    , _gddrStatusList        = mempty
+-- * 'gddrsRegistrantContact'
+--
+-- * 'gddrsTechContact'
+getDomainDetailResponse
+    :: Int -- ^ 'gddrsStatus'
+    -> Text -- ^ 'gddrsDomainName'
+    -> ContactDetail -- ^ 'gddrsAdminContact'
+    -> ContactDetail -- ^ 'gddrsRegistrantContact'
+    -> ContactDetail -- ^ 'gddrsTechContact'
+    -> GetDomainDetailResponse
+getDomainDetailResponse pStatus_ pDomainName_ pAdminContact_ pRegistrantContact_ pTechContact_ =
+    GetDomainDetailResponse'
+    { _gddrsTechPrivacy = Nothing
+    , _gddrsDNSSec = Nothing
+    , _gddrsWhoIsServer = Nothing
+    , _gddrsRegistryDomainId = Nothing
+    , _gddrsRegistrantPrivacy = Nothing
+    , _gddrsUpdatedDate = Nothing
+    , _gddrsAdminPrivacy = Nothing
+    , _gddrsAbuseContactEmail = Nothing
+    , _gddrsRegistrarURL = Nothing
+    , _gddrsAutoRenew = Nothing
+    , _gddrsAbuseContactPhone = Nothing
+    , _gddrsExpirationDate = Nothing
+    , _gddrsCreationDate = Nothing
+    , _gddrsRegistrarName = Nothing
+    , _gddrsStatusList = Nothing
+    , _gddrsReseller = Nothing
+    , _gddrsStatus = pStatus_
+    , _gddrsDomainName = pDomainName_
+    , _gddrsNameservers = mempty
+    , _gddrsAdminContact = _Sensitive # pAdminContact_
+    , _gddrsRegistrantContact = _Sensitive # pRegistrantContact_
+    , _gddrsTechContact = _Sensitive # pTechContact_
     }
 
--- | Email address to contact to report incorrect contact information for a
--- domain, to report that the domain is being used to send spam, to report that
--- someone is cybersquatting on a domain name, or report some other type of
--- abuse.
+-- | Specifies whether contact information for the tech contact is concealed
+-- from WHOIS queries. If the value is 'true', WHOIS (\"who is\") queries
+-- will return contact information for our registrar partner, Gandi,
+-- instead of the contact information that you enter.
 --
--- Type: String
-gddrAbuseContactEmail :: Lens' GetDomainDetailResponse (Maybe Text)
-gddrAbuseContactEmail =
-    lens _gddrAbuseContactEmail (\s a -> s { _gddrAbuseContactEmail = a })
+-- Type: Boolean
+gddrsTechPrivacy :: Lens' GetDomainDetailResponse (Maybe Bool)
+gddrsTechPrivacy = lens _gddrsTechPrivacy (\ s a -> s{_gddrsTechPrivacy = a});
 
--- | Phone number for reporting abuse.
+-- | Reserved for future use.
+gddrsDNSSec :: Lens' GetDomainDetailResponse (Maybe Text)
+gddrsDNSSec = lens _gddrsDNSSec (\ s a -> s{_gddrsDNSSec = a});
+
+-- | The fully qualified name of the WHOIS server that can answer the WHOIS
+-- query for the domain.
 --
 -- Type: String
-gddrAbuseContactPhone :: Lens' GetDomainDetailResponse (Maybe Text)
-gddrAbuseContactPhone =
-    lens _gddrAbuseContactPhone (\s a -> s { _gddrAbuseContactPhone = a })
+gddrsWhoIsServer :: Lens' GetDomainDetailResponse (Maybe Text)
+gddrsWhoIsServer = lens _gddrsWhoIsServer (\ s a -> s{_gddrsWhoIsServer = a});
 
--- | Provides details about the domain administrative contact.
---
--- Type: Complex
---
--- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType', 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State', 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
-gddrAdminContact :: Lens' GetDomainDetailResponse ContactDetail
-gddrAdminContact = lens _gddrAdminContact (\s a -> s { _gddrAdminContact = a })
+-- | Reserved for future use.
+gddrsRegistryDomainId :: Lens' GetDomainDetailResponse (Maybe Text)
+gddrsRegistryDomainId = lens _gddrsRegistryDomainId (\ s a -> s{_gddrsRegistryDomainId = a});
 
--- | Specifies whether contact information for the admin contact is concealed from
--- WHOIS queries. If the value is 'true', WHOIS ("who is") queries will return
--- contact information for our registrar partner, Gandi, instead of the contact
--- information that you enter.
+-- | Specifies whether contact information for the registrant contact is
+-- concealed from WHOIS queries. If the value is 'true', WHOIS (\"who is\")
+-- queries will return contact information for our registrar partner,
+-- Gandi, instead of the contact information that you enter.
 --
 -- Type: Boolean
-gddrAdminPrivacy :: Lens' GetDomainDetailResponse (Maybe Bool)
-gddrAdminPrivacy = lens _gddrAdminPrivacy (\s a -> s { _gddrAdminPrivacy = a })
+gddrsRegistrantPrivacy :: Lens' GetDomainDetailResponse (Maybe Bool)
+gddrsRegistrantPrivacy = lens _gddrsRegistrantPrivacy (\ s a -> s{_gddrsRegistrantPrivacy = a});
 
--- | Specifies whether the domain registration is set to renew automatically.
+-- | The last updated date of the domain as found in the response to a WHOIS
+-- query. The date format is Unix time.
+gddrsUpdatedDate :: Lens' GetDomainDetailResponse (Maybe UTCTime)
+gddrsUpdatedDate = lens _gddrsUpdatedDate (\ s a -> s{_gddrsUpdatedDate = a}) . mapping _Time;
+
+-- | Specifies whether contact information for the admin contact is concealed
+-- from WHOIS queries. If the value is 'true', WHOIS (\"who is\") queries
+-- will return contact information for our registrar partner, Gandi,
+-- instead of the contact information that you enter.
 --
 -- Type: Boolean
-gddrAutoRenew :: Lens' GetDomainDetailResponse (Maybe Bool)
-gddrAutoRenew = lens _gddrAutoRenew (\s a -> s { _gddrAutoRenew = a })
+gddrsAdminPrivacy :: Lens' GetDomainDetailResponse (Maybe Bool)
+gddrsAdminPrivacy = lens _gddrsAdminPrivacy (\ s a -> s{_gddrsAdminPrivacy = a});
 
--- | The date when the domain was created as found in the response to a WHOIS
--- query. The date format is Unix time.
-gddrCreationDate :: Lens' GetDomainDetailResponse (Maybe UTCTime)
-gddrCreationDate = lens _gddrCreationDate (\s a -> s { _gddrCreationDate = a }) . mapping _Time
+-- | Email address to contact to report incorrect contact information for a
+-- domain, to report that the domain is being used to send spam, to report
+-- that someone is cybersquatting on a domain name, or report some other
+-- type of abuse.
+--
+-- Type: String
+gddrsAbuseContactEmail :: Lens' GetDomainDetailResponse (Maybe Text)
+gddrsAbuseContactEmail = lens _gddrsAbuseContactEmail (\ s a -> s{_gddrsAbuseContactEmail = a});
 
--- | Reserved for future use.
-gddrDnsSec :: Lens' GetDomainDetailResponse (Maybe Text)
-gddrDnsSec = lens _gddrDnsSec (\s a -> s { _gddrDnsSec = a })
+-- | Web address of the registrar.
+--
+-- Type: String
+gddrsRegistrarURL :: Lens' GetDomainDetailResponse (Maybe Text)
+gddrsRegistrarURL = lens _gddrsRegistrarURL (\ s a -> s{_gddrsRegistrarURL = a});
 
--- | The name of a domain.
+-- | Specifies whether the domain registration is set to renew automatically.
 --
+-- Type: Boolean
+gddrsAutoRenew :: Lens' GetDomainDetailResponse (Maybe Bool)
+gddrsAutoRenew = lens _gddrsAutoRenew (\ s a -> s{_gddrsAutoRenew = a});
+
+-- | Phone number for reporting abuse.
+--
 -- Type: String
-gddrDomainName :: Lens' GetDomainDetailResponse Text
-gddrDomainName = lens _gddrDomainName (\s a -> s { _gddrDomainName = a })
+gddrsAbuseContactPhone :: Lens' GetDomainDetailResponse (Maybe Text)
+gddrsAbuseContactPhone = lens _gddrsAbuseContactPhone (\ s a -> s{_gddrsAbuseContactPhone = a});
 
 -- | The date when the registration for the domain is set to expire. The date
 -- format is Unix time.
-gddrExpirationDate :: Lens' GetDomainDetailResponse (Maybe UTCTime)
-gddrExpirationDate =
-    lens _gddrExpirationDate (\s a -> s { _gddrExpirationDate = a })
-        . mapping _Time
+gddrsExpirationDate :: Lens' GetDomainDetailResponse (Maybe UTCTime)
+gddrsExpirationDate = lens _gddrsExpirationDate (\ s a -> s{_gddrsExpirationDate = a}) . mapping _Time;
 
--- | The name of the domain.
+-- | The date when the domain was created as found in the response to a WHOIS
+-- query. The date format is Unix time.
+gddrsCreationDate :: Lens' GetDomainDetailResponse (Maybe UTCTime)
+gddrsCreationDate = lens _gddrsCreationDate (\ s a -> s{_gddrsCreationDate = a}) . mapping _Time;
+
+-- | Name of the registrar of the domain as identified in the registry.
+-- Amazon Route 53 domains are registered by registrar Gandi. The value is
+-- '\"GANDI SAS\"'.
 --
 -- Type: String
-gddrNameservers :: Lens' GetDomainDetailResponse [Nameserver]
-gddrNameservers = lens _gddrNameservers (\s a -> s { _gddrNameservers = a }) . _List
+gddrsRegistrarName :: Lens' GetDomainDetailResponse (Maybe Text)
+gddrsRegistrarName = lens _gddrsRegistrarName (\ s a -> s{_gddrsRegistrarName = a});
 
--- | Provides details about the domain registrant.
+-- | An array of domain name status codes, also known as Extensible
+-- Provisioning Protocol (EPP) status codes.
 --
--- Type: Complex
+-- ICANN, the organization that maintains a central database of domain
+-- names, has developed a set of domain name status codes that tell you the
+-- status of a variety of operations on a domain name, for example,
+-- registering a domain name, transferring a domain name to another
+-- registrar, renewing the registration for a domain name, and so on. All
+-- registrars use this same set of status codes.
 --
--- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType', 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State', 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
-gddrRegistrantContact :: Lens' GetDomainDetailResponse ContactDetail
-gddrRegistrantContact =
-    lens _gddrRegistrantContact (\s a -> s { _gddrRegistrantContact = a })
-
--- | Specifies whether contact information for the registrant contact is concealed
--- from WHOIS queries. If the value is 'true', WHOIS ("who is") queries will
--- return contact information for our registrar partner, Gandi, instead of the
--- contact information that you enter.
+-- For a current list of domain name status codes and an explanation of
+-- what each code means, go to the <https://www.icann.org/ ICANN website>
+-- and search for 'epp status codes'. (Search on the ICANN website; web
+-- searches sometimes return an old version of the document.)
 --
--- Type: Boolean
-gddrRegistrantPrivacy :: Lens' GetDomainDetailResponse (Maybe Bool)
-gddrRegistrantPrivacy =
-    lens _gddrRegistrantPrivacy (\s a -> s { _gddrRegistrantPrivacy = a })
+-- Type: Array of String
+gddrsStatusList :: Lens' GetDomainDetailResponse [Text]
+gddrsStatusList = lens _gddrsStatusList (\ s a -> s{_gddrsStatusList = a}) . _Default . _Coerce;
 
--- | Name of the registrar of the domain as identified in the registry. Amazon
--- Route 53 domains are registered by registrar Gandi. The value is '"GANDI SAS"'.
+-- | Reseller of the domain. Domains registered or transferred using Amazon
+-- Route 53 domains will have '\"Amazon\"' as the reseller.
 --
 -- Type: String
-gddrRegistrarName :: Lens' GetDomainDetailResponse (Maybe Text)
-gddrRegistrarName =
-    lens _gddrRegistrarName (\s a -> s { _gddrRegistrarName = a })
+gddrsReseller :: Lens' GetDomainDetailResponse (Maybe Text)
+gddrsReseller = lens _gddrsReseller (\ s a -> s{_gddrsReseller = a});
 
--- | Web address of the registrar.
+-- | The response status code.
+gddrsStatus :: Lens' GetDomainDetailResponse Int
+gddrsStatus = lens _gddrsStatus (\ s a -> s{_gddrsStatus = a});
+
+-- | The name of a domain.
 --
 -- Type: String
-gddrRegistrarUrl :: Lens' GetDomainDetailResponse (Maybe Text)
-gddrRegistrarUrl = lens _gddrRegistrarUrl (\s a -> s { _gddrRegistrarUrl = a })
-
--- | Reserved for future use.
-gddrRegistryDomainId :: Lens' GetDomainDetailResponse (Maybe Text)
-gddrRegistryDomainId =
-    lens _gddrRegistryDomainId (\s a -> s { _gddrRegistryDomainId = a })
+gddrsDomainName :: Lens' GetDomainDetailResponse Text
+gddrsDomainName = lens _gddrsDomainName (\ s a -> s{_gddrsDomainName = a});
 
--- | Reseller of the domain. Domains registered or transferred using Amazon Route
--- 53 domains will have '"Amazon"' as the reseller.
+-- | The name of the domain.
 --
 -- Type: String
-gddrReseller :: Lens' GetDomainDetailResponse (Maybe Text)
-gddrReseller = lens _gddrReseller (\s a -> s { _gddrReseller = a })
+gddrsNameservers :: Lens' GetDomainDetailResponse [Nameserver]
+gddrsNameservers = lens _gddrsNameservers (\ s a -> s{_gddrsNameservers = a}) . _Coerce;
 
--- | An array of domain name status codes, also known as Extensible Provisioning
--- Protocol (EPP) status codes.
---
--- ICANN, the organization that maintains a central database of domain names,
--- has developed a set of domain name status codes that tell you the status of a
--- variety of operations on a domain name, for example, registering a domain
--- name, transferring a domain name to another registrar, renewing the
--- registration for a domain name, and so on. All registrars use this same set
--- of status codes.
+-- | Provides details about the domain administrative contact.
 --
--- For a current list of domain name status codes and an explanation of what
--- each code means, go to the <https://www.icann.org/ ICANN website> and search for 'epp status codes'.
--- (Search on the ICANN website; web searches sometimes return an old version of
--- the document.)
+-- Type: Complex
 --
--- Type: Array of String
-gddrStatusList :: Lens' GetDomainDetailResponse [Text]
-gddrStatusList = lens _gddrStatusList (\s a -> s { _gddrStatusList = a }) . _List
+-- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType',
+-- 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State',
+-- 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
+gddrsAdminContact :: Lens' GetDomainDetailResponse ContactDetail
+gddrsAdminContact = lens _gddrsAdminContact (\ s a -> s{_gddrsAdminContact = a}) . _Sensitive;
 
--- | Provides details about the domain technical contact.
+-- | Provides details about the domain registrant.
 --
 -- Type: Complex
 --
--- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType', 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State', 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
-gddrTechContact :: Lens' GetDomainDetailResponse ContactDetail
-gddrTechContact = lens _gddrTechContact (\s a -> s { _gddrTechContact = a })
+-- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType',
+-- 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State',
+-- 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
+gddrsRegistrantContact :: Lens' GetDomainDetailResponse ContactDetail
+gddrsRegistrantContact = lens _gddrsRegistrantContact (\ s a -> s{_gddrsRegistrantContact = a}) . _Sensitive;
 
--- | Specifies whether contact information for the tech contact is concealed from
--- WHOIS queries. If the value is 'true', WHOIS ("who is") queries will return
--- contact information for our registrar partner, Gandi, instead of the contact
--- information that you enter.
+-- | Provides details about the domain technical contact.
 --
--- Type: Boolean
-gddrTechPrivacy :: Lens' GetDomainDetailResponse (Maybe Bool)
-gddrTechPrivacy = lens _gddrTechPrivacy (\s a -> s { _gddrTechPrivacy = a })
-
--- | The last updated date of the domain as found in the response to a WHOIS
--- query. The date format is Unix time.
-gddrUpdatedDate :: Lens' GetDomainDetailResponse (Maybe UTCTime)
-gddrUpdatedDate = lens _gddrUpdatedDate (\s a -> s { _gddrUpdatedDate = a }) . mapping _Time
-
--- | The fully qualified name of the WHOIS server that can answer the WHOIS query
--- for the domain.
+-- Type: Complex
 --
--- Type: String
-gddrWhoIsServer :: Lens' GetDomainDetailResponse (Maybe Text)
-gddrWhoIsServer = lens _gddrWhoIsServer (\s a -> s { _gddrWhoIsServer = a })
-
-instance ToPath GetDomainDetail where
-    toPath = const "/"
-
-instance ToQuery GetDomainDetail where
-    toQuery = const mempty
-
-instance ToHeaders GetDomainDetail
-
-instance ToJSON GetDomainDetail where
-    toJSON GetDomainDetail{..} = object
-        [ "DomainName" .= _gddDomainName
-        ]
-
-instance AWSRequest GetDomainDetail where
-    type Sv GetDomainDetail = Route53Domains
-    type Rs GetDomainDetail = GetDomainDetailResponse
-
-    request  = post "GetDomainDetail"
-    response = jsonResponse
-
-instance FromJSON GetDomainDetailResponse where
-    parseJSON = withObject "GetDomainDetailResponse" $ \o -> GetDomainDetailResponse
-        <$> o .:? "AbuseContactEmail"
-        <*> o .:? "AbuseContactPhone"
-        <*> o .:  "AdminContact"
-        <*> o .:? "AdminPrivacy"
-        <*> o .:? "AutoRenew"
-        <*> o .:? "CreationDate"
-        <*> o .:? "DnsSec"
-        <*> o .:  "DomainName"
-        <*> o .:? "ExpirationDate"
-        <*> o .:? "Nameservers" .!= mempty
-        <*> o .:  "RegistrantContact"
-        <*> o .:? "RegistrantPrivacy"
-        <*> o .:? "RegistrarName"
-        <*> o .:? "RegistrarUrl"
-        <*> o .:? "RegistryDomainId"
-        <*> o .:? "Reseller"
-        <*> o .:? "StatusList" .!= mempty
-        <*> o .:  "TechContact"
-        <*> o .:? "TechPrivacy"
-        <*> o .:? "UpdatedDate"
-        <*> o .:? "WhoIsServer"
+-- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType',
+-- 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State',
+-- 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
+gddrsTechContact :: Lens' GetDomainDetailResponse ContactDetail
+gddrsTechContact = lens _gddrsTechContact (\ s a -> s{_gddrsTechContact = a}) . _Sensitive;
diff --git a/gen/Network/AWS/Route53Domains/GetOperationDetail.hs b/gen/Network/AWS/Route53Domains/GetOperationDetail.hs
--- a/gen/Network/AWS/Route53Domains/GetOperationDetail.hs
+++ b/gen/Network/AWS/Route53Domains/GetOperationDetail.hs
@@ -1,77 +1,76 @@
-{-# 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.Route53Domains.GetOperationDetail
--- 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.
-
--- | This operation returns the current status of an operation that is not
+-- This operation returns the current status of an operation that is not
 -- completed.
 --
--- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-GetOperationDetail.html>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/api-GetOperationDetail.html AWS API Reference> for GetOperationDetail.
 module Network.AWS.Route53Domains.GetOperationDetail
     (
-    -- * Request
-      GetOperationDetail
-    -- ** Request constructor
-    , getOperationDetail
-    -- ** Request lenses
+    -- * Creating a Request
+      getOperationDetail
+    , GetOperationDetail
+    -- * Request Lenses
     , godOperationId
 
-    -- * Response
-    , GetOperationDetailResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getOperationDetailResponse
-    -- ** Response lenses
-    , godrDomainName
-    , godrMessage
-    , godrOperationId
-    , godrStatus
-    , godrSubmittedDate
-    , godrType
+    , GetOperationDetailResponse
+    -- * Response Lenses
+    , godrsSubmittedDate
+    , godrsDomainName
+    , godrsOperationId
+    , godrsType
+    , godrsMessage
+    , godrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Route53Domains.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53Domains.Types
+import           Network.AWS.Route53Domains.Types.Product
 
-newtype GetOperationDetail = GetOperationDetail
+-- | The GetOperationDetail request includes the following element.
+--
+-- /See:/ 'getOperationDetail' smart constructor.
+newtype GetOperationDetail = GetOperationDetail'
     { _godOperationId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetOperationDetail' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetOperationDetail' with the minimum fields required to make a request.
 --
--- * 'godOperationId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getOperationDetail :: Text -- ^ 'godOperationId'
-                   -> GetOperationDetail
-getOperationDetail p1 = GetOperationDetail
-    { _godOperationId = p1
+-- * 'godOperationId'
+getOperationDetail
+    :: Text -- ^ 'godOperationId'
+    -> GetOperationDetail
+getOperationDetail pOperationId_ =
+    GetOperationDetail'
+    { _godOperationId = pOperationId_
     }
 
--- | The identifier for the operation for which you want to get the status. Amazon
--- Route 53 returned the identifier in the response to the original request.
+-- | The identifier for the operation for which you want to get the status.
+-- Amazon Route 53 returned the identifier in the response to the original
+-- request.
 --
 -- Type: String
 --
@@ -79,104 +78,111 @@
 --
 -- Required: Yes
 godOperationId :: Lens' GetOperationDetail Text
-godOperationId = lens _godOperationId (\s a -> s { _godOperationId = a })
+godOperationId = lens _godOperationId (\ s a -> s{_godOperationId = a});
 
-data GetOperationDetailResponse = GetOperationDetailResponse
-    { _godrDomainName    :: Maybe Text
-    , _godrMessage       :: Maybe Text
-    , _godrOperationId   :: Maybe Text
-    , _godrStatus        :: Maybe OperationStatus
-    , _godrSubmittedDate :: Maybe POSIX
-    , _godrType          :: Maybe OperationType
-    } deriving (Eq, Read, Show)
+instance AWSRequest GetOperationDetail where
+        type Sv GetOperationDetail = Route53Domains
+        type Rs GetOperationDetail =
+             GetOperationDetailResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetOperationDetailResponse' <$>
+                   (x .?> "SubmittedDate") <*> (x .?> "DomainName") <*>
+                     (x .?> "OperationId")
+                     <*> (x .?> "Type")
+                     <*> (x .?> "Message")
+                     <*> (pure (fromEnum s)))
 
--- | 'GetOperationDetailResponse' constructor.
+instance ToHeaders GetOperationDetail where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Route53Domains_v20140515.GetOperationDetail" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetOperationDetail where
+        toJSON GetOperationDetail'{..}
+          = object ["OperationId" .= _godOperationId]
+
+instance ToPath GetOperationDetail where
+        toPath = const "/"
+
+instance ToQuery GetOperationDetail where
+        toQuery = const mempty
+
+-- | The GetOperationDetail response includes the following elements.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'getOperationDetailResponse' smart constructor.
+data GetOperationDetailResponse = GetOperationDetailResponse'
+    { _godrsSubmittedDate :: !(Maybe POSIX)
+    , _godrsDomainName    :: !(Maybe Text)
+    , _godrsOperationId   :: !(Maybe Text)
+    , _godrsType          :: !(Maybe OperationType)
+    , _godrsMessage       :: !(Maybe Text)
+    , _godrsStatus        :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetOperationDetailResponse' with the minimum fields required to make a request.
 --
--- * 'godrDomainName' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'godrMessage' @::@ 'Maybe' 'Text'
+-- * 'godrsSubmittedDate'
 --
--- * 'godrOperationId' @::@ 'Maybe' 'Text'
+-- * 'godrsDomainName'
 --
--- * 'godrStatus' @::@ 'Maybe' 'OperationStatus'
+-- * 'godrsOperationId'
 --
--- * 'godrSubmittedDate' @::@ 'Maybe' 'UTCTime'
+-- * 'godrsType'
 --
--- * 'godrType' @::@ 'Maybe' 'OperationType'
+-- * 'godrsMessage'
 --
-getOperationDetailResponse :: GetOperationDetailResponse
-getOperationDetailResponse = GetOperationDetailResponse
-    { _godrOperationId   = Nothing
-    , _godrStatus        = Nothing
-    , _godrMessage       = Nothing
-    , _godrDomainName    = Nothing
-    , _godrType          = Nothing
-    , _godrSubmittedDate = Nothing
+-- * 'godrsStatus'
+getOperationDetailResponse
+    :: Int -- ^ 'godrsStatus'
+    -> GetOperationDetailResponse
+getOperationDetailResponse pStatus_ =
+    GetOperationDetailResponse'
+    { _godrsSubmittedDate = Nothing
+    , _godrsDomainName = Nothing
+    , _godrsOperationId = Nothing
+    , _godrsType = Nothing
+    , _godrsMessage = Nothing
+    , _godrsStatus = pStatus_
     }
 
--- | The name of a domain.
---
--- Type: String
-godrDomainName :: Lens' GetOperationDetailResponse (Maybe Text)
-godrDomainName = lens _godrDomainName (\s a -> s { _godrDomainName = a })
+-- | The date when the request was submitted.
+godrsSubmittedDate :: Lens' GetOperationDetailResponse (Maybe UTCTime)
+godrsSubmittedDate = lens _godrsSubmittedDate (\ s a -> s{_godrsSubmittedDate = a}) . mapping _Time;
 
--- | Detailed information on the status including possible errors.
+-- | The name of a domain.
 --
 -- Type: String
-godrMessage :: Lens' GetOperationDetailResponse (Maybe Text)
-godrMessage = lens _godrMessage (\s a -> s { _godrMessage = a })
+godrsDomainName :: Lens' GetOperationDetailResponse (Maybe Text)
+godrsDomainName = lens _godrsDomainName (\ s a -> s{_godrsDomainName = a});
 
 -- | The identifier for the operation.
 --
 -- Type: String
-godrOperationId :: Lens' GetOperationDetailResponse (Maybe Text)
-godrOperationId = lens _godrOperationId (\s a -> s { _godrOperationId = a })
+godrsOperationId :: Lens' GetOperationDetailResponse (Maybe Text)
+godrsOperationId = lens _godrsOperationId (\ s a -> s{_godrsOperationId = a});
 
--- | The current status of the requested operation in the system.
+-- | The type of operation that was requested.
 --
 -- Type: String
-godrStatus :: Lens' GetOperationDetailResponse (Maybe OperationStatus)
-godrStatus = lens _godrStatus (\s a -> s { _godrStatus = a })
-
--- | The date when the request was submitted.
-godrSubmittedDate :: Lens' GetOperationDetailResponse (Maybe UTCTime)
-godrSubmittedDate =
-    lens _godrSubmittedDate (\s a -> s { _godrSubmittedDate = a })
-        . mapping _Time
+godrsType :: Lens' GetOperationDetailResponse (Maybe OperationType)
+godrsType = lens _godrsType (\ s a -> s{_godrsType = a});
 
--- | The type of operation that was requested.
+-- | Detailed information on the status including possible errors.
 --
 -- Type: String
-godrType :: Lens' GetOperationDetailResponse (Maybe OperationType)
-godrType = lens _godrType (\s a -> s { _godrType = a })
-
-instance ToPath GetOperationDetail where
-    toPath = const "/"
-
-instance ToQuery GetOperationDetail where
-    toQuery = const mempty
-
-instance ToHeaders GetOperationDetail
-
-instance ToJSON GetOperationDetail where
-    toJSON GetOperationDetail{..} = object
-        [ "OperationId" .= _godOperationId
-        ]
-
-instance AWSRequest GetOperationDetail where
-    type Sv GetOperationDetail = Route53Domains
-    type Rs GetOperationDetail = GetOperationDetailResponse
-
-    request  = post "GetOperationDetail"
-    response = jsonResponse
+godrsMessage :: Lens' GetOperationDetailResponse (Maybe Text)
+godrsMessage = lens _godrsMessage (\ s a -> s{_godrsMessage = a});
 
-instance FromJSON GetOperationDetailResponse where
-    parseJSON = withObject "GetOperationDetailResponse" $ \o -> GetOperationDetailResponse
-        <$> o .:? "DomainName"
-        <*> o .:? "Message"
-        <*> o .:? "OperationId"
-        <*> o .:? "Status"
-        <*> o .:? "SubmittedDate"
-        <*> o .:? "Type"
+-- | The response status code.
+godrsStatus :: Lens' GetOperationDetailResponse Int
+godrsStatus = lens _godrsStatus (\ s a -> s{_godrsStatus = a});
diff --git a/gen/Network/AWS/Route53Domains/ListDomains.hs b/gen/Network/AWS/Route53Domains/ListDomains.hs
--- a/gen/Network/AWS/Route53Domains/ListDomains.hs
+++ b/gen/Network/AWS/Route53Domains/ListDomains.hs
@@ -1,92 +1,76 @@
-{-# 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.Route53Domains.ListDomains
--- 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.
-
--- | This operation returns all the domain names registered with Amazon Route 53
--- for the current AWS account.
+-- This operation returns all the domain names registered with Amazon Route
+-- 53 for the current AWS account.
 --
--- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-ListDomains.html>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/api-ListDomains.html AWS API Reference> for ListDomains.
+--
+-- This operation returns paginated results.
 module Network.AWS.Route53Domains.ListDomains
     (
-    -- * Request
-      ListDomains
-    -- ** Request constructor
-    , listDomains
-    -- ** Request lenses
-    , ldMarker
+    -- * Creating a Request
+      listDomains
+    , ListDomains
+    -- * Request Lenses
     , ldMaxItems
+    , ldMarker
 
-    -- * Response
-    , ListDomainsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listDomainsResponse
-    -- ** Response lenses
-    , ldrDomains
-    , ldrNextPageMarker
+    , ListDomainsResponse
+    -- * Response Lenses
+    , ldrsNextPageMarker
+    , ldrsStatus
+    , ldrsDomains
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Route53Domains.Types
-import qualified GHC.Exts
-
-data ListDomains = ListDomains
-    { _ldMarker   :: Maybe Text
-    , _ldMaxItems :: Maybe Int
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53Domains.Types
+import           Network.AWS.Route53Domains.Types.Product
 
--- | 'ListDomains' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ldMarker' @::@ 'Maybe' 'Text'
---
--- * 'ldMaxItems' @::@ 'Maybe' 'Int'
+-- | The ListDomains request includes the following elements.
 --
-listDomains :: ListDomains
-listDomains = ListDomains
-    { _ldMarker   = Nothing
-    , _ldMaxItems = Nothing
-    }
+-- /See:/ 'listDomains' smart constructor.
+data ListDomains = ListDomains'
+    { _ldMaxItems :: !(Maybe Int)
+    , _ldMarker   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | For an initial request for a list of domains, omit this element. If the
--- number of domains that are associated with the current AWS account is greater
--- than the value that you specified for 'MaxItems', you can use 'Marker' to return
--- additional domains. Get the value of 'NextPageMarker' from the previous
--- response, and submit another request that includes the value of 'NextPageMarker'
--- in the 'Marker' element.
---
--- Type: String
+-- | Creates a value of 'ListDomains' with the minimum fields required to make a request.
 --
--- Default: None
+-- Use one of the following lenses to modify other fields as desired:
 --
--- Constraints: The marker must match the value specified in the previous
--- request.
+-- * 'ldMaxItems'
 --
--- Required: No
-ldMarker :: Lens' ListDomains (Maybe Text)
-ldMarker = lens _ldMarker (\s a -> s { _ldMarker = a })
+-- * 'ldMarker'
+listDomains
+    :: ListDomains
+listDomains =
+    ListDomains'
+    { _ldMaxItems = Nothing
+    , _ldMarker = Nothing
+    }
 
 -- | Number of domains to be returned.
 --
@@ -98,74 +82,111 @@
 --
 -- Required: No
 ldMaxItems :: Lens' ListDomains (Maybe Int)
-ldMaxItems = lens _ldMaxItems (\s a -> s { _ldMaxItems = a })
-
-data ListDomainsResponse = ListDomainsResponse
-    { _ldrDomains        :: List "Domains" DomainSummary
-    , _ldrNextPageMarker :: Maybe Text
-    } deriving (Eq, Read, Show)
+ldMaxItems = lens _ldMaxItems (\ s a -> s{_ldMaxItems = a});
 
--- | 'ListDomainsResponse' constructor.
+-- | For an initial request for a list of domains, omit this element. If the
+-- number of domains that are associated with the current AWS account is
+-- greater than the value that you specified for 'MaxItems', you can use
+-- 'Marker' to return additional domains. Get the value of 'NextPageMarker'
+-- from the previous response, and submit another request that includes the
+-- value of 'NextPageMarker' in the 'Marker' element.
 --
--- The fields accessible through corresponding lenses are:
+-- Type: String
 --
--- * 'ldrDomains' @::@ ['DomainSummary']
+-- Default: None
 --
--- * 'ldrNextPageMarker' @::@ 'Maybe' 'Text'
+-- Constraints: The marker must match the value specified in the previous
+-- request.
 --
-listDomainsResponse :: ListDomainsResponse
-listDomainsResponse = ListDomainsResponse
-    { _ldrDomains        = mempty
-    , _ldrNextPageMarker = Nothing
-    }
+-- Required: No
+ldMarker :: Lens' ListDomains (Maybe Text)
+ldMarker = lens _ldMarker (\ s a -> s{_ldMarker = a});
 
--- | A summary of domains.
---
--- Type: Complex type containing a list of domain summaries.
---
--- Children: 'AutoRenew', 'DomainName', 'Expiry', 'TransferLock'
-ldrDomains :: Lens' ListDomainsResponse [DomainSummary]
-ldrDomains = lens _ldrDomains (\s a -> s { _ldrDomains = a }) . _List
+instance AWSPager ListDomains where
+        page rq rs
+          | stop (rs ^. ldrsNextPageMarker) = Nothing
+          | stop (rs ^. ldrsDomains) = Nothing
+          | otherwise =
+            Just $ rq & ldMarker .~ rs ^. ldrsNextPageMarker
 
--- | If there are more domains than you specified for 'MaxItems' in the request,
--- submit another request and include the value of 'NextPageMarker' in the value
--- of 'Marker'.
---
--- Type: String
---
--- Parent: 'Operations'
-ldrNextPageMarker :: Lens' ListDomainsResponse (Maybe Text)
-ldrNextPageMarker =
-    lens _ldrNextPageMarker (\s a -> s { _ldrNextPageMarker = a })
+instance AWSRequest ListDomains where
+        type Sv ListDomains = Route53Domains
+        type Rs ListDomains = ListDomainsResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListDomainsResponse' <$>
+                   (x .?> "NextPageMarker") <*> (pure (fromEnum s)) <*>
+                     (x .?> "Domains" .!@ mempty))
 
+instance ToHeaders ListDomains where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Route53Domains_v20140515.ListDomains" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ListDomains where
+        toJSON ListDomains'{..}
+          = object
+              ["MaxItems" .= _ldMaxItems, "Marker" .= _ldMarker]
+
 instance ToPath ListDomains where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery ListDomains where
-    toQuery = const mempty
-
-instance ToHeaders ListDomains
+        toQuery = const mempty
 
-instance ToJSON ListDomains where
-    toJSON ListDomains{..} = object
-        [ "Marker"   .= _ldMarker
-        , "MaxItems" .= _ldMaxItems
-        ]
+-- | The ListDomains response includes the following elements.
+--
+-- /See:/ 'listDomainsResponse' smart constructor.
+data ListDomainsResponse = ListDomainsResponse'
+    { _ldrsNextPageMarker :: !(Maybe Text)
+    , _ldrsStatus         :: !Int
+    , _ldrsDomains        :: ![DomainSummary]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest ListDomains where
-    type Sv ListDomains = Route53Domains
-    type Rs ListDomains = ListDomainsResponse
+-- | Creates a value of 'ListDomainsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ldrsNextPageMarker'
+--
+-- * 'ldrsStatus'
+--
+-- * 'ldrsDomains'
+listDomainsResponse
+    :: Int -- ^ 'ldrsStatus'
+    -> ListDomainsResponse
+listDomainsResponse pStatus_ =
+    ListDomainsResponse'
+    { _ldrsNextPageMarker = Nothing
+    , _ldrsStatus = pStatus_
+    , _ldrsDomains = mempty
+    }
 
-    request  = post "ListDomains"
-    response = jsonResponse
+-- | If there are more domains than you specified for 'MaxItems' in the
+-- request, submit another request and include the value of
+-- 'NextPageMarker' in the value of 'Marker'.
+--
+-- Type: String
+--
+-- Parent: 'Operations'
+ldrsNextPageMarker :: Lens' ListDomainsResponse (Maybe Text)
+ldrsNextPageMarker = lens _ldrsNextPageMarker (\ s a -> s{_ldrsNextPageMarker = a});
 
-instance FromJSON ListDomainsResponse where
-    parseJSON = withObject "ListDomainsResponse" $ \o -> ListDomainsResponse
-        <$> o .:? "Domains" .!= mempty
-        <*> o .:? "NextPageMarker"
+-- | The response status code.
+ldrsStatus :: Lens' ListDomainsResponse Int
+ldrsStatus = lens _ldrsStatus (\ s a -> s{_ldrsStatus = a});
 
-instance AWSPager ListDomains where
-    page rq rs
-        | stop (rs ^. ldrNextPageMarker) = Nothing
-        | otherwise = (\x -> rq & ldMarker ?~ x)
-            <$> (rs ^. ldrNextPageMarker)
+-- | A summary of domains.
+--
+-- Type: Complex type containing a list of domain summaries.
+--
+-- Children: 'AutoRenew', 'DomainName', 'Expiry', 'TransferLock'
+ldrsDomains :: Lens' ListDomainsResponse [DomainSummary]
+ldrsDomains = lens _ldrsDomains (\ s a -> s{_ldrsDomains = a}) . _Coerce;
diff --git a/gen/Network/AWS/Route53Domains/ListOperations.hs b/gen/Network/AWS/Route53Domains/ListOperations.hs
--- a/gen/Network/AWS/Route53Domains/ListOperations.hs
+++ b/gen/Network/AWS/Route53Domains/ListOperations.hs
@@ -1,89 +1,76 @@
-{-# 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.Route53Domains.ListOperations
--- 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.
-
--- | This operation returns the operation IDs of operations that are not yet
+-- This operation returns the operation IDs of operations that are not yet
 -- complete.
 --
--- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-ListOperations.html>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/api-ListOperations.html AWS API Reference> for ListOperations.
+--
+-- This operation returns paginated results.
 module Network.AWS.Route53Domains.ListOperations
     (
-    -- * Request
-      ListOperations
-    -- ** Request constructor
-    , listOperations
-    -- ** Request lenses
-    , loMarker
+    -- * Creating a Request
+      listOperations
+    , ListOperations
+    -- * Request Lenses
     , loMaxItems
+    , loMarker
 
-    -- * Response
-    , ListOperationsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listOperationsResponse
-    -- ** Response lenses
-    , lorNextPageMarker
-    , lorOperations
+    , ListOperationsResponse
+    -- * Response Lenses
+    , lorsNextPageMarker
+    , lorsStatus
+    , lorsOperations
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Route53Domains.Types
-import qualified GHC.Exts
-
-data ListOperations = ListOperations
-    { _loMarker   :: Maybe Text
-    , _loMaxItems :: Maybe Int
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53Domains.Types
+import           Network.AWS.Route53Domains.Types.Product
 
--- | 'ListOperations' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'loMarker' @::@ 'Maybe' 'Text'
---
--- * 'loMaxItems' @::@ 'Maybe' 'Int'
+-- | The ListOperations request includes the following elements.
 --
-listOperations :: ListOperations
-listOperations = ListOperations
-    { _loMarker   = Nothing
-    , _loMaxItems = Nothing
-    }
+-- /See:/ 'listOperations' smart constructor.
+data ListOperations = ListOperations'
+    { _loMaxItems :: !(Maybe Int)
+    , _loMarker   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | For an initial request for a list of operations, omit this element. If the
--- number of operations that are not yet complete is greater than the value that
--- you specified for 'MaxItems', you can use 'Marker' to return additional
--- operations. Get the value of 'NextPageMarker' from the previous response, and
--- submit another request that includes the value of 'NextPageMarker' in the 'Marker'
--- element.
+-- | Creates a value of 'ListOperations' with the minimum fields required to make a request.
 --
--- Type: String
+-- Use one of the following lenses to modify other fields as desired:
 --
--- Default: None
+-- * 'loMaxItems'
 --
--- Required: No
-loMarker :: Lens' ListOperations (Maybe Text)
-loMarker = lens _loMarker (\s a -> s { _loMarker = a })
+-- * 'loMarker'
+listOperations
+    :: ListOperations
+listOperations =
+    ListOperations'
+    { _loMaxItems = Nothing
+    , _loMarker = Nothing
+    }
 
 -- | Number of domains to be returned.
 --
@@ -95,74 +82,108 @@
 --
 -- Required: No
 loMaxItems :: Lens' ListOperations (Maybe Int)
-loMaxItems = lens _loMaxItems (\s a -> s { _loMaxItems = a })
+loMaxItems = lens _loMaxItems (\ s a -> s{_loMaxItems = a});
 
-data ListOperationsResponse = ListOperationsResponse
-    { _lorNextPageMarker :: Maybe Text
-    , _lorOperations     :: List "Operations" OperationSummary
-    } deriving (Eq, Read, Show)
+-- | For an initial request for a list of operations, omit this element. If
+-- the number of operations that are not yet complete is greater than the
+-- value that you specified for 'MaxItems', you can use 'Marker' to return
+-- additional operations. Get the value of 'NextPageMarker' from the
+-- previous response, and submit another request that includes the value of
+-- 'NextPageMarker' in the 'Marker' element.
+--
+-- Type: String
+--
+-- Default: None
+--
+-- Required: No
+loMarker :: Lens' ListOperations (Maybe Text)
+loMarker = lens _loMarker (\ s a -> s{_loMarker = a});
 
--- | 'ListOperationsResponse' constructor.
+instance AWSPager ListOperations where
+        page rq rs
+          | stop (rs ^. lorsNextPageMarker) = Nothing
+          | stop (rs ^. lorsOperations) = Nothing
+          | otherwise =
+            Just $ rq & loMarker .~ rs ^. lorsNextPageMarker
+
+instance AWSRequest ListOperations where
+        type Sv ListOperations = Route53Domains
+        type Rs ListOperations = ListOperationsResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListOperationsResponse' <$>
+                   (x .?> "NextPageMarker") <*> (pure (fromEnum s)) <*>
+                     (x .?> "Operations" .!@ mempty))
+
+instance ToHeaders ListOperations where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Route53Domains_v20140515.ListOperations" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ListOperations where
+        toJSON ListOperations'{..}
+          = object
+              ["MaxItems" .= _loMaxItems, "Marker" .= _loMarker]
+
+instance ToPath ListOperations where
+        toPath = const "/"
+
+instance ToQuery ListOperations where
+        toQuery = const mempty
+
+-- | The ListOperations response includes the following elements.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listOperationsResponse' smart constructor.
+data ListOperationsResponse = ListOperationsResponse'
+    { _lorsNextPageMarker :: !(Maybe Text)
+    , _lorsStatus         :: !Int
+    , _lorsOperations     :: ![OperationSummary]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListOperationsResponse' with the minimum fields required to make a request.
 --
--- * 'lorNextPageMarker' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lorOperations' @::@ ['OperationSummary']
+-- * 'lorsNextPageMarker'
 --
-listOperationsResponse :: ListOperationsResponse
-listOperationsResponse = ListOperationsResponse
-    { _lorOperations     = mempty
-    , _lorNextPageMarker = Nothing
+-- * 'lorsStatus'
+--
+-- * 'lorsOperations'
+listOperationsResponse
+    :: Int -- ^ 'lorsStatus'
+    -> ListOperationsResponse
+listOperationsResponse pStatus_ =
+    ListOperationsResponse'
+    { _lorsNextPageMarker = Nothing
+    , _lorsStatus = pStatus_
+    , _lorsOperations = mempty
     }
 
--- | If there are more operations than you specified for 'MaxItems' in the request,
--- submit another request and include the value of 'NextPageMarker' in the value
--- of 'Marker'.
+-- | If there are more operations than you specified for 'MaxItems' in the
+-- request, submit another request and include the value of
+-- 'NextPageMarker' in the value of 'Marker'.
 --
 -- Type: String
 --
 -- Parent: 'Operations'
-lorNextPageMarker :: Lens' ListOperationsResponse (Maybe Text)
-lorNextPageMarker =
-    lens _lorNextPageMarker (\s a -> s { _lorNextPageMarker = a })
+lorsNextPageMarker :: Lens' ListOperationsResponse (Maybe Text)
+lorsNextPageMarker = lens _lorsNextPageMarker (\ s a -> s{_lorsNextPageMarker = a});
 
+-- | The response status code.
+lorsStatus :: Lens' ListOperationsResponse Int
+lorsStatus = lens _lorsStatus (\ s a -> s{_lorsStatus = a});
+
 -- | Lists summaries of the operations.
 --
 -- Type: Complex type containing a list of operation summaries
 --
 -- Children: 'OperationId', 'Status', 'SubmittedDate', 'Type'
-lorOperations :: Lens' ListOperationsResponse [OperationSummary]
-lorOperations = lens _lorOperations (\s a -> s { _lorOperations = a }) . _List
-
-instance ToPath ListOperations where
-    toPath = const "/"
-
-instance ToQuery ListOperations where
-    toQuery = const mempty
-
-instance ToHeaders ListOperations
-
-instance ToJSON ListOperations where
-    toJSON ListOperations{..} = object
-        [ "Marker"   .= _loMarker
-        , "MaxItems" .= _loMaxItems
-        ]
-
-instance AWSRequest ListOperations where
-    type Sv ListOperations = Route53Domains
-    type Rs ListOperations = ListOperationsResponse
-
-    request  = post "ListOperations"
-    response = jsonResponse
-
-instance FromJSON ListOperationsResponse where
-    parseJSON = withObject "ListOperationsResponse" $ \o -> ListOperationsResponse
-        <$> o .:? "NextPageMarker"
-        <*> o .:? "Operations" .!= mempty
-
-instance AWSPager ListOperations where
-    page rq rs
-        | stop (rs ^. lorNextPageMarker) = Nothing
-        | otherwise = (\x -> rq & loMarker ?~ x)
-            <$> (rs ^. lorNextPageMarker)
+lorsOperations :: Lens' ListOperationsResponse [OperationSummary]
+lorsOperations = lens _lorsOperations (\ s a -> s{_lorsOperations = a}) . _Coerce;
diff --git a/gen/Network/AWS/Route53Domains/ListTagsForDomain.hs b/gen/Network/AWS/Route53Domains/ListTagsForDomain.hs
--- a/gen/Network/AWS/Route53Domains/ListTagsForDomain.hs
+++ b/gen/Network/AWS/Route53Domains/ListTagsForDomain.hs
@@ -1,140 +1,151 @@
-{-# 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.Route53Domains.ListTagsForDomain
--- 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.
-
--- | This operation returns all of the tags that are associated with the specified
--- domain.
+-- This operation returns all of the tags that are associated with the
+-- specified domain.
 --
--- All tag operations are eventually consistent; subsequent operations may not
--- immediately represent all issued operations.
+-- All tag operations are eventually consistent; subsequent operations may
+-- not immediately represent all issued operations.
 --
--- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-ListTagsForDomain.html>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/api-ListTagsForDomain.html AWS API Reference> for ListTagsForDomain.
 module Network.AWS.Route53Domains.ListTagsForDomain
     (
-    -- * Request
-      ListTagsForDomain
-    -- ** Request constructor
-    , listTagsForDomain
-    -- ** Request lenses
+    -- * Creating a Request
+      listTagsForDomain
+    , ListTagsForDomain
+    -- * Request Lenses
     , ltfdDomainName
 
-    -- * Response
-    , ListTagsForDomainResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listTagsForDomainResponse
-    -- ** Response lenses
-    , ltfdrTagList
+    , ListTagsForDomainResponse
+    -- * Response Lenses
+    , ltfdrsStatus
+    , ltfdrsTagList
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Route53Domains.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53Domains.Types
+import           Network.AWS.Route53Domains.Types.Product
 
-newtype ListTagsForDomain = ListTagsForDomain
+-- | The ListTagsForDomainRequest includes the following elements.
+--
+-- /See:/ 'listTagsForDomain' smart constructor.
+newtype ListTagsForDomain = ListTagsForDomain'
     { _ltfdDomainName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListTagsForDomain' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ListTagsForDomain' with the minimum fields required to make a request.
 --
--- * 'ltfdDomainName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-listTagsForDomain :: Text -- ^ 'ltfdDomainName'
-                  -> ListTagsForDomain
-listTagsForDomain p1 = ListTagsForDomain
-    { _ltfdDomainName = p1
+-- * 'ltfdDomainName'
+listTagsForDomain
+    :: Text -- ^ 'ltfdDomainName'
+    -> ListTagsForDomain
+listTagsForDomain pDomainName_ =
+    ListTagsForDomain'
+    { _ltfdDomainName = pDomainName_
     }
 
 -- | The domain for which you want to get a list of tags.
 ltfdDomainName :: Lens' ListTagsForDomain Text
-ltfdDomainName = lens _ltfdDomainName (\s a -> s { _ltfdDomainName = a })
+ltfdDomainName = lens _ltfdDomainName (\ s a -> s{_ltfdDomainName = a});
 
-newtype ListTagsForDomainResponse = ListTagsForDomainResponse
-    { _ltfdrTagList :: List "TagList" Tag
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
+instance AWSRequest ListTagsForDomain where
+        type Sv ListTagsForDomain = Route53Domains
+        type Rs ListTagsForDomain = ListTagsForDomainResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListTagsForDomainResponse' <$>
+                   (pure (fromEnum s)) <*> (x .?> "TagList" .!@ mempty))
 
-instance GHC.Exts.IsList ListTagsForDomainResponse where
-    type Item ListTagsForDomainResponse = Tag
+instance ToHeaders ListTagsForDomain where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Route53Domains_v20140515.ListTagsForDomain" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
-    fromList = ListTagsForDomainResponse . GHC.Exts.fromList
-    toList   = GHC.Exts.toList . _ltfdrTagList
+instance ToJSON ListTagsForDomain where
+        toJSON ListTagsForDomain'{..}
+          = object ["DomainName" .= _ltfdDomainName]
 
--- | 'ListTagsForDomainResponse' constructor.
+instance ToPath ListTagsForDomain where
+        toPath = const "/"
+
+instance ToQuery ListTagsForDomain where
+        toQuery = const mempty
+
+-- | The ListTagsForDomain response includes the following elements.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listTagsForDomainResponse' smart constructor.
+data ListTagsForDomainResponse = ListTagsForDomainResponse'
+    { _ltfdrsStatus  :: !Int
+    , _ltfdrsTagList :: ![Tag]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTagsForDomainResponse' with the minimum fields required to make a request.
 --
--- * 'ltfdrTagList' @::@ ['Tag']
+-- Use one of the following lenses to modify other fields as desired:
 --
-listTagsForDomainResponse :: ListTagsForDomainResponse
-listTagsForDomainResponse = ListTagsForDomainResponse
-    { _ltfdrTagList = mempty
+-- * 'ltfdrsStatus'
+--
+-- * 'ltfdrsTagList'
+listTagsForDomainResponse
+    :: Int -- ^ 'ltfdrsStatus'
+    -> ListTagsForDomainResponse
+listTagsForDomainResponse pStatus_ =
+    ListTagsForDomainResponse'
+    { _ltfdrsStatus = pStatus_
+    , _ltfdrsTagList = mempty
     }
 
+-- | The response status code.
+ltfdrsStatus :: Lens' ListTagsForDomainResponse Int
+ltfdrsStatus = lens _ltfdrsStatus (\ s a -> s{_ltfdrsStatus = a});
+
 -- | A list of the tags that are associated with the specified domain.
 --
 -- Type: A complex type containing a list of tags
 --
 -- Each tag includes the following elements.
 --
--- Key
---
--- The key (name) of a tag.
+-- -   Key
 --
--- Type: String
+--     The key (name) of a tag.
 --
--- Value
+--     Type: String
 --
--- The value of a tag.
+-- -   Value
 --
--- Type: String
+--     The value of a tag.
 --
+--     Type: String
 --
-ltfdrTagList :: Lens' ListTagsForDomainResponse [Tag]
-ltfdrTagList = lens _ltfdrTagList (\s a -> s { _ltfdrTagList = a }) . _List
-
-instance ToPath ListTagsForDomain where
-    toPath = const "/"
-
-instance ToQuery ListTagsForDomain where
-    toQuery = const mempty
-
-instance ToHeaders ListTagsForDomain
-
-instance ToJSON ListTagsForDomain where
-    toJSON ListTagsForDomain{..} = object
-        [ "DomainName" .= _ltfdDomainName
-        ]
-
-instance AWSRequest ListTagsForDomain where
-    type Sv ListTagsForDomain = Route53Domains
-    type Rs ListTagsForDomain = ListTagsForDomainResponse
-
-    request  = post "ListTagsForDomain"
-    response = jsonResponse
-
-instance FromJSON ListTagsForDomainResponse where
-    parseJSON = withObject "ListTagsForDomainResponse" $ \o -> ListTagsForDomainResponse
-        <$> o .:? "TagList" .!= mempty
+ltfdrsTagList :: Lens' ListTagsForDomainResponse [Tag]
+ltfdrsTagList = lens _ltfdrsTagList (\ s a -> s{_ltfdrsTagList = a}) . _Coerce;
diff --git a/gen/Network/AWS/Route53Domains/RegisterDomain.hs b/gen/Network/AWS/Route53Domains/RegisterDomain.hs
--- a/gen/Network/AWS/Route53Domains/RegisterDomain.hs
+++ b/gen/Network/AWS/Route53Domains/RegisterDomain.hs
@@ -1,174 +1,219 @@
-{-# 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.Route53Domains.RegisterDomain
--- 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.
-
--- | This operation registers a domain. Domains are registered by the AWS
--- registrar partner, Gandi. For some top-level domains (TLDs), this operation
--- requires extra parameters.
+-- This operation registers a domain. Domains are registered by the AWS
+-- registrar partner, Gandi. For some top-level domains (TLDs), this
+-- operation requires extra parameters.
 --
 -- When you register a domain, Amazon Route 53 does the following:
 --
--- Creates a Amazon Route 53 hosted zone that has the same name as the domain.
--- Amazon Route 53 assigns four name servers to your hosted zone and
--- automatically updates your domain registration with the names of these name
--- servers. Enables autorenew, so your domain registration will renew
--- automatically each year. We'll notify you in advance of the renewal date so
--- you can choose whether to renew the registration. Optionally enables privacy
--- protection, so WHOIS queries return contact information for our registrar
--- partner, Gandi, instead of the information you entered for registrant, admin,
--- and tech contacts. If registration is successful, returns an operation ID
--- that you can use to track the progress and completion of the action. If the
--- request is not completed successfully, the domain registrant is notified by
--- email. Charges your AWS account an amount based on the top-level domain. For
--- more information, see <http://aws.amazon.com/route53/pricing/ Amazon Route 53 Pricing>.
+-- -   Creates a Amazon Route 53 hosted zone that has the same name as the
+--     domain. Amazon Route 53 assigns four name servers to your hosted
+--     zone and automatically updates your domain registration with the
+--     names of these name servers.
+-- -   Enables autorenew, so your domain registration will renew
+--     automatically each year. We\'ll notify you in advance of the renewal
+--     date so you can choose whether to renew the registration.
+-- -   Optionally enables privacy protection, so WHOIS queries return
+--     contact information for our registrar partner, Gandi, instead of the
+--     information you entered for registrant, admin, and tech contacts.
+-- -   If registration is successful, returns an operation ID that you can
+--     use to track the progress and completion of the action. If the
+--     request is not completed successfully, the domain registrant is
+--     notified by email.
+-- -   Charges your AWS account an amount based on the top-level domain.
+--     For more information, see
+--     <http://aws.amazon.com/route53/pricing/ Amazon Route 53 Pricing>.
 --
--- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-RegisterDomain.html>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/api-RegisterDomain.html AWS API Reference> for RegisterDomain.
 module Network.AWS.Route53Domains.RegisterDomain
     (
-    -- * Request
-      RegisterDomain
-    -- ** Request constructor
-    , registerDomain
-    -- ** Request lenses
-    , rdAdminContact
+    -- * Creating a Request
+      registerDomain
+    , RegisterDomain
+    -- * Request Lenses
+    , rdPrivacyProtectTechContact
+    , rdPrivacyProtectRegistrantContact
     , rdAutoRenew
+    , rdPrivacyProtectAdminContact
+    , rdIdNLangCode
     , rdDomainName
     , rdDurationInYears
-    , rdIdnLangCode
-    , rdPrivacyProtectAdminContact
-    , rdPrivacyProtectRegistrantContact
-    , rdPrivacyProtectTechContact
+    , rdAdminContact
     , rdRegistrantContact
     , rdTechContact
 
-    -- * Response
-    , RegisterDomainResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , registerDomainResponse
-    -- ** Response lenses
-    , rdrOperationId
+    , RegisterDomainResponse
+    -- * Response Lenses
+    , rdrsStatus
+    , rdrsOperationId
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Route53Domains.Types
-import qualified GHC.Exts
-
-data RegisterDomain = RegisterDomain
-    { _rdAdminContact                    :: ContactDetail
-    , _rdAutoRenew                       :: Maybe Bool
-    , _rdDomainName                      :: Text
-    , _rdDurationInYears                 :: Nat
-    , _rdIdnLangCode                     :: Maybe Text
-    , _rdPrivacyProtectAdminContact      :: Maybe Bool
-    , _rdPrivacyProtectRegistrantContact :: Maybe Bool
-    , _rdPrivacyProtectTechContact       :: Maybe Bool
-    , _rdRegistrantContact               :: ContactDetail
-    , _rdTechContact                     :: ContactDetail
-    } deriving (Eq, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53Domains.Types
+import           Network.AWS.Route53Domains.Types.Product
 
--- | 'RegisterDomain' constructor.
+-- | The RegisterDomain request includes the following elements.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'registerDomain' smart constructor.
+data RegisterDomain = RegisterDomain'
+    { _rdPrivacyProtectTechContact       :: !(Maybe Bool)
+    , _rdPrivacyProtectRegistrantContact :: !(Maybe Bool)
+    , _rdAutoRenew                       :: !(Maybe Bool)
+    , _rdPrivacyProtectAdminContact      :: !(Maybe Bool)
+    , _rdIdNLangCode                     :: !(Maybe Text)
+    , _rdDomainName                      :: !Text
+    , _rdDurationInYears                 :: !Nat
+    , _rdAdminContact                    :: !(Sensitive ContactDetail)
+    , _rdRegistrantContact               :: !(Sensitive ContactDetail)
+    , _rdTechContact                     :: !(Sensitive ContactDetail)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RegisterDomain' with the minimum fields required to make a request.
 --
--- * 'rdAdminContact' @::@ 'ContactDetail'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'rdAutoRenew' @::@ 'Maybe' 'Bool'
+-- * 'rdPrivacyProtectTechContact'
 --
--- * 'rdDomainName' @::@ 'Text'
+-- * 'rdPrivacyProtectRegistrantContact'
 --
--- * 'rdDurationInYears' @::@ 'Natural'
+-- * 'rdAutoRenew'
 --
--- * 'rdIdnLangCode' @::@ 'Maybe' 'Text'
+-- * 'rdPrivacyProtectAdminContact'
 --
--- * 'rdPrivacyProtectAdminContact' @::@ 'Maybe' 'Bool'
+-- * 'rdIdNLangCode'
 --
--- * 'rdPrivacyProtectRegistrantContact' @::@ 'Maybe' 'Bool'
+-- * 'rdDomainName'
 --
--- * 'rdPrivacyProtectTechContact' @::@ 'Maybe' 'Bool'
+-- * 'rdDurationInYears'
 --
--- * 'rdRegistrantContact' @::@ 'ContactDetail'
+-- * 'rdAdminContact'
 --
--- * 'rdTechContact' @::@ 'ContactDetail'
+-- * 'rdRegistrantContact'
 --
-registerDomain :: Text -- ^ 'rdDomainName'
-               -> Natural -- ^ 'rdDurationInYears'
-               -> ContactDetail -- ^ 'rdAdminContact'
-               -> ContactDetail -- ^ 'rdRegistrantContact'
-               -> ContactDetail -- ^ 'rdTechContact'
-               -> RegisterDomain
-registerDomain p1 p2 p3 p4 p5 = RegisterDomain
-    { _rdDomainName                      = p1
-    , _rdDurationInYears                 = withIso _Nat (const id) p2
-    , _rdAdminContact                    = p3
-    , _rdRegistrantContact               = p4
-    , _rdTechContact                     = p5
-    , _rdIdnLangCode                     = Nothing
-    , _rdAutoRenew                       = Nothing
-    , _rdPrivacyProtectAdminContact      = Nothing
+-- * 'rdTechContact'
+registerDomain
+    :: Text -- ^ 'rdDomainName'
+    -> Natural -- ^ 'rdDurationInYears'
+    -> ContactDetail -- ^ 'rdAdminContact'
+    -> ContactDetail -- ^ 'rdRegistrantContact'
+    -> ContactDetail -- ^ 'rdTechContact'
+    -> RegisterDomain
+registerDomain pDomainName_ pDurationInYears_ pAdminContact_ pRegistrantContact_ pTechContact_ =
+    RegisterDomain'
+    { _rdPrivacyProtectTechContact = Nothing
     , _rdPrivacyProtectRegistrantContact = Nothing
-    , _rdPrivacyProtectTechContact       = Nothing
+    , _rdAutoRenew = Nothing
+    , _rdPrivacyProtectAdminContact = Nothing
+    , _rdIdNLangCode = Nothing
+    , _rdDomainName = pDomainName_
+    , _rdDurationInYears = _Nat # pDurationInYears_
+    , _rdAdminContact = _Sensitive # pAdminContact_
+    , _rdRegistrantContact = _Sensitive # pRegistrantContact_
+    , _rdTechContact = _Sensitive # pTechContact_
     }
 
--- | Provides detailed contact information.
+-- | Whether you want to conceal contact information from WHOIS queries. If
+-- you specify true, WHOIS (\"who is\") queries will return contact
+-- information for our registrar partner, Gandi, instead of the contact
+-- information that you enter.
 --
--- Type: Complex
+-- Type: Boolean
 --
--- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType', 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State', 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
+-- Default: 'true'
 --
--- Required: Yes
-rdAdminContact :: Lens' RegisterDomain ContactDetail
-rdAdminContact = lens _rdAdminContact (\s a -> s { _rdAdminContact = a })
+-- Valid values: 'true' | 'false'
+--
+-- Required: No
+rdPrivacyProtectTechContact :: Lens' RegisterDomain (Maybe Bool)
+rdPrivacyProtectTechContact = lens _rdPrivacyProtectTechContact (\ s a -> s{_rdPrivacyProtectTechContact = a});
 
--- | Indicates whether the domain will be automatically renewed ('true') or not ('false'). Autorenewal only takes effect after the account is charged.
+-- | Whether you want to conceal contact information from WHOIS queries. If
+-- you specify true, WHOIS (\"who is\") queries will return contact
+-- information for our registrar partner, Gandi, instead of the contact
+-- information that you enter.
 --
 -- Type: Boolean
 --
+-- Default: 'true'
+--
 -- Valid values: 'true' | 'false'
 --
+-- Required: No
+rdPrivacyProtectRegistrantContact :: Lens' RegisterDomain (Maybe Bool)
+rdPrivacyProtectRegistrantContact = lens _rdPrivacyProtectRegistrantContact (\ s a -> s{_rdPrivacyProtectRegistrantContact = a});
+
+-- | Indicates whether the domain will be automatically renewed ('true') or
+-- not ('false'). Autorenewal only takes effect after the account is
+-- charged.
+--
+-- Type: Boolean
+--
+-- Valid values: 'true' | 'false'
+--
 -- Default: 'true'
 --
 -- Required: No
 rdAutoRenew :: Lens' RegisterDomain (Maybe Bool)
-rdAutoRenew = lens _rdAutoRenew (\s a -> s { _rdAutoRenew = a })
+rdAutoRenew = lens _rdAutoRenew (\ s a -> s{_rdAutoRenew = a});
 
+-- | Whether you want to conceal contact information from WHOIS queries. If
+-- you specify true, WHOIS (\"who is\") queries will return contact
+-- information for our registrar partner, Gandi, instead of the contact
+-- information that you enter.
+--
+-- Type: Boolean
+--
+-- Default: 'true'
+--
+-- Valid values: 'true' | 'false'
+--
+-- Required: No
+rdPrivacyProtectAdminContact :: Lens' RegisterDomain (Maybe Bool)
+rdPrivacyProtectAdminContact = lens _rdPrivacyProtectAdminContact (\ s a -> s{_rdPrivacyProtectAdminContact = a});
+
+-- | Reserved for future use.
+rdIdNLangCode :: Lens' RegisterDomain (Maybe Text)
+rdIdNLangCode = lens _rdIdNLangCode (\ s a -> s{_rdIdNLangCode = a});
+
 -- | The name of a domain.
 --
 -- Type: String
 --
 -- Default: None
 --
--- Constraints: The domain name can contain only the letters a through z, the
--- numbers 0 through 9, and hyphen (-). Internationalized Domain Names are not
--- supported.
+-- Constraints: The domain name can contain only the letters a through z,
+-- the numbers 0 through 9, and hyphen (-). Internationalized Domain Names
+-- are not supported.
 --
 -- Required: Yes
 rdDomainName :: Lens' RegisterDomain Text
-rdDomainName = lens _rdDomainName (\s a -> s { _rdDomainName = a })
+rdDomainName = lens _rdDomainName (\ s a -> s{_rdDomainName = a});
 
--- | The number of years the domain will be registered. Domains are registered for
--- a minimum of one year. The maximum period depends on the top-level domain.
+-- | The number of years the domain will be registered. Domains are
+-- registered for a minimum of one year. The maximum period depends on the
+-- top-level domain.
 --
 -- Type: Integer
 --
@@ -178,142 +223,123 @@
 --
 -- Required: Yes
 rdDurationInYears :: Lens' RegisterDomain Natural
-rdDurationInYears =
-    lens _rdDurationInYears (\s a -> s { _rdDurationInYears = a })
-        . _Nat
-
--- | Reserved for future use.
-rdIdnLangCode :: Lens' RegisterDomain (Maybe Text)
-rdIdnLangCode = lens _rdIdnLangCode (\s a -> s { _rdIdnLangCode = a })
-
--- | Whether you want to conceal contact information from WHOIS queries. If you
--- specify true, WHOIS ("who is") queries will return contact information for
--- our registrar partner, Gandi, instead of the contact information that you
--- enter.
---
--- Type: Boolean
---
--- Default: 'true'
---
--- Valid values: 'true' | 'false'
---
--- Required: No
-rdPrivacyProtectAdminContact :: Lens' RegisterDomain (Maybe Bool)
-rdPrivacyProtectAdminContact =
-    lens _rdPrivacyProtectAdminContact
-        (\s a -> s { _rdPrivacyProtectAdminContact = a })
-
--- | Whether you want to conceal contact information from WHOIS queries. If you
--- specify true, WHOIS ("who is") queries will return contact information for
--- our registrar partner, Gandi, instead of the contact information that you
--- enter.
---
--- Type: Boolean
---
--- Default: 'true'
---
--- Valid values: 'true' | 'false'
---
--- Required: No
-rdPrivacyProtectRegistrantContact :: Lens' RegisterDomain (Maybe Bool)
-rdPrivacyProtectRegistrantContact =
-    lens _rdPrivacyProtectRegistrantContact
-        (\s a -> s { _rdPrivacyProtectRegistrantContact = a })
+rdDurationInYears = lens _rdDurationInYears (\ s a -> s{_rdDurationInYears = a}) . _Nat;
 
--- | Whether you want to conceal contact information from WHOIS queries. If you
--- specify true, WHOIS ("who is") queries will return contact information for
--- our registrar partner, Gandi, instead of the contact information that you
--- enter.
---
--- Type: Boolean
+-- | Provides detailed contact information.
 --
--- Default: 'true'
+-- Type: Complex
 --
--- Valid values: 'true' | 'false'
+-- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType',
+-- 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State',
+-- 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
 --
--- Required: No
-rdPrivacyProtectTechContact :: Lens' RegisterDomain (Maybe Bool)
-rdPrivacyProtectTechContact =
-    lens _rdPrivacyProtectTechContact
-        (\s a -> s { _rdPrivacyProtectTechContact = a })
+-- Required: Yes
+rdAdminContact :: Lens' RegisterDomain ContactDetail
+rdAdminContact = lens _rdAdminContact (\ s a -> s{_rdAdminContact = a}) . _Sensitive;
 
 -- | Provides detailed contact information.
 --
 -- Type: Complex
 --
--- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType', 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State', 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
+-- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType',
+-- 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State',
+-- 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
 --
 -- Required: Yes
 rdRegistrantContact :: Lens' RegisterDomain ContactDetail
-rdRegistrantContact =
-    lens _rdRegistrantContact (\s a -> s { _rdRegistrantContact = a })
+rdRegistrantContact = lens _rdRegistrantContact (\ s a -> s{_rdRegistrantContact = a}) . _Sensitive;
 
 -- | Provides detailed contact information.
 --
 -- Type: Complex
 --
--- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType', 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State', 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
+-- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType',
+-- 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State',
+-- 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
 --
 -- Required: Yes
 rdTechContact :: Lens' RegisterDomain ContactDetail
-rdTechContact = lens _rdTechContact (\s a -> s { _rdTechContact = a })
+rdTechContact = lens _rdTechContact (\ s a -> s{_rdTechContact = a}) . _Sensitive;
 
-newtype RegisterDomainResponse = RegisterDomainResponse
-    { _rdrOperationId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+instance AWSRequest RegisterDomain where
+        type Sv RegisterDomain = Route53Domains
+        type Rs RegisterDomain = RegisterDomainResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 RegisterDomainResponse' <$>
+                   (pure (fromEnum s)) <*> (x .:> "OperationId"))
 
--- | 'RegisterDomainResponse' constructor.
+instance ToHeaders RegisterDomain where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Route53Domains_v20140515.RegisterDomain" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON RegisterDomain where
+        toJSON RegisterDomain'{..}
+          = object
+              ["PrivacyProtectTechContact" .=
+                 _rdPrivacyProtectTechContact,
+               "PrivacyProtectRegistrantContact" .=
+                 _rdPrivacyProtectRegistrantContact,
+               "AutoRenew" .= _rdAutoRenew,
+               "PrivacyProtectAdminContact" .=
+                 _rdPrivacyProtectAdminContact,
+               "IdnLangCode" .= _rdIdNLangCode,
+               "DomainName" .= _rdDomainName,
+               "DurationInYears" .= _rdDurationInYears,
+               "AdminContact" .= _rdAdminContact,
+               "RegistrantContact" .= _rdRegistrantContact,
+               "TechContact" .= _rdTechContact]
+
+instance ToPath RegisterDomain where
+        toPath = const "/"
+
+instance ToQuery RegisterDomain where
+        toQuery = const mempty
+
+-- | The RegisterDomain response includes the following element.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'registerDomainResponse' smart constructor.
+data RegisterDomainResponse = RegisterDomainResponse'
+    { _rdrsStatus      :: !Int
+    , _rdrsOperationId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RegisterDomainResponse' with the minimum fields required to make a request.
 --
--- * 'rdrOperationId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-registerDomainResponse :: Text -- ^ 'rdrOperationId'
-                       -> RegisterDomainResponse
-registerDomainResponse p1 = RegisterDomainResponse
-    { _rdrOperationId = p1
+-- * 'rdrsStatus'
+--
+-- * 'rdrsOperationId'
+registerDomainResponse
+    :: Int -- ^ 'rdrsStatus'
+    -> Text -- ^ 'rdrsOperationId'
+    -> RegisterDomainResponse
+registerDomainResponse pStatus_ pOperationId_ =
+    RegisterDomainResponse'
+    { _rdrsStatus = pStatus_
+    , _rdrsOperationId = pOperationId_
     }
 
--- | Identifier for tracking the progress of the request. To use this ID to query
--- the operation status, use GetOperationDetail.
+-- | The response status code.
+rdrsStatus :: Lens' RegisterDomainResponse Int
+rdrsStatus = lens _rdrsStatus (\ s a -> s{_rdrsStatus = a});
+
+-- | Identifier for tracking the progress of the request. To use this ID to
+-- query the operation status, use GetOperationDetail.
 --
 -- Type: String
 --
 -- Default: None
 --
 -- Constraints: Maximum 255 characters.
-rdrOperationId :: Lens' RegisterDomainResponse Text
-rdrOperationId = lens _rdrOperationId (\s a -> s { _rdrOperationId = a })
-
-instance ToPath RegisterDomain where
-    toPath = const "/"
-
-instance ToQuery RegisterDomain where
-    toQuery = const mempty
-
-instance ToHeaders RegisterDomain
-
-instance ToJSON RegisterDomain where
-    toJSON RegisterDomain{..} = object
-        [ "DomainName"                      .= _rdDomainName
-        , "IdnLangCode"                     .= _rdIdnLangCode
-        , "DurationInYears"                 .= _rdDurationInYears
-        , "AutoRenew"                       .= _rdAutoRenew
-        , "AdminContact"                    .= _rdAdminContact
-        , "RegistrantContact"               .= _rdRegistrantContact
-        , "TechContact"                     .= _rdTechContact
-        , "PrivacyProtectAdminContact"      .= _rdPrivacyProtectAdminContact
-        , "PrivacyProtectRegistrantContact" .= _rdPrivacyProtectRegistrantContact
-        , "PrivacyProtectTechContact"       .= _rdPrivacyProtectTechContact
-        ]
-
-instance AWSRequest RegisterDomain where
-    type Sv RegisterDomain = Route53Domains
-    type Rs RegisterDomain = RegisterDomainResponse
-
-    request  = post "RegisterDomain"
-    response = jsonResponse
-
-instance FromJSON RegisterDomainResponse where
-    parseJSON = withObject "RegisterDomainResponse" $ \o -> RegisterDomainResponse
-        <$> o .:  "OperationId"
+rdrsOperationId :: Lens' RegisterDomainResponse Text
+rdrsOperationId = lens _rdrsOperationId (\ s a -> s{_rdrsOperationId = a});
diff --git a/gen/Network/AWS/Route53Domains/RetrieveDomainAuthCode.hs b/gen/Network/AWS/Route53Domains/RetrieveDomainAuthCode.hs
--- a/gen/Network/AWS/Route53Domains/RetrieveDomainAuthCode.hs
+++ b/gen/Network/AWS/Route53Domains/RetrieveDomainAuthCode.hs
@@ -1,68 +1,67 @@
-{-# 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.Route53Domains.RetrieveDomainAuthCode
--- 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.
-
--- | This operation returns the AuthCode for the domain. To transfer a domain to
--- another registrar, you provide this value to the new registrar.
+-- This operation returns the AuthCode for the domain. To transfer a domain
+-- to another registrar, you provide this value to the new registrar.
 --
--- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-RetrieveDomainAuthCode.html>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/api-RetrieveDomainAuthCode.html AWS API Reference> for RetrieveDomainAuthCode.
 module Network.AWS.Route53Domains.RetrieveDomainAuthCode
     (
-    -- * Request
-      RetrieveDomainAuthCode
-    -- ** Request constructor
-    , retrieveDomainAuthCode
-    -- ** Request lenses
+    -- * Creating a Request
+      retrieveDomainAuthCode
+    , RetrieveDomainAuthCode
+    -- * Request Lenses
     , rdacDomainName
 
-    -- * Response
-    , RetrieveDomainAuthCodeResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , retrieveDomainAuthCodeResponse
-    -- ** Response lenses
-    , rdacrAuthCode
+    , RetrieveDomainAuthCodeResponse
+    -- * Response Lenses
+    , rdacrsStatus
+    , rdacrsAuthCode
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Route53Domains.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53Domains.Types
+import           Network.AWS.Route53Domains.Types.Product
 
-newtype RetrieveDomainAuthCode = RetrieveDomainAuthCode
+-- | The RetrieveDomainAuthCode request includes the following element.
+--
+-- /See:/ 'retrieveDomainAuthCode' smart constructor.
+newtype RetrieveDomainAuthCode = RetrieveDomainAuthCode'
     { _rdacDomainName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'RetrieveDomainAuthCode' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'RetrieveDomainAuthCode' with the minimum fields required to make a request.
 --
--- * 'rdacDomainName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-retrieveDomainAuthCode :: Text -- ^ 'rdacDomainName'
-                       -> RetrieveDomainAuthCode
-retrieveDomainAuthCode p1 = RetrieveDomainAuthCode
-    { _rdacDomainName = p1
+-- * 'rdacDomainName'
+retrieveDomainAuthCode
+    :: Text -- ^ 'rdacDomainName'
+    -> RetrieveDomainAuthCode
+retrieveDomainAuthCode pDomainName_ =
+    RetrieveDomainAuthCode'
+    { _rdacDomainName = pDomainName_
     }
 
 -- | The name of a domain.
@@ -71,56 +70,76 @@
 --
 -- Default: None
 --
--- Constraints: The domain name can contain only the letters a through z, the
--- numbers 0 through 9, and hyphen (-). Internationalized Domain Names are not
--- supported.
+-- Constraints: The domain name can contain only the letters a through z,
+-- the numbers 0 through 9, and hyphen (-). Internationalized Domain Names
+-- are not supported.
 --
 -- Required: Yes
 rdacDomainName :: Lens' RetrieveDomainAuthCode Text
-rdacDomainName = lens _rdacDomainName (\s a -> s { _rdacDomainName = a })
+rdacDomainName = lens _rdacDomainName (\ s a -> s{_rdacDomainName = a});
 
-newtype RetrieveDomainAuthCodeResponse = RetrieveDomainAuthCodeResponse
-    { _rdacrAuthCode :: Sensitive Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+instance AWSRequest RetrieveDomainAuthCode where
+        type Sv RetrieveDomainAuthCode = Route53Domains
+        type Rs RetrieveDomainAuthCode =
+             RetrieveDomainAuthCodeResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 RetrieveDomainAuthCodeResponse' <$>
+                   (pure (fromEnum s)) <*> (x .:> "AuthCode"))
 
--- | 'RetrieveDomainAuthCodeResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'rdacrAuthCode' @::@ 'Text'
---
-retrieveDomainAuthCodeResponse :: Text -- ^ 'rdacrAuthCode'
-                               -> RetrieveDomainAuthCodeResponse
-retrieveDomainAuthCodeResponse p1 = RetrieveDomainAuthCodeResponse
-    { _rdacrAuthCode = withIso _Sensitive (const id) p1
-    }
+instance ToHeaders RetrieveDomainAuthCode where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Route53Domains_v20140515.RetrieveDomainAuthCode" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | The authorization code for the domain.
---
--- Type: String
-rdacrAuthCode :: Lens' RetrieveDomainAuthCodeResponse Text
-rdacrAuthCode = lens _rdacrAuthCode (\s a -> s { _rdacrAuthCode = a }) . _Sensitive
+instance ToJSON RetrieveDomainAuthCode where
+        toJSON RetrieveDomainAuthCode'{..}
+          = object ["DomainName" .= _rdacDomainName]
 
 instance ToPath RetrieveDomainAuthCode where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery RetrieveDomainAuthCode where
-    toQuery = const mempty
-
-instance ToHeaders RetrieveDomainAuthCode
+        toQuery = const mempty
 
-instance ToJSON RetrieveDomainAuthCode where
-    toJSON RetrieveDomainAuthCode{..} = object
-        [ "DomainName" .= _rdacDomainName
-        ]
+-- | The RetrieveDomainAuthCode response includes the following element.
+--
+-- /See:/ 'retrieveDomainAuthCodeResponse' smart constructor.
+data RetrieveDomainAuthCodeResponse = RetrieveDomainAuthCodeResponse'
+    { _rdacrsStatus   :: !Int
+    , _rdacrsAuthCode :: !(Sensitive Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest RetrieveDomainAuthCode where
-    type Sv RetrieveDomainAuthCode = Route53Domains
-    type Rs RetrieveDomainAuthCode = RetrieveDomainAuthCodeResponse
+-- | Creates a value of 'RetrieveDomainAuthCodeResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rdacrsStatus'
+--
+-- * 'rdacrsAuthCode'
+retrieveDomainAuthCodeResponse
+    :: Int -- ^ 'rdacrsStatus'
+    -> Text -- ^ 'rdacrsAuthCode'
+    -> RetrieveDomainAuthCodeResponse
+retrieveDomainAuthCodeResponse pStatus_ pAuthCode_ =
+    RetrieveDomainAuthCodeResponse'
+    { _rdacrsStatus = pStatus_
+    , _rdacrsAuthCode = _Sensitive # pAuthCode_
+    }
 
-    request  = post "RetrieveDomainAuthCode"
-    response = jsonResponse
+-- | The response status code.
+rdacrsStatus :: Lens' RetrieveDomainAuthCodeResponse Int
+rdacrsStatus = lens _rdacrsStatus (\ s a -> s{_rdacrsStatus = a});
 
-instance FromJSON RetrieveDomainAuthCodeResponse where
-    parseJSON = withObject "RetrieveDomainAuthCodeResponse" $ \o -> RetrieveDomainAuthCodeResponse
-        <$> o .:  "AuthCode"
+-- | The authorization code for the domain.
+--
+-- Type: String
+rdacrsAuthCode :: Lens' RetrieveDomainAuthCodeResponse Text
+rdacrsAuthCode = lens _rdacrsAuthCode (\ s a -> s{_rdacrsAuthCode = a}) . _Sensitive;
diff --git a/gen/Network/AWS/Route53Domains/TransferDomain.hs b/gen/Network/AWS/Route53Domains/TransferDomain.hs
--- a/gen/Network/AWS/Route53Domains/TransferDomain.hs
+++ b/gen/Network/AWS/Route53Domains/TransferDomain.hs
@@ -1,167 +1,181 @@
-{-# 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.Route53Domains.TransferDomain
--- 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.
-
--- | This operation transfers a domain from another registrar to Amazon Route 53.
--- When the transfer is complete, the domain is registered with the AWS
+-- This operation transfers a domain from another registrar to Amazon Route
+-- 53. When the transfer is complete, the domain is registered with the AWS
 -- registrar partner, Gandi.
 --
 -- For transfer requirements, a detailed procedure, and information about
--- viewing the status of a domain transfer, see <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-transfer-to-route-53.html Transferring Registration for aDomain to Amazon Route 53> in the Amazon Route 53 Developer Guide.
+-- viewing the status of a domain transfer, see
+-- <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-transfer-to-route-53.html Transferring Registration for a Domain to Amazon Route 53>
+-- in the Amazon Route 53 Developer Guide.
 --
--- If the registrar for your domain is also the DNS service provider for the
--- domain, we highly recommend that you consider transferring your DNS service
--- to Amazon Route 53 or to another DNS service provider before you transfer
--- your registration. Some registrars provide free DNS service when you purchase
--- a domain registration. When you transfer the registration, the previous
--- registrar will not renew your domain registration and could end your DNS
--- service at any time.
+-- If the registrar for your domain is also the DNS service provider for
+-- the domain, we highly recommend that you consider transferring your DNS
+-- service to Amazon Route 53 or to another DNS service provider before you
+-- transfer your registration. Some registrars provide free DNS service
+-- when you purchase a domain registration. When you transfer the
+-- registration, the previous registrar will not renew your domain
+-- registration and could end your DNS service at any time.
 --
--- Caution! If the registrar for your domain is also the DNS service provider
--- for the domain and you don't transfer DNS service to another provider, your
--- website, email, and the web applications associated with the domain might
--- become unavailable. If the transfer is successful, this method returns an
--- operation ID that you can use to track the progress and completion of the
--- action. If the transfer doesn't complete successfully, the domain registrant
--- will be notified by email.
+-- Caution! If the registrar for your domain is also the DNS service
+-- provider for the domain and you don\'t transfer DNS service to another
+-- provider, your website, email, and the web applications associated with
+-- the domain might become unavailable.
 --
--- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-TransferDomain.html>
+-- If the transfer is successful, this method returns an operation ID that
+-- you can use to track the progress and completion of the action. If the
+-- transfer doesn\'t complete successfully, the domain registrant will be
+-- notified by email.
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/api-TransferDomain.html AWS API Reference> for TransferDomain.
 module Network.AWS.Route53Domains.TransferDomain
     (
-    -- * Request
-      TransferDomain
-    -- ** Request constructor
-    , transferDomain
-    -- ** Request lenses
-    , tdAdminContact
-    , tdAuthCode
+    -- * Creating a Request
+      transferDomain
+    , TransferDomain
+    -- * Request Lenses
+    , tdPrivacyProtectTechContact
+    , tdPrivacyProtectRegistrantContact
     , tdAutoRenew
+    , tdPrivacyProtectAdminContact
+    , tdIdNLangCode
+    , tdAuthCode
+    , tdNameservers
     , tdDomainName
     , tdDurationInYears
-    , tdIdnLangCode
-    , tdNameservers
-    , tdPrivacyProtectAdminContact
-    , tdPrivacyProtectRegistrantContact
-    , tdPrivacyProtectTechContact
+    , tdAdminContact
     , tdRegistrantContact
     , tdTechContact
 
-    -- * Response
-    , TransferDomainResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , transferDomainResponse
-    -- ** Response lenses
-    , tdrOperationId
+    , TransferDomainResponse
+    -- * Response Lenses
+    , tdrsStatus
+    , tdrsOperationId
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Route53Domains.Types
-import qualified GHC.Exts
-
-data TransferDomain = TransferDomain
-    { _tdAdminContact                    :: ContactDetail
-    , _tdAuthCode                        :: Maybe (Sensitive Text)
-    , _tdAutoRenew                       :: Maybe Bool
-    , _tdDomainName                      :: Text
-    , _tdDurationInYears                 :: Nat
-    , _tdIdnLangCode                     :: Maybe Text
-    , _tdNameservers                     :: List "Nameservers" Nameserver
-    , _tdPrivacyProtectAdminContact      :: Maybe Bool
-    , _tdPrivacyProtectRegistrantContact :: Maybe Bool
-    , _tdPrivacyProtectTechContact       :: Maybe Bool
-    , _tdRegistrantContact               :: ContactDetail
-    , _tdTechContact                     :: ContactDetail
-    } deriving (Eq, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53Domains.Types
+import           Network.AWS.Route53Domains.Types.Product
 
--- | 'TransferDomain' constructor.
+-- | The TransferDomain request includes the following elements.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'transferDomain' smart constructor.
+data TransferDomain = TransferDomain'
+    { _tdPrivacyProtectTechContact       :: !(Maybe Bool)
+    , _tdPrivacyProtectRegistrantContact :: !(Maybe Bool)
+    , _tdAutoRenew                       :: !(Maybe Bool)
+    , _tdPrivacyProtectAdminContact      :: !(Maybe Bool)
+    , _tdIdNLangCode                     :: !(Maybe Text)
+    , _tdAuthCode                        :: !(Maybe (Sensitive Text))
+    , _tdNameservers                     :: !(Maybe [Nameserver])
+    , _tdDomainName                      :: !Text
+    , _tdDurationInYears                 :: !Nat
+    , _tdAdminContact                    :: !(Sensitive ContactDetail)
+    , _tdRegistrantContact               :: !(Sensitive ContactDetail)
+    , _tdTechContact                     :: !(Sensitive ContactDetail)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TransferDomain' with the minimum fields required to make a request.
 --
--- * 'tdAdminContact' @::@ 'ContactDetail'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'tdAuthCode' @::@ 'Maybe' 'Text'
+-- * 'tdPrivacyProtectTechContact'
 --
--- * 'tdAutoRenew' @::@ 'Maybe' 'Bool'
+-- * 'tdPrivacyProtectRegistrantContact'
 --
--- * 'tdDomainName' @::@ 'Text'
+-- * 'tdAutoRenew'
 --
--- * 'tdDurationInYears' @::@ 'Natural'
+-- * 'tdPrivacyProtectAdminContact'
 --
--- * 'tdIdnLangCode' @::@ 'Maybe' 'Text'
+-- * 'tdIdNLangCode'
 --
--- * 'tdNameservers' @::@ ['Nameserver']
+-- * 'tdAuthCode'
 --
--- * 'tdPrivacyProtectAdminContact' @::@ 'Maybe' 'Bool'
+-- * 'tdNameservers'
 --
--- * 'tdPrivacyProtectRegistrantContact' @::@ 'Maybe' 'Bool'
+-- * 'tdDomainName'
 --
--- * 'tdPrivacyProtectTechContact' @::@ 'Maybe' 'Bool'
+-- * 'tdDurationInYears'
 --
--- * 'tdRegistrantContact' @::@ 'ContactDetail'
+-- * 'tdAdminContact'
 --
--- * 'tdTechContact' @::@ 'ContactDetail'
+-- * 'tdRegistrantContact'
 --
-transferDomain :: Text -- ^ 'tdDomainName'
-               -> Natural -- ^ 'tdDurationInYears'
-               -> ContactDetail -- ^ 'tdAdminContact'
-               -> ContactDetail -- ^ 'tdRegistrantContact'
-               -> ContactDetail -- ^ 'tdTechContact'
-               -> TransferDomain
-transferDomain p1 p2 p3 p4 p5 = TransferDomain
-    { _tdDomainName                      = p1
-    , _tdDurationInYears                 = withIso _Nat (const id) p2
-    , _tdAdminContact                    = p3
-    , _tdRegistrantContact               = p4
-    , _tdTechContact                     = p5
-    , _tdIdnLangCode                     = Nothing
-    , _tdNameservers                     = mempty
-    , _tdAuthCode                        = Nothing
-    , _tdAutoRenew                       = Nothing
-    , _tdPrivacyProtectAdminContact      = Nothing
+-- * 'tdTechContact'
+transferDomain
+    :: Text -- ^ 'tdDomainName'
+    -> Natural -- ^ 'tdDurationInYears'
+    -> ContactDetail -- ^ 'tdAdminContact'
+    -> ContactDetail -- ^ 'tdRegistrantContact'
+    -> ContactDetail -- ^ 'tdTechContact'
+    -> TransferDomain
+transferDomain pDomainName_ pDurationInYears_ pAdminContact_ pRegistrantContact_ pTechContact_ =
+    TransferDomain'
+    { _tdPrivacyProtectTechContact = Nothing
     , _tdPrivacyProtectRegistrantContact = Nothing
-    , _tdPrivacyProtectTechContact       = Nothing
+    , _tdAutoRenew = Nothing
+    , _tdPrivacyProtectAdminContact = Nothing
+    , _tdIdNLangCode = Nothing
+    , _tdAuthCode = Nothing
+    , _tdNameservers = Nothing
+    , _tdDomainName = pDomainName_
+    , _tdDurationInYears = _Nat # pDurationInYears_
+    , _tdAdminContact = _Sensitive # pAdminContact_
+    , _tdRegistrantContact = _Sensitive # pRegistrantContact_
+    , _tdTechContact = _Sensitive # pTechContact_
     }
 
--- | Provides detailed contact information.
+-- | Whether you want to conceal contact information from WHOIS queries. If
+-- you specify true, WHOIS (\"who is\") queries will return contact
+-- information for our registrar partner, Gandi, instead of the contact
+-- information that you enter.
 --
--- Type: Complex
+-- Type: Boolean
 --
--- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType', 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State', 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
+-- Default: 'true'
 --
--- Required: Yes
-tdAdminContact :: Lens' TransferDomain ContactDetail
-tdAdminContact = lens _tdAdminContact (\s a -> s { _tdAdminContact = a })
+-- Valid values: 'true' | 'false'
+--
+-- Required: No
+tdPrivacyProtectTechContact :: Lens' TransferDomain (Maybe Bool)
+tdPrivacyProtectTechContact = lens _tdPrivacyProtectTechContact (\ s a -> s{_tdPrivacyProtectTechContact = a});
 
--- | The authorization code for the domain. You get this value from the current
--- registrar.
+-- | Whether you want to conceal contact information from WHOIS queries. If
+-- you specify true, WHOIS (\"who is\") queries will return contact
+-- information for our registrar partner, Gandi, instead of the contact
+-- information that you enter.
 --
--- Type: String
+-- Type: Boolean
 --
--- Required: Yes
-tdAuthCode :: Lens' TransferDomain (Maybe Text)
-tdAuthCode = lens _tdAuthCode (\s a -> s { _tdAuthCode = a }) . mapping _Sensitive
+-- Default: 'true'
+--
+-- Valid values: 'true' | 'false'
+--
+-- Required: No
+tdPrivacyProtectRegistrantContact :: Lens' TransferDomain (Maybe Bool)
+tdPrivacyProtectRegistrantContact = lens _tdPrivacyProtectRegistrantContact (\ s a -> s{_tdPrivacyProtectRegistrantContact = a});
 
 -- | Indicates whether the domain will be automatically renewed (true) or not
 -- (false). Autorenewal only takes effect after the account is charged.
@@ -174,40 +188,35 @@
 --
 -- Required: No
 tdAutoRenew :: Lens' TransferDomain (Maybe Bool)
-tdAutoRenew = lens _tdAutoRenew (\s a -> s { _tdAutoRenew = a })
+tdAutoRenew = lens _tdAutoRenew (\ s a -> s{_tdAutoRenew = a});
 
--- | The name of a domain.
+-- | Whether you want to conceal contact information from WHOIS queries. If
+-- you specify true, WHOIS (\"who is\") queries will return contact
+-- information for our registrar partner, Gandi, instead of the contact
+-- information that you enter.
 --
--- Type: String
+-- Type: Boolean
 --
--- Default: None
+-- Default: 'true'
 --
--- Constraints: The domain name can contain only the letters a through z, the
--- numbers 0 through 9, and hyphen (-). Internationalized Domain Names are not
--- supported.
+-- Valid values: 'true' | 'false'
 --
--- Required: Yes
-tdDomainName :: Lens' TransferDomain Text
-tdDomainName = lens _tdDomainName (\s a -> s { _tdDomainName = a })
+-- Required: No
+tdPrivacyProtectAdminContact :: Lens' TransferDomain (Maybe Bool)
+tdPrivacyProtectAdminContact = lens _tdPrivacyProtectAdminContact (\ s a -> s{_tdPrivacyProtectAdminContact = a});
 
--- | The number of years the domain will be registered. Domains are registered for
--- a minimum of one year. The maximum period depends on the top-level domain.
---
--- Type: Integer
---
--- Default: 1
+-- | Reserved for future use.
+tdIdNLangCode :: Lens' TransferDomain (Maybe Text)
+tdIdNLangCode = lens _tdIdNLangCode (\ s a -> s{_tdIdNLangCode = a});
+
+-- | The authorization code for the domain. You get this value from the
+-- current registrar.
 --
--- Valid values: Integer from 1 to 10
+-- Type: String
 --
 -- Required: Yes
-tdDurationInYears :: Lens' TransferDomain Natural
-tdDurationInYears =
-    lens _tdDurationInYears (\s a -> s { _tdDurationInYears = a })
-        . _Nat
-
--- | Reserved for future use.
-tdIdnLangCode :: Lens' TransferDomain (Maybe Text)
-tdIdnLangCode = lens _tdIdnLangCode (\s a -> s { _tdIdnLangCode = a })
+tdAuthCode :: Lens' TransferDomain (Maybe Text)
+tdAuthCode = lens _tdAuthCode (\ s a -> s{_tdAuthCode = a}) . mapping _Sensitive;
 
 -- | Contains details for the host and glue IP addresses.
 --
@@ -217,138 +226,153 @@
 --
 -- Required: No
 tdNameservers :: Lens' TransferDomain [Nameserver]
-tdNameservers = lens _tdNameservers (\s a -> s { _tdNameservers = a }) . _List
+tdNameservers = lens _tdNameservers (\ s a -> s{_tdNameservers = a}) . _Default . _Coerce;
 
--- | Whether you want to conceal contact information from WHOIS queries. If you
--- specify true, WHOIS ("who is") queries will return contact information for
--- our registrar partner, Gandi, instead of the contact information that you
--- enter.
+-- | The name of a domain.
 --
--- Type: Boolean
+-- Type: String
 --
--- Default: 'true'
+-- Default: None
 --
--- Valid values: 'true' | 'false'
+-- Constraints: The domain name can contain only the letters a through z,
+-- the numbers 0 through 9, and hyphen (-). Internationalized Domain Names
+-- are not supported.
 --
--- Required: No
-tdPrivacyProtectAdminContact :: Lens' TransferDomain (Maybe Bool)
-tdPrivacyProtectAdminContact =
-    lens _tdPrivacyProtectAdminContact
-        (\s a -> s { _tdPrivacyProtectAdminContact = a })
+-- Required: Yes
+tdDomainName :: Lens' TransferDomain Text
+tdDomainName = lens _tdDomainName (\ s a -> s{_tdDomainName = a});
 
--- | Whether you want to conceal contact information from WHOIS queries. If you
--- specify true, WHOIS ("who is") queries will return contact information for
--- our registrar partner, Gandi, instead of the contact information that you
--- enter.
+-- | The number of years the domain will be registered. Domains are
+-- registered for a minimum of one year. The maximum period depends on the
+-- top-level domain.
 --
--- Type: Boolean
+-- Type: Integer
 --
--- Default: 'true'
+-- Default: 1
 --
--- Valid values: 'true' | 'false'
+-- Valid values: Integer from 1 to 10
 --
--- Required: No
-tdPrivacyProtectRegistrantContact :: Lens' TransferDomain (Maybe Bool)
-tdPrivacyProtectRegistrantContact =
-    lens _tdPrivacyProtectRegistrantContact
-        (\s a -> s { _tdPrivacyProtectRegistrantContact = a })
+-- Required: Yes
+tdDurationInYears :: Lens' TransferDomain Natural
+tdDurationInYears = lens _tdDurationInYears (\ s a -> s{_tdDurationInYears = a}) . _Nat;
 
--- | Whether you want to conceal contact information from WHOIS queries. If you
--- specify true, WHOIS ("who is") queries will return contact information for
--- our registrar partner, Gandi, instead of the contact information that you
--- enter.
---
--- Type: Boolean
+-- | Provides detailed contact information.
 --
--- Default: 'true'
+-- Type: Complex
 --
--- Valid values: 'true' | 'false'
+-- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType',
+-- 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State',
+-- 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
 --
--- Required: No
-tdPrivacyProtectTechContact :: Lens' TransferDomain (Maybe Bool)
-tdPrivacyProtectTechContact =
-    lens _tdPrivacyProtectTechContact
-        (\s a -> s { _tdPrivacyProtectTechContact = a })
+-- Required: Yes
+tdAdminContact :: Lens' TransferDomain ContactDetail
+tdAdminContact = lens _tdAdminContact (\ s a -> s{_tdAdminContact = a}) . _Sensitive;
 
 -- | Provides detailed contact information.
 --
 -- Type: Complex
 --
--- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType', 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State', 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
+-- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType',
+-- 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State',
+-- 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
 --
 -- Required: Yes
 tdRegistrantContact :: Lens' TransferDomain ContactDetail
-tdRegistrantContact =
-    lens _tdRegistrantContact (\s a -> s { _tdRegistrantContact = a })
+tdRegistrantContact = lens _tdRegistrantContact (\ s a -> s{_tdRegistrantContact = a}) . _Sensitive;
 
 -- | Provides detailed contact information.
 --
 -- Type: Complex
 --
--- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType', 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State', 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
+-- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType',
+-- 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State',
+-- 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
 --
 -- Required: Yes
 tdTechContact :: Lens' TransferDomain ContactDetail
-tdTechContact = lens _tdTechContact (\s a -> s { _tdTechContact = a })
+tdTechContact = lens _tdTechContact (\ s a -> s{_tdTechContact = a}) . _Sensitive;
 
-newtype TransferDomainResponse = TransferDomainResponse
-    { _tdrOperationId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+instance AWSRequest TransferDomain where
+        type Sv TransferDomain = Route53Domains
+        type Rs TransferDomain = TransferDomainResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 TransferDomainResponse' <$>
+                   (pure (fromEnum s)) <*> (x .:> "OperationId"))
 
--- | 'TransferDomainResponse' constructor.
+instance ToHeaders TransferDomain where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Route53Domains_v20140515.TransferDomain" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON TransferDomain where
+        toJSON TransferDomain'{..}
+          = object
+              ["PrivacyProtectTechContact" .=
+                 _tdPrivacyProtectTechContact,
+               "PrivacyProtectRegistrantContact" .=
+                 _tdPrivacyProtectRegistrantContact,
+               "AutoRenew" .= _tdAutoRenew,
+               "PrivacyProtectAdminContact" .=
+                 _tdPrivacyProtectAdminContact,
+               "IdnLangCode" .= _tdIdNLangCode,
+               "AuthCode" .= _tdAuthCode,
+               "Nameservers" .= _tdNameservers,
+               "DomainName" .= _tdDomainName,
+               "DurationInYears" .= _tdDurationInYears,
+               "AdminContact" .= _tdAdminContact,
+               "RegistrantContact" .= _tdRegistrantContact,
+               "TechContact" .= _tdTechContact]
+
+instance ToPath TransferDomain where
+        toPath = const "/"
+
+instance ToQuery TransferDomain where
+        toQuery = const mempty
+
+-- | The TranserDomain response includes the following element.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'transferDomainResponse' smart constructor.
+data TransferDomainResponse = TransferDomainResponse'
+    { _tdrsStatus      :: !Int
+    , _tdrsOperationId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TransferDomainResponse' with the minimum fields required to make a request.
 --
--- * 'tdrOperationId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-transferDomainResponse :: Text -- ^ 'tdrOperationId'
-                       -> TransferDomainResponse
-transferDomainResponse p1 = TransferDomainResponse
-    { _tdrOperationId = p1
+-- * 'tdrsStatus'
+--
+-- * 'tdrsOperationId'
+transferDomainResponse
+    :: Int -- ^ 'tdrsStatus'
+    -> Text -- ^ 'tdrsOperationId'
+    -> TransferDomainResponse
+transferDomainResponse pStatus_ pOperationId_ =
+    TransferDomainResponse'
+    { _tdrsStatus = pStatus_
+    , _tdrsOperationId = pOperationId_
     }
 
--- | Identifier for tracking the progress of the request. To use this ID to query
--- the operation status, use GetOperationDetail.
+-- | The response status code.
+tdrsStatus :: Lens' TransferDomainResponse Int
+tdrsStatus = lens _tdrsStatus (\ s a -> s{_tdrsStatus = a});
+
+-- | Identifier for tracking the progress of the request. To use this ID to
+-- query the operation status, use GetOperationDetail.
 --
 -- Type: String
 --
 -- Default: None
 --
 -- Constraints: Maximum 255 characters.
-tdrOperationId :: Lens' TransferDomainResponse Text
-tdrOperationId = lens _tdrOperationId (\s a -> s { _tdrOperationId = a })
-
-instance ToPath TransferDomain where
-    toPath = const "/"
-
-instance ToQuery TransferDomain where
-    toQuery = const mempty
-
-instance ToHeaders TransferDomain
-
-instance ToJSON TransferDomain where
-    toJSON TransferDomain{..} = object
-        [ "DomainName"                      .= _tdDomainName
-        , "IdnLangCode"                     .= _tdIdnLangCode
-        , "DurationInYears"                 .= _tdDurationInYears
-        , "Nameservers"                     .= _tdNameservers
-        , "AuthCode"                        .= _tdAuthCode
-        , "AutoRenew"                       .= _tdAutoRenew
-        , "AdminContact"                    .= _tdAdminContact
-        , "RegistrantContact"               .= _tdRegistrantContact
-        , "TechContact"                     .= _tdTechContact
-        , "PrivacyProtectAdminContact"      .= _tdPrivacyProtectAdminContact
-        , "PrivacyProtectRegistrantContact" .= _tdPrivacyProtectRegistrantContact
-        , "PrivacyProtectTechContact"       .= _tdPrivacyProtectTechContact
-        ]
-
-instance AWSRequest TransferDomain where
-    type Sv TransferDomain = Route53Domains
-    type Rs TransferDomain = TransferDomainResponse
-
-    request  = post "TransferDomain"
-    response = jsonResponse
-
-instance FromJSON TransferDomainResponse where
-    parseJSON = withObject "TransferDomainResponse" $ \o -> TransferDomainResponse
-        <$> o .:  "OperationId"
+tdrsOperationId :: Lens' TransferDomainResponse Text
+tdrsOperationId = lens _tdrsOperationId (\ s a -> s{_tdrsOperationId = a});
diff --git a/gen/Network/AWS/Route53Domains/Types.hs b/gen/Network/AWS/Route53Domains/Types.hs
--- a/gen/Network/AWS/Route53Domains/Types.hs
+++ b/gen/Network/AWS/Route53Domains/Types.hs
@@ -1,1730 +1,167 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-{-# LANGUAGE ViewPatterns                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.Route53Domains.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/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
-module Network.AWS.Route53Domains.Types
-    (
-    -- * Service
-      Route53Domains
-    -- ** Error
-    , JSONError
-
-    -- * DomainSummary
-    , DomainSummary
-    , domainSummary
-    , dsAutoRenew
-    , dsDomainName
-    , dsExpiry
-    , dsTransferLock
-
-    -- * Tag
-    , Tag
-    , tag
-    , tagKey
-    , tagValue
-
-    -- * ExtraParamName
-    , ExtraParamName (..)
-
-    -- * Nameserver
-    , Nameserver
-    , nameserver
-    , nGlueIps
-    , nName
-
-    -- * OperationStatus
-    , OperationStatus (..)
-
-    -- * DomainAvailability
-    , DomainAvailability (..)
-
-    -- * OperationType
-    , OperationType (..)
-
-    -- * CountryCode
-    , CountryCode (..)
-
-    -- * ExtraParam
-    , ExtraParam
-    , extraParam
-    , epName
-    , epValue
-
-    -- * ContactType
-    , ContactType (..)
-
-    -- * ContactDetail
-    , ContactDetail
-    , contactDetail
-    , cdAddressLine1
-    , cdAddressLine2
-    , cdCity
-    , cdContactType
-    , cdCountryCode
-    , cdEmail
-    , cdExtraParams
-    , cdFax
-    , cdFirstName
-    , cdLastName
-    , cdOrganizationName
-    , cdPhoneNumber
-    , cdState
-    , cdZipCode
-
-    -- * OperationSummary
-    , OperationSummary
-    , operationSummary
-    , osOperationId
-    , osStatus
-    , osSubmittedDate
-    , osType
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Signing
-import qualified GHC.Exts
-
--- | Version @2014-05-15@ of the Amazon Route 53 Domains service.
-data Route53Domains
-
-instance AWSService Route53Domains where
-    type Sg Route53Domains = V4
-    type Er Route53Domains = JSONError
-
-    service = service'
-      where
-        service' :: Service Route53Domains
-        service' = Service
-            { _svcAbbrev       = "Route53Domains"
-            , _svcPrefix       = "route53domains"
-            , _svcVersion      = "2014-05-15"
-            , _svcTargetPrefix = Just "Route53Domains_v20140515"
-            , _svcJSONVersion  = Just "1.1"
-            , _svcHandle       = handle
-            , _svcRetry        = retry
-            }
-
-        handle :: Status
-               -> Maybe (LazyByteString -> ServiceError JSONError)
-        handle = jsonError statusSuccess service'
-
-        retry :: Retry Route53Domains
-        retry = Exponential
-            { _retryBase     = 0.05
-            , _retryGrowth   = 2
-            , _retryAttempts = 5
-            , _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 DomainSummary = DomainSummary
-    { _dsAutoRenew    :: Maybe Bool
-    , _dsDomainName   :: Text
-    , _dsExpiry       :: Maybe POSIX
-    , _dsTransferLock :: Maybe Bool
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'DomainSummary' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dsAutoRenew' @::@ 'Maybe' 'Bool'
---
--- * 'dsDomainName' @::@ 'Text'
---
--- * 'dsExpiry' @::@ 'Maybe' 'UTCTime'
---
--- * 'dsTransferLock' @::@ 'Maybe' 'Bool'
---
-domainSummary :: Text -- ^ 'dsDomainName'
-              -> DomainSummary
-domainSummary p1 = DomainSummary
-    { _dsDomainName   = p1
-    , _dsAutoRenew    = Nothing
-    , _dsTransferLock = Nothing
-    , _dsExpiry       = Nothing
-    }
-
--- | Indicates whether the domain is automatically renewed upon expiration.
---
--- Type: Boolean
---
--- Valid values: 'True' | 'False'
-dsAutoRenew :: Lens' DomainSummary (Maybe Bool)
-dsAutoRenew = lens _dsAutoRenew (\s a -> s { _dsAutoRenew = a })
-
--- | The name of a domain.
---
--- Type: String
-dsDomainName :: Lens' DomainSummary Text
-dsDomainName = lens _dsDomainName (\s a -> s { _dsDomainName = a })
-
--- | Expiration date of the domain in Coordinated Universal Time (UTC).
---
--- Type: Long
-dsExpiry :: Lens' DomainSummary (Maybe UTCTime)
-dsExpiry = lens _dsExpiry (\s a -> s { _dsExpiry = a }) . mapping _Time
-
--- | Indicates whether a domain is locked from unauthorized transfer to another
--- party.
---
--- Type: Boolean
---
--- Valid values: 'True' | 'False'
-dsTransferLock :: Lens' DomainSummary (Maybe Bool)
-dsTransferLock = lens _dsTransferLock (\s a -> s { _dsTransferLock = a })
-
-instance FromJSON DomainSummary where
-    parseJSON = withObject "DomainSummary" $ \o -> DomainSummary
-        <$> o .:? "AutoRenew"
-        <*> o .:  "DomainName"
-        <*> o .:? "Expiry"
-        <*> o .:? "TransferLock"
-
-instance ToJSON DomainSummary where
-    toJSON DomainSummary{..} = object
-        [ "DomainName"   .= _dsDomainName
-        , "AutoRenew"    .= _dsAutoRenew
-        , "TransferLock" .= _dsTransferLock
-        , "Expiry"       .= _dsExpiry
-        ]
-
-data Tag = Tag
-    { _tagKey   :: Maybe Text
-    , _tagValue :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'Tag' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'tagKey' @::@ 'Maybe' 'Text'
---
--- * 'tagValue' @::@ 'Maybe' 'Text'
---
-tag :: Tag
-tag = Tag
-    { _tagKey   = Nothing
-    , _tagValue = Nothing
-    }
-
--- | The key (name) of a tag.
---
--- Type: String
---
--- Default: None
---
--- Valid values: A-Z, a-z, 0-9, space, ".:/=+\-@"
---
--- Constraints: Each key can be 1-128 characters long.
---
--- Required: Yes
-tagKey :: Lens' Tag (Maybe Text)
-tagKey = lens _tagKey (\s a -> s { _tagKey = a })
-
--- | The value of a tag.
---
--- Type: String
---
--- Default: None
---
--- Valid values: A-Z, a-z, 0-9, space, ".:/=+\-@"
---
--- Constraints: Each value can be 0-256 characters long.
---
--- Required: Yes
-tagValue :: Lens' Tag (Maybe Text)
-tagValue = lens _tagValue (\s a -> s { _tagValue = a })
-
-instance FromJSON Tag where
-    parseJSON = withObject "Tag" $ \o -> Tag
-        <$> o .:? "Key"
-        <*> o .:? "Value"
-
-instance ToJSON Tag where
-    toJSON Tag{..} = object
-        [ "Key"   .= _tagKey
-        , "Value" .= _tagValue
-        ]
-
-data ExtraParamName
-    = AuIdNumber           -- ^ AU_ID_NUMBER
-    | AuIdType             -- ^ AU_ID_TYPE
-    | BirthCity            -- ^ BIRTH_CITY
-    | BirthCountry         -- ^ BIRTH_COUNTRY
-    | BirthDateInYyyyMmDd  -- ^ BIRTH_DATE_IN_YYYY_MM_DD
-    | BirthDepartment      -- ^ BIRTH_DEPARTMENT
-    | BrandNumber          -- ^ BRAND_NUMBER
-    | CaLegalType          -- ^ CA_LEGAL_TYPE
-    | DocumentNumber       -- ^ DOCUMENT_NUMBER
-    | DunsNumber           -- ^ DUNS_NUMBER
-    | EsIdentification     -- ^ ES_IDENTIFICATION
-    | EsIdentificationType -- ^ ES_IDENTIFICATION_TYPE
-    | EsLegalForm          -- ^ ES_LEGAL_FORM
-    | FiBusinessNumber     -- ^ FI_BUSINESS_NUMBER
-    | FiIdNumber           -- ^ FI_ID_NUMBER
-    | ItPin                -- ^ IT_PIN
-    | RuPassportData       -- ^ RU_PASSPORT_DATA
-    | SeIdNumber           -- ^ SE_ID_NUMBER
-    | SgIdNumber           -- ^ SG_ID_NUMBER
-    | VatNumber            -- ^ VAT_NUMBER
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable ExtraParamName
-
-instance FromText ExtraParamName where
-    parser = takeLowerText >>= \case
-        "au_id_number"             -> pure AuIdNumber
-        "au_id_type"               -> pure AuIdType
-        "birth_city"               -> pure BirthCity
-        "birth_country"            -> pure BirthCountry
-        "birth_date_in_yyyy_mm_dd" -> pure BirthDateInYyyyMmDd
-        "birth_department"         -> pure BirthDepartment
-        "brand_number"             -> pure BrandNumber
-        "ca_legal_type"            -> pure CaLegalType
-        "document_number"          -> pure DocumentNumber
-        "duns_number"              -> pure DunsNumber
-        "es_identification"        -> pure EsIdentification
-        "es_identification_type"   -> pure EsIdentificationType
-        "es_legal_form"            -> pure EsLegalForm
-        "fi_business_number"       -> pure FiBusinessNumber
-        "fi_id_number"             -> pure FiIdNumber
-        "it_pin"                   -> pure ItPin
-        "ru_passport_data"         -> pure RuPassportData
-        "se_id_number"             -> pure SeIdNumber
-        "sg_id_number"             -> pure SgIdNumber
-        "vat_number"               -> pure VatNumber
-        e                          -> fail $
-            "Failure parsing ExtraParamName from " ++ show e
-
-instance ToText ExtraParamName where
-    toText = \case
-        AuIdNumber           -> "AU_ID_NUMBER"
-        AuIdType             -> "AU_ID_TYPE"
-        BirthCity            -> "BIRTH_CITY"
-        BirthCountry         -> "BIRTH_COUNTRY"
-        BirthDateInYyyyMmDd  -> "BIRTH_DATE_IN_YYYY_MM_DD"
-        BirthDepartment      -> "BIRTH_DEPARTMENT"
-        BrandNumber          -> "BRAND_NUMBER"
-        CaLegalType          -> "CA_LEGAL_TYPE"
-        DocumentNumber       -> "DOCUMENT_NUMBER"
-        DunsNumber           -> "DUNS_NUMBER"
-        EsIdentification     -> "ES_IDENTIFICATION"
-        EsIdentificationType -> "ES_IDENTIFICATION_TYPE"
-        EsLegalForm          -> "ES_LEGAL_FORM"
-        FiBusinessNumber     -> "FI_BUSINESS_NUMBER"
-        FiIdNumber           -> "FI_ID_NUMBER"
-        ItPin                -> "IT_PIN"
-        RuPassportData       -> "RU_PASSPORT_DATA"
-        SeIdNumber           -> "SE_ID_NUMBER"
-        SgIdNumber           -> "SG_ID_NUMBER"
-        VatNumber            -> "VAT_NUMBER"
-
-instance ToByteString ExtraParamName
-instance ToHeader     ExtraParamName
-instance ToQuery      ExtraParamName
-
-instance FromJSON ExtraParamName where
-    parseJSON = parseJSONText "ExtraParamName"
-
-instance ToJSON ExtraParamName where
-    toJSON = toJSONText
-
-data Nameserver = Nameserver
-    { _nGlueIps :: List "GlueIps" Text
-    , _nName    :: Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'Nameserver' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'nGlueIps' @::@ ['Text']
---
--- * 'nName' @::@ 'Text'
---
-nameserver :: Text -- ^ 'nName'
-           -> Nameserver
-nameserver p1 = Nameserver
-    { _nName    = p1
-    , _nGlueIps = mempty
-    }
-
--- | Glue IP address of a name server entry. Glue IP addresses are required only
--- when the name of the name server is a subdomain of the domain. For example,
--- if your domain is example.com and the name server for the domain is
--- ns.example.com, you need to specify the IP address for ns.example.com.
---
--- Type: List of IP addresses.
---
--- Constraints: The list can contain only one IPv4 and one IPv6 address.
---
--- Parent: 'Nameservers'
-nGlueIps :: Lens' Nameserver [Text]
-nGlueIps = lens _nGlueIps (\s a -> s { _nGlueIps = a }) . _List
-
--- | The fully qualified host name of the name server.
---
--- Type: String
---
--- Constraint: Maximum 255 characterss
---
--- Parent: 'Nameservers'
-nName :: Lens' Nameserver Text
-nName = lens _nName (\s a -> s { _nName = a })
-
-instance FromJSON Nameserver where
-    parseJSON = withObject "Nameserver" $ \o -> Nameserver
-        <$> o .:? "GlueIps" .!= mempty
-        <*> o .:  "Name"
-
-instance ToJSON Nameserver where
-    toJSON Nameserver{..} = object
-        [ "Name"    .= _nName
-        , "GlueIps" .= _nGlueIps
-        ]
-
-data OperationStatus
-    = Error      -- ^ ERROR
-    | Failed     -- ^ FAILED
-    | InProgress -- ^ IN_PROGRESS
-    | Submitted  -- ^ SUBMITTED
-    | Successful -- ^ SUCCESSFUL
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable OperationStatus
-
-instance FromText OperationStatus where
-    parser = takeLowerText >>= \case
-        "error"       -> pure Error
-        "failed"      -> pure Failed
-        "in_progress" -> pure InProgress
-        "submitted"   -> pure Submitted
-        "successful"  -> pure Successful
-        e             -> fail $
-            "Failure parsing OperationStatus from " ++ show e
-
-instance ToText OperationStatus where
-    toText = \case
-        Error      -> "ERROR"
-        Failed     -> "FAILED"
-        InProgress -> "IN_PROGRESS"
-        Submitted  -> "SUBMITTED"
-        Successful -> "SUCCESSFUL"
-
-instance ToByteString OperationStatus
-instance ToHeader     OperationStatus
-instance ToQuery      OperationStatus
-
-instance FromJSON OperationStatus where
-    parseJSON = parseJSONText "OperationStatus"
-
-instance ToJSON OperationStatus where
-    toJSON = toJSONText
-
-data DomainAvailability
-    = Available             -- ^ AVAILABLE
-    | AvailablePreorder     -- ^ AVAILABLE_PREORDER
-    | AvailableReserved     -- ^ AVAILABLE_RESERVED
-    | DontKnow              -- ^ DONT_KNOW
-    | Reserved              -- ^ RESERVED
-    | Unavailable           -- ^ UNAVAILABLE
-    | UnavailablePremium    -- ^ UNAVAILABLE_PREMIUM
-    | UnavailableRestricted -- ^ UNAVAILABLE_RESTRICTED
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable DomainAvailability
-
-instance FromText DomainAvailability where
-    parser = takeLowerText >>= \case
-        "available"              -> pure Available
-        "available_preorder"     -> pure AvailablePreorder
-        "available_reserved"     -> pure AvailableReserved
-        "dont_know"              -> pure DontKnow
-        "reserved"               -> pure Reserved
-        "unavailable"            -> pure Unavailable
-        "unavailable_premium"    -> pure UnavailablePremium
-        "unavailable_restricted" -> pure UnavailableRestricted
-        e                        -> fail $
-            "Failure parsing DomainAvailability from " ++ show e
-
-instance ToText DomainAvailability where
-    toText = \case
-        Available             -> "AVAILABLE"
-        AvailablePreorder     -> "AVAILABLE_PREORDER"
-        AvailableReserved     -> "AVAILABLE_RESERVED"
-        DontKnow              -> "DONT_KNOW"
-        Reserved              -> "RESERVED"
-        Unavailable           -> "UNAVAILABLE"
-        UnavailablePremium    -> "UNAVAILABLE_PREMIUM"
-        UnavailableRestricted -> "UNAVAILABLE_RESTRICTED"
-
-instance ToByteString DomainAvailability
-instance ToHeader     DomainAvailability
-instance ToQuery      DomainAvailability
-
-instance FromJSON DomainAvailability where
-    parseJSON = parseJSONText "DomainAvailability"
-
-instance ToJSON DomainAvailability where
-    toJSON = toJSONText
-
-data OperationType
-    = OTChangePrivacyProtection -- ^ CHANGE_PRIVACY_PROTECTION
-    | OTDeleteDomain            -- ^ DELETE_DOMAIN
-    | OTDomainLock              -- ^ DOMAIN_LOCK
-    | OTRegisterDomain          -- ^ REGISTER_DOMAIN
-    | OTTransferInDomain        -- ^ TRANSFER_IN_DOMAIN
-    | OTUpdateDomainContact     -- ^ UPDATE_DOMAIN_CONTACT
-    | OTUpdateNameserver        -- ^ UPDATE_NAMESERVER
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable OperationType
-
-instance FromText OperationType where
-    parser = takeLowerText >>= \case
-        "change_privacy_protection" -> pure OTChangePrivacyProtection
-        "delete_domain"             -> pure OTDeleteDomain
-        "domain_lock"               -> pure OTDomainLock
-        "register_domain"           -> pure OTRegisterDomain
-        "transfer_in_domain"        -> pure OTTransferInDomain
-        "update_domain_contact"     -> pure OTUpdateDomainContact
-        "update_nameserver"         -> pure OTUpdateNameserver
-        e                           -> fail $
-            "Failure parsing OperationType from " ++ show e
-
-instance ToText OperationType where
-    toText = \case
-        OTChangePrivacyProtection -> "CHANGE_PRIVACY_PROTECTION"
-        OTDeleteDomain            -> "DELETE_DOMAIN"
-        OTDomainLock              -> "DOMAIN_LOCK"
-        OTRegisterDomain          -> "REGISTER_DOMAIN"
-        OTTransferInDomain        -> "TRANSFER_IN_DOMAIN"
-        OTUpdateDomainContact     -> "UPDATE_DOMAIN_CONTACT"
-        OTUpdateNameserver        -> "UPDATE_NAMESERVER"
-
-instance ToByteString OperationType
-instance ToHeader     OperationType
-instance ToQuery      OperationType
-
-instance FromJSON OperationType where
-    parseJSON = parseJSONText "OperationType"
-
-instance ToJSON OperationType where
-    toJSON = toJSONText
-
-data CountryCode
-    = Ad  -- ^ AD
-    | Ae  -- ^ AE
-    | Af  -- ^ AF
-    | Ag  -- ^ AG
-    | Ai  -- ^ AI
-    | Al  -- ^ AL
-    | Am  -- ^ AM
-    | An  -- ^ AN
-    | Ao  -- ^ AO
-    | Aq  -- ^ AQ
-    | Ar  -- ^ AR
-    | As  -- ^ AS
-    | At  -- ^ AT
-    | Au  -- ^ AU
-    | Aw  -- ^ AW
-    | Az  -- ^ AZ
-    | Ba  -- ^ BA
-    | Bb  -- ^ BB
-    | Bd  -- ^ BD
-    | Be  -- ^ BE
-    | Bf  -- ^ BF
-    | Bg  -- ^ BG
-    | Bh  -- ^ BH
-    | Bi  -- ^ BI
-    | Bj  -- ^ BJ
-    | Bl  -- ^ BL
-    | Bm  -- ^ BM
-    | Bn  -- ^ BN
-    | Bo  -- ^ BO
-    | Br  -- ^ BR
-    | Bs  -- ^ BS
-    | Bt  -- ^ BT
-    | Bw  -- ^ BW
-    | By  -- ^ BY
-    | Bz  -- ^ BZ
-    | Ca  -- ^ CA
-    | Cc  -- ^ CC
-    | Cd  -- ^ CD
-    | Cf  -- ^ CF
-    | Cg  -- ^ CG
-    | Ch  -- ^ CH
-    | Ci  -- ^ CI
-    | Ck  -- ^ CK
-    | Cl  -- ^ CL
-    | Cm  -- ^ CM
-    | Cn  -- ^ CN
-    | Co  -- ^ CO
-    | Cr  -- ^ CR
-    | Cu  -- ^ CU
-    | Cv  -- ^ CV
-    | Cx  -- ^ CX
-    | Cy  -- ^ CY
-    | Cz  -- ^ CZ
-    | De  -- ^ DE
-    | Dj  -- ^ DJ
-    | Dk  -- ^ DK
-    | Dm  -- ^ DM
-    | Do' -- ^ DO
-    | Dz  -- ^ DZ
-    | Ec  -- ^ EC
-    | Ee  -- ^ EE
-    | Eg  -- ^ EG
-    | Er  -- ^ ER
-    | Es  -- ^ ES
-    | Et  -- ^ ET
-    | Fi  -- ^ FI
-    | Fj  -- ^ FJ
-    | Fk  -- ^ FK
-    | Fm  -- ^ FM
-    | Fo  -- ^ FO
-    | Fr  -- ^ FR
-    | Ga  -- ^ GA
-    | Gb  -- ^ GB
-    | Gd  -- ^ GD
-    | Ge  -- ^ GE
-    | Gh  -- ^ GH
-    | Gi  -- ^ GI
-    | Gl  -- ^ GL
-    | Gm  -- ^ GM
-    | Gn  -- ^ GN
-    | Gq  -- ^ GQ
-    | Gr  -- ^ GR
-    | Gt  -- ^ GT
-    | Gu  -- ^ GU
-    | Gw  -- ^ GW
-    | Gy  -- ^ GY
-    | Hk  -- ^ HK
-    | Hn  -- ^ HN
-    | Hr  -- ^ HR
-    | Ht  -- ^ HT
-    | Hu  -- ^ HU
-    | Id  -- ^ ID
-    | Ie  -- ^ IE
-    | Il  -- ^ IL
-    | Im  -- ^ IM
-    | In' -- ^ IN
-    | Iq  -- ^ IQ
-    | Ir  -- ^ IR
-    | Is  -- ^ IS
-    | It  -- ^ IT
-    | Jm  -- ^ JM
-    | Jo  -- ^ JO
-    | Jp  -- ^ JP
-    | Ke  -- ^ KE
-    | Kg  -- ^ KG
-    | Kh  -- ^ KH
-    | Ki  -- ^ KI
-    | Km  -- ^ KM
-    | Kn  -- ^ KN
-    | Kp  -- ^ KP
-    | Kr  -- ^ KR
-    | Kw  -- ^ KW
-    | Ky  -- ^ KY
-    | Kz  -- ^ KZ
-    | La  -- ^ LA
-    | Lb  -- ^ LB
-    | Lc  -- ^ LC
-    | Li  -- ^ LI
-    | Lk  -- ^ LK
-    | Lr  -- ^ LR
-    | Ls  -- ^ LS
-    | Lt  -- ^ LT
-    | Lu  -- ^ LU
-    | Lv  -- ^ LV
-    | Ly  -- ^ LY
-    | Ma  -- ^ MA
-    | Mc  -- ^ MC
-    | Md  -- ^ MD
-    | Me  -- ^ ME
-    | Mf  -- ^ MF
-    | Mg  -- ^ MG
-    | Mh  -- ^ MH
-    | Mk  -- ^ MK
-    | Ml  -- ^ ML
-    | Mm  -- ^ MM
-    | Mn  -- ^ MN
-    | Mo  -- ^ MO
-    | Mp  -- ^ MP
-    | Mr  -- ^ MR
-    | Ms  -- ^ MS
-    | Mt  -- ^ MT
-    | Mu  -- ^ MU
-    | Mv  -- ^ MV
-    | Mw  -- ^ MW
-    | Mx  -- ^ MX
-    | My  -- ^ MY
-    | Mz  -- ^ MZ
-    | Na  -- ^ NA
-    | Nc  -- ^ NC
-    | Ne  -- ^ NE
-    | Ng  -- ^ NG
-    | Ni  -- ^ NI
-    | Nl  -- ^ NL
-    | No  -- ^ NO
-    | Np  -- ^ NP
-    | Nr  -- ^ NR
-    | Nu  -- ^ NU
-    | Nz  -- ^ NZ
-    | Om  -- ^ OM
-    | Pa  -- ^ PA
-    | Pe  -- ^ PE
-    | Pf  -- ^ PF
-    | Pg  -- ^ PG
-    | Ph  -- ^ PH
-    | Pk  -- ^ PK
-    | Pl  -- ^ PL
-    | Pm  -- ^ PM
-    | Pn  -- ^ PN
-    | Pr  -- ^ PR
-    | Pt  -- ^ PT
-    | Pw  -- ^ PW
-    | Py  -- ^ PY
-    | Qa  -- ^ QA
-    | Ro  -- ^ RO
-    | Rs  -- ^ RS
-    | Ru  -- ^ RU
-    | Rw  -- ^ RW
-    | Sa  -- ^ SA
-    | Sb  -- ^ SB
-    | Sc  -- ^ SC
-    | Sd  -- ^ SD
-    | Se  -- ^ SE
-    | Sg  -- ^ SG
-    | Sh  -- ^ SH
-    | Si  -- ^ SI
-    | Sk  -- ^ SK
-    | Sl  -- ^ SL
-    | Sm  -- ^ SM
-    | Sn  -- ^ SN
-    | So  -- ^ SO
-    | Sr  -- ^ SR
-    | St  -- ^ ST
-    | Sv  -- ^ SV
-    | Sy  -- ^ SY
-    | Sz  -- ^ SZ
-    | Tc  -- ^ TC
-    | Td  -- ^ TD
-    | Tg  -- ^ TG
-    | Th  -- ^ TH
-    | Tj  -- ^ TJ
-    | Tk  -- ^ TK
-    | Tl  -- ^ TL
-    | Tm  -- ^ TM
-    | Tn  -- ^ TN
-    | To  -- ^ TO
-    | Tr  -- ^ TR
-    | Tt  -- ^ TT
-    | Tv  -- ^ TV
-    | Tw  -- ^ TW
-    | Tz  -- ^ TZ
-    | Ua  -- ^ UA
-    | Ug  -- ^ UG
-    | Us  -- ^ US
-    | Uy  -- ^ UY
-    | Uz  -- ^ UZ
-    | Va  -- ^ VA
-    | Vc  -- ^ VC
-    | Ve  -- ^ VE
-    | Vg  -- ^ VG
-    | Vi  -- ^ VI
-    | Vn  -- ^ VN
-    | Vu  -- ^ VU
-    | Wf  -- ^ WF
-    | Ws  -- ^ WS
-    | Ye  -- ^ YE
-    | Yt  -- ^ YT
-    | Za  -- ^ ZA
-    | Zm  -- ^ ZM
-    | Zw  -- ^ ZW
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable CountryCode
-
-instance FromText CountryCode where
-    parser = takeLowerText >>= \case
-        "ad" -> pure Ad
-        "ae" -> pure Ae
-        "af" -> pure Af
-        "ag" -> pure Ag
-        "ai" -> pure Ai
-        "al" -> pure Al
-        "am" -> pure Am
-        "an" -> pure An
-        "ao" -> pure Ao
-        "aq" -> pure Aq
-        "ar" -> pure Ar
-        "as" -> pure As
-        "at" -> pure At
-        "au" -> pure Au
-        "aw" -> pure Aw
-        "az" -> pure Az
-        "ba" -> pure Ba
-        "bb" -> pure Bb
-        "bd" -> pure Bd
-        "be" -> pure Be
-        "bf" -> pure Bf
-        "bg" -> pure Bg
-        "bh" -> pure Bh
-        "bi" -> pure Bi
-        "bj" -> pure Bj
-        "bl" -> pure Bl
-        "bm" -> pure Bm
-        "bn" -> pure Bn
-        "bo" -> pure Bo
-        "br" -> pure Br
-        "bs" -> pure Bs
-        "bt" -> pure Bt
-        "bw" -> pure Bw
-        "by" -> pure By
-        "bz" -> pure Bz
-        "ca" -> pure Ca
-        "cc" -> pure Cc
-        "cd" -> pure Cd
-        "cf" -> pure Cf
-        "cg" -> pure Cg
-        "ch" -> pure Ch
-        "ci" -> pure Ci
-        "ck" -> pure Ck
-        "cl" -> pure Cl
-        "cm" -> pure Cm
-        "cn" -> pure Cn
-        "co" -> pure Co
-        "cr" -> pure Cr
-        "cu" -> pure Cu
-        "cv" -> pure Cv
-        "cx" -> pure Cx
-        "cy" -> pure Cy
-        "cz" -> pure Cz
-        "de" -> pure De
-        "dj" -> pure Dj
-        "dk" -> pure Dk
-        "dm" -> pure Dm
-        "do" -> pure Do'
-        "dz" -> pure Dz
-        "ec" -> pure Ec
-        "ee" -> pure Ee
-        "eg" -> pure Eg
-        "er" -> pure Er
-        "es" -> pure Es
-        "et" -> pure Et
-        "fi" -> pure Fi
-        "fj" -> pure Fj
-        "fk" -> pure Fk
-        "fm" -> pure Fm
-        "fo" -> pure Fo
-        "fr" -> pure Fr
-        "ga" -> pure Ga
-        "gb" -> pure Gb
-        "gd" -> pure Gd
-        "ge" -> pure Ge
-        "gh" -> pure Gh
-        "gi" -> pure Gi
-        "gl" -> pure Gl
-        "gm" -> pure Gm
-        "gn" -> pure Gn
-        "gq" -> pure Gq
-        "gr" -> pure Gr
-        "gt" -> pure Gt
-        "gu" -> pure Gu
-        "gw" -> pure Gw
-        "gy" -> pure Gy
-        "hk" -> pure Hk
-        "hn" -> pure Hn
-        "hr" -> pure Hr
-        "ht" -> pure Ht
-        "hu" -> pure Hu
-        "id" -> pure Id
-        "ie" -> pure Ie
-        "il" -> pure Il
-        "im" -> pure Im
-        "in" -> pure In'
-        "iq" -> pure Iq
-        "ir" -> pure Ir
-        "is" -> pure Is
-        "it" -> pure It
-        "jm" -> pure Jm
-        "jo" -> pure Jo
-        "jp" -> pure Jp
-        "ke" -> pure Ke
-        "kg" -> pure Kg
-        "kh" -> pure Kh
-        "ki" -> pure Ki
-        "km" -> pure Km
-        "kn" -> pure Kn
-        "kp" -> pure Kp
-        "kr" -> pure Kr
-        "kw" -> pure Kw
-        "ky" -> pure Ky
-        "kz" -> pure Kz
-        "la" -> pure La
-        "lb" -> pure Lb
-        "lc" -> pure Lc
-        "li" -> pure Li
-        "lk" -> pure Lk
-        "lr" -> pure Lr
-        "ls" -> pure Ls
-        "lt" -> pure Lt
-        "lu" -> pure Lu
-        "lv" -> pure Lv
-        "ly" -> pure Ly
-        "ma" -> pure Ma
-        "mc" -> pure Mc
-        "md" -> pure Md
-        "me" -> pure Me
-        "mf" -> pure Mf
-        "mg" -> pure Mg
-        "mh" -> pure Mh
-        "mk" -> pure Mk
-        "ml" -> pure Ml
-        "mm" -> pure Mm
-        "mn" -> pure Mn
-        "mo" -> pure Mo
-        "mp" -> pure Mp
-        "mr" -> pure Mr
-        "ms" -> pure Ms
-        "mt" -> pure Mt
-        "mu" -> pure Mu
-        "mv" -> pure Mv
-        "mw" -> pure Mw
-        "mx" -> pure Mx
-        "my" -> pure My
-        "mz" -> pure Mz
-        "na" -> pure Na
-        "nc" -> pure Nc
-        "ne" -> pure Ne
-        "ng" -> pure Ng
-        "ni" -> pure Ni
-        "nl" -> pure Nl
-        "no" -> pure No
-        "np" -> pure Np
-        "nr" -> pure Nr
-        "nu" -> pure Nu
-        "nz" -> pure Nz
-        "om" -> pure Om
-        "pa" -> pure Pa
-        "pe" -> pure Pe
-        "pf" -> pure Pf
-        "pg" -> pure Pg
-        "ph" -> pure Ph
-        "pk" -> pure Pk
-        "pl" -> pure Pl
-        "pm" -> pure Pm
-        "pn" -> pure Pn
-        "pr" -> pure Pr
-        "pt" -> pure Pt
-        "pw" -> pure Pw
-        "py" -> pure Py
-        "qa" -> pure Qa
-        "ro" -> pure Ro
-        "rs" -> pure Rs
-        "ru" -> pure Ru
-        "rw" -> pure Rw
-        "sa" -> pure Sa
-        "sb" -> pure Sb
-        "sc" -> pure Sc
-        "sd" -> pure Sd
-        "se" -> pure Se
-        "sg" -> pure Sg
-        "sh" -> pure Sh
-        "si" -> pure Si
-        "sk" -> pure Sk
-        "sl" -> pure Sl
-        "sm" -> pure Sm
-        "sn" -> pure Sn
-        "so" -> pure So
-        "sr" -> pure Sr
-        "st" -> pure St
-        "sv" -> pure Sv
-        "sy" -> pure Sy
-        "sz" -> pure Sz
-        "tc" -> pure Tc
-        "td" -> pure Td
-        "tg" -> pure Tg
-        "th" -> pure Th
-        "tj" -> pure Tj
-        "tk" -> pure Tk
-        "tl" -> pure Tl
-        "tm" -> pure Tm
-        "tn" -> pure Tn
-        "to" -> pure To
-        "tr" -> pure Tr
-        "tt" -> pure Tt
-        "tv" -> pure Tv
-        "tw" -> pure Tw
-        "tz" -> pure Tz
-        "ua" -> pure Ua
-        "ug" -> pure Ug
-        "us" -> pure Us
-        "uy" -> pure Uy
-        "uz" -> pure Uz
-        "va" -> pure Va
-        "vc" -> pure Vc
-        "ve" -> pure Ve
-        "vg" -> pure Vg
-        "vi" -> pure Vi
-        "vn" -> pure Vn
-        "vu" -> pure Vu
-        "wf" -> pure Wf
-        "ws" -> pure Ws
-        "ye" -> pure Ye
-        "yt" -> pure Yt
-        "za" -> pure Za
-        "zm" -> pure Zm
-        "zw" -> pure Zw
-        e    -> fail $
-            "Failure parsing CountryCode from " ++ show e
-
-instance ToText CountryCode where
-    toText = \case
-        Ad  -> "AD"
-        Ae  -> "AE"
-        Af  -> "AF"
-        Ag  -> "AG"
-        Ai  -> "AI"
-        Al  -> "AL"
-        Am  -> "AM"
-        An  -> "AN"
-        Ao  -> "AO"
-        Aq  -> "AQ"
-        Ar  -> "AR"
-        As  -> "AS"
-        At  -> "AT"
-        Au  -> "AU"
-        Aw  -> "AW"
-        Az  -> "AZ"
-        Ba  -> "BA"
-        Bb  -> "BB"
-        Bd  -> "BD"
-        Be  -> "BE"
-        Bf  -> "BF"
-        Bg  -> "BG"
-        Bh  -> "BH"
-        Bi  -> "BI"
-        Bj  -> "BJ"
-        Bl  -> "BL"
-        Bm  -> "BM"
-        Bn  -> "BN"
-        Bo  -> "BO"
-        Br  -> "BR"
-        Bs  -> "BS"
-        Bt  -> "BT"
-        Bw  -> "BW"
-        By  -> "BY"
-        Bz  -> "BZ"
-        Ca  -> "CA"
-        Cc  -> "CC"
-        Cd  -> "CD"
-        Cf  -> "CF"
-        Cg  -> "CG"
-        Ch  -> "CH"
-        Ci  -> "CI"
-        Ck  -> "CK"
-        Cl  -> "CL"
-        Cm  -> "CM"
-        Cn  -> "CN"
-        Co  -> "CO"
-        Cr  -> "CR"
-        Cu  -> "CU"
-        Cv  -> "CV"
-        Cx  -> "CX"
-        Cy  -> "CY"
-        Cz  -> "CZ"
-        De  -> "DE"
-        Dj  -> "DJ"
-        Dk  -> "DK"
-        Dm  -> "DM"
-        Do' -> "DO"
-        Dz  -> "DZ"
-        Ec  -> "EC"
-        Ee  -> "EE"
-        Eg  -> "EG"
-        Er  -> "ER"
-        Es  -> "ES"
-        Et  -> "ET"
-        Fi  -> "FI"
-        Fj  -> "FJ"
-        Fk  -> "FK"
-        Fm  -> "FM"
-        Fo  -> "FO"
-        Fr  -> "FR"
-        Ga  -> "GA"
-        Gb  -> "GB"
-        Gd  -> "GD"
-        Ge  -> "GE"
-        Gh  -> "GH"
-        Gi  -> "GI"
-        Gl  -> "GL"
-        Gm  -> "GM"
-        Gn  -> "GN"
-        Gq  -> "GQ"
-        Gr  -> "GR"
-        Gt  -> "GT"
-        Gu  -> "GU"
-        Gw  -> "GW"
-        Gy  -> "GY"
-        Hk  -> "HK"
-        Hn  -> "HN"
-        Hr  -> "HR"
-        Ht  -> "HT"
-        Hu  -> "HU"
-        Id  -> "ID"
-        Ie  -> "IE"
-        Il  -> "IL"
-        Im  -> "IM"
-        In' -> "IN"
-        Iq  -> "IQ"
-        Ir  -> "IR"
-        Is  -> "IS"
-        It  -> "IT"
-        Jm  -> "JM"
-        Jo  -> "JO"
-        Jp  -> "JP"
-        Ke  -> "KE"
-        Kg  -> "KG"
-        Kh  -> "KH"
-        Ki  -> "KI"
-        Km  -> "KM"
-        Kn  -> "KN"
-        Kp  -> "KP"
-        Kr  -> "KR"
-        Kw  -> "KW"
-        Ky  -> "KY"
-        Kz  -> "KZ"
-        La  -> "LA"
-        Lb  -> "LB"
-        Lc  -> "LC"
-        Li  -> "LI"
-        Lk  -> "LK"
-        Lr  -> "LR"
-        Ls  -> "LS"
-        Lt  -> "LT"
-        Lu  -> "LU"
-        Lv  -> "LV"
-        Ly  -> "LY"
-        Ma  -> "MA"
-        Mc  -> "MC"
-        Md  -> "MD"
-        Me  -> "ME"
-        Mf  -> "MF"
-        Mg  -> "MG"
-        Mh  -> "MH"
-        Mk  -> "MK"
-        Ml  -> "ML"
-        Mm  -> "MM"
-        Mn  -> "MN"
-        Mo  -> "MO"
-        Mp  -> "MP"
-        Mr  -> "MR"
-        Ms  -> "MS"
-        Mt  -> "MT"
-        Mu  -> "MU"
-        Mv  -> "MV"
-        Mw  -> "MW"
-        Mx  -> "MX"
-        My  -> "MY"
-        Mz  -> "MZ"
-        Na  -> "NA"
-        Nc  -> "NC"
-        Ne  -> "NE"
-        Ng  -> "NG"
-        Ni  -> "NI"
-        Nl  -> "NL"
-        No  -> "NO"
-        Np  -> "NP"
-        Nr  -> "NR"
-        Nu  -> "NU"
-        Nz  -> "NZ"
-        Om  -> "OM"
-        Pa  -> "PA"
-        Pe  -> "PE"
-        Pf  -> "PF"
-        Pg  -> "PG"
-        Ph  -> "PH"
-        Pk  -> "PK"
-        Pl  -> "PL"
-        Pm  -> "PM"
-        Pn  -> "PN"
-        Pr  -> "PR"
-        Pt  -> "PT"
-        Pw  -> "PW"
-        Py  -> "PY"
-        Qa  -> "QA"
-        Ro  -> "RO"
-        Rs  -> "RS"
-        Ru  -> "RU"
-        Rw  -> "RW"
-        Sa  -> "SA"
-        Sb  -> "SB"
-        Sc  -> "SC"
-        Sd  -> "SD"
-        Se  -> "SE"
-        Sg  -> "SG"
-        Sh  -> "SH"
-        Si  -> "SI"
-        Sk  -> "SK"
-        Sl  -> "SL"
-        Sm  -> "SM"
-        Sn  -> "SN"
-        So  -> "SO"
-        Sr  -> "SR"
-        St  -> "ST"
-        Sv  -> "SV"
-        Sy  -> "SY"
-        Sz  -> "SZ"
-        Tc  -> "TC"
-        Td  -> "TD"
-        Tg  -> "TG"
-        Th  -> "TH"
-        Tj  -> "TJ"
-        Tk  -> "TK"
-        Tl  -> "TL"
-        Tm  -> "TM"
-        Tn  -> "TN"
-        To  -> "TO"
-        Tr  -> "TR"
-        Tt  -> "TT"
-        Tv  -> "TV"
-        Tw  -> "TW"
-        Tz  -> "TZ"
-        Ua  -> "UA"
-        Ug  -> "UG"
-        Us  -> "US"
-        Uy  -> "UY"
-        Uz  -> "UZ"
-        Va  -> "VA"
-        Vc  -> "VC"
-        Ve  -> "VE"
-        Vg  -> "VG"
-        Vi  -> "VI"
-        Vn  -> "VN"
-        Vu  -> "VU"
-        Wf  -> "WF"
-        Ws  -> "WS"
-        Ye  -> "YE"
-        Yt  -> "YT"
-        Za  -> "ZA"
-        Zm  -> "ZM"
-        Zw  -> "ZW"
-
-instance ToByteString CountryCode
-instance ToHeader     CountryCode
-instance ToQuery      CountryCode
-
-instance FromJSON CountryCode where
-    parseJSON = parseJSONText "CountryCode"
-
-instance ToJSON CountryCode where
-    toJSON = toJSONText
-
-data ExtraParam = ExtraParam
-    { _epName  :: ExtraParamName
-    , _epValue :: Text
-    } deriving (Eq, Read, Show)
-
--- | 'ExtraParam' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'epName' @::@ 'ExtraParamName'
---
--- * 'epValue' @::@ 'Text'
---
-extraParam :: ExtraParamName -- ^ 'epName'
-           -> Text -- ^ 'epValue'
-           -> ExtraParam
-extraParam p1 p2 = ExtraParam
-    { _epName  = p1
-    , _epValue = p2
-    }
-
--- | Name of the additional parameter required by the top-level domain.
---
--- Type: String
---
--- Default: None
---
--- Valid values: 'DUNS_NUMBER' | 'BRAND_NUMBER' | 'BIRTH_DEPARTMENT' | 'BIRTH_DATE_IN_YYYY_MM_DD' | 'BIRTH_COUNTRY' | 'BIRTH_CITY' | 'DOCUMENT_NUMBER' | 'AU_ID_NUMBER' | 'AU_ID_TYPE' | 'CA_LEGAL_TYPE' | 'ES_IDENTIFICATION' | 'ES_IDENTIFICATION_TYPE' | 'ES_LEGAL_FORM' | 'FI_BUSINESS_NUMBER' | 'FI_ID_NUMBER' | 'IT_PIN' | 'RU_PASSPORT_DATA' | 'SE_ID_NUMBER' | 'SG_ID_NUMBER' | 'VAT_NUMBER'
---
--- Parent: 'ExtraParams'
---
--- Required: Yes
-epName :: Lens' ExtraParam ExtraParamName
-epName = lens _epName (\s a -> s { _epName = a })
-
--- | Values corresponding to the additional parameter names required by some
--- top-level domains.
---
--- Type: String
---
--- Default: None
---
--- Constraints: Maximum 2048 characters.
---
--- Parent: 'ExtraParams'
---
--- Required: Yes
-epValue :: Lens' ExtraParam Text
-epValue = lens _epValue (\s a -> s { _epValue = a })
-
-instance FromJSON ExtraParam where
-    parseJSON = withObject "ExtraParam" $ \o -> ExtraParam
-        <$> o .:  "Name"
-        <*> o .:  "Value"
-
-instance ToJSON ExtraParam where
-    toJSON ExtraParam{..} = object
-        [ "Name"  .= _epName
-        , "Value" .= _epValue
-        ]
-
-data ContactType
-    = CTAssociation -- ^ ASSOCIATION
-    | CTCompany     -- ^ COMPANY
-    | CTPerson      -- ^ PERSON
-    | CTPublicBody  -- ^ PUBLIC_BODY
-    | CTReseller    -- ^ RESELLER
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable ContactType
-
-instance FromText ContactType where
-    parser = takeLowerText >>= \case
-        "association" -> pure CTAssociation
-        "company"     -> pure CTCompany
-        "person"      -> pure CTPerson
-        "public_body" -> pure CTPublicBody
-        "reseller"    -> pure CTReseller
-        e             -> fail $
-            "Failure parsing ContactType from " ++ show e
-
-instance ToText ContactType where
-    toText = \case
-        CTAssociation -> "ASSOCIATION"
-        CTCompany     -> "COMPANY"
-        CTPerson      -> "PERSON"
-        CTPublicBody  -> "PUBLIC_BODY"
-        CTReseller    -> "RESELLER"
-
-instance ToByteString ContactType
-instance ToHeader     ContactType
-instance ToQuery      ContactType
-
-instance FromJSON ContactType where
-    parseJSON = parseJSONText "ContactType"
-
-instance ToJSON ContactType where
-    toJSON = toJSONText
-
-data ContactDetail = ContactDetail
-    { _cdAddressLine1     :: Maybe Text
-    , _cdAddressLine2     :: Maybe Text
-    , _cdCity             :: Maybe Text
-    , _cdContactType      :: Maybe ContactType
-    , _cdCountryCode      :: Maybe CountryCode
-    , _cdEmail            :: Maybe Text
-    , _cdExtraParams      :: List "ExtraParams" ExtraParam
-    , _cdFax              :: Maybe Text
-    , _cdFirstName        :: Maybe Text
-    , _cdLastName         :: Maybe Text
-    , _cdOrganizationName :: Maybe Text
-    , _cdPhoneNumber      :: Maybe Text
-    , _cdState            :: Maybe Text
-    , _cdZipCode          :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'ContactDetail' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cdAddressLine1' @::@ 'Maybe' 'Text'
---
--- * 'cdAddressLine2' @::@ 'Maybe' 'Text'
---
--- * 'cdCity' @::@ 'Maybe' 'Text'
---
--- * 'cdContactType' @::@ 'Maybe' 'ContactType'
---
--- * 'cdCountryCode' @::@ 'Maybe' 'CountryCode'
---
--- * 'cdEmail' @::@ 'Maybe' 'Text'
---
--- * 'cdExtraParams' @::@ ['ExtraParam']
---
--- * 'cdFax' @::@ 'Maybe' 'Text'
---
--- * 'cdFirstName' @::@ 'Maybe' 'Text'
---
--- * 'cdLastName' @::@ 'Maybe' 'Text'
---
--- * 'cdOrganizationName' @::@ 'Maybe' 'Text'
---
--- * 'cdPhoneNumber' @::@ 'Maybe' 'Text'
---
--- * 'cdState' @::@ 'Maybe' 'Text'
---
--- * 'cdZipCode' @::@ 'Maybe' 'Text'
---
-contactDetail :: ContactDetail
-contactDetail = ContactDetail
-    { _cdFirstName        = Nothing
-    , _cdLastName         = Nothing
-    , _cdContactType      = Nothing
-    , _cdOrganizationName = Nothing
-    , _cdAddressLine1     = Nothing
-    , _cdAddressLine2     = Nothing
-    , _cdCity             = Nothing
-    , _cdState            = Nothing
-    , _cdCountryCode      = Nothing
-    , _cdZipCode          = Nothing
-    , _cdPhoneNumber      = Nothing
-    , _cdEmail            = Nothing
-    , _cdFax              = Nothing
-    , _cdExtraParams      = mempty
-    }
-
--- | First line of the contact's address.
---
--- Type: String
---
--- Default: None
---
--- Constraints: Maximum 255 characters.
---
--- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
---
--- Required: Yes
-cdAddressLine1 :: Lens' ContactDetail (Maybe Text)
-cdAddressLine1 = lens _cdAddressLine1 (\s a -> s { _cdAddressLine1 = a })
-
--- | Second line of contact's address, if any.
---
--- Type: String
---
--- Default: None
---
--- Constraints: Maximum 255 characters.
---
--- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
---
--- Required: No
-cdAddressLine2 :: Lens' ContactDetail (Maybe Text)
-cdAddressLine2 = lens _cdAddressLine2 (\s a -> s { _cdAddressLine2 = a })
-
--- | The city of the contact's address.
---
--- Type: String
---
--- Default: None
---
--- Constraints: Maximum 255 characters.
---
--- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
---
--- Required: Yes
-cdCity :: Lens' ContactDetail (Maybe Text)
-cdCity = lens _cdCity (\s a -> s { _cdCity = a })
-
--- | Indicates whether the contact is a person, company, association, or public
--- organization. If you choose an option other than 'PERSON', you must enter an
--- organization name, and you can't enable privacy protection for the contact.
---
--- Type: String
---
--- Default: None
---
--- Constraints: Maximum 255 characters.
---
--- Valid values: 'PERSON' | 'COMPANY' | 'ASSOCIATION' | 'PUBLIC_BODY'
---
--- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
---
--- Required: Yes
-cdContactType :: Lens' ContactDetail (Maybe ContactType)
-cdContactType = lens _cdContactType (\s a -> s { _cdContactType = a })
-
--- | Code for the country of the contact's address.
---
--- Type: String
---
--- Default: None
---
--- Constraints: Maximum 255 characters.
---
--- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
---
--- Required: Yes
-cdCountryCode :: Lens' ContactDetail (Maybe CountryCode)
-cdCountryCode = lens _cdCountryCode (\s a -> s { _cdCountryCode = a })
-
--- | Email address of the contact.
---
--- Type: String
---
--- Default: None
---
--- Constraints: Maximum 254 characters.
---
--- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
---
--- Required: Yes
-cdEmail :: Lens' ContactDetail (Maybe Text)
-cdEmail = lens _cdEmail (\s a -> s { _cdEmail = a })
-
--- | A list of name-value pairs for parameters required by certain top-level
--- domains.
---
--- Type: Complex
---
--- Default: None
---
--- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
---
--- Children: 'Name', 'Value'
---
--- Required: No
-cdExtraParams :: Lens' ContactDetail [ExtraParam]
-cdExtraParams = lens _cdExtraParams (\s a -> s { _cdExtraParams = a }) . _List
-
--- | Fax number of the contact.
---
--- Type: String
---
--- Default: None
---
--- Constraints: Phone number must be specified in the format "+[country dialing
--- code].[number including any area code]". For example, a US phone number might
--- appear as '"+1.1234567890"'.
---
--- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
---
--- Required: No
-cdFax :: Lens' ContactDetail (Maybe Text)
-cdFax = lens _cdFax (\s a -> s { _cdFax = a })
-
--- | First name of contact.
---
--- Type: String
---
--- Default: None
---
--- Constraints: Maximum 255 characters.
---
--- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
---
--- Required: Yes
-cdFirstName :: Lens' ContactDetail (Maybe Text)
-cdFirstName = lens _cdFirstName (\s a -> s { _cdFirstName = a })
-
--- | Last name of contact.
---
--- Type: String
---
--- Default: None
---
--- Constraints: Maximum 255 characters.
---
--- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
---
--- Required: Yes
-cdLastName :: Lens' ContactDetail (Maybe Text)
-cdLastName = lens _cdLastName (\s a -> s { _cdLastName = a })
-
--- | Name of the organization for contact types other than 'PERSON'.
---
--- Type: String
---
--- Default: None
---
--- Constraints: Maximum 255 characters. Contact type must not be 'PERSON'.
---
--- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
---
--- Required: No
-cdOrganizationName :: Lens' ContactDetail (Maybe Text)
-cdOrganizationName =
-    lens _cdOrganizationName (\s a -> s { _cdOrganizationName = a })
-
--- | The phone number of the contact.
---
--- Type: String
---
--- Default: None
---
--- Constraints: Phone number must be specified in the format "+[country dialing
--- code].[number including any area code>]". For example, a US phone number
--- might appear as '"+1.1234567890"'.
---
--- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
---
--- Required: Yes
-cdPhoneNumber :: Lens' ContactDetail (Maybe Text)
-cdPhoneNumber = lens _cdPhoneNumber (\s a -> s { _cdPhoneNumber = a })
-
--- | The state or province of the contact's city.
---
--- Type: String
---
--- Default: None
---
--- Constraints: Maximum 255 characters.
---
--- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
---
--- Required: No
-cdState :: Lens' ContactDetail (Maybe Text)
-cdState = lens _cdState (\s a -> s { _cdState = a })
-
--- | The zip or postal code of the contact's address.
---
--- Type: String
---
--- Default: None
---
--- Constraints: Maximum 255 characters.
---
--- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
---
--- Required: No
-cdZipCode :: Lens' ContactDetail (Maybe Text)
-cdZipCode = lens _cdZipCode (\s a -> s { _cdZipCode = a })
-
-instance FromJSON ContactDetail where
-    parseJSON = withObject "ContactDetail" $ \o -> ContactDetail
-        <$> o .:? "AddressLine1"
-        <*> o .:? "AddressLine2"
-        <*> o .:? "City"
-        <*> o .:? "ContactType"
-        <*> o .:? "CountryCode"
-        <*> o .:? "Email"
-        <*> o .:? "ExtraParams" .!= mempty
-        <*> o .:? "Fax"
-        <*> o .:? "FirstName"
-        <*> o .:? "LastName"
-        <*> o .:? "OrganizationName"
-        <*> o .:? "PhoneNumber"
-        <*> o .:? "State"
-        <*> o .:? "ZipCode"
-
-instance ToJSON ContactDetail where
-    toJSON ContactDetail{..} = object
-        [ "FirstName"        .= _cdFirstName
-        , "LastName"         .= _cdLastName
-        , "ContactType"      .= _cdContactType
-        , "OrganizationName" .= _cdOrganizationName
-        , "AddressLine1"     .= _cdAddressLine1
-        , "AddressLine2"     .= _cdAddressLine2
-        , "City"             .= _cdCity
-        , "State"            .= _cdState
-        , "CountryCode"      .= _cdCountryCode
-        , "ZipCode"          .= _cdZipCode
-        , "PhoneNumber"      .= _cdPhoneNumber
-        , "Email"            .= _cdEmail
-        , "Fax"              .= _cdFax
-        , "ExtraParams"      .= _cdExtraParams
-        ]
-
-data OperationSummary = OperationSummary
-    { _osOperationId   :: Text
-    , _osStatus        :: OperationStatus
-    , _osSubmittedDate :: POSIX
-    , _osType          :: OperationType
-    } deriving (Eq, Read, Show)
-
--- | 'OperationSummary' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'osOperationId' @::@ 'Text'
---
--- * 'osStatus' @::@ 'OperationStatus'
---
--- * 'osSubmittedDate' @::@ 'UTCTime'
---
--- * 'osType' @::@ 'OperationType'
---
-operationSummary :: Text -- ^ 'osOperationId'
-                 -> OperationStatus -- ^ 'osStatus'
-                 -> OperationType -- ^ 'osType'
-                 -> UTCTime -- ^ 'osSubmittedDate'
-                 -> OperationSummary
-operationSummary p1 p2 p3 p4 = OperationSummary
-    { _osOperationId   = p1
-    , _osStatus        = p2
-    , _osType          = p3
-    , _osSubmittedDate = withIso _Time (const id) p4
-    }
-
--- | Identifier returned to track the requested action.
---
--- Type: String
-osOperationId :: Lens' OperationSummary Text
-osOperationId = lens _osOperationId (\s a -> s { _osOperationId = a })
-
--- | The current status of the requested operation in the system.
---
--- Type: String
-osStatus :: Lens' OperationSummary OperationStatus
-osStatus = lens _osStatus (\s a -> s { _osStatus = a })
-
--- | The date when the request was submitted.
-osSubmittedDate :: Lens' OperationSummary UTCTime
-osSubmittedDate = lens _osSubmittedDate (\s a -> s { _osSubmittedDate = a }) . _Time
-
--- | Type of the action requested.
---
--- Type: String
---
--- Valid values: 'REGISTER_DOMAIN' | 'DELETE_DOMAIN' | 'TRANSFER_IN_DOMAIN' | 'UPDATE_DOMAIN_CONTACT' | 'UPDATE_NAMESERVER' | 'CHANGE_PRIVACY_PROTECTION' | 'DOMAIN_LOCK'
-osType :: Lens' OperationSummary OperationType
-osType = lens _osType (\s a -> s { _osType = a })
-
-instance FromJSON OperationSummary where
-    parseJSON = withObject "OperationSummary" $ \o -> OperationSummary
-        <$> o .:  "OperationId"
-        <*> o .:  "Status"
-        <*> o .:  "SubmittedDate"
-        <*> o .:  "Type"
-
-instance ToJSON OperationSummary where
-    toJSON OperationSummary{..} = object
-        [ "OperationId"   .= _osOperationId
-        , "Status"        .= _osStatus
-        , "Type"          .= _osType
-        , "SubmittedDate" .= _osSubmittedDate
-        ]
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Route53Domains.Types
+-- 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.Route53Domains.Types
+    (
+    -- * Service
+      Route53Domains
+
+    -- * Errors
+    , _InvalidInput
+    , _OperationLimitExceeded
+    , _DomainLimitExceeded
+    , _UnsupportedTLD
+    , _TLDRulesViolation
+    , _DuplicateRequest
+
+    -- * ContactType
+    , ContactType (..)
+
+    -- * CountryCode
+    , CountryCode (..)
+
+    -- * DomainAvailability
+    , DomainAvailability (..)
+
+    -- * ExtraParamName
+    , ExtraParamName (..)
+
+    -- * OperationStatus
+    , OperationStatus (..)
+
+    -- * OperationType
+    , OperationType (..)
+
+    -- * ContactDetail
+    , ContactDetail
+    , contactDetail
+    , cdOrganizationName
+    , cdEmail
+    , cdFax
+    , cdState
+    , cdLastName
+    , cdExtraParams
+    , cdZipCode
+    , cdAddressLine1
+    , cdCity
+    , cdPhoneNumber
+    , cdAddressLine2
+    , cdFirstName
+    , cdCountryCode
+    , cdContactType
+
+    -- * DomainSummary
+    , DomainSummary
+    , domainSummary
+    , dsExpiry
+    , dsTransferLock
+    , dsAutoRenew
+    , dsDomainName
+
+    -- * ExtraParam
+    , ExtraParam
+    , extraParam
+    , epName
+    , epValue
+
+    -- * Nameserver
+    , Nameserver
+    , nameserver
+    , nGlueIPs
+    , nName
+
+    -- * OperationSummary
+    , OperationSummary
+    , operationSummary
+    , osOperationId
+    , osStatus
+    , osType
+    , osSubmittedDate
+
+    -- * Tag
+    , Tag
+    , tag
+    , tagValue
+    , tagKey
+    ) where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Route53Domains.Types.Product
+import           Network.AWS.Route53Domains.Types.Sum
+import           Network.AWS.Sign.V4
+
+-- | Version @2014-05-15@ of the Amazon Route 53 Domains SDK.
+data Route53Domains
+
+instance AWSService Route53Domains where
+    type Sg Route53Domains = V4
+    service = const svc
+      where
+        svc =
+            Service
+            { _svcAbbrev = "Route53Domains"
+            , _svcPrefix = "route53domains"
+            , _svcVersion = "2014-05-15"
+            , _svcEndpoint = defaultEndpoint svc
+            , _svcTimeout = Just 70
+            , _svcStatus = statusSuccess
+            , _svcError = parseJSONError
+            , _svcRetry = retry
+            }
+        retry =
+            Exponential
+            { _retryBase = 5.0e-2
+            , _retryGrowth = 2
+            , _retryAttempts = 5
+            , _retryCheck = check
+            }
+        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
+
+-- | The requested item is not acceptable. For example, for an OperationId it
+-- may refer to the ID of an operation that is already completed. For a
+-- domain name, it may not be a valid domain name or belong to the
+-- requester account.
+_InvalidInput :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidInput = _ServiceError . hasStatus 400 . hasCode "InvalidInput"
+
+-- | The number of operations or jobs running exceeded the allowed threshold
+-- for the account.
+_OperationLimitExceeded :: AsError a => Getting (First ServiceError) a ServiceError
+_OperationLimitExceeded =
+    _ServiceError . hasStatus 400 . hasCode "OperationLimitExceeded"
+
+-- | The number of domains has exceeded the allowed threshold for the
+-- account.
+_DomainLimitExceeded :: AsError a => Getting (First ServiceError) a ServiceError
+_DomainLimitExceeded =
+    _ServiceError . hasStatus 400 . hasCode "DomainLimitExceeded"
+
+-- | Amazon Route 53 does not support this top-level domain.
+_UnsupportedTLD :: AsError a => Getting (First ServiceError) a ServiceError
+_UnsupportedTLD = _ServiceError . hasStatus 400 . hasCode "UnsupportedTLD"
+
+-- | The top-level domain does not support this operation.
+_TLDRulesViolation :: AsError a => Getting (First ServiceError) a ServiceError
+_TLDRulesViolation =
+    _ServiceError . hasStatus 400 . hasCode "TLDRulesViolation"
+
+-- | The request is already in progress for the domain.
+_DuplicateRequest :: AsError a => Getting (First ServiceError) a ServiceError
+_DuplicateRequest = _ServiceError . hasStatus 400 . hasCode "DuplicateRequest"
diff --git a/gen/Network/AWS/Route53Domains/Types/Product.hs b/gen/Network/AWS/Route53Domains/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53Domains/Types/Product.hs
@@ -0,0 +1,659 @@
+{-# 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.Route53Domains.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.Route53Domains.Types.Product where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Route53Domains.Types.Sum
+
+-- | ContactDetail includes the following elements.
+--
+-- /See:/ 'contactDetail' smart constructor.
+data ContactDetail = ContactDetail'
+    { _cdOrganizationName :: !(Maybe Text)
+    , _cdEmail            :: !(Maybe Text)
+    , _cdFax              :: !(Maybe Text)
+    , _cdState            :: !(Maybe Text)
+    , _cdLastName         :: !(Maybe Text)
+    , _cdExtraParams      :: !(Maybe [ExtraParam])
+    , _cdZipCode          :: !(Maybe Text)
+    , _cdAddressLine1     :: !(Maybe Text)
+    , _cdCity             :: !(Maybe Text)
+    , _cdPhoneNumber      :: !(Maybe Text)
+    , _cdAddressLine2     :: !(Maybe Text)
+    , _cdFirstName        :: !(Maybe Text)
+    , _cdCountryCode      :: !(Maybe CountryCode)
+    , _cdContactType      :: !(Maybe ContactType)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ContactDetail' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdOrganizationName'
+--
+-- * 'cdEmail'
+--
+-- * 'cdFax'
+--
+-- * 'cdState'
+--
+-- * 'cdLastName'
+--
+-- * 'cdExtraParams'
+--
+-- * 'cdZipCode'
+--
+-- * 'cdAddressLine1'
+--
+-- * 'cdCity'
+--
+-- * 'cdPhoneNumber'
+--
+-- * 'cdAddressLine2'
+--
+-- * 'cdFirstName'
+--
+-- * 'cdCountryCode'
+--
+-- * 'cdContactType'
+contactDetail
+    :: ContactDetail
+contactDetail =
+    ContactDetail'
+    { _cdOrganizationName = Nothing
+    , _cdEmail = Nothing
+    , _cdFax = Nothing
+    , _cdState = Nothing
+    , _cdLastName = Nothing
+    , _cdExtraParams = Nothing
+    , _cdZipCode = Nothing
+    , _cdAddressLine1 = Nothing
+    , _cdCity = Nothing
+    , _cdPhoneNumber = Nothing
+    , _cdAddressLine2 = Nothing
+    , _cdFirstName = Nothing
+    , _cdCountryCode = Nothing
+    , _cdContactType = Nothing
+    }
+
+-- | Name of the organization for contact types other than 'PERSON'.
+--
+-- Type: String
+--
+-- Default: None
+--
+-- Constraints: Maximum 255 characters. Contact type must not be 'PERSON'.
+--
+-- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
+--
+-- Required: No
+cdOrganizationName :: Lens' ContactDetail (Maybe Text)
+cdOrganizationName = lens _cdOrganizationName (\ s a -> s{_cdOrganizationName = a});
+
+-- | Email address of the contact.
+--
+-- Type: String
+--
+-- Default: None
+--
+-- Constraints: Maximum 254 characters.
+--
+-- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
+--
+-- Required: Yes
+cdEmail :: Lens' ContactDetail (Maybe Text)
+cdEmail = lens _cdEmail (\ s a -> s{_cdEmail = a});
+
+-- | Fax number of the contact.
+--
+-- Type: String
+--
+-- Default: None
+--
+-- Constraints: Phone number must be specified in the format \"+[country
+-- dialing code].[number including any area code]\". For example, a US
+-- phone number might appear as '\"+1.1234567890\"'.
+--
+-- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
+--
+-- Required: No
+cdFax :: Lens' ContactDetail (Maybe Text)
+cdFax = lens _cdFax (\ s a -> s{_cdFax = a});
+
+-- | The state or province of the contact\'s city.
+--
+-- Type: String
+--
+-- Default: None
+--
+-- Constraints: Maximum 255 characters.
+--
+-- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
+--
+-- Required: No
+cdState :: Lens' ContactDetail (Maybe Text)
+cdState = lens _cdState (\ s a -> s{_cdState = a});
+
+-- | Last name of contact.
+--
+-- Type: String
+--
+-- Default: None
+--
+-- Constraints: Maximum 255 characters.
+--
+-- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
+--
+-- Required: Yes
+cdLastName :: Lens' ContactDetail (Maybe Text)
+cdLastName = lens _cdLastName (\ s a -> s{_cdLastName = a});
+
+-- | A list of name-value pairs for parameters required by certain top-level
+-- domains.
+--
+-- Type: Complex
+--
+-- Default: None
+--
+-- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
+--
+-- Children: 'Name', 'Value'
+--
+-- Required: No
+cdExtraParams :: Lens' ContactDetail [ExtraParam]
+cdExtraParams = lens _cdExtraParams (\ s a -> s{_cdExtraParams = a}) . _Default . _Coerce;
+
+-- | The zip or postal code of the contact\'s address.
+--
+-- Type: String
+--
+-- Default: None
+--
+-- Constraints: Maximum 255 characters.
+--
+-- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
+--
+-- Required: No
+cdZipCode :: Lens' ContactDetail (Maybe Text)
+cdZipCode = lens _cdZipCode (\ s a -> s{_cdZipCode = a});
+
+-- | First line of the contact\'s address.
+--
+-- Type: String
+--
+-- Default: None
+--
+-- Constraints: Maximum 255 characters.
+--
+-- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
+--
+-- Required: Yes
+cdAddressLine1 :: Lens' ContactDetail (Maybe Text)
+cdAddressLine1 = lens _cdAddressLine1 (\ s a -> s{_cdAddressLine1 = a});
+
+-- | The city of the contact\'s address.
+--
+-- Type: String
+--
+-- Default: None
+--
+-- Constraints: Maximum 255 characters.
+--
+-- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
+--
+-- Required: Yes
+cdCity :: Lens' ContactDetail (Maybe Text)
+cdCity = lens _cdCity (\ s a -> s{_cdCity = a});
+
+-- | The phone number of the contact.
+--
+-- Type: String
+--
+-- Default: None
+--
+-- Constraints: Phone number must be specified in the format \"+[country
+-- dialing code].[number including any area code>]\". For example, a US
+-- phone number might appear as '\"+1.1234567890\"'.
+--
+-- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
+--
+-- Required: Yes
+cdPhoneNumber :: Lens' ContactDetail (Maybe Text)
+cdPhoneNumber = lens _cdPhoneNumber (\ s a -> s{_cdPhoneNumber = a});
+
+-- | Second line of contact\'s address, if any.
+--
+-- Type: String
+--
+-- Default: None
+--
+-- Constraints: Maximum 255 characters.
+--
+-- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
+--
+-- Required: No
+cdAddressLine2 :: Lens' ContactDetail (Maybe Text)
+cdAddressLine2 = lens _cdAddressLine2 (\ s a -> s{_cdAddressLine2 = a});
+
+-- | First name of contact.
+--
+-- Type: String
+--
+-- Default: None
+--
+-- Constraints: Maximum 255 characters.
+--
+-- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
+--
+-- Required: Yes
+cdFirstName :: Lens' ContactDetail (Maybe Text)
+cdFirstName = lens _cdFirstName (\ s a -> s{_cdFirstName = a});
+
+-- | Code for the country of the contact\'s address.
+--
+-- Type: String
+--
+-- Default: None
+--
+-- Constraints: Maximum 255 characters.
+--
+-- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
+--
+-- Required: Yes
+cdCountryCode :: Lens' ContactDetail (Maybe CountryCode)
+cdCountryCode = lens _cdCountryCode (\ s a -> s{_cdCountryCode = a});
+
+-- | Indicates whether the contact is a person, company, association, or
+-- public organization. If you choose an option other than 'PERSON', you
+-- must enter an organization name, and you can\'t enable privacy
+-- protection for the contact.
+--
+-- Type: String
+--
+-- Default: None
+--
+-- Constraints: Maximum 255 characters.
+--
+-- Valid values: 'PERSON' | 'COMPANY' | 'ASSOCIATION' | 'PUBLIC_BODY'
+--
+-- Parents: 'RegistrantContact', 'AdminContact', 'TechContact'
+--
+-- Required: Yes
+cdContactType :: Lens' ContactDetail (Maybe ContactType)
+cdContactType = lens _cdContactType (\ s a -> s{_cdContactType = a});
+
+instance FromJSON ContactDetail where
+        parseJSON
+          = withObject "ContactDetail"
+              (\ x ->
+                 ContactDetail' <$>
+                   (x .:? "OrganizationName") <*> (x .:? "Email") <*>
+                     (x .:? "Fax")
+                     <*> (x .:? "State")
+                     <*> (x .:? "LastName")
+                     <*> (x .:? "ExtraParams" .!= mempty)
+                     <*> (x .:? "ZipCode")
+                     <*> (x .:? "AddressLine1")
+                     <*> (x .:? "City")
+                     <*> (x .:? "PhoneNumber")
+                     <*> (x .:? "AddressLine2")
+                     <*> (x .:? "FirstName")
+                     <*> (x .:? "CountryCode")
+                     <*> (x .:? "ContactType"))
+
+instance ToJSON ContactDetail where
+        toJSON ContactDetail'{..}
+          = object
+              ["OrganizationName" .= _cdOrganizationName,
+               "Email" .= _cdEmail, "Fax" .= _cdFax,
+               "State" .= _cdState, "LastName" .= _cdLastName,
+               "ExtraParams" .= _cdExtraParams,
+               "ZipCode" .= _cdZipCode,
+               "AddressLine1" .= _cdAddressLine1, "City" .= _cdCity,
+               "PhoneNumber" .= _cdPhoneNumber,
+               "AddressLine2" .= _cdAddressLine2,
+               "FirstName" .= _cdFirstName,
+               "CountryCode" .= _cdCountryCode,
+               "ContactType" .= _cdContactType]
+
+-- | /See:/ 'domainSummary' smart constructor.
+data DomainSummary = DomainSummary'
+    { _dsExpiry       :: !(Maybe POSIX)
+    , _dsTransferLock :: !(Maybe Bool)
+    , _dsAutoRenew    :: !(Maybe Bool)
+    , _dsDomainName   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DomainSummary' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsExpiry'
+--
+-- * 'dsTransferLock'
+--
+-- * 'dsAutoRenew'
+--
+-- * 'dsDomainName'
+domainSummary
+    :: Text -- ^ 'dsDomainName'
+    -> DomainSummary
+domainSummary pDomainName_ =
+    DomainSummary'
+    { _dsExpiry = Nothing
+    , _dsTransferLock = Nothing
+    , _dsAutoRenew = Nothing
+    , _dsDomainName = pDomainName_
+    }
+
+-- | Expiration date of the domain in Coordinated Universal Time (UTC).
+--
+-- Type: Long
+dsExpiry :: Lens' DomainSummary (Maybe UTCTime)
+dsExpiry = lens _dsExpiry (\ s a -> s{_dsExpiry = a}) . mapping _Time;
+
+-- | Indicates whether a domain is locked from unauthorized transfer to
+-- another party.
+--
+-- Type: Boolean
+--
+-- Valid values: 'True' | 'False'
+dsTransferLock :: Lens' DomainSummary (Maybe Bool)
+dsTransferLock = lens _dsTransferLock (\ s a -> s{_dsTransferLock = a});
+
+-- | Indicates whether the domain is automatically renewed upon expiration.
+--
+-- Type: Boolean
+--
+-- Valid values: 'True' | 'False'
+dsAutoRenew :: Lens' DomainSummary (Maybe Bool)
+dsAutoRenew = lens _dsAutoRenew (\ s a -> s{_dsAutoRenew = a});
+
+-- | The name of a domain.
+--
+-- Type: String
+dsDomainName :: Lens' DomainSummary Text
+dsDomainName = lens _dsDomainName (\ s a -> s{_dsDomainName = a});
+
+instance FromJSON DomainSummary where
+        parseJSON
+          = withObject "DomainSummary"
+              (\ x ->
+                 DomainSummary' <$>
+                   (x .:? "Expiry") <*> (x .:? "TransferLock") <*>
+                     (x .:? "AutoRenew")
+                     <*> (x .: "DomainName"))
+
+-- | ExtraParam includes the following elements.
+--
+-- /See:/ 'extraParam' smart constructor.
+data ExtraParam = ExtraParam'
+    { _epName  :: !ExtraParamName
+    , _epValue :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ExtraParam' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'epName'
+--
+-- * 'epValue'
+extraParam
+    :: ExtraParamName -- ^ 'epName'
+    -> Text -- ^ 'epValue'
+    -> ExtraParam
+extraParam pName_ pValue_ =
+    ExtraParam'
+    { _epName = pName_
+    , _epValue = pValue_
+    }
+
+-- | Name of the additional parameter required by the top-level domain.
+--
+-- Type: String
+--
+-- Default: None
+--
+-- Valid values: 'DUNS_NUMBER' | 'BRAND_NUMBER' | 'BIRTH_DEPARTMENT' |
+-- 'BIRTH_DATE_IN_YYYY_MM_DD' | 'BIRTH_COUNTRY' | 'BIRTH_CITY' |
+-- 'DOCUMENT_NUMBER' | 'AU_ID_NUMBER' | 'AU_ID_TYPE' | 'CA_LEGAL_TYPE' |
+-- 'ES_IDENTIFICATION' | 'ES_IDENTIFICATION_TYPE' | 'ES_LEGAL_FORM' |
+-- 'FI_BUSINESS_NUMBER' | 'FI_ID_NUMBER' | 'IT_PIN' | 'RU_PASSPORT_DATA' |
+-- 'SE_ID_NUMBER' | 'SG_ID_NUMBER' | 'VAT_NUMBER'
+--
+-- Parent: 'ExtraParams'
+--
+-- Required: Yes
+epName :: Lens' ExtraParam ExtraParamName
+epName = lens _epName (\ s a -> s{_epName = a});
+
+-- | Values corresponding to the additional parameter names required by some
+-- top-level domains.
+--
+-- Type: String
+--
+-- Default: None
+--
+-- Constraints: Maximum 2048 characters.
+--
+-- Parent: 'ExtraParams'
+--
+-- Required: Yes
+epValue :: Lens' ExtraParam Text
+epValue = lens _epValue (\ s a -> s{_epValue = a});
+
+instance FromJSON ExtraParam where
+        parseJSON
+          = withObject "ExtraParam"
+              (\ x ->
+                 ExtraParam' <$> (x .: "Name") <*> (x .: "Value"))
+
+instance ToJSON ExtraParam where
+        toJSON ExtraParam'{..}
+          = object ["Name" .= _epName, "Value" .= _epValue]
+
+-- | Nameserver includes the following elements.
+--
+-- /See:/ 'nameserver' smart constructor.
+data Nameserver = Nameserver'
+    { _nGlueIPs :: !(Maybe [Text])
+    , _nName    :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Nameserver' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nGlueIPs'
+--
+-- * 'nName'
+nameserver
+    :: Text -- ^ 'nName'
+    -> Nameserver
+nameserver pName_ =
+    Nameserver'
+    { _nGlueIPs = Nothing
+    , _nName = pName_
+    }
+
+-- | Glue IP address of a name server entry. Glue IP addresses are required
+-- only when the name of the name server is a subdomain of the domain. For
+-- example, if your domain is example.com and the name server for the
+-- domain is ns.example.com, you need to specify the IP address for
+-- ns.example.com.
+--
+-- Type: List of IP addresses.
+--
+-- Constraints: The list can contain only one IPv4 and one IPv6 address.
+--
+-- Parent: 'Nameservers'
+nGlueIPs :: Lens' Nameserver [Text]
+nGlueIPs = lens _nGlueIPs (\ s a -> s{_nGlueIPs = a}) . _Default . _Coerce;
+
+-- | The fully qualified host name of the name server.
+--
+-- Type: String
+--
+-- Constraint: Maximum 255 characterss
+--
+-- Parent: 'Nameservers'
+nName :: Lens' Nameserver Text
+nName = lens _nName (\ s a -> s{_nName = a});
+
+instance FromJSON Nameserver where
+        parseJSON
+          = withObject "Nameserver"
+              (\ x ->
+                 Nameserver' <$>
+                   (x .:? "GlueIps" .!= mempty) <*> (x .: "Name"))
+
+instance ToJSON Nameserver where
+        toJSON Nameserver'{..}
+          = object ["GlueIps" .= _nGlueIPs, "Name" .= _nName]
+
+-- | OperationSummary includes the following elements.
+--
+-- /See:/ 'operationSummary' smart constructor.
+data OperationSummary = OperationSummary'
+    { _osOperationId   :: !Text
+    , _osStatus        :: !OperationStatus
+    , _osType          :: !OperationType
+    , _osSubmittedDate :: !POSIX
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationSummary' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'osOperationId'
+--
+-- * 'osStatus'
+--
+-- * 'osType'
+--
+-- * 'osSubmittedDate'
+operationSummary
+    :: Text -- ^ 'osOperationId'
+    -> OperationStatus -- ^ 'osStatus'
+    -> OperationType -- ^ 'osType'
+    -> UTCTime -- ^ 'osSubmittedDate'
+    -> OperationSummary
+operationSummary pOperationId_ pStatus_ pType_ pSubmittedDate_ =
+    OperationSummary'
+    { _osOperationId = pOperationId_
+    , _osStatus = pStatus_
+    , _osType = pType_
+    , _osSubmittedDate = _Time # pSubmittedDate_
+    }
+
+-- | Identifier returned to track the requested action.
+--
+-- Type: String
+osOperationId :: Lens' OperationSummary Text
+osOperationId = lens _osOperationId (\ s a -> s{_osOperationId = a});
+
+-- | The current status of the requested operation in the system.
+--
+-- Type: String
+osStatus :: Lens' OperationSummary OperationStatus
+osStatus = lens _osStatus (\ s a -> s{_osStatus = a});
+
+-- | Type of the action requested.
+--
+-- Type: String
+--
+-- Valid values: 'REGISTER_DOMAIN' | 'DELETE_DOMAIN' | 'TRANSFER_IN_DOMAIN'
+-- | 'UPDATE_DOMAIN_CONTACT' | 'UPDATE_NAMESERVER' |
+-- 'CHANGE_PRIVACY_PROTECTION' | 'DOMAIN_LOCK'
+osType :: Lens' OperationSummary OperationType
+osType = lens _osType (\ s a -> s{_osType = a});
+
+-- | The date when the request was submitted.
+osSubmittedDate :: Lens' OperationSummary UTCTime
+osSubmittedDate = lens _osSubmittedDate (\ s a -> s{_osSubmittedDate = a}) . _Time;
+
+instance FromJSON OperationSummary where
+        parseJSON
+          = withObject "OperationSummary"
+              (\ x ->
+                 OperationSummary' <$>
+                   (x .: "OperationId") <*> (x .: "Status") <*>
+                     (x .: "Type")
+                     <*> (x .: "SubmittedDate"))
+
+-- | Each tag includes the following elements.
+--
+-- /See:/ 'tag' smart constructor.
+data Tag = Tag'
+    { _tagValue :: !(Maybe Text)
+    , _tagKey   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Tag' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tagValue'
+--
+-- * 'tagKey'
+tag
+    :: Tag
+tag =
+    Tag'
+    { _tagValue = Nothing
+    , _tagKey = Nothing
+    }
+
+-- | The value of a tag.
+--
+-- Type: String
+--
+-- Default: None
+--
+-- Valid values: A-Z, a-z, 0-9, space, \".:\/=+\\-\'\"
+--
+-- Constraints: Each value can be 0-256 characters long.
+--
+-- Required: Yes
+tagValue :: Lens' Tag (Maybe Text)
+tagValue = lens _tagValue (\ s a -> s{_tagValue = a});
+
+-- | The key (name) of a tag.
+--
+-- Type: String
+--
+-- Default: None
+--
+-- Valid values: A-Z, a-z, 0-9, space, \".:\/=+\\-\'\"
+--
+-- Constraints: Each key can be 1-128 characters long.
+--
+-- Required: Yes
+tagKey :: Lens' Tag (Maybe Text)
+tagKey = lens _tagKey (\ s a -> s{_tagKey = a});
+
+instance FromJSON Tag where
+        parseJSON
+          = withObject "Tag"
+              (\ x -> Tag' <$> (x .:? "Value") <*> (x .:? "Key"))
+
+instance ToJSON Tag where
+        toJSON Tag'{..}
+          = object ["Value" .= _tagValue, "Key" .= _tagKey]
diff --git a/gen/Network/AWS/Route53Domains/Types/Sum.hs b/gen/Network/AWS/Route53Domains/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53Domains/Types/Sum.hs
@@ -0,0 +1,965 @@
+{-# 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.Route53Domains.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.Route53Domains.Types.Sum where
+
+import           Network.AWS.Prelude
+
+data ContactType
+    = Association
+    | Company
+    | Person
+    | PublicBody
+    | Reseller
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ContactType where
+    parser = takeLowerText >>= \case
+        "association" -> pure Association
+        "company" -> pure Company
+        "person" -> pure Person
+        "public_body" -> pure PublicBody
+        "reseller" -> pure Reseller
+        e -> fromTextError $ "Failure parsing ContactType from value: '" <> e
+           <> "'. Accepted values: association, company, person, public_body, reseller"
+
+instance ToText ContactType where
+    toText = \case
+        Association -> "association"
+        Company -> "company"
+        Person -> "person"
+        PublicBody -> "public_body"
+        Reseller -> "reseller"
+
+instance Hashable     ContactType
+instance ToByteString ContactType
+instance ToQuery      ContactType
+instance ToHeader     ContactType
+
+instance ToJSON ContactType where
+    toJSON = toJSONText
+
+instance FromJSON ContactType where
+    parseJSON = parseJSONText "ContactType"
+
+data CountryCode
+    = AD
+    | AE
+    | AF
+    | AG
+    | AI
+    | AL
+    | AM
+    | AN
+    | AO
+    | AQ
+    | AR
+    | AS
+    | AT
+    | AU
+    | AW
+    | AZ
+    | BA
+    | BB
+    | BD
+    | BE
+    | BF
+    | BG
+    | BH
+    | BI
+    | BJ
+    | BL
+    | BM
+    | BN
+    | BO
+    | BR
+    | BS
+    | BT
+    | BW
+    | BY
+    | BZ
+    | CA
+    | CC
+    | CD
+    | CF
+    | CG
+    | CH
+    | CI
+    | CK
+    | CL
+    | CM
+    | CN
+    | CO
+    | CR
+    | CU
+    | CV
+    | CX
+    | CY
+    | CZ
+    | DE
+    | DJ
+    | DK
+    | DM
+    | DO
+    | DZ
+    | EC
+    | EE
+    | EG
+    | ER
+    | ES
+    | ET
+    | FI
+    | FJ
+    | FK
+    | FM
+    | FO
+    | FR
+    | GA
+    | GB
+    | GD
+    | GE
+    | GH
+    | GI
+    | GL
+    | GM
+    | GN
+    | GQ
+    | GR
+    | GT'
+    | GU
+    | GW
+    | GY
+    | HK
+    | HN
+    | HR
+    | HT
+    | HU
+    | IE
+    | IL
+    | IM
+    | IN
+    | IQ
+    | IR
+    | IS
+    | IT
+    | Id
+    | JM
+    | JO
+    | JP
+    | KE
+    | KG
+    | KH
+    | KI
+    | KM
+    | KN
+    | KP
+    | KR
+    | KW
+    | KY
+    | KZ
+    | LA
+    | LB
+    | LC
+    | LI
+    | LK
+    | LR
+    | LS
+    | LT'
+    | LU
+    | LV
+    | LY
+    | MA
+    | MC
+    | MD
+    | ME
+    | MF
+    | MG
+    | MH
+    | MK
+    | ML
+    | MM
+    | MN
+    | MO
+    | MP
+    | MR
+    | MS
+    | MT
+    | MU
+    | MV
+    | MW
+    | MX
+    | MY
+    | MZ
+    | NA
+    | NC
+    | NE
+    | NG
+    | NI
+    | NL
+    | NO
+    | NP
+    | NR
+    | NU
+    | NZ
+    | OM
+    | PA
+    | PE
+    | PF
+    | PG
+    | PH
+    | PK
+    | PL
+    | PM
+    | PN
+    | PR
+    | PT
+    | PW
+    | PY
+    | QA
+    | RO
+    | RS
+    | RU
+    | RW
+    | SA
+    | SB
+    | SC
+    | SD
+    | SE
+    | SG
+    | SH
+    | SI
+    | SK
+    | SL
+    | SM
+    | SN
+    | SO
+    | SR
+    | ST
+    | SV
+    | SY
+    | SZ
+    | TC
+    | TD
+    | TG
+    | TH
+    | TJ
+    | TK
+    | TL
+    | TM
+    | TN
+    | TO
+    | TR
+    | TT
+    | TV
+    | TW
+    | TZ
+    | UA
+    | UG
+    | US
+    | UY
+    | UZ
+    | VA
+    | VC
+    | VE
+    | VG
+    | VI
+    | VN
+    | VU
+    | WF
+    | WS
+    | YE
+    | YT
+    | ZA
+    | ZM
+    | ZW
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText CountryCode where
+    parser = takeLowerText >>= \case
+        "ad" -> pure AD
+        "ae" -> pure AE
+        "af" -> pure AF
+        "ag" -> pure AG
+        "ai" -> pure AI
+        "al" -> pure AL
+        "am" -> pure AM
+        "an" -> pure AN
+        "ao" -> pure AO
+        "aq" -> pure AQ
+        "ar" -> pure AR
+        "as" -> pure AS
+        "at" -> pure AT
+        "au" -> pure AU
+        "aw" -> pure AW
+        "az" -> pure AZ
+        "ba" -> pure BA
+        "bb" -> pure BB
+        "bd" -> pure BD
+        "be" -> pure BE
+        "bf" -> pure BF
+        "bg" -> pure BG
+        "bh" -> pure BH
+        "bi" -> pure BI
+        "bj" -> pure BJ
+        "bl" -> pure BL
+        "bm" -> pure BM
+        "bn" -> pure BN
+        "bo" -> pure BO
+        "br" -> pure BR
+        "bs" -> pure BS
+        "bt" -> pure BT
+        "bw" -> pure BW
+        "by" -> pure BY
+        "bz" -> pure BZ
+        "ca" -> pure CA
+        "cc" -> pure CC
+        "cd" -> pure CD
+        "cf" -> pure CF
+        "cg" -> pure CG
+        "ch" -> pure CH
+        "ci" -> pure CI
+        "ck" -> pure CK
+        "cl" -> pure CL
+        "cm" -> pure CM
+        "cn" -> pure CN
+        "co" -> pure CO
+        "cr" -> pure CR
+        "cu" -> pure CU
+        "cv" -> pure CV
+        "cx" -> pure CX
+        "cy" -> pure CY
+        "cz" -> pure CZ
+        "de" -> pure DE
+        "dj" -> pure DJ
+        "dk" -> pure DK
+        "dm" -> pure DM
+        "do" -> pure DO
+        "dz" -> pure DZ
+        "ec" -> pure EC
+        "ee" -> pure EE
+        "eg" -> pure EG
+        "er" -> pure ER
+        "es" -> pure ES
+        "et" -> pure ET
+        "fi" -> pure FI
+        "fj" -> pure FJ
+        "fk" -> pure FK
+        "fm" -> pure FM
+        "fo" -> pure FO
+        "fr" -> pure FR
+        "ga" -> pure GA
+        "gb" -> pure GB
+        "gd" -> pure GD
+        "ge" -> pure GE
+        "gh" -> pure GH
+        "gi" -> pure GI
+        "gl" -> pure GL
+        "gm" -> pure GM
+        "gn" -> pure GN
+        "gq" -> pure GQ
+        "gr" -> pure GR
+        "gt" -> pure GT'
+        "gu" -> pure GU
+        "gw" -> pure GW
+        "gy" -> pure GY
+        "hk" -> pure HK
+        "hn" -> pure HN
+        "hr" -> pure HR
+        "ht" -> pure HT
+        "hu" -> pure HU
+        "ie" -> pure IE
+        "il" -> pure IL
+        "im" -> pure IM
+        "in" -> pure IN
+        "iq" -> pure IQ
+        "ir" -> pure IR
+        "is" -> pure IS
+        "it" -> pure IT
+        "id" -> pure Id
+        "jm" -> pure JM
+        "jo" -> pure JO
+        "jp" -> pure JP
+        "ke" -> pure KE
+        "kg" -> pure KG
+        "kh" -> pure KH
+        "ki" -> pure KI
+        "km" -> pure KM
+        "kn" -> pure KN
+        "kp" -> pure KP
+        "kr" -> pure KR
+        "kw" -> pure KW
+        "ky" -> pure KY
+        "kz" -> pure KZ
+        "la" -> pure LA
+        "lb" -> pure LB
+        "lc" -> pure LC
+        "li" -> pure LI
+        "lk" -> pure LK
+        "lr" -> pure LR
+        "ls" -> pure LS
+        "lt" -> pure LT'
+        "lu" -> pure LU
+        "lv" -> pure LV
+        "ly" -> pure LY
+        "ma" -> pure MA
+        "mc" -> pure MC
+        "md" -> pure MD
+        "me" -> pure ME
+        "mf" -> pure MF
+        "mg" -> pure MG
+        "mh" -> pure MH
+        "mk" -> pure MK
+        "ml" -> pure ML
+        "mm" -> pure MM
+        "mn" -> pure MN
+        "mo" -> pure MO
+        "mp" -> pure MP
+        "mr" -> pure MR
+        "ms" -> pure MS
+        "mt" -> pure MT
+        "mu" -> pure MU
+        "mv" -> pure MV
+        "mw" -> pure MW
+        "mx" -> pure MX
+        "my" -> pure MY
+        "mz" -> pure MZ
+        "na" -> pure NA
+        "nc" -> pure NC
+        "ne" -> pure NE
+        "ng" -> pure NG
+        "ni" -> pure NI
+        "nl" -> pure NL
+        "no" -> pure NO
+        "np" -> pure NP
+        "nr" -> pure NR
+        "nu" -> pure NU
+        "nz" -> pure NZ
+        "om" -> pure OM
+        "pa" -> pure PA
+        "pe" -> pure PE
+        "pf" -> pure PF
+        "pg" -> pure PG
+        "ph" -> pure PH
+        "pk" -> pure PK
+        "pl" -> pure PL
+        "pm" -> pure PM
+        "pn" -> pure PN
+        "pr" -> pure PR
+        "pt" -> pure PT
+        "pw" -> pure PW
+        "py" -> pure PY
+        "qa" -> pure QA
+        "ro" -> pure RO
+        "rs" -> pure RS
+        "ru" -> pure RU
+        "rw" -> pure RW
+        "sa" -> pure SA
+        "sb" -> pure SB
+        "sc" -> pure SC
+        "sd" -> pure SD
+        "se" -> pure SE
+        "sg" -> pure SG
+        "sh" -> pure SH
+        "si" -> pure SI
+        "sk" -> pure SK
+        "sl" -> pure SL
+        "sm" -> pure SM
+        "sn" -> pure SN
+        "so" -> pure SO
+        "sr" -> pure SR
+        "st" -> pure ST
+        "sv" -> pure SV
+        "sy" -> pure SY
+        "sz" -> pure SZ
+        "tc" -> pure TC
+        "td" -> pure TD
+        "tg" -> pure TG
+        "th" -> pure TH
+        "tj" -> pure TJ
+        "tk" -> pure TK
+        "tl" -> pure TL
+        "tm" -> pure TM
+        "tn" -> pure TN
+        "to" -> pure TO
+        "tr" -> pure TR
+        "tt" -> pure TT
+        "tv" -> pure TV
+        "tw" -> pure TW
+        "tz" -> pure TZ
+        "ua" -> pure UA
+        "ug" -> pure UG
+        "us" -> pure US
+        "uy" -> pure UY
+        "uz" -> pure UZ
+        "va" -> pure VA
+        "vc" -> pure VC
+        "ve" -> pure VE
+        "vg" -> pure VG
+        "vi" -> pure VI
+        "vn" -> pure VN
+        "vu" -> pure VU
+        "wf" -> pure WF
+        "ws" -> pure WS
+        "ye" -> pure YE
+        "yt" -> pure YT
+        "za" -> pure ZA
+        "zm" -> pure ZM
+        "zw" -> pure ZW
+        e -> fromTextError $ "Failure parsing CountryCode from value: '" <> e
+           <> "'. Accepted values: ad, ae, af, ag, ai, al, am, an, ao, aq, ar, as, at, au, aw, az, ba, bb, bd, be, bf, bg, bh, bi, bj, bl, bm, bn, bo, br, bs, bt, bw, by, bz, ca, cc, cd, cf, cg, ch, ci, ck, cl, cm, cn, co, cr, cu, cv, cx, cy, cz, de, dj, dk, dm, do, dz, ec, ee, eg, er, es, et, fi, fj, fk, fm, fo, fr, ga, gb, gd, ge, gh, gi, gl, gm, gn, gq, gr, gt, gu, gw, gy, hk, hn, hr, ht, hu, ie, il, im, in, iq, ir, is, it, id, jm, jo, jp, ke, kg, kh, ki, km, kn, kp, kr, kw, ky, kz, la, lb, lc, li, lk, lr, ls, lt, lu, lv, ly, ma, mc, md, me, mf, mg, mh, mk, ml, mm, mn, mo, mp, mr, ms, mt, mu, mv, mw, mx, my, mz, na, nc, ne, ng, ni, nl, no, np, nr, nu, nz, om, pa, pe, pf, pg, ph, pk, pl, pm, pn, pr, pt, pw, py, qa, ro, rs, ru, rw, sa, sb, sc, sd, se, sg, sh, si, sk, sl, sm, sn, so, sr, st, sv, sy, sz, tc, td, tg, th, tj, tk, tl, tm, tn, to, tr, tt, tv, tw, tz, ua, ug, us, uy, uz, va, vc, ve, vg, vi, vn, vu, wf, ws, ye, yt, za, zm, zw"
+
+instance ToText CountryCode where
+    toText = \case
+        AD -> "ad"
+        AE -> "ae"
+        AF -> "af"
+        AG -> "ag"
+        AI -> "ai"
+        AL -> "al"
+        AM -> "am"
+        AN -> "an"
+        AO -> "ao"
+        AQ -> "aq"
+        AR -> "ar"
+        AS -> "as"
+        AT -> "at"
+        AU -> "au"
+        AW -> "aw"
+        AZ -> "az"
+        BA -> "ba"
+        BB -> "bb"
+        BD -> "bd"
+        BE -> "be"
+        BF -> "bf"
+        BG -> "bg"
+        BH -> "bh"
+        BI -> "bi"
+        BJ -> "bj"
+        BL -> "bl"
+        BM -> "bm"
+        BN -> "bn"
+        BO -> "bo"
+        BR -> "br"
+        BS -> "bs"
+        BT -> "bt"
+        BW -> "bw"
+        BY -> "by"
+        BZ -> "bz"
+        CA -> "ca"
+        CC -> "cc"
+        CD -> "cd"
+        CF -> "cf"
+        CG -> "cg"
+        CH -> "ch"
+        CI -> "ci"
+        CK -> "ck"
+        CL -> "cl"
+        CM -> "cm"
+        CN -> "cn"
+        CO -> "co"
+        CR -> "cr"
+        CU -> "cu"
+        CV -> "cv"
+        CX -> "cx"
+        CY -> "cy"
+        CZ -> "cz"
+        DE -> "de"
+        DJ -> "dj"
+        DK -> "dk"
+        DM -> "dm"
+        DO -> "do"
+        DZ -> "dz"
+        EC -> "ec"
+        EE -> "ee"
+        EG -> "eg"
+        ER -> "er"
+        ES -> "es"
+        ET -> "et"
+        FI -> "fi"
+        FJ -> "fj"
+        FK -> "fk"
+        FM -> "fm"
+        FO -> "fo"
+        FR -> "fr"
+        GA -> "ga"
+        GB -> "gb"
+        GD -> "gd"
+        GE -> "ge"
+        GH -> "gh"
+        GI -> "gi"
+        GL -> "gl"
+        GM -> "gm"
+        GN -> "gn"
+        GQ -> "gq"
+        GR -> "gr"
+        GT' -> "gt"
+        GU -> "gu"
+        GW -> "gw"
+        GY -> "gy"
+        HK -> "hk"
+        HN -> "hn"
+        HR -> "hr"
+        HT -> "ht"
+        HU -> "hu"
+        IE -> "ie"
+        IL -> "il"
+        IM -> "im"
+        IN -> "in"
+        IQ -> "iq"
+        IR -> "ir"
+        IS -> "is"
+        IT -> "it"
+        Id -> "id"
+        JM -> "jm"
+        JO -> "jo"
+        JP -> "jp"
+        KE -> "ke"
+        KG -> "kg"
+        KH -> "kh"
+        KI -> "ki"
+        KM -> "km"
+        KN -> "kn"
+        KP -> "kp"
+        KR -> "kr"
+        KW -> "kw"
+        KY -> "ky"
+        KZ -> "kz"
+        LA -> "la"
+        LB -> "lb"
+        LC -> "lc"
+        LI -> "li"
+        LK -> "lk"
+        LR -> "lr"
+        LS -> "ls"
+        LT' -> "lt"
+        LU -> "lu"
+        LV -> "lv"
+        LY -> "ly"
+        MA -> "ma"
+        MC -> "mc"
+        MD -> "md"
+        ME -> "me"
+        MF -> "mf"
+        MG -> "mg"
+        MH -> "mh"
+        MK -> "mk"
+        ML -> "ml"
+        MM -> "mm"
+        MN -> "mn"
+        MO -> "mo"
+        MP -> "mp"
+        MR -> "mr"
+        MS -> "ms"
+        MT -> "mt"
+        MU -> "mu"
+        MV -> "mv"
+        MW -> "mw"
+        MX -> "mx"
+        MY -> "my"
+        MZ -> "mz"
+        NA -> "na"
+        NC -> "nc"
+        NE -> "ne"
+        NG -> "ng"
+        NI -> "ni"
+        NL -> "nl"
+        NO -> "no"
+        NP -> "np"
+        NR -> "nr"
+        NU -> "nu"
+        NZ -> "nz"
+        OM -> "om"
+        PA -> "pa"
+        PE -> "pe"
+        PF -> "pf"
+        PG -> "pg"
+        PH -> "ph"
+        PK -> "pk"
+        PL -> "pl"
+        PM -> "pm"
+        PN -> "pn"
+        PR -> "pr"
+        PT -> "pt"
+        PW -> "pw"
+        PY -> "py"
+        QA -> "qa"
+        RO -> "ro"
+        RS -> "rs"
+        RU -> "ru"
+        RW -> "rw"
+        SA -> "sa"
+        SB -> "sb"
+        SC -> "sc"
+        SD -> "sd"
+        SE -> "se"
+        SG -> "sg"
+        SH -> "sh"
+        SI -> "si"
+        SK -> "sk"
+        SL -> "sl"
+        SM -> "sm"
+        SN -> "sn"
+        SO -> "so"
+        SR -> "sr"
+        ST -> "st"
+        SV -> "sv"
+        SY -> "sy"
+        SZ -> "sz"
+        TC -> "tc"
+        TD -> "td"
+        TG -> "tg"
+        TH -> "th"
+        TJ -> "tj"
+        TK -> "tk"
+        TL -> "tl"
+        TM -> "tm"
+        TN -> "tn"
+        TO -> "to"
+        TR -> "tr"
+        TT -> "tt"
+        TV -> "tv"
+        TW -> "tw"
+        TZ -> "tz"
+        UA -> "ua"
+        UG -> "ug"
+        US -> "us"
+        UY -> "uy"
+        UZ -> "uz"
+        VA -> "va"
+        VC -> "vc"
+        VE -> "ve"
+        VG -> "vg"
+        VI -> "vi"
+        VN -> "vn"
+        VU -> "vu"
+        WF -> "wf"
+        WS -> "ws"
+        YE -> "ye"
+        YT -> "yt"
+        ZA -> "za"
+        ZM -> "zm"
+        ZW -> "zw"
+
+instance Hashable     CountryCode
+instance ToByteString CountryCode
+instance ToQuery      CountryCode
+instance ToHeader     CountryCode
+
+instance ToJSON CountryCode where
+    toJSON = toJSONText
+
+instance FromJSON CountryCode where
+    parseJSON = parseJSONText "CountryCode"
+
+data DomainAvailability
+    = Available
+    | AvailablePreorder
+    | AvailableReserved
+    | DontKnow
+    | Reserved
+    | Unavailable
+    | UnavailablePremium
+    | UnavailableRestricted
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText DomainAvailability where
+    parser = takeLowerText >>= \case
+        "available" -> pure Available
+        "available_preorder" -> pure AvailablePreorder
+        "available_reserved" -> pure AvailableReserved
+        "dont_know" -> pure DontKnow
+        "reserved" -> pure Reserved
+        "unavailable" -> pure Unavailable
+        "unavailable_premium" -> pure UnavailablePremium
+        "unavailable_restricted" -> pure UnavailableRestricted
+        e -> fromTextError $ "Failure parsing DomainAvailability from value: '" <> e
+           <> "'. Accepted values: available, available_preorder, available_reserved, dont_know, reserved, unavailable, unavailable_premium, unavailable_restricted"
+
+instance ToText DomainAvailability where
+    toText = \case
+        Available -> "available"
+        AvailablePreorder -> "available_preorder"
+        AvailableReserved -> "available_reserved"
+        DontKnow -> "dont_know"
+        Reserved -> "reserved"
+        Unavailable -> "unavailable"
+        UnavailablePremium -> "unavailable_premium"
+        UnavailableRestricted -> "unavailable_restricted"
+
+instance Hashable     DomainAvailability
+instance ToByteString DomainAvailability
+instance ToQuery      DomainAvailability
+instance ToHeader     DomainAvailability
+
+instance FromJSON DomainAvailability where
+    parseJSON = parseJSONText "DomainAvailability"
+
+data ExtraParamName
+    = AuIdNumber
+    | AuIdType
+    | BirthCity
+    | BirthCountry
+    | BirthDateInYyyyMmDd
+    | BirthDepartment
+    | BrandNumber
+    | CaLegalType
+    | DocumentNumber
+    | DunsNumber
+    | EsIdentification
+    | EsIdentificationType
+    | EsLegalForm
+    | FiBusinessNumber
+    | FiIdNumber
+    | ItPin
+    | RuPassportData
+    | SeIdNumber
+    | SgIdNumber
+    | VatNumber
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ExtraParamName where
+    parser = takeLowerText >>= \case
+        "au_id_number" -> pure AuIdNumber
+        "au_id_type" -> pure AuIdType
+        "birth_city" -> pure BirthCity
+        "birth_country" -> pure BirthCountry
+        "birth_date_in_yyyy_mm_dd" -> pure BirthDateInYyyyMmDd
+        "birth_department" -> pure BirthDepartment
+        "brand_number" -> pure BrandNumber
+        "ca_legal_type" -> pure CaLegalType
+        "document_number" -> pure DocumentNumber
+        "duns_number" -> pure DunsNumber
+        "es_identification" -> pure EsIdentification
+        "es_identification_type" -> pure EsIdentificationType
+        "es_legal_form" -> pure EsLegalForm
+        "fi_business_number" -> pure FiBusinessNumber
+        "fi_id_number" -> pure FiIdNumber
+        "it_pin" -> pure ItPin
+        "ru_passport_data" -> pure RuPassportData
+        "se_id_number" -> pure SeIdNumber
+        "sg_id_number" -> pure SgIdNumber
+        "vat_number" -> pure VatNumber
+        e -> fromTextError $ "Failure parsing ExtraParamName from value: '" <> e
+           <> "'. Accepted values: au_id_number, au_id_type, birth_city, birth_country, birth_date_in_yyyy_mm_dd, birth_department, brand_number, ca_legal_type, document_number, duns_number, es_identification, es_identification_type, es_legal_form, fi_business_number, fi_id_number, it_pin, ru_passport_data, se_id_number, sg_id_number, vat_number"
+
+instance ToText ExtraParamName where
+    toText = \case
+        AuIdNumber -> "au_id_number"
+        AuIdType -> "au_id_type"
+        BirthCity -> "birth_city"
+        BirthCountry -> "birth_country"
+        BirthDateInYyyyMmDd -> "birth_date_in_yyyy_mm_dd"
+        BirthDepartment -> "birth_department"
+        BrandNumber -> "brand_number"
+        CaLegalType -> "ca_legal_type"
+        DocumentNumber -> "document_number"
+        DunsNumber -> "duns_number"
+        EsIdentification -> "es_identification"
+        EsIdentificationType -> "es_identification_type"
+        EsLegalForm -> "es_legal_form"
+        FiBusinessNumber -> "fi_business_number"
+        FiIdNumber -> "fi_id_number"
+        ItPin -> "it_pin"
+        RuPassportData -> "ru_passport_data"
+        SeIdNumber -> "se_id_number"
+        SgIdNumber -> "sg_id_number"
+        VatNumber -> "vat_number"
+
+instance Hashable     ExtraParamName
+instance ToByteString ExtraParamName
+instance ToQuery      ExtraParamName
+instance ToHeader     ExtraParamName
+
+instance ToJSON ExtraParamName where
+    toJSON = toJSONText
+
+instance FromJSON ExtraParamName where
+    parseJSON = parseJSONText "ExtraParamName"
+
+data OperationStatus
+    = Error'
+    | Failed
+    | InProgress
+    | Submitted
+    | Successful
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText OperationStatus where
+    parser = takeLowerText >>= \case
+        "error" -> pure Error'
+        "failed" -> pure Failed
+        "in_progress" -> pure InProgress
+        "submitted" -> pure Submitted
+        "successful" -> pure Successful
+        e -> fromTextError $ "Failure parsing OperationStatus from value: '" <> e
+           <> "'. Accepted values: error, failed, in_progress, submitted, successful"
+
+instance ToText OperationStatus where
+    toText = \case
+        Error' -> "error"
+        Failed -> "failed"
+        InProgress -> "in_progress"
+        Submitted -> "submitted"
+        Successful -> "successful"
+
+instance Hashable     OperationStatus
+instance ToByteString OperationStatus
+instance ToQuery      OperationStatus
+instance ToHeader     OperationStatus
+
+instance FromJSON OperationStatus where
+    parseJSON = parseJSONText "OperationStatus"
+
+data OperationType
+    = ChangePrivacyProtection
+    | DeleteDomain
+    | DomainLock
+    | RegisterDomain
+    | TransferInDomain
+    | UpdateDomainContact
+    | UpdateNameserver
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText OperationType where
+    parser = takeLowerText >>= \case
+        "change_privacy_protection" -> pure ChangePrivacyProtection
+        "delete_domain" -> pure DeleteDomain
+        "domain_lock" -> pure DomainLock
+        "register_domain" -> pure RegisterDomain
+        "transfer_in_domain" -> pure TransferInDomain
+        "update_domain_contact" -> pure UpdateDomainContact
+        "update_nameserver" -> pure UpdateNameserver
+        e -> fromTextError $ "Failure parsing OperationType from value: '" <> e
+           <> "'. Accepted values: change_privacy_protection, delete_domain, domain_lock, register_domain, transfer_in_domain, update_domain_contact, update_nameserver"
+
+instance ToText OperationType where
+    toText = \case
+        ChangePrivacyProtection -> "change_privacy_protection"
+        DeleteDomain -> "delete_domain"
+        DomainLock -> "domain_lock"
+        RegisterDomain -> "register_domain"
+        TransferInDomain -> "transfer_in_domain"
+        UpdateDomainContact -> "update_domain_contact"
+        UpdateNameserver -> "update_nameserver"
+
+instance Hashable     OperationType
+instance ToByteString OperationType
+instance ToQuery      OperationType
+instance ToHeader     OperationType
+
+instance FromJSON OperationType where
+    parseJSON = parseJSONText "OperationType"
diff --git a/gen/Network/AWS/Route53Domains/UpdateDomainContact.hs b/gen/Network/AWS/Route53Domains/UpdateDomainContact.hs
--- a/gen/Network/AWS/Route53Domains/UpdateDomainContact.hs
+++ b/gen/Network/AWS/Route53Domains/UpdateDomainContact.hs
@@ -1,185 +1,211 @@
-{-# 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.Route53Domains.UpdateDomainContact
--- 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.
-
--- | This operation updates the contact information for a particular domain.
+-- This operation updates the contact information for a particular domain.
 -- Information for at least one contact (registrant, administrator, or
 -- technical) must be supplied for update.
 --
--- If the update is successful, this method returns an operation ID that you
--- can use to track the progress and completion of the action. If the request is
--- not completed successfully, the domain registrant will be notified by email.
+-- If the update is successful, this method returns an operation ID that
+-- you can use to track the progress and completion of the action. If the
+-- request is not completed successfully, the domain registrant will be
+-- notified by email.
 --
--- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-UpdateDomainContact.html>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/api-UpdateDomainContact.html AWS API Reference> for UpdateDomainContact.
 module Network.AWS.Route53Domains.UpdateDomainContact
     (
-    -- * Request
-      UpdateDomainContact
-    -- ** Request constructor
-    , updateDomainContact
-    -- ** Request lenses
-    , udcAdminContact
-    , udcDomainName
+    -- * Creating a Request
+      updateDomainContact
+    , UpdateDomainContact
+    -- * Request Lenses
     , udcRegistrantContact
+    , udcAdminContact
     , udcTechContact
+    , udcDomainName
 
-    -- * Response
-    , UpdateDomainContactResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , updateDomainContactResponse
-    -- ** Response lenses
-    , udcrOperationId
+    , UpdateDomainContactResponse
+    -- * Response Lenses
+    , udcrsStatus
+    , udcrsOperationId
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Route53Domains.Types
-import qualified GHC.Exts
-
-data UpdateDomainContact = UpdateDomainContact
-    { _udcAdminContact      :: Maybe ContactDetail
-    , _udcDomainName        :: Text
-    , _udcRegistrantContact :: Maybe ContactDetail
-    , _udcTechContact       :: Maybe ContactDetail
-    } deriving (Eq, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53Domains.Types
+import           Network.AWS.Route53Domains.Types.Product
 
--- | 'UpdateDomainContact' constructor.
+-- | The UpdateDomainContact request includes the following elements.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'updateDomainContact' smart constructor.
+data UpdateDomainContact = UpdateDomainContact'
+    { _udcRegistrantContact :: !(Maybe (Sensitive ContactDetail))
+    , _udcAdminContact      :: !(Maybe (Sensitive ContactDetail))
+    , _udcTechContact       :: !(Maybe (Sensitive ContactDetail))
+    , _udcDomainName        :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateDomainContact' with the minimum fields required to make a request.
 --
--- * 'udcAdminContact' @::@ 'Maybe' 'ContactDetail'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'udcDomainName' @::@ 'Text'
+-- * 'udcRegistrantContact'
 --
--- * 'udcRegistrantContact' @::@ 'Maybe' 'ContactDetail'
+-- * 'udcAdminContact'
 --
--- * 'udcTechContact' @::@ 'Maybe' 'ContactDetail'
+-- * 'udcTechContact'
 --
-updateDomainContact :: Text -- ^ 'udcDomainName'
-                    -> UpdateDomainContact
-updateDomainContact p1 = UpdateDomainContact
-    { _udcDomainName        = p1
-    , _udcAdminContact      = Nothing
-    , _udcRegistrantContact = Nothing
-    , _udcTechContact       = Nothing
+-- * 'udcDomainName'
+updateDomainContact
+    :: Text -- ^ 'udcDomainName'
+    -> UpdateDomainContact
+updateDomainContact pDomainName_ =
+    UpdateDomainContact'
+    { _udcRegistrantContact = Nothing
+    , _udcAdminContact = Nothing
+    , _udcTechContact = Nothing
+    , _udcDomainName = pDomainName_
     }
 
 -- | Provides detailed contact information.
 --
 -- Type: Complex
 --
--- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType', 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State', 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
+-- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType',
+-- 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State',
+-- 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
 --
 -- Required: Yes
-udcAdminContact :: Lens' UpdateDomainContact (Maybe ContactDetail)
-udcAdminContact = lens _udcAdminContact (\s a -> s { _udcAdminContact = a })
+udcRegistrantContact :: Lens' UpdateDomainContact (Maybe ContactDetail)
+udcRegistrantContact = lens _udcRegistrantContact (\ s a -> s{_udcRegistrantContact = a}) . mapping _Sensitive;
 
--- | The name of a domain.
---
--- Type: String
+-- | Provides detailed contact information.
 --
--- Default: None
+-- Type: Complex
 --
--- Constraints: The domain name can contain only the letters a through z, the
--- numbers 0 through 9, and hyphen (-). Internationalized Domain Names are not
--- supported.
+-- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType',
+-- 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State',
+-- 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
 --
 -- Required: Yes
-udcDomainName :: Lens' UpdateDomainContact Text
-udcDomainName = lens _udcDomainName (\s a -> s { _udcDomainName = a })
+udcAdminContact :: Lens' UpdateDomainContact (Maybe ContactDetail)
+udcAdminContact = lens _udcAdminContact (\ s a -> s{_udcAdminContact = a}) . mapping _Sensitive;
 
 -- | Provides detailed contact information.
 --
 -- Type: Complex
 --
--- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType', 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State', 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
+-- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType',
+-- 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State',
+-- 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
 --
 -- Required: Yes
-udcRegistrantContact :: Lens' UpdateDomainContact (Maybe ContactDetail)
-udcRegistrantContact =
-    lens _udcRegistrantContact (\s a -> s { _udcRegistrantContact = a })
+udcTechContact :: Lens' UpdateDomainContact (Maybe ContactDetail)
+udcTechContact = lens _udcTechContact (\ s a -> s{_udcTechContact = a}) . mapping _Sensitive;
 
--- | Provides detailed contact information.
+-- | The name of a domain.
 --
--- Type: Complex
+-- Type: String
 --
--- Children: 'FirstName', 'MiddleName', 'LastName', 'ContactType', 'OrganizationName', 'AddressLine1', 'AddressLine2', 'City', 'State', 'CountryCode', 'ZipCode', 'PhoneNumber', 'Email', 'Fax', 'ExtraParams'
+-- Default: None
 --
+-- Constraints: The domain name can contain only the letters a through z,
+-- the numbers 0 through 9, and hyphen (-). Internationalized Domain Names
+-- are not supported.
+--
 -- Required: Yes
-udcTechContact :: Lens' UpdateDomainContact (Maybe ContactDetail)
-udcTechContact = lens _udcTechContact (\s a -> s { _udcTechContact = a })
+udcDomainName :: Lens' UpdateDomainContact Text
+udcDomainName = lens _udcDomainName (\ s a -> s{_udcDomainName = a});
 
-newtype UpdateDomainContactResponse = UpdateDomainContactResponse
-    { _udcrOperationId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+instance AWSRequest UpdateDomainContact where
+        type Sv UpdateDomainContact = Route53Domains
+        type Rs UpdateDomainContact =
+             UpdateDomainContactResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdateDomainContactResponse' <$>
+                   (pure (fromEnum s)) <*> (x .:> "OperationId"))
 
--- | 'UpdateDomainContactResponse' constructor.
+instance ToHeaders UpdateDomainContact where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Route53Domains_v20140515.UpdateDomainContact" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateDomainContact where
+        toJSON UpdateDomainContact'{..}
+          = object
+              ["RegistrantContact" .= _udcRegistrantContact,
+               "AdminContact" .= _udcAdminContact,
+               "TechContact" .= _udcTechContact,
+               "DomainName" .= _udcDomainName]
+
+instance ToPath UpdateDomainContact where
+        toPath = const "/"
+
+instance ToQuery UpdateDomainContact where
+        toQuery = const mempty
+
+-- | The UpdateDomainContact response includes the following element.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'updateDomainContactResponse' smart constructor.
+data UpdateDomainContactResponse = UpdateDomainContactResponse'
+    { _udcrsStatus      :: !Int
+    , _udcrsOperationId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateDomainContactResponse' with the minimum fields required to make a request.
 --
--- * 'udcrOperationId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-updateDomainContactResponse :: Text -- ^ 'udcrOperationId'
-                            -> UpdateDomainContactResponse
-updateDomainContactResponse p1 = UpdateDomainContactResponse
-    { _udcrOperationId = p1
+-- * 'udcrsStatus'
+--
+-- * 'udcrsOperationId'
+updateDomainContactResponse
+    :: Int -- ^ 'udcrsStatus'
+    -> Text -- ^ 'udcrsOperationId'
+    -> UpdateDomainContactResponse
+updateDomainContactResponse pStatus_ pOperationId_ =
+    UpdateDomainContactResponse'
+    { _udcrsStatus = pStatus_
+    , _udcrsOperationId = pOperationId_
     }
 
--- | Identifier for tracking the progress of the request. To use this ID to query
--- the operation status, use GetOperationDetail.
+-- | The response status code.
+udcrsStatus :: Lens' UpdateDomainContactResponse Int
+udcrsStatus = lens _udcrsStatus (\ s a -> s{_udcrsStatus = a});
+
+-- | Identifier for tracking the progress of the request. To use this ID to
+-- query the operation status, use GetOperationDetail.
 --
 -- Type: String
 --
 -- Default: None
 --
 -- Constraints: Maximum 255 characters.
-udcrOperationId :: Lens' UpdateDomainContactResponse Text
-udcrOperationId = lens _udcrOperationId (\s a -> s { _udcrOperationId = a })
-
-instance ToPath UpdateDomainContact where
-    toPath = const "/"
-
-instance ToQuery UpdateDomainContact where
-    toQuery = const mempty
-
-instance ToHeaders UpdateDomainContact
-
-instance ToJSON UpdateDomainContact where
-    toJSON UpdateDomainContact{..} = object
-        [ "DomainName"        .= _udcDomainName
-        , "AdminContact"      .= _udcAdminContact
-        , "RegistrantContact" .= _udcRegistrantContact
-        , "TechContact"       .= _udcTechContact
-        ]
-
-instance AWSRequest UpdateDomainContact where
-    type Sv UpdateDomainContact = Route53Domains
-    type Rs UpdateDomainContact = UpdateDomainContactResponse
-
-    request  = post "UpdateDomainContact"
-    response = jsonResponse
-
-instance FromJSON UpdateDomainContactResponse where
-    parseJSON = withObject "UpdateDomainContactResponse" $ \o -> UpdateDomainContactResponse
-        <$> o .:  "OperationId"
+udcrsOperationId :: Lens' UpdateDomainContactResponse Text
+udcrsOperationId = lens _udcrsOperationId (\ s a -> s{_udcrsOperationId = a});
diff --git a/gen/Network/AWS/Route53Domains/UpdateDomainContactPrivacy.hs b/gen/Network/AWS/Route53Domains/UpdateDomainContactPrivacy.hs
--- a/gen/Network/AWS/Route53Domains/UpdateDomainContactPrivacy.hs
+++ b/gen/Network/AWS/Route53Domains/UpdateDomainContactPrivacy.hs
@@ -1,98 +1,98 @@
-{-# 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.Route53Domains.UpdateDomainContactPrivacy
--- 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.
-
--- | This operation updates the specified domain contact's privacy setting. When
--- the privacy option is enabled, personal information such as postal or email
--- address is hidden from the results of a public WHOIS query. The privacy
--- services are provided by the AWS registrar, Gandi. For more information, see
--- the <http://www.gandi.net/domain/whois/?currency=USD&amp;lang=en Gandi privacy features>.
+-- This operation updates the specified domain contact\'s privacy setting.
+-- When the privacy option is enabled, personal information such as postal
+-- or email address is hidden from the results of a public WHOIS query. The
+-- privacy services are provided by the AWS registrar, Gandi. For more
+-- information, see the
+-- <http://www.gandi.net/domain/whois/?currency=USD&amp;lang=en Gandi privacy features>.
 --
 -- This operation only affects the privacy of the specified contact type
 -- (registrant, administrator, or tech). Successful acceptance returns an
--- operation ID that you can use with GetOperationDetail to track the progress
--- and completion of the action. If the request is not completed successfully,
--- the domain registrant will be notified by email.
+-- operation ID that you can use with GetOperationDetail to track the
+-- progress and completion of the action. If the request is not completed
+-- successfully, the domain registrant will be notified by email.
 --
--- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-UpdateDomainContactPrivacy.html>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/api-UpdateDomainContactPrivacy.html AWS API Reference> for UpdateDomainContactPrivacy.
 module Network.AWS.Route53Domains.UpdateDomainContactPrivacy
     (
-    -- * Request
-      UpdateDomainContactPrivacy
-    -- ** Request constructor
-    , updateDomainContactPrivacy
-    -- ** Request lenses
+    -- * Creating a Request
+      updateDomainContactPrivacy
+    , UpdateDomainContactPrivacy
+    -- * Request Lenses
+    , udcpTechPrivacy
+    , udcpRegistrantPrivacy
     , udcpAdminPrivacy
     , udcpDomainName
-    , udcpRegistrantPrivacy
-    , udcpTechPrivacy
 
-    -- * Response
-    , UpdateDomainContactPrivacyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , updateDomainContactPrivacyResponse
-    -- ** Response lenses
-    , udcprOperationId
+    , UpdateDomainContactPrivacyResponse
+    -- * Response Lenses
+    , udcprsStatus
+    , udcprsOperationId
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Route53Domains.Types
-import qualified GHC.Exts
-
-data UpdateDomainContactPrivacy = UpdateDomainContactPrivacy
-    { _udcpAdminPrivacy      :: Maybe Bool
-    , _udcpDomainName        :: Text
-    , _udcpRegistrantPrivacy :: Maybe Bool
-    , _udcpTechPrivacy       :: Maybe Bool
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53Domains.Types
+import           Network.AWS.Route53Domains.Types.Product
 
--- | 'UpdateDomainContactPrivacy' constructor.
+-- | The UpdateDomainContactPrivacy request includes the following elements.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'updateDomainContactPrivacy' smart constructor.
+data UpdateDomainContactPrivacy = UpdateDomainContactPrivacy'
+    { _udcpTechPrivacy       :: !(Maybe Bool)
+    , _udcpRegistrantPrivacy :: !(Maybe Bool)
+    , _udcpAdminPrivacy      :: !(Maybe Bool)
+    , _udcpDomainName        :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateDomainContactPrivacy' with the minimum fields required to make a request.
 --
--- * 'udcpAdminPrivacy' @::@ 'Maybe' 'Bool'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'udcpDomainName' @::@ 'Text'
+-- * 'udcpTechPrivacy'
 --
--- * 'udcpRegistrantPrivacy' @::@ 'Maybe' 'Bool'
+-- * 'udcpRegistrantPrivacy'
 --
--- * 'udcpTechPrivacy' @::@ 'Maybe' 'Bool'
+-- * 'udcpAdminPrivacy'
 --
-updateDomainContactPrivacy :: Text -- ^ 'udcpDomainName'
-                           -> UpdateDomainContactPrivacy
-updateDomainContactPrivacy p1 = UpdateDomainContactPrivacy
-    { _udcpDomainName        = p1
-    , _udcpAdminPrivacy      = Nothing
+-- * 'udcpDomainName'
+updateDomainContactPrivacy
+    :: Text -- ^ 'udcpDomainName'
+    -> UpdateDomainContactPrivacy
+updateDomainContactPrivacy pDomainName_ =
+    UpdateDomainContactPrivacy'
+    { _udcpTechPrivacy = Nothing
     , _udcpRegistrantPrivacy = Nothing
-    , _udcpTechPrivacy       = Nothing
+    , _udcpAdminPrivacy = Nothing
+    , _udcpDomainName = pDomainName_
     }
 
--- | Whether you want to conceal contact information from WHOIS queries. If you
--- specify true, WHOIS ("who is") queries will return contact information for
--- our registrar partner, Gandi, instead of the contact information that you
--- enter.
+-- | Whether you want to conceal contact information from WHOIS queries. If
+-- you specify true, WHOIS (\"who is\") queries will return contact
+-- information for our registrar partner, Gandi, instead of the contact
+-- information that you enter.
 --
 -- Type: Boolean
 --
@@ -101,27 +101,28 @@
 -- Valid values: 'true' | 'false'
 --
 -- Required: No
-udcpAdminPrivacy :: Lens' UpdateDomainContactPrivacy (Maybe Bool)
-udcpAdminPrivacy = lens _udcpAdminPrivacy (\s a -> s { _udcpAdminPrivacy = a })
+udcpTechPrivacy :: Lens' UpdateDomainContactPrivacy (Maybe Bool)
+udcpTechPrivacy = lens _udcpTechPrivacy (\ s a -> s{_udcpTechPrivacy = a});
 
--- | The name of a domain.
+-- | Whether you want to conceal contact information from WHOIS queries. If
+-- you specify true, WHOIS (\"who is\") queries will return contact
+-- information for our registrar partner, Gandi, instead of the contact
+-- information that you enter.
 --
--- Type: String
+-- Type: Boolean
 --
 -- Default: None
 --
--- Constraints: The domain name can contain only the letters a through z, the
--- numbers 0 through 9, and hyphen (-). Internationalized Domain Names are not
--- supported.
+-- Valid values: 'true' | 'false'
 --
--- Required: Yes
-udcpDomainName :: Lens' UpdateDomainContactPrivacy Text
-udcpDomainName = lens _udcpDomainName (\s a -> s { _udcpDomainName = a })
+-- Required: No
+udcpRegistrantPrivacy :: Lens' UpdateDomainContactPrivacy (Maybe Bool)
+udcpRegistrantPrivacy = lens _udcpRegistrantPrivacy (\ s a -> s{_udcpRegistrantPrivacy = a});
 
--- | Whether you want to conceal contact information from WHOIS queries. If you
--- specify true, WHOIS ("who is") queries will return contact information for
--- our registrar partner, Gandi, instead of the contact information that you
--- enter.
+-- | Whether you want to conceal contact information from WHOIS queries. If
+-- you specify true, WHOIS (\"who is\") queries will return contact
+-- information for our registrar partner, Gandi, instead of the contact
+-- information that you enter.
 --
 -- Type: Boolean
 --
@@ -130,75 +131,94 @@
 -- Valid values: 'true' | 'false'
 --
 -- Required: No
-udcpRegistrantPrivacy :: Lens' UpdateDomainContactPrivacy (Maybe Bool)
-udcpRegistrantPrivacy =
-    lens _udcpRegistrantPrivacy (\s a -> s { _udcpRegistrantPrivacy = a })
+udcpAdminPrivacy :: Lens' UpdateDomainContactPrivacy (Maybe Bool)
+udcpAdminPrivacy = lens _udcpAdminPrivacy (\ s a -> s{_udcpAdminPrivacy = a});
 
--- | Whether you want to conceal contact information from WHOIS queries. If you
--- specify true, WHOIS ("who is") queries will return contact information for
--- our registrar partner, Gandi, instead of the contact information that you
--- enter.
+-- | The name of a domain.
 --
--- Type: Boolean
+-- Type: String
 --
 -- Default: None
 --
--- Valid values: 'true' | 'false'
+-- Constraints: The domain name can contain only the letters a through z,
+-- the numbers 0 through 9, and hyphen (-). Internationalized Domain Names
+-- are not supported.
 --
--- Required: No
-udcpTechPrivacy :: Lens' UpdateDomainContactPrivacy (Maybe Bool)
-udcpTechPrivacy = lens _udcpTechPrivacy (\s a -> s { _udcpTechPrivacy = a })
+-- Required: Yes
+udcpDomainName :: Lens' UpdateDomainContactPrivacy Text
+udcpDomainName = lens _udcpDomainName (\ s a -> s{_udcpDomainName = a});
 
-newtype UpdateDomainContactPrivacyResponse = UpdateDomainContactPrivacyResponse
-    { _udcprOperationId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+instance AWSRequest UpdateDomainContactPrivacy where
+        type Sv UpdateDomainContactPrivacy = Route53Domains
+        type Rs UpdateDomainContactPrivacy =
+             UpdateDomainContactPrivacyResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdateDomainContactPrivacyResponse' <$>
+                   (pure (fromEnum s)) <*> (x .:> "OperationId"))
 
--- | 'UpdateDomainContactPrivacyResponse' constructor.
+instance ToHeaders UpdateDomainContactPrivacy where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Route53Domains_v20140515.UpdateDomainContactPrivacy"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateDomainContactPrivacy where
+        toJSON UpdateDomainContactPrivacy'{..}
+          = object
+              ["TechPrivacy" .= _udcpTechPrivacy,
+               "RegistrantPrivacy" .= _udcpRegistrantPrivacy,
+               "AdminPrivacy" .= _udcpAdminPrivacy,
+               "DomainName" .= _udcpDomainName]
+
+instance ToPath UpdateDomainContactPrivacy where
+        toPath = const "/"
+
+instance ToQuery UpdateDomainContactPrivacy where
+        toQuery = const mempty
+
+-- | The UpdateDomainContactPrivacy response includes the following element.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'updateDomainContactPrivacyResponse' smart constructor.
+data UpdateDomainContactPrivacyResponse = UpdateDomainContactPrivacyResponse'
+    { _udcprsStatus      :: !Int
+    , _udcprsOperationId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateDomainContactPrivacyResponse' with the minimum fields required to make a request.
 --
--- * 'udcprOperationId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-updateDomainContactPrivacyResponse :: Text -- ^ 'udcprOperationId'
-                                   -> UpdateDomainContactPrivacyResponse
-updateDomainContactPrivacyResponse p1 = UpdateDomainContactPrivacyResponse
-    { _udcprOperationId = p1
+-- * 'udcprsStatus'
+--
+-- * 'udcprsOperationId'
+updateDomainContactPrivacyResponse
+    :: Int -- ^ 'udcprsStatus'
+    -> Text -- ^ 'udcprsOperationId'
+    -> UpdateDomainContactPrivacyResponse
+updateDomainContactPrivacyResponse pStatus_ pOperationId_ =
+    UpdateDomainContactPrivacyResponse'
+    { _udcprsStatus = pStatus_
+    , _udcprsOperationId = pOperationId_
     }
 
--- | Identifier for tracking the progress of the request. To use this ID to query
--- the operation status, use GetOperationDetail.
+-- | The response status code.
+udcprsStatus :: Lens' UpdateDomainContactPrivacyResponse Int
+udcprsStatus = lens _udcprsStatus (\ s a -> s{_udcprsStatus = a});
+
+-- | Identifier for tracking the progress of the request. To use this ID to
+-- query the operation status, use GetOperationDetail.
 --
 -- Type: String
 --
 -- Default: None
 --
 -- Constraints: Maximum 255 characters.
-udcprOperationId :: Lens' UpdateDomainContactPrivacyResponse Text
-udcprOperationId = lens _udcprOperationId (\s a -> s { _udcprOperationId = a })
-
-instance ToPath UpdateDomainContactPrivacy where
-    toPath = const "/"
-
-instance ToQuery UpdateDomainContactPrivacy where
-    toQuery = const mempty
-
-instance ToHeaders UpdateDomainContactPrivacy
-
-instance ToJSON UpdateDomainContactPrivacy where
-    toJSON UpdateDomainContactPrivacy{..} = object
-        [ "DomainName"        .= _udcpDomainName
-        , "AdminPrivacy"      .= _udcpAdminPrivacy
-        , "RegistrantPrivacy" .= _udcpRegistrantPrivacy
-        , "TechPrivacy"       .= _udcpTechPrivacy
-        ]
-
-instance AWSRequest UpdateDomainContactPrivacy where
-    type Sv UpdateDomainContactPrivacy = Route53Domains
-    type Rs UpdateDomainContactPrivacy = UpdateDomainContactPrivacyResponse
-
-    request  = post "UpdateDomainContactPrivacy"
-    response = jsonResponse
-
-instance FromJSON UpdateDomainContactPrivacyResponse where
-    parseJSON = withObject "UpdateDomainContactPrivacyResponse" $ \o -> UpdateDomainContactPrivacyResponse
-        <$> o .:  "OperationId"
+udcprsOperationId :: Lens' UpdateDomainContactPrivacyResponse Text
+udcprsOperationId = lens _udcprsOperationId (\ s a -> s{_udcprsOperationId = a});
diff --git a/gen/Network/AWS/Route53Domains/UpdateDomainNameservers.hs b/gen/Network/AWS/Route53Domains/UpdateDomainNameservers.hs
--- a/gen/Network/AWS/Route53Domains/UpdateDomainNameservers.hs
+++ b/gen/Network/AWS/Route53Domains/UpdateDomainNameservers.hs
@@ -1,103 +1,103 @@
-{-# 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.Route53Domains.UpdateDomainNameservers
--- 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.
-
--- | This operation replaces the current set of name servers for the domain with
--- the specified set of name servers. If you use Amazon Route 53 as your DNS
--- service, specify the four name servers in the delegation set for the hosted
--- zone for the domain.
+-- This operation replaces the current set of name servers for the domain
+-- with the specified set of name servers. If you use Amazon Route 53 as
+-- your DNS service, specify the four name servers in the delegation set
+-- for the hosted zone for the domain.
 --
--- If successful, this operation returns an operation ID that you can use to
--- track the progress and completion of the action. If the request is not
--- completed successfully, the domain registrant will be notified by email.
+-- If successful, this operation returns an operation ID that you can use
+-- to track the progress and completion of the action. If the request is
+-- not completed successfully, the domain registrant will be notified by
+-- email.
 --
--- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-UpdateDomainNameservers.html>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/api-UpdateDomainNameservers.html AWS API Reference> for UpdateDomainNameservers.
 module Network.AWS.Route53Domains.UpdateDomainNameservers
     (
-    -- * Request
-      UpdateDomainNameservers
-    -- ** Request constructor
-    , updateDomainNameservers
-    -- ** Request lenses
-    , udnDomainName
+    -- * Creating a Request
+      updateDomainNameservers
+    , UpdateDomainNameservers
+    -- * Request Lenses
     , udnFIAuthKey
+    , udnDomainName
     , udnNameservers
 
-    -- * Response
-    , UpdateDomainNameserversResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , updateDomainNameserversResponse
-    -- ** Response lenses
-    , udnrOperationId
+    , UpdateDomainNameserversResponse
+    -- * Response Lenses
+    , udnrsStatus
+    , udnrsOperationId
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Route53Domains.Types
-import qualified GHC.Exts
-
-data UpdateDomainNameservers = UpdateDomainNameservers
-    { _udnDomainName  :: Text
-    , _udnFIAuthKey   :: Maybe Text
-    , _udnNameservers :: List "Nameservers" Nameserver
-    } deriving (Eq, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53Domains.Types
+import           Network.AWS.Route53Domains.Types.Product
 
--- | 'UpdateDomainNameservers' constructor.
+-- | The UpdateDomainNameserver request includes the following elements.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'updateDomainNameservers' smart constructor.
+data UpdateDomainNameservers = UpdateDomainNameservers'
+    { _udnFIAuthKey   :: !(Maybe Text)
+    , _udnDomainName  :: !Text
+    , _udnNameservers :: ![Nameserver]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateDomainNameservers' with the minimum fields required to make a request.
 --
--- * 'udnDomainName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'udnFIAuthKey' @::@ 'Maybe' 'Text'
+-- * 'udnFIAuthKey'
 --
--- * 'udnNameservers' @::@ ['Nameserver']
+-- * 'udnDomainName'
 --
-updateDomainNameservers :: Text -- ^ 'udnDomainName'
-                        -> UpdateDomainNameservers
-updateDomainNameservers p1 = UpdateDomainNameservers
-    { _udnDomainName  = p1
-    , _udnFIAuthKey   = Nothing
+-- * 'udnNameservers'
+updateDomainNameservers
+    :: Text -- ^ 'udnDomainName'
+    -> UpdateDomainNameservers
+updateDomainNameservers pDomainName_ =
+    UpdateDomainNameservers'
+    { _udnFIAuthKey = Nothing
+    , _udnDomainName = pDomainName_
     , _udnNameservers = mempty
     }
 
+-- | The authorization key for .fi domains
+udnFIAuthKey :: Lens' UpdateDomainNameservers (Maybe Text)
+udnFIAuthKey = lens _udnFIAuthKey (\ s a -> s{_udnFIAuthKey = a});
+
 -- | The name of a domain.
 --
 -- Type: String
 --
 -- Default: None
 --
--- Constraints: The domain name can contain only the letters a through z, the
--- numbers 0 through 9, and hyphen (-). Internationalized Domain Names are not
--- supported.
+-- Constraints: The domain name can contain only the letters a through z,
+-- the numbers 0 through 9, and hyphen (-). Internationalized Domain Names
+-- are not supported.
 --
 -- Required: Yes
 udnDomainName :: Lens' UpdateDomainNameservers Text
-udnDomainName = lens _udnDomainName (\s a -> s { _udnDomainName = a })
-
--- | The authorization key for .fi domains
-udnFIAuthKey :: Lens' UpdateDomainNameservers (Maybe Text)
-udnFIAuthKey = lens _udnFIAuthKey (\s a -> s { _udnFIAuthKey = a })
+udnDomainName = lens _udnDomainName (\ s a -> s{_udnDomainName = a});
 
 -- | A list of new name servers for the domain.
 --
@@ -107,57 +107,78 @@
 --
 -- Required: Yes
 udnNameservers :: Lens' UpdateDomainNameservers [Nameserver]
-udnNameservers = lens _udnNameservers (\s a -> s { _udnNameservers = a }) . _List
+udnNameservers = lens _udnNameservers (\ s a -> s{_udnNameservers = a}) . _Coerce;
 
-newtype UpdateDomainNameserversResponse = UpdateDomainNameserversResponse
-    { _udnrOperationId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+instance AWSRequest UpdateDomainNameservers where
+        type Sv UpdateDomainNameservers = Route53Domains
+        type Rs UpdateDomainNameservers =
+             UpdateDomainNameserversResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdateDomainNameserversResponse' <$>
+                   (pure (fromEnum s)) <*> (x .:> "OperationId"))
 
--- | 'UpdateDomainNameserversResponse' constructor.
+instance ToHeaders UpdateDomainNameservers where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Route53Domains_v20140515.UpdateDomainNameservers"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateDomainNameservers where
+        toJSON UpdateDomainNameservers'{..}
+          = object
+              ["FIAuthKey" .= _udnFIAuthKey,
+               "DomainName" .= _udnDomainName,
+               "Nameservers" .= _udnNameservers]
+
+instance ToPath UpdateDomainNameservers where
+        toPath = const "/"
+
+instance ToQuery UpdateDomainNameservers where
+        toQuery = const mempty
+
+-- | The UpdateDomainNameservers response includes the following element.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'updateDomainNameserversResponse' smart constructor.
+data UpdateDomainNameserversResponse = UpdateDomainNameserversResponse'
+    { _udnrsStatus      :: !Int
+    , _udnrsOperationId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateDomainNameserversResponse' with the minimum fields required to make a request.
 --
--- * 'udnrOperationId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-updateDomainNameserversResponse :: Text -- ^ 'udnrOperationId'
-                                -> UpdateDomainNameserversResponse
-updateDomainNameserversResponse p1 = UpdateDomainNameserversResponse
-    { _udnrOperationId = p1
+-- * 'udnrsStatus'
+--
+-- * 'udnrsOperationId'
+updateDomainNameserversResponse
+    :: Int -- ^ 'udnrsStatus'
+    -> Text -- ^ 'udnrsOperationId'
+    -> UpdateDomainNameserversResponse
+updateDomainNameserversResponse pStatus_ pOperationId_ =
+    UpdateDomainNameserversResponse'
+    { _udnrsStatus = pStatus_
+    , _udnrsOperationId = pOperationId_
     }
 
--- | Identifier for tracking the progress of the request. To use this ID to query
--- the operation status, use GetOperationDetail.
+-- | The response status code.
+udnrsStatus :: Lens' UpdateDomainNameserversResponse Int
+udnrsStatus = lens _udnrsStatus (\ s a -> s{_udnrsStatus = a});
+
+-- | Identifier for tracking the progress of the request. To use this ID to
+-- query the operation status, use GetOperationDetail.
 --
 -- Type: String
 --
 -- Default: None
 --
 -- Constraints: Maximum 255 characters.
-udnrOperationId :: Lens' UpdateDomainNameserversResponse Text
-udnrOperationId = lens _udnrOperationId (\s a -> s { _udnrOperationId = a })
-
-instance ToPath UpdateDomainNameservers where
-    toPath = const "/"
-
-instance ToQuery UpdateDomainNameservers where
-    toQuery = const mempty
-
-instance ToHeaders UpdateDomainNameservers
-
-instance ToJSON UpdateDomainNameservers where
-    toJSON UpdateDomainNameservers{..} = object
-        [ "DomainName"  .= _udnDomainName
-        , "FIAuthKey"   .= _udnFIAuthKey
-        , "Nameservers" .= _udnNameservers
-        ]
-
-instance AWSRequest UpdateDomainNameservers where
-    type Sv UpdateDomainNameservers = Route53Domains
-    type Rs UpdateDomainNameservers = UpdateDomainNameserversResponse
-
-    request  = post "UpdateDomainNameservers"
-    response = jsonResponse
-
-instance FromJSON UpdateDomainNameserversResponse where
-    parseJSON = withObject "UpdateDomainNameserversResponse" $ \o -> UpdateDomainNameserversResponse
-        <$> o .:  "OperationId"
+udnrsOperationId :: Lens' UpdateDomainNameserversResponse Text
+udnrsOperationId = lens _udnrsOperationId (\ s a -> s{_udnrsOperationId = a});
diff --git a/gen/Network/AWS/Route53Domains/UpdateTagsForDomain.hs b/gen/Network/AWS/Route53Domains/UpdateTagsForDomain.hs
--- a/gen/Network/AWS/Route53Domains/UpdateTagsForDomain.hs
+++ b/gen/Network/AWS/Route53Domains/UpdateTagsForDomain.hs
@@ -1,95 +1,78 @@
-{-# 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.Route53Domains.UpdateTagsForDomain
--- 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.
-
--- | This operation adds or updates tags for a specified domain.
+-- This operation adds or updates tags for a specified domain.
 --
--- All tag operations are eventually consistent; subsequent operations may not
--- immediately represent all issued operations.
+-- All tag operations are eventually consistent; subsequent operations may
+-- not immediately represent all issued operations.
 --
--- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-UpdateTagsForDomain.html>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/api-UpdateTagsForDomain.html AWS API Reference> for UpdateTagsForDomain.
 module Network.AWS.Route53Domains.UpdateTagsForDomain
     (
-    -- * Request
-      UpdateTagsForDomain
-    -- ** Request constructor
-    , updateTagsForDomain
-    -- ** Request lenses
-    , utfdDomainName
+    -- * Creating a Request
+      updateTagsForDomain
+    , UpdateTagsForDomain
+    -- * Request Lenses
     , utfdTagsToUpdate
+    , utfdDomainName
 
-    -- * Response
-    , UpdateTagsForDomainResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , updateTagsForDomainResponse
+    , UpdateTagsForDomainResponse
+    -- * Response Lenses
+    , utfdrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Route53Domains.Types
-import qualified GHC.Exts
-
-data UpdateTagsForDomain = UpdateTagsForDomain
-    { _utfdDomainName   :: Text
-    , _utfdTagsToUpdate :: List "TagsToUpdate" Tag
-    } deriving (Eq, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53Domains.Types
+import           Network.AWS.Route53Domains.Types.Product
 
--- | 'UpdateTagsForDomain' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'utfdDomainName' @::@ 'Text'
---
--- * 'utfdTagsToUpdate' @::@ ['Tag']
+-- | The UpdateTagsForDomainRequest includes the following elements.
 --
-updateTagsForDomain :: Text -- ^ 'utfdDomainName'
-                    -> UpdateTagsForDomain
-updateTagsForDomain p1 = UpdateTagsForDomain
-    { _utfdDomainName   = p1
-    , _utfdTagsToUpdate = mempty
-    }
+-- /See:/ 'updateTagsForDomain' smart constructor.
+data UpdateTagsForDomain = UpdateTagsForDomain'
+    { _utfdTagsToUpdate :: !(Maybe [Tag])
+    , _utfdDomainName   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | The domain for which you want to add or update tags.
---
--- The name of a domain.
---
--- Type: String
+-- | Creates a value of 'UpdateTagsForDomain' with the minimum fields required to make a request.
 --
--- Default: None
+-- Use one of the following lenses to modify other fields as desired:
 --
--- Constraints: The domain name can contain only the letters a through z, the
--- numbers 0 through 9, and hyphen (-). Hyphens are allowed only when theyaposre
--- surrounded by letters, numbers, or other hyphens. You canapost specify a
--- hyphen at the beginning or end of a label. To specify an Internationalized
--- Domain Name, you must convert the name to Punycode.
+-- * 'utfdTagsToUpdate'
 --
--- Required: Yes
-utfdDomainName :: Lens' UpdateTagsForDomain Text
-utfdDomainName = lens _utfdDomainName (\s a -> s { _utfdDomainName = a })
+-- * 'utfdDomainName'
+updateTagsForDomain
+    :: Text -- ^ 'utfdDomainName'
+    -> UpdateTagsForDomain
+updateTagsForDomain pDomainName_ =
+    UpdateTagsForDomain'
+    { _utfdTagsToUpdate = Nothing
+    , _utfdDomainName = pDomainName_
+    }
 
 -- | A list of the tag keys and values that you want to add or update. If you
--- specify a key that already exists, the corresponding value will be replaced.
+-- specify a key that already exists, the corresponding value will be
+-- replaced.
 --
 -- Type: A complex type containing a list of tags
 --
@@ -97,66 +80,111 @@
 --
 -- Required: No
 --
--- '> Each tag includes the following elements:
+-- \'>
 --
--- Key
+-- Each tag includes the following elements:
 --
--- The key (name) of a tag.
+-- -   Key
 --
--- Type: String
+--     The key (name) of a tag.
 --
--- Default: None
+--     Type: String
 --
--- Valid values: Unicode characters including alphanumeric, space, and
--- ".:/=+\-@"
+--     Default: None
 --
--- Constraints: Each key can be 1-128 characters long.
+--     Valid values: Unicode characters including alphanumeric, space, and
+--     \".:\/=+\\-\'\"
 --
--- Required: Yes
+--     Constraints: Each key can be 1-128 characters long.
 --
--- Value
+--     Required: Yes
 --
--- The value of a tag.
+-- -   Value
 --
--- Type: String
+--     The value of a tag.
 --
--- Default: None
+--     Type: String
 --
--- Valid values: Unicode characters including alphanumeric, space, and
--- ".:/=+\-@"
+--     Default: None
 --
--- Constraints: Each value can be 0-256 characters long.
+--     Valid values: Unicode characters including alphanumeric, space, and
+--     \".:\/=+\\-\'\"
 --
--- Required: Yes
+--     Constraints: Each value can be 0-256 characters long.
 --
+--     Required: Yes
 --
 utfdTagsToUpdate :: Lens' UpdateTagsForDomain [Tag]
-utfdTagsToUpdate = lens _utfdTagsToUpdate (\s a -> s { _utfdTagsToUpdate = a }) . _List
+utfdTagsToUpdate = lens _utfdTagsToUpdate (\ s a -> s{_utfdTagsToUpdate = a}) . _Default . _Coerce;
 
-data UpdateTagsForDomainResponse = UpdateTagsForDomainResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+-- | The domain for which you want to add or update tags.
+--
+-- The name of a domain.
+--
+-- Type: String
+--
+-- Default: None
+--
+-- Constraints: The domain name can contain only the letters a through z,
+-- the numbers 0 through 9, and hyphen (-). Hyphens are allowed only when
+-- theyaposre surrounded by letters, numbers, or other hyphens. You
+-- canapost specify a hyphen at the beginning or end of a label. To specify
+-- an Internationalized Domain Name, you must convert the name to Punycode.
+--
+-- Required: Yes
+utfdDomainName :: Lens' UpdateTagsForDomain Text
+utfdDomainName = lens _utfdDomainName (\ s a -> s{_utfdDomainName = a});
 
--- | 'UpdateTagsForDomainResponse' constructor.
-updateTagsForDomainResponse :: UpdateTagsForDomainResponse
-updateTagsForDomainResponse = UpdateTagsForDomainResponse
+instance AWSRequest UpdateTagsForDomain where
+        type Sv UpdateTagsForDomain = Route53Domains
+        type Rs UpdateTagsForDomain =
+             UpdateTagsForDomainResponse
+        request = postJSON
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 UpdateTagsForDomainResponse' <$> (pure (fromEnum s)))
 
+instance ToHeaders UpdateTagsForDomain where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Route53Domains_v20140515.UpdateTagsForDomain" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateTagsForDomain where
+        toJSON UpdateTagsForDomain'{..}
+          = object
+              ["TagsToUpdate" .= _utfdTagsToUpdate,
+               "DomainName" .= _utfdDomainName]
+
 instance ToPath UpdateTagsForDomain where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery UpdateTagsForDomain where
-    toQuery = const mempty
-
-instance ToHeaders UpdateTagsForDomain
+        toQuery = const mempty
 
-instance ToJSON UpdateTagsForDomain where
-    toJSON UpdateTagsForDomain{..} = object
-        [ "DomainName"   .= _utfdDomainName
-        , "TagsToUpdate" .= _utfdTagsToUpdate
-        ]
+-- | /See:/ 'updateTagsForDomainResponse' smart constructor.
+newtype UpdateTagsForDomainResponse = UpdateTagsForDomainResponse'
+    { _utfdrsStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest UpdateTagsForDomain where
-    type Sv UpdateTagsForDomain = Route53Domains
-    type Rs UpdateTagsForDomain = UpdateTagsForDomainResponse
+-- | Creates a value of 'UpdateTagsForDomainResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'utfdrsStatus'
+updateTagsForDomainResponse
+    :: Int -- ^ 'utfdrsStatus'
+    -> UpdateTagsForDomainResponse
+updateTagsForDomainResponse pStatus_ =
+    UpdateTagsForDomainResponse'
+    { _utfdrsStatus = pStatus_
+    }
 
-    request  = post "UpdateTagsForDomain"
-    response = nullResponse UpdateTagsForDomainResponse
+-- | The response status code.
+utfdrsStatus :: Lens' UpdateTagsForDomainResponse Int
+utfdrsStatus = lens _utfdrsStatus (\ s a -> s{_utfdrsStatus = a});
diff --git a/gen/Network/AWS/Route53Domains/Waiters.hs b/gen/Network/AWS/Route53Domains/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53Domains/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.Route53Domains.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.Route53Domains.Waiters where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Route53Domains.Types
+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.Route53Domains
+import Test.AWS.Route53Domains.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "Route53Domains"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/Gen/Route53Domains.hs b/test/Test/AWS/Gen/Route53Domains.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/Route53Domains.hs
@@ -0,0 +1,345 @@
+{-# 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.Route53Domains
+-- 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.Route53Domains where
+
+import Data.Proxy
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+import Network.AWS.Route53Domains
+import Test.AWS.Route53Domains.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"
+--         [ testListOperations $
+--             listOperations
+--
+--         , testGetDomainDetail $
+--             getDomainDetail
+--
+--         , testUpdateDomainContactPrivacy $
+--             updateDomainContactPrivacy
+--
+--         , testGetOperationDetail $
+--             getOperationDetail
+--
+--         , testEnableDomainAutoRenew $
+--             enableDomainAutoRenew
+--
+--         , testDisableDomainAutoRenew $
+--             disableDomainAutoRenew
+--
+--         , testUpdateDomainContact $
+--             updateDomainContact
+--
+--         , testEnableDomainTransferLock $
+--             enableDomainTransferLock
+--
+--         , testRegisterDomain $
+--             registerDomain
+--
+--         , testDisableDomainTransferLock $
+--             disableDomainTransferLock
+--
+--         , testCheckDomainAvailability $
+--             checkDomainAvailability
+--
+--         , testListTagsForDomain $
+--             listTagsForDomain
+--
+--         , testUpdateDomainNameservers $
+--             updateDomainNameservers
+--
+--         , testRetrieveDomainAuthCode $
+--             retrieveDomainAuthCode
+--
+--         , testTransferDomain $
+--             transferDomain
+--
+--         , testDeleteTagsForDomain $
+--             deleteTagsForDomain
+--
+--         , testUpdateTagsForDomain $
+--             updateTagsForDomain
+--
+--         , testListDomains $
+--             listDomains
+--
+--           ]
+
+--     , testGroup "response"
+--         [ testListOperationsResponse $
+--             listOperationsResponse
+--
+--         , testGetDomainDetailResponse $
+--             getDomainDetailResponse
+--
+--         , testUpdateDomainContactPrivacyResponse $
+--             updateDomainContactPrivacyResponse
+--
+--         , testGetOperationDetailResponse $
+--             getOperationDetailResponse
+--
+--         , testEnableDomainAutoRenewResponse $
+--             enableDomainAutoRenewResponse
+--
+--         , testDisableDomainAutoRenewResponse $
+--             disableDomainAutoRenewResponse
+--
+--         , testUpdateDomainContactResponse $
+--             updateDomainContactResponse
+--
+--         , testEnableDomainTransferLockResponse $
+--             enableDomainTransferLockResponse
+--
+--         , testRegisterDomainResponse $
+--             registerDomainResponse
+--
+--         , testDisableDomainTransferLockResponse $
+--             disableDomainTransferLockResponse
+--
+--         , testCheckDomainAvailabilityResponse $
+--             checkDomainAvailabilityResponse
+--
+--         , testListTagsForDomainResponse $
+--             listTagsForDomainResponse
+--
+--         , testUpdateDomainNameserversResponse $
+--             updateDomainNameserversResponse
+--
+--         , testRetrieveDomainAuthCodeResponse $
+--             retrieveDomainAuthCodeResponse
+--
+--         , testTransferDomainResponse $
+--             transferDomainResponse
+--
+--         , testDeleteTagsForDomainResponse $
+--             deleteTagsForDomainResponse
+--
+--         , testUpdateTagsForDomainResponse $
+--             updateTagsForDomainResponse
+--
+--         , testListDomainsResponse $
+--             listDomainsResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+testListOperations :: ListOperations -> TestTree
+testListOperations = req
+    "ListOperations"
+    "fixture/ListOperations"
+
+testGetDomainDetail :: GetDomainDetail -> TestTree
+testGetDomainDetail = req
+    "GetDomainDetail"
+    "fixture/GetDomainDetail"
+
+testUpdateDomainContactPrivacy :: UpdateDomainContactPrivacy -> TestTree
+testUpdateDomainContactPrivacy = req
+    "UpdateDomainContactPrivacy"
+    "fixture/UpdateDomainContactPrivacy"
+
+testGetOperationDetail :: GetOperationDetail -> TestTree
+testGetOperationDetail = req
+    "GetOperationDetail"
+    "fixture/GetOperationDetail"
+
+testEnableDomainAutoRenew :: EnableDomainAutoRenew -> TestTree
+testEnableDomainAutoRenew = req
+    "EnableDomainAutoRenew"
+    "fixture/EnableDomainAutoRenew"
+
+testDisableDomainAutoRenew :: DisableDomainAutoRenew -> TestTree
+testDisableDomainAutoRenew = req
+    "DisableDomainAutoRenew"
+    "fixture/DisableDomainAutoRenew"
+
+testUpdateDomainContact :: UpdateDomainContact -> TestTree
+testUpdateDomainContact = req
+    "UpdateDomainContact"
+    "fixture/UpdateDomainContact"
+
+testEnableDomainTransferLock :: EnableDomainTransferLock -> TestTree
+testEnableDomainTransferLock = req
+    "EnableDomainTransferLock"
+    "fixture/EnableDomainTransferLock"
+
+testRegisterDomain :: RegisterDomain -> TestTree
+testRegisterDomain = req
+    "RegisterDomain"
+    "fixture/RegisterDomain"
+
+testDisableDomainTransferLock :: DisableDomainTransferLock -> TestTree
+testDisableDomainTransferLock = req
+    "DisableDomainTransferLock"
+    "fixture/DisableDomainTransferLock"
+
+testCheckDomainAvailability :: CheckDomainAvailability -> TestTree
+testCheckDomainAvailability = req
+    "CheckDomainAvailability"
+    "fixture/CheckDomainAvailability"
+
+testListTagsForDomain :: ListTagsForDomain -> TestTree
+testListTagsForDomain = req
+    "ListTagsForDomain"
+    "fixture/ListTagsForDomain"
+
+testUpdateDomainNameservers :: UpdateDomainNameservers -> TestTree
+testUpdateDomainNameservers = req
+    "UpdateDomainNameservers"
+    "fixture/UpdateDomainNameservers"
+
+testRetrieveDomainAuthCode :: RetrieveDomainAuthCode -> TestTree
+testRetrieveDomainAuthCode = req
+    "RetrieveDomainAuthCode"
+    "fixture/RetrieveDomainAuthCode"
+
+testTransferDomain :: TransferDomain -> TestTree
+testTransferDomain = req
+    "TransferDomain"
+    "fixture/TransferDomain"
+
+testDeleteTagsForDomain :: DeleteTagsForDomain -> TestTree
+testDeleteTagsForDomain = req
+    "DeleteTagsForDomain"
+    "fixture/DeleteTagsForDomain"
+
+testUpdateTagsForDomain :: UpdateTagsForDomain -> TestTree
+testUpdateTagsForDomain = req
+    "UpdateTagsForDomain"
+    "fixture/UpdateTagsForDomain"
+
+testListDomains :: ListDomains -> TestTree
+testListDomains = req
+    "ListDomains"
+    "fixture/ListDomains"
+
+-- Responses
+
+testListOperationsResponse :: ListOperationsResponse -> TestTree
+testListOperationsResponse = res
+    "ListOperationsResponse"
+    "fixture/ListOperationsResponse"
+    (Proxy :: Proxy ListOperations)
+
+testGetDomainDetailResponse :: GetDomainDetailResponse -> TestTree
+testGetDomainDetailResponse = res
+    "GetDomainDetailResponse"
+    "fixture/GetDomainDetailResponse"
+    (Proxy :: Proxy GetDomainDetail)
+
+testUpdateDomainContactPrivacyResponse :: UpdateDomainContactPrivacyResponse -> TestTree
+testUpdateDomainContactPrivacyResponse = res
+    "UpdateDomainContactPrivacyResponse"
+    "fixture/UpdateDomainContactPrivacyResponse"
+    (Proxy :: Proxy UpdateDomainContactPrivacy)
+
+testGetOperationDetailResponse :: GetOperationDetailResponse -> TestTree
+testGetOperationDetailResponse = res
+    "GetOperationDetailResponse"
+    "fixture/GetOperationDetailResponse"
+    (Proxy :: Proxy GetOperationDetail)
+
+testEnableDomainAutoRenewResponse :: EnableDomainAutoRenewResponse -> TestTree
+testEnableDomainAutoRenewResponse = res
+    "EnableDomainAutoRenewResponse"
+    "fixture/EnableDomainAutoRenewResponse"
+    (Proxy :: Proxy EnableDomainAutoRenew)
+
+testDisableDomainAutoRenewResponse :: DisableDomainAutoRenewResponse -> TestTree
+testDisableDomainAutoRenewResponse = res
+    "DisableDomainAutoRenewResponse"
+    "fixture/DisableDomainAutoRenewResponse"
+    (Proxy :: Proxy DisableDomainAutoRenew)
+
+testUpdateDomainContactResponse :: UpdateDomainContactResponse -> TestTree
+testUpdateDomainContactResponse = res
+    "UpdateDomainContactResponse"
+    "fixture/UpdateDomainContactResponse"
+    (Proxy :: Proxy UpdateDomainContact)
+
+testEnableDomainTransferLockResponse :: EnableDomainTransferLockResponse -> TestTree
+testEnableDomainTransferLockResponse = res
+    "EnableDomainTransferLockResponse"
+    "fixture/EnableDomainTransferLockResponse"
+    (Proxy :: Proxy EnableDomainTransferLock)
+
+testRegisterDomainResponse :: RegisterDomainResponse -> TestTree
+testRegisterDomainResponse = res
+    "RegisterDomainResponse"
+    "fixture/RegisterDomainResponse"
+    (Proxy :: Proxy RegisterDomain)
+
+testDisableDomainTransferLockResponse :: DisableDomainTransferLockResponse -> TestTree
+testDisableDomainTransferLockResponse = res
+    "DisableDomainTransferLockResponse"
+    "fixture/DisableDomainTransferLockResponse"
+    (Proxy :: Proxy DisableDomainTransferLock)
+
+testCheckDomainAvailabilityResponse :: CheckDomainAvailabilityResponse -> TestTree
+testCheckDomainAvailabilityResponse = res
+    "CheckDomainAvailabilityResponse"
+    "fixture/CheckDomainAvailabilityResponse"
+    (Proxy :: Proxy CheckDomainAvailability)
+
+testListTagsForDomainResponse :: ListTagsForDomainResponse -> TestTree
+testListTagsForDomainResponse = res
+    "ListTagsForDomainResponse"
+    "fixture/ListTagsForDomainResponse"
+    (Proxy :: Proxy ListTagsForDomain)
+
+testUpdateDomainNameserversResponse :: UpdateDomainNameserversResponse -> TestTree
+testUpdateDomainNameserversResponse = res
+    "UpdateDomainNameserversResponse"
+    "fixture/UpdateDomainNameserversResponse"
+    (Proxy :: Proxy UpdateDomainNameservers)
+
+testRetrieveDomainAuthCodeResponse :: RetrieveDomainAuthCodeResponse -> TestTree
+testRetrieveDomainAuthCodeResponse = res
+    "RetrieveDomainAuthCodeResponse"
+    "fixture/RetrieveDomainAuthCodeResponse"
+    (Proxy :: Proxy RetrieveDomainAuthCode)
+
+testTransferDomainResponse :: TransferDomainResponse -> TestTree
+testTransferDomainResponse = res
+    "TransferDomainResponse"
+    "fixture/TransferDomainResponse"
+    (Proxy :: Proxy TransferDomain)
+
+testDeleteTagsForDomainResponse :: DeleteTagsForDomainResponse -> TestTree
+testDeleteTagsForDomainResponse = res
+    "DeleteTagsForDomainResponse"
+    "fixture/DeleteTagsForDomainResponse"
+    (Proxy :: Proxy DeleteTagsForDomain)
+
+testUpdateTagsForDomainResponse :: UpdateTagsForDomainResponse -> TestTree
+testUpdateTagsForDomainResponse = res
+    "UpdateTagsForDomainResponse"
+    "fixture/UpdateTagsForDomainResponse"
+    (Proxy :: Proxy UpdateTagsForDomain)
+
+testListDomainsResponse :: ListDomainsResponse -> TestTree
+testListDomainsResponse = res
+    "ListDomainsResponse"
+    "fixture/ListDomainsResponse"
+    (Proxy :: Proxy ListDomains)
diff --git a/test/Test/AWS/Route53Domains.hs b/test/Test/AWS/Route53Domains.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Route53Domains.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Module      : Test.AWS.Route53Domains
+-- 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.Route53Domains
+    ( tests
+    , fixtures
+    ) where
+
+import           Network.AWS.Route53Domains
+import           Test.AWS.Gen.Route53Domains
+import           Test.Tasty
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/Route53Domains/Internal.hs b/test/Test/AWS/Route53Domains/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Route53Domains/Internal.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Test.AWS.Route53Domains.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.Route53Domains.Internal where
+
+import Test.AWS.Prelude
