diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,373 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
+
+Exhibit B - "Incompatible With Secondary Licenses" Notice
+---------------------------------------------------------
+
+  This Source Code Form is "Incompatible With Secondary Licenses", as
+  defined by the Mozilla Public License, v. 2.0.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,26 @@
+# 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_!
+
+* [description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+## Description
+
+Pending
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-route53-domains)
+and [AWS API Reference](http://docs.aws.amazon.com/Route53/latest/APIReference/actions-on-domain-registrations.html).
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`amazonka-route53-domains` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/amazonka-route53-domains.cabal b/amazonka-route53-domains.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-route53-domains.cabal
@@ -0,0 +1,56 @@
+name:                  amazonka-route53-domains
+version:               0.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
+category:              Network, AWS, Cloud
+build-type:            Simple
+extra-source-files:    README.md
+cabal-version:         >= 1.10
+
+description:
+    Pending
+    .
+    /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/actions-on-domain-registrations.html AWS API Reference>
+    .
+    /Warning:/ This is an experimental preview release which is still under
+    heavy development and not intended for public consumption, caveat emptor!
+
+source-repository head
+    type:     git
+    location: git://github.com/brendanhay/amazonka.git
+
+library
+    default-language:  Haskell2010
+    hs-source-dirs:    src gen
+
+    ghc-options:       -Wall
+
+    exposed-modules:
+          Network.AWS.Route53Domains
+        , Network.AWS.Route53Domains.CheckDomainAvailability
+        , Network.AWS.Route53Domains.DisableDomainAutoRenew
+        , Network.AWS.Route53Domains.DisableDomainTransferLock
+        , Network.AWS.Route53Domains.EnableDomainAutoRenew
+        , Network.AWS.Route53Domains.EnableDomainTransferLock
+        , Network.AWS.Route53Domains.GetDomainDetail
+        , Network.AWS.Route53Domains.GetOperationDetail
+        , Network.AWS.Route53Domains.ListDomains
+        , Network.AWS.Route53Domains.ListOperations
+        , Network.AWS.Route53Domains.RegisterDomain
+        , Network.AWS.Route53Domains.RetrieveDomainAuthCode
+        , Network.AWS.Route53Domains.TransferDomain
+        , Network.AWS.Route53Domains.Types
+        , Network.AWS.Route53Domains.UpdateDomainContact
+        , Network.AWS.Route53Domains.UpdateDomainContactPrivacy
+        , Network.AWS.Route53Domains.UpdateDomainNameservers
+
+    other-modules:
+
+    build-depends:
+          amazonka-core
+        , base          >= 4.7 && < 5
diff --git a/gen/Network/AWS/Route53Domains.hs b/gen/Network/AWS/Route53Domains.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53Domains.hs
@@ -0,0 +1,46 @@
+-- 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/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Pending.
+module Network.AWS.Route53Domains
+    ( module Network.AWS.Route53Domains.CheckDomainAvailability
+    , module Network.AWS.Route53Domains.DisableDomainAutoRenew
+    , module Network.AWS.Route53Domains.DisableDomainTransferLock
+    , module Network.AWS.Route53Domains.EnableDomainAutoRenew
+    , module Network.AWS.Route53Domains.EnableDomainTransferLock
+    , module Network.AWS.Route53Domains.GetDomainDetail
+    , module Network.AWS.Route53Domains.GetOperationDetail
+    , module Network.AWS.Route53Domains.ListDomains
+    , module Network.AWS.Route53Domains.ListOperations
+    , module Network.AWS.Route53Domains.RegisterDomain
+    , module Network.AWS.Route53Domains.RetrieveDomainAuthCode
+    , 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
+    ) where
+
+import Network.AWS.Route53Domains.CheckDomainAvailability
+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.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
diff --git a/gen/Network/AWS/Route53Domains/CheckDomainAvailability.hs b/gen/Network/AWS/Route53Domains/CheckDomainAvailability.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53Domains/CheckDomainAvailability.hs
@@ -0,0 +1,133 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- 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/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | 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>
+module Network.AWS.Route53Domains.CheckDomainAvailability
+    (
+    -- * Request
+      CheckDomainAvailability
+    -- ** Request constructor
+    , checkDomainAvailability
+    -- ** Request lenses
+    , cdaDomainName
+    , cdaIdnLangCode
+
+    -- * Response
+    , CheckDomainAvailabilityResponse
+    -- ** Response constructor
+    , checkDomainAvailabilityResponse
+    -- ** Response lenses
+    , cdarAvailability
+    ) where
+
+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, Show)
+
+-- | 'CheckDomainAvailability' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cdaDomainName' @::@ 'Text'
+--
+-- * 'cdaIdnLangCode' @::@ 'Maybe' 'Text'
+--
+checkDomainAvailability :: Text -- ^ 'cdaDomainName'
+                        -> CheckDomainAvailability
+checkDomainAvailability p1 = CheckDomainAvailability
+    { _cdaDomainName  = p1
+    , _cdaIdnLangCode = Nothing
+    }
+
+-- | 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.
+-- Required: Yes.
+cdaDomainName :: Lens' CheckDomainAvailability Text
+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 })
+
+newtype CheckDomainAvailabilityResponse = CheckDomainAvailabilityResponse
+    { _cdarAvailability :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'CheckDomainAvailabilityResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cdarAvailability' @::@ 'Text'
+--
+checkDomainAvailabilityResponse :: Text -- ^ 'cdarAvailability'
+                                -> CheckDomainAvailabilityResponse
+checkDomainAvailabilityResponse p1 = CheckDomainAvailabilityResponse
+    { _cdarAvailability = p1
+    }
+
+-- | Whether the domain name is available for registering. Type: String 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.
+cdarAvailability :: Lens' CheckDomainAvailabilityResponse Text
+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"
diff --git a/gen/Network/AWS/Route53Domains/DisableDomainAutoRenew.hs b/gen/Network/AWS/Route53Domains/DisableDomainAutoRenew.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53Domains/DisableDomainAutoRenew.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- 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/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | This operation disables automatic renewal of domain registration for the
+-- specified domain.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-DisableDomainAutoRenew.html>
+module Network.AWS.Route53Domains.DisableDomainAutoRenew
+    (
+    -- * Request
+      DisableDomainAutoRenew
+    -- ** Request constructor
+    , disableDomainAutoRenew
+    -- ** Request lenses
+    , ddarDomainName
+
+    -- * Response
+    , DisableDomainAutoRenewResponse
+    -- ** Response constructor
+    , disableDomainAutoRenewResponse
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.Route53Domains.Types
+import qualified GHC.Exts
+
+newtype DisableDomainAutoRenew = DisableDomainAutoRenew
+    { _ddarDomainName :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'DisableDomainAutoRenew' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddarDomainName' @::@ 'Text'
+--
+disableDomainAutoRenew :: Text -- ^ 'ddarDomainName'
+                       -> DisableDomainAutoRenew
+disableDomainAutoRenew p1 = DisableDomainAutoRenew
+    { _ddarDomainName = p1
+    }
+
+ddarDomainName :: Lens' DisableDomainAutoRenew Text
+ddarDomainName = lens _ddarDomainName (\s a -> s { _ddarDomainName = a })
+
+data DisableDomainAutoRenewResponse = DisableDomainAutoRenewResponse
+    deriving (Eq, Ord, Show, Generic)
+
+-- | 'DisableDomainAutoRenewResponse' constructor.
+disableDomainAutoRenewResponse :: DisableDomainAutoRenewResponse
+disableDomainAutoRenewResponse = DisableDomainAutoRenewResponse
+
+instance ToPath DisableDomainAutoRenew where
+    toPath = const "/"
+
+instance ToQuery DisableDomainAutoRenew where
+    toQuery = const mempty
+
+instance ToHeaders DisableDomainAutoRenew
+
+instance ToJSON DisableDomainAutoRenew where
+    toJSON DisableDomainAutoRenew{..} = object
+        [ "DomainName" .= _ddarDomainName
+        ]
+
+instance AWSRequest DisableDomainAutoRenew where
+    type Sv DisableDomainAutoRenew = Route53Domains
+    type Rs DisableDomainAutoRenew = DisableDomainAutoRenewResponse
+
+    request  = post "DisableDomainAutoRenew"
+    response = nullResponse DisableDomainAutoRenewResponse
diff --git a/gen/Network/AWS/Route53Domains/DisableDomainTransferLock.hs b/gen/Network/AWS/Route53Domains/DisableDomainTransferLock.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53Domains/DisableDomainTransferLock.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- 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/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | 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>
+module Network.AWS.Route53Domains.DisableDomainTransferLock
+    (
+    -- * Request
+      DisableDomainTransferLock
+    -- ** Request constructor
+    , disableDomainTransferLock
+    -- ** Request lenses
+    , ddtlDomainName
+
+    -- * Response
+    , DisableDomainTransferLockResponse
+    -- ** Response constructor
+    , disableDomainTransferLockResponse
+    -- ** Response lenses
+    , ddtlrOperationId
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.Route53Domains.Types
+import qualified GHC.Exts
+
+newtype DisableDomainTransferLock = DisableDomainTransferLock
+    { _ddtlDomainName :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'DisableDomainTransferLock' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddtlDomainName' @::@ 'Text'
+--
+disableDomainTransferLock :: Text -- ^ 'ddtlDomainName'
+                          -> DisableDomainTransferLock
+disableDomainTransferLock p1 = DisableDomainTransferLock
+    { _ddtlDomainName = p1
+    }
+
+-- | 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.
+-- Required: Yes.
+ddtlDomainName :: Lens' DisableDomainTransferLock Text
+ddtlDomainName = lens _ddtlDomainName (\s a -> s { _ddtlDomainName = a })
+
+newtype DisableDomainTransferLockResponse = DisableDomainTransferLockResponse
+    { _ddtlrOperationId :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'DisableDomainTransferLockResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddtlrOperationId' @::@ 'Text'
+--
+disableDomainTransferLockResponse :: Text -- ^ 'ddtlrOperationId'
+                                  -> DisableDomainTransferLockResponse
+disableDomainTransferLockResponse p1 = DisableDomainTransferLockResponse
+    { _ddtlrOperationId = p1
+    }
+
+-- | 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"
diff --git a/gen/Network/AWS/Route53Domains/EnableDomainAutoRenew.hs b/gen/Network/AWS/Route53Domains/EnableDomainAutoRenew.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53Domains/EnableDomainAutoRenew.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- 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/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | 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 "Renewal, restoration, and deletion times"
+-- (http://wiki.gandi.net/en/domains/renew#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>
+module Network.AWS.Route53Domains.EnableDomainAutoRenew
+    (
+    -- * Request
+      EnableDomainAutoRenew
+    -- ** Request constructor
+    , enableDomainAutoRenew
+    -- ** Request lenses
+    , edarDomainName
+
+    -- * Response
+    , EnableDomainAutoRenewResponse
+    -- ** Response constructor
+    , enableDomainAutoRenewResponse
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.Route53Domains.Types
+import qualified GHC.Exts
+
+newtype EnableDomainAutoRenew = EnableDomainAutoRenew
+    { _edarDomainName :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'EnableDomainAutoRenew' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'edarDomainName' @::@ 'Text'
+--
+enableDomainAutoRenew :: Text -- ^ 'edarDomainName'
+                      -> EnableDomainAutoRenew
+enableDomainAutoRenew p1 = EnableDomainAutoRenew
+    { _edarDomainName = p1
+    }
+
+edarDomainName :: Lens' EnableDomainAutoRenew Text
+edarDomainName = lens _edarDomainName (\s a -> s { _edarDomainName = a })
+
+data EnableDomainAutoRenewResponse = EnableDomainAutoRenewResponse
+    deriving (Eq, Ord, Show, Generic)
+
+-- | 'EnableDomainAutoRenewResponse' constructor.
+enableDomainAutoRenewResponse :: EnableDomainAutoRenewResponse
+enableDomainAutoRenewResponse = EnableDomainAutoRenewResponse
+
+instance ToPath EnableDomainAutoRenew where
+    toPath = const "/"
+
+instance ToQuery EnableDomainAutoRenew where
+    toQuery = const mempty
+
+instance ToHeaders EnableDomainAutoRenew
+
+instance ToJSON EnableDomainAutoRenew where
+    toJSON EnableDomainAutoRenew{..} = object
+        [ "DomainName" .= _edarDomainName
+        ]
+
+instance AWSRequest EnableDomainAutoRenew where
+    type Sv EnableDomainAutoRenew = Route53Domains
+    type Rs EnableDomainAutoRenew = EnableDomainAutoRenewResponse
+
+    request  = post "EnableDomainAutoRenew"
+    response = nullResponse EnableDomainAutoRenewResponse
diff --git a/gen/Network/AWS/Route53Domains/EnableDomainTransferLock.hs b/gen/Network/AWS/Route53Domains/EnableDomainTransferLock.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53Domains/EnableDomainTransferLock.hs
@@ -0,0 +1,119 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- 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/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | 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>
+module Network.AWS.Route53Domains.EnableDomainTransferLock
+    (
+    -- * Request
+      EnableDomainTransferLock
+    -- ** Request constructor
+    , enableDomainTransferLock
+    -- ** Request lenses
+    , edtlDomainName
+
+    -- * Response
+    , EnableDomainTransferLockResponse
+    -- ** Response constructor
+    , enableDomainTransferLockResponse
+    -- ** Response lenses
+    , edtlrOperationId
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.Route53Domains.Types
+import qualified GHC.Exts
+
+newtype EnableDomainTransferLock = EnableDomainTransferLock
+    { _edtlDomainName :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'EnableDomainTransferLock' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'edtlDomainName' @::@ 'Text'
+--
+enableDomainTransferLock :: Text -- ^ 'edtlDomainName'
+                         -> EnableDomainTransferLock
+enableDomainTransferLock p1 = EnableDomainTransferLock
+    { _edtlDomainName = p1
+    }
+
+-- | 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.
+-- Required: Yes.
+edtlDomainName :: Lens' EnableDomainTransferLock Text
+edtlDomainName = lens _edtlDomainName (\s a -> s { _edtlDomainName = a })
+
+newtype EnableDomainTransferLockResponse = EnableDomainTransferLockResponse
+    { _edtlrOperationId :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'EnableDomainTransferLockResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'edtlrOperationId' @::@ 'Text'
+--
+enableDomainTransferLockResponse :: Text -- ^ 'edtlrOperationId'
+                                 -> EnableDomainTransferLockResponse
+enableDomainTransferLockResponse p1 = EnableDomainTransferLockResponse
+    { _edtlrOperationId = p1
+    }
+
+-- | 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"
diff --git a/gen/Network/AWS/Route53Domains/GetDomainDetail.hs b/gen/Network/AWS/Route53Domains/GetDomainDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53Domains/GetDomainDetail.hs
@@ -0,0 +1,364 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- 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/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | 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>
+module Network.AWS.Route53Domains.GetDomainDetail
+    (
+    -- * Request
+      GetDomainDetail
+    -- ** Request constructor
+    , getDomainDetail
+    -- ** Request lenses
+    , gddDomainName
+
+    -- * Response
+    , GetDomainDetailResponse
+    -- ** Response constructor
+    , getDomainDetailResponse
+    -- ** Response lenses
+    , gddrAbuseContactEmail
+    , gddrAbuseContactPhone
+    , gddrAdminContact
+    , gddrAdminPrivacy
+    , gddrAutoRenew
+    , gddrCreationDate
+    , gddrDnsSec
+    , gddrDomainName
+    , gddrExpirationDate
+    , gddrNameservers
+    , gddrRegistrantContact
+    , gddrRegistrantPrivacy
+    , gddrRegistrarName
+    , gddrRegistrarUrl
+    , gddrRegistryDomainId
+    , gddrReseller
+    , gddrStatusList
+    , gddrTechContact
+    , gddrTechPrivacy
+    , gddrUpdatedDate
+    , gddrWhoIsServer
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.Route53Domains.Types
+import qualified GHC.Exts
+
+newtype GetDomainDetail = GetDomainDetail
+    { _gddDomainName :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'GetDomainDetail' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'gddDomainName' @::@ 'Text'
+--
+getDomainDetail :: Text -- ^ 'gddDomainName'
+                -> GetDomainDetail
+getDomainDetail p1 = GetDomainDetail
+    { _gddDomainName = p1
+    }
+
+-- | 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.
+-- Required: Yes.
+gddDomainName :: Lens' GetDomainDetail Text
+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 RFC822
+    , _gddrDnsSec            :: Maybe Text
+    , _gddrDomainName        :: Text
+    , _gddrExpirationDate    :: Maybe RFC822
+    , _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 RFC822
+    , _gddrWhoIsServer       :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'GetDomainDetailResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'gddrAbuseContactEmail' @::@ 'Maybe' 'Text'
+--
+-- * 'gddrAbuseContactPhone' @::@ 'Maybe' 'Text'
+--
+-- * 'gddrAdminContact' @::@ 'ContactDetail'
+--
+-- * 'gddrAdminPrivacy' @::@ 'Maybe' 'Bool'
+--
+-- * 'gddrAutoRenew' @::@ 'Maybe' 'Bool'
+--
+-- * 'gddrCreationDate' @::@ 'Maybe' 'UTCTime'
+--
+-- * 'gddrDnsSec' @::@ 'Maybe' 'Text'
+--
+-- * 'gddrDomainName' @::@ 'Text'
+--
+-- * 'gddrExpirationDate' @::@ 'Maybe' 'UTCTime'
+--
+-- * 'gddrNameservers' @::@ ['Nameserver']
+--
+-- * 'gddrRegistrantContact' @::@ 'ContactDetail'
+--
+-- * 'gddrRegistrantPrivacy' @::@ 'Maybe' 'Bool'
+--
+-- * 'gddrRegistrarName' @::@ 'Maybe' 'Text'
+--
+-- * 'gddrRegistrarUrl' @::@ 'Maybe' 'Text'
+--
+-- * 'gddrRegistryDomainId' @::@ 'Maybe' 'Text'
+--
+-- * 'gddrReseller' @::@ 'Maybe' 'Text'
+--
+-- * 'gddrStatusList' @::@ ['Text']
+--
+-- * 'gddrTechContact' @::@ 'ContactDetail'
+--
+-- * 'gddrTechPrivacy' @::@ 'Maybe' 'Bool'
+--
+-- * 'gddrUpdatedDate' @::@ 'Maybe' 'UTCTime'
+--
+-- * 'gddrWhoIsServer' @::@ 'Maybe' 'Text'
+--
+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
+    }
+
+-- | 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.
+gddrAbuseContactEmail :: Lens' GetDomainDetailResponse (Maybe Text)
+gddrAbuseContactEmail =
+    lens _gddrAbuseContactEmail (\s a -> s { _gddrAbuseContactEmail = a })
+
+-- | Phone number for reporting abuse. Type: String.
+gddrAbuseContactPhone :: Lens' GetDomainDetailResponse (Maybe Text)
+gddrAbuseContactPhone =
+    lens _gddrAbuseContactPhone (\s a -> s { _gddrAbuseContactPhone = 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 })
+
+-- | 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.
+gddrAdminPrivacy :: Lens' GetDomainDetailResponse (Maybe Bool)
+gddrAdminPrivacy = lens _gddrAdminPrivacy (\s a -> s { _gddrAdminPrivacy = a })
+
+-- | Specifies whether the domain registration is set to renew automatically.
+-- Type: Boolean.
+gddrAutoRenew :: Lens' GetDomainDetailResponse (Maybe Bool)
+gddrAutoRenew = lens _gddrAutoRenew (\s a -> s { _gddrAutoRenew = 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
+
+-- | Reserved for future use.
+gddrDnsSec :: Lens' GetDomainDetailResponse (Maybe Text)
+gddrDnsSec = lens _gddrDnsSec (\s a -> s { _gddrDnsSec = a })
+
+-- | The name of a domain. Type: String.
+gddrDomainName :: Lens' GetDomainDetailResponse Text
+gddrDomainName = lens _gddrDomainName (\s a -> s { _gddrDomainName = 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
+
+-- | The name of the domain. Type: String.
+gddrNameservers :: Lens' GetDomainDetailResponse [Nameserver]
+gddrNameservers = lens _gddrNameservers (\s a -> s { _gddrNameservers = a }) . _List
+
+-- | Provides details about the domain registrant. Type: Complex 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. Type: Boolean.
+gddrRegistrantPrivacy :: Lens' GetDomainDetailResponse (Maybe Bool)
+gddrRegistrantPrivacy =
+    lens _gddrRegistrantPrivacy (\s a -> s { _gddrRegistrantPrivacy = a })
+
+-- | 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.
+gddrRegistrarName :: Lens' GetDomainDetailResponse (Maybe Text)
+gddrRegistrarName =
+    lens _gddrRegistrarName (\s a -> s { _gddrRegistrarName = a })
+
+-- | Web address of the registrar. 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 })
+
+-- | Reseller of the domain. Domains registered or transferred using Amazon
+-- Route 53 domains will have "Amazon" as the reseller. Type: String.
+gddrReseller :: Lens' GetDomainDetailResponse (Maybe Text)
+gddrReseller = lens _gddrReseller (\s a -> s { _gddrReseller = a })
+
+-- | 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. For a current list of domain name status codes and
+-- an explanation of what each code means, go to the ICANN website and
+-- search for epp status codes. (Search on the ICANN website; web searches
+-- sometimes return an old version of the document.) Type: Array of String.
+gddrStatusList :: Lens' GetDomainDetailResponse [Text]
+gddrStatusList = lens _gddrStatusList (\s a -> s { _gddrStatusList = a }) . _List
+
+-- | Provides details about the domain technical contact. 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 })
+
+-- | 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: 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: 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"
+        <*> o .:  "RegistrantContact"
+        <*> o .:? "RegistrantPrivacy"
+        <*> o .:? "RegistrarName"
+        <*> o .:? "RegistrarUrl"
+        <*> o .:? "RegistryDomainId"
+        <*> o .:? "Reseller"
+        <*> o .:  "StatusList"
+        <*> o .:  "TechContact"
+        <*> o .:? "TechPrivacy"
+        <*> o .:? "UpdatedDate"
+        <*> o .:? "WhoIsServer"
diff --git a/gen/Network/AWS/Route53Domains/GetOperationDetail.hs b/gen/Network/AWS/Route53Domains/GetOperationDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53Domains/GetOperationDetail.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- 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/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | This operation returns the current status of an operation that is not
+-- completed.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-GetOperationDetail.html>
+module Network.AWS.Route53Domains.GetOperationDetail
+    (
+    -- * Request
+      GetOperationDetail
+    -- ** Request constructor
+    , getOperationDetail
+    -- ** Request lenses
+    , godOperationId
+
+    -- * Response
+    , GetOperationDetailResponse
+    -- ** Response constructor
+    , getOperationDetailResponse
+    -- ** Response lenses
+    , godrDomainName
+    , godrMessage
+    , godrOperationId
+    , godrStatus
+    , godrSubmittedDate
+    , godrType
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.Route53Domains.Types
+import qualified GHC.Exts
+
+newtype GetOperationDetail = GetOperationDetail
+    { _godOperationId :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'GetOperationDetail' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'godOperationId' @::@ 'Text'
+--
+getOperationDetail :: Text -- ^ 'godOperationId'
+                   -> GetOperationDetail
+getOperationDetail p1 = GetOperationDetail
+    { _godOperationId = p1
+    }
+
+-- | 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 Default: None Required: Yes.
+godOperationId :: Lens' GetOperationDetail Text
+godOperationId = lens _godOperationId (\s a -> s { _godOperationId = a })
+
+data GetOperationDetailResponse = GetOperationDetailResponse
+    { _godrDomainName    :: Maybe Text
+    , _godrMessage       :: Maybe Text
+    , _godrOperationId   :: Maybe Text
+    , _godrStatus        :: Maybe Text
+    , _godrSubmittedDate :: Maybe RFC822
+    , _godrType          :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'GetOperationDetailResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'godrDomainName' @::@ 'Maybe' 'Text'
+--
+-- * 'godrMessage' @::@ 'Maybe' 'Text'
+--
+-- * 'godrOperationId' @::@ 'Maybe' 'Text'
+--
+-- * 'godrStatus' @::@ 'Maybe' 'Text'
+--
+-- * 'godrSubmittedDate' @::@ 'Maybe' 'UTCTime'
+--
+-- * 'godrType' @::@ 'Maybe' 'Text'
+--
+getOperationDetailResponse :: GetOperationDetailResponse
+getOperationDetailResponse = GetOperationDetailResponse
+    { _godrOperationId   = Nothing
+    , _godrStatus        = Nothing
+    , _godrMessage       = Nothing
+    , _godrDomainName    = Nothing
+    , _godrType          = Nothing
+    , _godrSubmittedDate = Nothing
+    }
+
+-- | The name of a domain. Type: String.
+godrDomainName :: Lens' GetOperationDetailResponse (Maybe Text)
+godrDomainName = lens _godrDomainName (\s a -> s { _godrDomainName = a })
+
+-- | Detailed information on the status including possible errors. Type:
+-- String.
+godrMessage :: Lens' GetOperationDetailResponse (Maybe Text)
+godrMessage = lens _godrMessage (\s a -> s { _godrMessage = a })
+
+-- | The identifier for the operation. Type: String.
+godrOperationId :: Lens' GetOperationDetailResponse (Maybe Text)
+godrOperationId = lens _godrOperationId (\s a -> s { _godrOperationId = a })
+
+-- | The current status of the requested operation in the system. Type:
+-- String.
+godrStatus :: Lens' GetOperationDetailResponse (Maybe Text)
+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
+
+-- | The type of operation that was requested. Type: String.
+godrType :: Lens' GetOperationDetailResponse (Maybe Text)
+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
+
+instance FromJSON GetOperationDetailResponse where
+    parseJSON = withObject "GetOperationDetailResponse" $ \o -> GetOperationDetailResponse
+        <$> o .:? "DomainName"
+        <*> o .:? "Message"
+        <*> o .:? "OperationId"
+        <*> o .:? "Status"
+        <*> o .:? "SubmittedDate"
+        <*> o .:? "Type"
diff --git a/gen/Network/AWS/Route53Domains/ListDomains.hs b/gen/Network/AWS/Route53Domains/ListDomains.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53Domains/ListDomains.hs
@@ -0,0 +1,141 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- 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/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | 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>
+module Network.AWS.Route53Domains.ListDomains
+    (
+    -- * Request
+      ListDomains
+    -- ** Request constructor
+    , listDomains
+    -- ** Request lenses
+    , ldMarker
+    , ldMaxItems
+
+    -- * Response
+    , ListDomainsResponse
+    -- ** Response constructor
+    , listDomainsResponse
+    -- ** Response lenses
+    , ldrDomains
+    , ldrNextPageMarker
+    ) where
+
+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, Show)
+
+-- | 'ListDomains' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ldMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'ldMaxItems' @::@ 'Maybe' 'Int'
+--
+listDomains :: ListDomains
+listDomains = ListDomains
+    { _ldMarker   = Nothing
+    , _ldMaxItems = Nothing
+    }
+
+-- | 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 Default: None
+-- Constraints: The marker must match the value specified in the previous
+-- request. Required: No.
+ldMarker :: Lens' ListDomains (Maybe Text)
+ldMarker = lens _ldMarker (\s a -> s { _ldMarker = a })
+
+-- | Number of domains to be returned. Type: Integer Default: 20 Constraints:
+-- A numeral between 1 and 100. 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, Show)
+
+-- | 'ListDomainsResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ldrDomains' @::@ ['DomainSummary']
+--
+-- * 'ldrNextPageMarker' @::@ 'Maybe' 'Text'
+--
+listDomainsResponse :: ListDomainsResponse
+listDomainsResponse = ListDomainsResponse
+    { _ldrDomains        = mempty
+    , _ldrNextPageMarker = Nothing
+    }
+
+-- | 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
+
+-- | 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 ToPath ListDomains where
+    toPath = const "/"
+
+instance ToQuery ListDomains where
+    toQuery = const mempty
+
+instance ToHeaders ListDomains
+
+instance ToJSON ListDomains where
+    toJSON ListDomains{..} = object
+        [ "Marker"   .= _ldMarker
+        , "MaxItems" .= _ldMaxItems
+        ]
+
+instance AWSRequest ListDomains where
+    type Sv ListDomains = Route53Domains
+    type Rs ListDomains = ListDomainsResponse
+
+    request  = post "ListDomains"
+    response = jsonResponse
+
+instance FromJSON ListDomainsResponse where
+    parseJSON = withObject "ListDomainsResponse" $ \o -> ListDomainsResponse
+        <$> o .:  "Domains"
+        <*> o .:? "NextPageMarker"
diff --git a/gen/Network/AWS/Route53Domains/ListOperations.hs b/gen/Network/AWS/Route53Domains/ListOperations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53Domains/ListOperations.hs
@@ -0,0 +1,141 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- 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/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | This operation returns the operation IDs of operations that are not yet
+-- complete.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-ListOperations.html>
+module Network.AWS.Route53Domains.ListOperations
+    (
+    -- * Request
+      ListOperations
+    -- ** Request constructor
+    , listOperations
+    -- ** Request lenses
+    , loMarker
+    , loMaxItems
+
+    -- * Response
+    , ListOperationsResponse
+    -- ** Response constructor
+    , listOperationsResponse
+    -- ** Response lenses
+    , lorNextPageMarker
+    , lorOperations
+    ) where
+
+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, Show)
+
+-- | 'ListOperations' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'loMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'loMaxItems' @::@ 'Maybe' 'Int'
+--
+listOperations :: ListOperations
+listOperations = ListOperations
+    { _loMarker   = Nothing
+    , _loMaxItems = Nothing
+    }
+
+-- | 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 })
+
+-- | Number of domains to be returned. Type: Integer Default: 20 Constraints:
+-- A value between 1 and 100. Required: No.
+loMaxItems :: Lens' ListOperations (Maybe Int)
+loMaxItems = lens _loMaxItems (\s a -> s { _loMaxItems = a })
+
+data ListOperationsResponse = ListOperationsResponse
+    { _lorNextPageMarker :: Maybe Text
+    , _lorOperations     :: List "Operations" OperationSummary
+    } deriving (Eq, Show)
+
+-- | 'ListOperationsResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'lorNextPageMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'lorOperations' @::@ ['OperationSummary']
+--
+listOperationsResponse :: ListOperationsResponse
+listOperationsResponse = ListOperationsResponse
+    { _lorOperations     = mempty
+    , _lorNextPageMarker = Nothing
+    }
+
+-- | 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 })
+
+-- | 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"
diff --git a/gen/Network/AWS/Route53Domains/RegisterDomain.hs b/gen/Network/AWS/Route53Domains/RegisterDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53Domains/RegisterDomain.hs
@@ -0,0 +1,260 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- 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/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | 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 Amazon Route 53
+-- Pricing.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-RegisterDomain.html>
+module Network.AWS.Route53Domains.RegisterDomain
+    (
+    -- * Request
+      RegisterDomain
+    -- ** Request constructor
+    , registerDomain
+    -- ** Request lenses
+    , rdAdminContact
+    , rdAutoRenew
+    , rdDomainName
+    , rdDurationInYears
+    , rdIdnLangCode
+    , rdPrivacyProtectAdminContact
+    , rdPrivacyProtectRegistrantContact
+    , rdPrivacyProtectTechContact
+    , rdRegistrantContact
+    , rdTechContact
+
+    -- * Response
+    , RegisterDomainResponse
+    -- ** Response constructor
+    , registerDomainResponse
+    -- ** Response lenses
+    , rdrOperationId
+    ) where
+
+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, Show)
+
+-- | 'RegisterDomain' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rdAdminContact' @::@ 'ContactDetail'
+--
+-- * 'rdAutoRenew' @::@ 'Maybe' 'Bool'
+--
+-- * 'rdDomainName' @::@ 'Text'
+--
+-- * 'rdDurationInYears' @::@ 'Natural'
+--
+-- * 'rdIdnLangCode' @::@ 'Maybe' 'Text'
+--
+-- * 'rdPrivacyProtectAdminContact' @::@ 'Maybe' 'Bool'
+--
+-- * 'rdPrivacyProtectRegistrantContact' @::@ 'Maybe' 'Bool'
+--
+-- * 'rdPrivacyProtectTechContact' @::@ 'Maybe' 'Bool'
+--
+-- * 'rdRegistrantContact' @::@ 'ContactDetail'
+--
+-- * 'rdTechContact' @::@ 'ContactDetail'
+--
+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
+    , _rdPrivacyProtectRegistrantContact = Nothing
+    , _rdPrivacyProtectTechContact       = Nothing
+    }
+
+-- | Provides detailed contact information. Type: Complex Children: FirstName,
+-- MiddleName, LastName, ContactType, OrganizationName, AddressLine1,
+-- AddressLine2, City, State, CountryCode, ZipCode, PhoneNumber, Email, Fax,
+-- ExtraParams Required: Yes.
+rdAdminContact :: Lens' RegisterDomain ContactDetail
+rdAdminContact = lens _rdAdminContact (\s a -> s { _rdAdminContact = 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 })
+
+-- | 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.
+-- Required: Yes.
+rdDomainName :: Lens' RegisterDomain Text
+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. Type: Integer Default: 1 Valid values: Integer from 1 to 10
+-- 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 })
+
+-- | 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.
+rdPrivacyProtectTechContact :: Lens' RegisterDomain (Maybe Bool)
+rdPrivacyProtectTechContact =
+    lens _rdPrivacyProtectTechContact
+        (\s a -> s { _rdPrivacyProtectTechContact = a })
+
+-- | Provides detailed contact information. Type: Complex 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 })
+
+-- | Provides detailed contact information. Type: Complex 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 })
+
+newtype RegisterDomainResponse = RegisterDomainResponse
+    { _rdrOperationId :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'RegisterDomainResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rdrOperationId' @::@ 'Text'
+--
+registerDomainResponse :: Text -- ^ 'rdrOperationId'
+                       -> RegisterDomainResponse
+registerDomainResponse p1 = RegisterDomainResponse
+    { _rdrOperationId = p1
+    }
+
+-- | 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"
diff --git a/gen/Network/AWS/Route53Domains/RetrieveDomainAuthCode.hs b/gen/Network/AWS/Route53Domains/RetrieveDomainAuthCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53Domains/RetrieveDomainAuthCode.hs
@@ -0,0 +1,114 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- 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/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | 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>
+module Network.AWS.Route53Domains.RetrieveDomainAuthCode
+    (
+    -- * Request
+      RetrieveDomainAuthCode
+    -- ** Request constructor
+    , retrieveDomainAuthCode
+    -- ** Request lenses
+    , rdacDomainName
+
+    -- * Response
+    , RetrieveDomainAuthCodeResponse
+    -- ** Response constructor
+    , retrieveDomainAuthCodeResponse
+    -- ** Response lenses
+    , rdacrAuthCode
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.Route53Domains.Types
+import qualified GHC.Exts
+
+newtype RetrieveDomainAuthCode = RetrieveDomainAuthCode
+    { _rdacDomainName :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'RetrieveDomainAuthCode' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rdacDomainName' @::@ 'Text'
+--
+retrieveDomainAuthCode :: Text -- ^ 'rdacDomainName'
+                       -> RetrieveDomainAuthCode
+retrieveDomainAuthCode p1 = RetrieveDomainAuthCode
+    { _rdacDomainName = p1
+    }
+
+-- | 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.
+-- Required: Yes.
+rdacDomainName :: Lens' RetrieveDomainAuthCode Text
+rdacDomainName = lens _rdacDomainName (\s a -> s { _rdacDomainName = a })
+
+newtype RetrieveDomainAuthCodeResponse = RetrieveDomainAuthCodeResponse
+    { _rdacrAuthCode :: Sensitive Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'RetrieveDomainAuthCodeResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rdacrAuthCode' @::@ 'Text'
+--
+retrieveDomainAuthCodeResponse :: Text -- ^ 'rdacrAuthCode'
+                               -> RetrieveDomainAuthCodeResponse
+retrieveDomainAuthCodeResponse p1 = RetrieveDomainAuthCodeResponse
+    { _rdacrAuthCode = withIso _Sensitive (const id) p1
+    }
+
+-- | The authorization code for the domain. Type: String.
+rdacrAuthCode :: Lens' RetrieveDomainAuthCodeResponse Text
+rdacrAuthCode = lens _rdacrAuthCode (\s a -> s { _rdacrAuthCode = a }) . _Sensitive
+
+instance ToPath RetrieveDomainAuthCode where
+    toPath = const "/"
+
+instance ToQuery RetrieveDomainAuthCode where
+    toQuery = const mempty
+
+instance ToHeaders RetrieveDomainAuthCode
+
+instance ToJSON RetrieveDomainAuthCode where
+    toJSON RetrieveDomainAuthCode{..} = object
+        [ "DomainName" .= _rdacDomainName
+        ]
+
+instance AWSRequest RetrieveDomainAuthCode where
+    type Sv RetrieveDomainAuthCode = Route53Domains
+    type Rs RetrieveDomainAuthCode = RetrieveDomainAuthCodeResponse
+
+    request  = post "RetrieveDomainAuthCode"
+    response = jsonResponse
+
+instance FromJSON RetrieveDomainAuthCodeResponse where
+    parseJSON = withObject "RetrieveDomainAuthCodeResponse" $ \o -> RetrieveDomainAuthCodeResponse
+        <$> o .:  "AuthCode"
diff --git a/gen/Network/AWS/Route53Domains/TransferDomain.hs b/gen/Network/AWS/Route53Domains/TransferDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53Domains/TransferDomain.hs
@@ -0,0 +1,281 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- 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/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | This operation transfers a domain from another registrar to Amazon Route
+-- 53. Domains are registered by the AWS registrar, Gandi upon transfer. To
+-- transfer a domain, you need to meet all the domain transfer criteria,
+-- including the following: You must supply nameservers to transfer a domain.
+-- You must disable the domain transfer lock (if any) before transferring the
+-- domain. A minimum of 60 days must have elapsed since the domain's
+-- registration or last transfer. We recommend you use the Amazon Route 53 as
+-- the DNS service for your domain. You can create a hosted zone in Amazon
+-- Route 53 for your current domain before transferring your domain. Note that
+-- upon transfer, the domain duration is extended for a year if not otherwise
+-- specified. Autorenew is enabled by default. 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 request is not completed successfully,
+-- the domain registrant will be notified by email. Transferring domains
+-- charges your AWS account an amount based on the top-level domain. For more
+-- information, see Amazon Route 53 Pricing.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-TransferDomain.html>
+module Network.AWS.Route53Domains.TransferDomain
+    (
+    -- * Request
+      TransferDomain
+    -- ** Request constructor
+    , transferDomain
+    -- ** Request lenses
+    , tdAdminContact
+    , tdAuthCode
+    , tdAutoRenew
+    , tdDomainName
+    , tdDurationInYears
+    , tdIdnLangCode
+    , tdNameservers
+    , tdPrivacyProtectAdminContact
+    , tdPrivacyProtectRegistrantContact
+    , tdPrivacyProtectTechContact
+    , tdRegistrantContact
+    , tdTechContact
+
+    -- * Response
+    , TransferDomainResponse
+    -- ** Response constructor
+    , transferDomainResponse
+    -- ** Response lenses
+    , tdrOperationId
+    ) where
+
+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, Show)
+
+-- | 'TransferDomain' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'tdAdminContact' @::@ 'ContactDetail'
+--
+-- * 'tdAuthCode' @::@ 'Maybe' 'Text'
+--
+-- * 'tdAutoRenew' @::@ 'Maybe' 'Bool'
+--
+-- * 'tdDomainName' @::@ 'Text'
+--
+-- * 'tdDurationInYears' @::@ 'Natural'
+--
+-- * 'tdIdnLangCode' @::@ 'Maybe' 'Text'
+--
+-- * 'tdNameservers' @::@ ['Nameserver']
+--
+-- * 'tdPrivacyProtectAdminContact' @::@ 'Maybe' 'Bool'
+--
+-- * 'tdPrivacyProtectRegistrantContact' @::@ 'Maybe' 'Bool'
+--
+-- * 'tdPrivacyProtectTechContact' @::@ 'Maybe' 'Bool'
+--
+-- * 'tdRegistrantContact' @::@ 'ContactDetail'
+--
+-- * 'tdTechContact' @::@ 'ContactDetail'
+--
+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
+    , _tdPrivacyProtectRegistrantContact = Nothing
+    , _tdPrivacyProtectTechContact       = Nothing
+    }
+
+-- | Provides detailed contact information. Type: Complex Children: FirstName,
+-- MiddleName, LastName, ContactType, OrganizationName, AddressLine1,
+-- AddressLine2, City, State, CountryCode, ZipCode, PhoneNumber, Email, Fax,
+-- ExtraParams Required: Yes.
+tdAdminContact :: Lens' TransferDomain ContactDetail
+tdAdminContact = lens _tdAdminContact (\s a -> s { _tdAdminContact = a })
+
+-- | The authorization code for the domain. You get this value from the
+-- current registrar. Type: String Required: Yes.
+tdAuthCode :: Lens' TransferDomain (Maybe Text)
+tdAuthCode = lens _tdAuthCode (\s a -> s { _tdAuthCode = a }) . mapping _Sensitive
+
+-- | 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.
+tdAutoRenew :: Lens' TransferDomain (Maybe Bool)
+tdAutoRenew = lens _tdAutoRenew (\s a -> s { _tdAutoRenew = 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.
+-- Required: Yes.
+tdDomainName :: Lens' TransferDomain Text
+tdDomainName = lens _tdDomainName (\s a -> s { _tdDomainName = 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 Valid values: Integer from 1 to 10
+-- 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 })
+
+-- | Contains details for the host and glue IP addresses. Type: Complex
+-- Children: GlueIps, Name.
+tdNameservers :: Lens' TransferDomain [Nameserver]
+tdNameservers = lens _tdNameservers (\s a -> s { _tdNameservers = a }) . _List
+
+-- | 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.
+tdPrivacyProtectAdminContact :: Lens' TransferDomain (Maybe Bool)
+tdPrivacyProtectAdminContact =
+    lens _tdPrivacyProtectAdminContact
+        (\s a -> s { _tdPrivacyProtectAdminContact = 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.
+tdPrivacyProtectRegistrantContact :: Lens' TransferDomain (Maybe Bool)
+tdPrivacyProtectRegistrantContact =
+    lens _tdPrivacyProtectRegistrantContact
+        (\s a -> s { _tdPrivacyProtectRegistrantContact = 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.
+tdPrivacyProtectTechContact :: Lens' TransferDomain (Maybe Bool)
+tdPrivacyProtectTechContact =
+    lens _tdPrivacyProtectTechContact
+        (\s a -> s { _tdPrivacyProtectTechContact = a })
+
+-- | Provides detailed contact information. Type: Complex 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 })
+
+-- | Provides detailed contact information. Type: Complex 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 })
+
+newtype TransferDomainResponse = TransferDomainResponse
+    { _tdrOperationId :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'TransferDomainResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'tdrOperationId' @::@ 'Text'
+--
+transferDomainResponse :: Text -- ^ 'tdrOperationId'
+                       -> TransferDomainResponse
+transferDomainResponse p1 = TransferDomainResponse
+    { _tdrOperationId = p1
+    }
+
+-- | 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"
diff --git a/gen/Network/AWS/Route53Domains/Types.hs b/gen/Network/AWS/Route53Domains/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53Domains/Types.hs
@@ -0,0 +1,1438 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# 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)
+
+module Network.AWS.Route53Domains.Types
+    (
+    -- * Service
+      Route53Domains
+    -- ** Error
+    , JSONError
+
+    -- * DomainSummary
+    , DomainSummary
+    , domainSummary
+    , dsAutoRenew
+    , dsDomainName
+    , dsExpiry
+    , dsTransferLock
+
+    -- * 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 Data.Char (isUpper)
+import Network.AWS.Error
+import Network.AWS.Prelude
+import Network.AWS.Signing.V4
+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
+        { _svcEndpoint     = regional
+        , _svcAbbrev       = "Route53Domains"
+        , _svcPrefix       = "route53domains"
+        , _svcVersion      = "2014-05-15"
+        , _svcTargetPrefix = Just "Route53Domains_v20140515"
+        , _svcJSONVersion  = Just "1.1"
+        }
+
+    handle = jsonError statusSuccess
+
+data DomainSummary = DomainSummary
+    { _dsAutoRenew    :: Maybe Bool
+    , _dsDomainName   :: Text
+    , _dsExpiry       :: Maybe RFC822
+    , _dsTransferLock :: Maybe Bool
+    } deriving (Eq, Ord, 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 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
+    | 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, Show, Generic, Enum)
+
+instance Hashable ExtraParamName
+
+instance FromText ExtraParamName where
+    parser = match "AU_ID_NUMBER"             AuIdNumber
+         <|> match "AU_ID_TYPE"               AuIdType
+         <|> match "BIRTH_CITY"               BirthCity
+         <|> match "BIRTH_COUNTRY"            BirthCountry
+         <|> match "BIRTH_DATE_IN_YYYY_MM_DD" BirthDateInYyyyMmDd
+         <|> match "BIRTH_DEPARTMENT"         BirthDepartment
+         <|> match "BRAND_NUMBER"             BrandNumber
+         <|> match "CA_LEGAL_TYPE"            CaLegalType
+         <|> match "DOCUMENT_NUMBER"          DocumentNumber
+         <|> match "DUNS_NUMBER"              DunsNumber
+         <|> match "FI_BUSINESS_NUMBER"       FiBusinessNumber
+         <|> match "FI_ID_NUMBER"             FiIdNumber
+         <|> match "IT_PIN"                   ItPin
+         <|> match "RU_PASSPORT_DATA"         RuPassportData
+         <|> match "SE_ID_NUMBER"             SeIdNumber
+         <|> match "SG_ID_NUMBER"             SgIdNumber
+         <|> match "VAT_NUMBER"               VatNumber
+
+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"
+        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 FromJSON ExtraParamName where
+    parseJSON = parseJSONText "ExtraParamName"
+
+instance ToJSON ExtraParamName where
+    toJSON = toJSONText
+
+data Nameserver = Nameserver
+    { _nGlueIps :: List "GlueIps" Text
+    , _nName    :: Text
+    } deriving (Eq, Ord, 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"
+        <*> 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, Show, Generic, Enum)
+
+instance Hashable OperationStatus
+
+instance FromText OperationStatus where
+    parser = match "ERROR"       Error
+         <|> match "FAILED"      Failed
+         <|> match "IN_PROGRESS" InProgress
+         <|> match "SUBMITTED"   Submitted
+         <|> match "SUCCESSFUL"  Successful
+
+instance ToText OperationStatus where
+    toText = \case
+        Error      -> "ERROR"
+        Failed     -> "FAILED"
+        InProgress -> "IN_PROGRESS"
+        Submitted  -> "SUBMITTED"
+        Successful -> "SUCCESSFUL"
+
+instance FromJSON OperationStatus where
+    parseJSON = parseJSONText "OperationStatus"
+
+instance ToJSON OperationStatus where
+    toJSON = toJSONText
+
+data DomainAvailability
+    = Available             -- ^ AVAILABLE
+    | AvailablePreorder     -- ^ AVAILABLE_PREORDER
+    | AvailableReserved     -- ^ AVAILABLE_RESERVED
+    | Reserved              -- ^ RESERVED
+    | Unavailable           -- ^ UNAVAILABLE
+    | UnavailablePremium    -- ^ UNAVAILABLE_PREMIUM
+    | UnavailableRestricted -- ^ UNAVAILABLE_RESTRICTED
+      deriving (Eq, Ord, Show, Generic, Enum)
+
+instance Hashable DomainAvailability
+
+instance FromText DomainAvailability where
+    parser = match "AVAILABLE"              Available
+         <|> match "AVAILABLE_PREORDER"     AvailablePreorder
+         <|> match "AVAILABLE_RESERVED"     AvailableReserved
+         <|> match "RESERVED"               Reserved
+         <|> match "UNAVAILABLE"            Unavailable
+         <|> match "UNAVAILABLE_PREMIUM"    UnavailablePremium
+         <|> match "UNAVAILABLE_RESTRICTED" UnavailableRestricted
+
+instance ToText DomainAvailability where
+    toText = \case
+        Available             -> "AVAILABLE"
+        AvailablePreorder     -> "AVAILABLE_PREORDER"
+        AvailableReserved     -> "AVAILABLE_RESERVED"
+        Reserved              -> "RESERVED"
+        Unavailable           -> "UNAVAILABLE"
+        UnavailablePremium    -> "UNAVAILABLE_PREMIUM"
+        UnavailableRestricted -> "UNAVAILABLE_RESTRICTED"
+
+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, Show, Generic, Enum)
+
+instance Hashable OperationType
+
+instance FromText OperationType where
+    parser = match "CHANGE_PRIVACY_PROTECTION" OTChangePrivacyProtection
+         <|> match "DELETE_DOMAIN"             OTDeleteDomain
+         <|> match "DOMAIN_LOCK"               OTDomainLock
+         <|> match "REGISTER_DOMAIN"           OTRegisterDomain
+         <|> match "TRANSFER_IN_DOMAIN"        OTTransferInDomain
+         <|> match "UPDATE_DOMAIN_CONTACT"     OTUpdateDomainContact
+         <|> match "UPDATE_NAMESERVER"         OTUpdateNameserver
+
+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 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, Show, Generic, Enum)
+
+instance Hashable CountryCode
+
+instance FromText CountryCode where
+    parser = match "AD" Ad
+         <|> match "AE" Ae
+         <|> match "AF" Af
+         <|> match "AG" Ag
+         <|> match "AI" Ai
+         <|> match "AL" Al
+         <|> match "AM" Am
+         <|> match "AN" An
+         <|> match "AO" Ao
+         <|> match "AQ" Aq
+         <|> match "AR" Ar
+         <|> match "AS" As
+         <|> match "AT" At
+         <|> match "AU" Au
+         <|> match "AW" Aw
+         <|> match "AZ" Az
+         <|> match "BA" Ba
+         <|> match "BB" Bb
+         <|> match "BD" Bd
+         <|> match "BE" Be
+         <|> match "BF" Bf
+         <|> match "BG" Bg
+         <|> match "BH" Bh
+         <|> match "BI" Bi
+         <|> match "BJ" Bj
+         <|> match "BL" Bl
+         <|> match "BM" Bm
+         <|> match "BN" Bn
+         <|> match "BO" Bo
+         <|> match "BR" Br
+         <|> match "BS" Bs
+         <|> match "BT" Bt
+         <|> match "BW" Bw
+         <|> match "BY" By
+         <|> match "BZ" Bz
+         <|> match "CA" Ca
+         <|> match "CC" Cc
+         <|> match "CD" Cd
+         <|> match "CF" Cf
+         <|> match "CG" Cg
+         <|> match "CH" Ch
+         <|> match "CI" Ci
+         <|> match "CK" Ck
+         <|> match "CL" Cl
+         <|> match "CM" Cm
+         <|> match "CN" Cn
+         <|> match "CO" Co
+         <|> match "CR" Cr
+         <|> match "CU" Cu
+         <|> match "CV" Cv
+         <|> match "CX" Cx
+         <|> match "CY" Cy
+         <|> match "CZ" Cz
+         <|> match "DE" De
+         <|> match "DJ" Dj
+         <|> match "DK" Dk
+         <|> match "DM" Dm
+         <|> match "DO" Do'
+         <|> match "DZ" Dz
+         <|> match "EC" Ec
+         <|> match "EE" Ee
+         <|> match "EG" Eg
+         <|> match "ER" Er
+         <|> match "ES" Es
+         <|> match "ET" Et
+         <|> match "FI" Fi
+         <|> match "FJ" Fj
+         <|> match "FK" Fk
+         <|> match "FM" Fm
+         <|> match "FO" Fo
+         <|> match "FR" Fr
+         <|> match "GA" Ga
+         <|> match "GB" Gb
+         <|> match "GD" Gd
+         <|> match "GE" Ge
+         <|> match "GH" Gh
+         <|> match "GI" Gi
+         <|> match "GL" Gl
+         <|> match "GM" Gm
+         <|> match "GN" Gn
+         <|> match "GQ" Gq
+         <|> match "GR" Gr
+         <|> match "GT" Gt
+         <|> match "GU" Gu
+         <|> match "GW" Gw
+         <|> match "GY" Gy
+         <|> match "HK" Hk
+         <|> match "HN" Hn
+         <|> match "HR" Hr
+         <|> match "HT" Ht
+         <|> match "HU" Hu
+         <|> match "ID" Id
+         <|> match "IE" Ie
+         <|> match "IL" Il
+         <|> match "IM" Im
+         <|> match "IN" In'
+         <|> match "IQ" Iq
+         <|> match "IR" Ir
+         <|> match "IS" Is
+         <|> match "IT" It
+         <|> match "JM" Jm
+         <|> match "JO" Jo
+         <|> match "JP" Jp
+         <|> match "KE" Ke
+         <|> match "KG" Kg
+         <|> match "KH" Kh
+         <|> match "KI" Ki
+         <|> match "KM" Km
+         <|> match "KN" Kn
+         <|> match "KP" Kp
+         <|> match "KR" Kr
+         <|> match "KW" Kw
+         <|> match "KY" Ky
+         <|> match "KZ" Kz
+         <|> match "LA" La
+         <|> match "LB" Lb
+         <|> match "LC" Lc
+         <|> match "LI" Li
+         <|> match "LK" Lk
+         <|> match "LR" Lr
+         <|> match "LS" Ls
+         <|> match "LT" Lt
+         <|> match "LU" Lu
+         <|> match "LV" Lv
+         <|> match "LY" Ly
+         <|> match "MA" Ma
+         <|> match "MC" Mc
+         <|> match "MD" Md
+         <|> match "ME" Me
+         <|> match "MF" Mf
+         <|> match "MG" Mg
+         <|> match "MH" Mh
+         <|> match "MK" Mk
+         <|> match "ML" Ml
+         <|> match "MM" Mm
+         <|> match "MN" Mn
+         <|> match "MO" Mo
+         <|> match "MP" Mp
+         <|> match "MR" Mr
+         <|> match "MS" Ms
+         <|> match "MT" Mt
+         <|> match "MU" Mu
+         <|> match "MV" Mv
+         <|> match "MW" Mw
+         <|> match "MX" Mx
+         <|> match "MY" My
+         <|> match "MZ" Mz
+         <|> match "NA" Na
+         <|> match "NC" Nc
+         <|> match "NE" Ne
+         <|> match "NG" Ng
+         <|> match "NI" Ni
+         <|> match "NL" Nl
+         <|> match "NO" No
+         <|> match "NP" Np
+         <|> match "NR" Nr
+         <|> match "NU" Nu
+         <|> match "NZ" Nz
+         <|> match "OM" Om
+         <|> match "PA" Pa
+         <|> match "PE" Pe
+         <|> match "PF" Pf
+         <|> match "PG" Pg
+         <|> match "PH" Ph
+         <|> match "PK" Pk
+         <|> match "PL" Pl
+         <|> match "PM" Pm
+         <|> match "PN" Pn
+         <|> match "PR" Pr
+         <|> match "PT" Pt
+         <|> match "PW" Pw
+         <|> match "PY" Py
+         <|> match "QA" Qa
+         <|> match "RO" Ro
+         <|> match "RS" Rs
+         <|> match "RU" Ru
+         <|> match "RW" Rw
+         <|> match "SA" Sa
+         <|> match "SB" Sb
+         <|> match "SC" Sc
+         <|> match "SD" Sd
+         <|> match "SE" Se
+         <|> match "SG" Sg
+         <|> match "SH" Sh
+         <|> match "SI" Si
+         <|> match "SK" Sk
+         <|> match "SL" Sl
+         <|> match "SM" Sm
+         <|> match "SN" Sn
+         <|> match "SO" So
+         <|> match "SR" Sr
+         <|> match "ST" St
+         <|> match "SV" Sv
+         <|> match "SY" Sy
+         <|> match "SZ" Sz
+         <|> match "TC" Tc
+         <|> match "TD" Td
+         <|> match "TG" Tg
+         <|> match "TH" Th
+         <|> match "TJ" Tj
+         <|> match "TK" Tk
+         <|> match "TL" Tl
+         <|> match "TM" Tm
+         <|> match "TN" Tn
+         <|> match "TO" To
+         <|> match "TR" Tr
+         <|> match "TT" Tt
+         <|> match "TV" Tv
+         <|> match "TW" Tw
+         <|> match "TZ" Tz
+         <|> match "UA" Ua
+         <|> match "UG" Ug
+         <|> match "US" Us
+         <|> match "UY" Uy
+         <|> match "UZ" Uz
+         <|> match "VA" Va
+         <|> match "VC" Vc
+         <|> match "VE" Ve
+         <|> match "VG" Vg
+         <|> match "VI" Vi
+         <|> match "VN" Vn
+         <|> match "VU" Vu
+         <|> match "WF" Wf
+         <|> match "WS" Ws
+         <|> match "YE" Ye
+         <|> match "YT" Yt
+         <|> match "ZA" Za
+         <|> match "ZM" Zm
+         <|> match "ZW" 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"
+        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 FromJSON CountryCode where
+    parseJSON = parseJSONText "CountryCode"
+
+instance ToJSON CountryCode where
+    toJSON = toJSONText
+
+data ExtraParam = ExtraParam
+    { _epName  :: Text
+    , _epValue :: Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'ExtraParam' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'epName' @::@ 'Text'
+--
+-- * 'epValue' @::@ 'Text'
+--
+extraParam :: Text -- ^ '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 |
+-- 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 Text
+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, Show, Generic, Enum)
+
+instance Hashable ContactType
+
+instance FromText ContactType where
+    parser = match "ASSOCIATION" CTAssociation
+         <|> match "COMPANY"     CTCompany
+         <|> match "PERSON"      CTPerson
+         <|> match "PUBLIC_BODY" CTPublicBody
+         <|> match "RESELLER"    CTReseller
+
+instance ToText ContactType where
+    toText = \case
+        CTAssociation -> "ASSOCIATION"
+        CTCompany     -> "COMPANY"
+        CTPerson      -> "PERSON"
+        CTPublicBody  -> "PUBLIC_BODY"
+        CTReseller    -> "RESELLER"
+
+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 Text
+    , _cdCountryCode      :: Maybe Text
+    , _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, Show)
+
+-- | 'ContactDetail' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cdAddressLine1' @::@ 'Maybe' 'Text'
+--
+-- * 'cdAddressLine2' @::@ 'Maybe' 'Text'
+--
+-- * 'cdCity' @::@ 'Maybe' 'Text'
+--
+-- * 'cdContactType' @::@ 'Maybe' 'Text'
+--
+-- * 'cdCountryCode' @::@ 'Maybe' 'Text'
+--
+-- * '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 Text)
+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 Text)
+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&gt;]". 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"
+        <*> 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        :: Text
+    , _osSubmittedDate :: RFC822
+    , _osType          :: Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'OperationSummary' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'osOperationId' @::@ 'Text'
+--
+-- * 'osStatus' @::@ 'Text'
+--
+-- * 'osSubmittedDate' @::@ 'UTCTime'
+--
+-- * 'osType' @::@ 'Text'
+--
+operationSummary :: Text -- ^ 'osOperationId'
+                 -> Text -- ^ 'osStatus'
+                 -> Text -- ^ '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 Text
+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 Text
+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
+        ]
diff --git a/gen/Network/AWS/Route53Domains/UpdateDomainContact.hs b/gen/Network/AWS/Route53Domains/UpdateDomainContact.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53Domains/UpdateDomainContact.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- 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/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | 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.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-UpdateDomainContact.html>
+module Network.AWS.Route53Domains.UpdateDomainContact
+    (
+    -- * Request
+      UpdateDomainContact
+    -- ** Request constructor
+    , updateDomainContact
+    -- ** Request lenses
+    , udcAdminContact
+    , udcDomainName
+    , udcRegistrantContact
+    , udcTechContact
+
+    -- * Response
+    , UpdateDomainContactResponse
+    -- ** Response constructor
+    , updateDomainContactResponse
+    -- ** Response lenses
+    , udcrOperationId
+    ) where
+
+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, Show)
+
+-- | 'UpdateDomainContact' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'udcAdminContact' @::@ 'Maybe' 'ContactDetail'
+--
+-- * 'udcDomainName' @::@ 'Text'
+--
+-- * 'udcRegistrantContact' @::@ 'Maybe' 'ContactDetail'
+--
+-- * 'udcTechContact' @::@ 'Maybe' 'ContactDetail'
+--
+updateDomainContact :: Text -- ^ 'udcDomainName'
+                    -> UpdateDomainContact
+updateDomainContact p1 = UpdateDomainContact
+    { _udcDomainName        = p1
+    , _udcAdminContact      = Nothing
+    , _udcRegistrantContact = Nothing
+    , _udcTechContact       = Nothing
+    }
+
+-- | Provides detailed contact information. Type: Complex 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 })
+
+-- | 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.
+-- Required: Yes.
+udcDomainName :: Lens' UpdateDomainContact Text
+udcDomainName = lens _udcDomainName (\s a -> s { _udcDomainName = a })
+
+-- | Provides detailed contact information. Type: Complex 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 })
+
+-- | Provides detailed contact information. Type: Complex Children: FirstName,
+-- MiddleName, LastName, ContactType, OrganizationName, AddressLine1,
+-- AddressLine2, City, State, CountryCode, ZipCode, PhoneNumber, Email, Fax,
+-- ExtraParams Required: Yes.
+udcTechContact :: Lens' UpdateDomainContact (Maybe ContactDetail)
+udcTechContact = lens _udcTechContact (\s a -> s { _udcTechContact = a })
+
+newtype UpdateDomainContactResponse = UpdateDomainContactResponse
+    { _udcrOperationId :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'UpdateDomainContactResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'udcrOperationId' @::@ 'Text'
+--
+updateDomainContactResponse :: Text -- ^ 'udcrOperationId'
+                            -> UpdateDomainContactResponse
+updateDomainContactResponse p1 = UpdateDomainContactResponse
+    { _udcrOperationId = p1
+    }
+
+-- | 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"
diff --git a/gen/Network/AWS/Route53Domains/UpdateDomainContactPrivacy.hs b/gen/Network/AWS/Route53Domains/UpdateDomainContactPrivacy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53Domains/UpdateDomainContactPrivacy.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- 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/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | 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 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.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-UpdateDomainContactPrivacy.html>
+module Network.AWS.Route53Domains.UpdateDomainContactPrivacy
+    (
+    -- * Request
+      UpdateDomainContactPrivacy
+    -- ** Request constructor
+    , updateDomainContactPrivacy
+    -- ** Request lenses
+    , udcpAdminPrivacy
+    , udcpDomainName
+    , udcpRegistrantPrivacy
+    , udcpTechPrivacy
+
+    -- * Response
+    , UpdateDomainContactPrivacyResponse
+    -- ** Response constructor
+    , updateDomainContactPrivacyResponse
+    -- ** Response lenses
+    , udcprOperationId
+    ) where
+
+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, Show)
+
+-- | 'UpdateDomainContactPrivacy' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'udcpAdminPrivacy' @::@ 'Maybe' 'Bool'
+--
+-- * 'udcpDomainName' @::@ 'Text'
+--
+-- * 'udcpRegistrantPrivacy' @::@ 'Maybe' 'Bool'
+--
+-- * 'udcpTechPrivacy' @::@ 'Maybe' 'Bool'
+--
+updateDomainContactPrivacy :: Text -- ^ 'udcpDomainName'
+                           -> UpdateDomainContactPrivacy
+updateDomainContactPrivacy p1 = UpdateDomainContactPrivacy
+    { _udcpDomainName        = p1
+    , _udcpAdminPrivacy      = Nothing
+    , _udcpRegistrantPrivacy = Nothing
+    , _udcpTechPrivacy       = Nothing
+    }
+
+-- | 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: None Valid values:
+-- true | false Required: No.
+udcpAdminPrivacy :: Lens' UpdateDomainContactPrivacy (Maybe Bool)
+udcpAdminPrivacy = lens _udcpAdminPrivacy (\s a -> s { _udcpAdminPrivacy = 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.
+-- Required: Yes.
+udcpDomainName :: Lens' UpdateDomainContactPrivacy Text
+udcpDomainName = lens _udcpDomainName (\s a -> s { _udcpDomainName = 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: None Valid values:
+-- true | false 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. Type: Boolean Default: None Valid values:
+-- true | false Required: No.
+udcpTechPrivacy :: Lens' UpdateDomainContactPrivacy (Maybe Bool)
+udcpTechPrivacy = lens _udcpTechPrivacy (\s a -> s { _udcpTechPrivacy = a })
+
+newtype UpdateDomainContactPrivacyResponse = UpdateDomainContactPrivacyResponse
+    { _udcprOperationId :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'UpdateDomainContactPrivacyResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'udcprOperationId' @::@ 'Text'
+--
+updateDomainContactPrivacyResponse :: Text -- ^ 'udcprOperationId'
+                                   -> UpdateDomainContactPrivacyResponse
+updateDomainContactPrivacyResponse p1 = UpdateDomainContactPrivacyResponse
+    { _udcprOperationId = p1
+    }
+
+-- | 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"
diff --git a/gen/Network/AWS/Route53Domains/UpdateDomainNameservers.hs b/gen/Network/AWS/Route53Domains/UpdateDomainNameservers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53Domains/UpdateDomainNameservers.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- 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/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | 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.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/api-UpdateDomainNameservers.html>
+module Network.AWS.Route53Domains.UpdateDomainNameservers
+    (
+    -- * Request
+      UpdateDomainNameservers
+    -- ** Request constructor
+    , updateDomainNameservers
+    -- ** Request lenses
+    , udnDomainName
+    , udnNameservers
+
+    -- * Response
+    , UpdateDomainNameserversResponse
+    -- ** Response constructor
+    , updateDomainNameserversResponse
+    -- ** Response lenses
+    , udnrOperationId
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.JSON
+import Network.AWS.Route53Domains.Types
+import qualified GHC.Exts
+
+data UpdateDomainNameservers = UpdateDomainNameservers
+    { _udnDomainName  :: Text
+    , _udnNameservers :: List "Nameservers" Nameserver
+    } deriving (Eq, Show)
+
+-- | 'UpdateDomainNameservers' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'udnDomainName' @::@ 'Text'
+--
+-- * 'udnNameservers' @::@ ['Nameserver']
+--
+updateDomainNameservers :: Text -- ^ 'udnDomainName'
+                        -> UpdateDomainNameservers
+updateDomainNameservers p1 = UpdateDomainNameservers
+    { _udnDomainName  = p1
+    , _udnNameservers = mempty
+    }
+
+-- | 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.
+-- Required: Yes.
+udnDomainName :: Lens' UpdateDomainNameservers Text
+udnDomainName = lens _udnDomainName (\s a -> s { _udnDomainName = a })
+
+-- | A list of new name servers for the domain. Type: Complex Children: Name,
+-- GlueIps Required: Yes.
+udnNameservers :: Lens' UpdateDomainNameservers [Nameserver]
+udnNameservers = lens _udnNameservers (\s a -> s { _udnNameservers = a }) . _List
+
+newtype UpdateDomainNameserversResponse = UpdateDomainNameserversResponse
+    { _udnrOperationId :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'UpdateDomainNameserversResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'udnrOperationId' @::@ 'Text'
+--
+updateDomainNameserversResponse :: Text -- ^ 'udnrOperationId'
+                                -> UpdateDomainNameserversResponse
+updateDomainNameserversResponse p1 = UpdateDomainNameserversResponse
+    { _udnrOperationId = p1
+    }
+
+-- | 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
+        , "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"
