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 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
+
+Amazon Route 53 is a scalable Domain Name System (DNS) web service. It provides secure and reliable routing to your infrastructure that uses Amazon Web Services (AWS) products, such as Amazon Elastic Compute Cloud (Amazon EC2), Elastic Load Balancing, or Amazon Simple Storage Service (Amazon S3). You can also use Amazon Route 53 to route users to your infrastructure outside of AWS.
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-route53)
+and [AWS API Reference](http://docs.aws.amazon.com/Route53/latest/APIReference/Welcome.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` 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.cabal b/amazonka-route53.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-route53.cabal
@@ -0,0 +1,73 @@
+name:                  amazonka-route53
+version:               0.0.0
+synopsis:              Amazon Route 53 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:
+    Amazon Route 53 is a scalable Domain Name System (DNS) web service. It
+    provides secure and reliable routing to your infrastructure that uses
+    Amazon Web Services (AWS) products, such as Amazon Elastic Compute
+    Cloud (Amazon EC2), Elastic Load Balancing, or Amazon Simple Storage
+    Service (Amazon S3). You can also use Amazon Route 53 to route users to
+    your infrastructure outside of AWS.
+    .
+    /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/Welcome.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.Route53
+        , Network.AWS.Route53.AssociateVPCWithHostedZone
+        , Network.AWS.Route53.ChangeResourceRecordSets
+        , Network.AWS.Route53.ChangeTagsForResource
+        , Network.AWS.Route53.CreateHealthCheck
+        , Network.AWS.Route53.CreateHostedZone
+        , Network.AWS.Route53.CreateReusableDelegationSet
+        , Network.AWS.Route53.DeleteHealthCheck
+        , Network.AWS.Route53.DeleteHostedZone
+        , Network.AWS.Route53.DeleteReusableDelegationSet
+        , Network.AWS.Route53.DisassociateVPCFromHostedZone
+        , Network.AWS.Route53.GetChange
+        , Network.AWS.Route53.GetCheckerIpRanges
+        , Network.AWS.Route53.GetGeoLocation
+        , Network.AWS.Route53.GetHealthCheck
+        , Network.AWS.Route53.GetHealthCheckCount
+        , Network.AWS.Route53.GetHealthCheckLastFailureReason
+        , Network.AWS.Route53.GetHealthCheckStatus
+        , Network.AWS.Route53.GetHostedZone
+        , Network.AWS.Route53.GetReusableDelegationSet
+        , Network.AWS.Route53.ListGeoLocations
+        , Network.AWS.Route53.ListHealthChecks
+        , Network.AWS.Route53.ListHostedZones
+        , Network.AWS.Route53.ListResourceRecordSets
+        , Network.AWS.Route53.ListReusableDelegationSets
+        , Network.AWS.Route53.ListTagsForResource
+        , Network.AWS.Route53.ListTagsForResources
+        , Network.AWS.Route53.Types
+        , Network.AWS.Route53.UpdateHealthCheck
+
+    other-modules:
+
+    build-depends:
+          amazonka-core
+        , base          >= 4.7 && < 5
diff --git a/gen/Network/AWS/Route53.hs b/gen/Network/AWS/Route53.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53.hs
@@ -0,0 +1,75 @@
+-- Module      : Network.AWS.Route53
+-- 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)
+
+-- | Amazon Route 53 is a scalable Domain Name System (DNS) web service. It
+-- provides secure and reliable routing to your infrastructure that uses
+-- Amazon Web Services (AWS) products, such as Amazon Elastic Compute Cloud
+-- (Amazon EC2), Elastic Load Balancing, or Amazon Simple Storage Service
+-- (Amazon S3). You can also use Amazon Route 53 to route users to your
+-- infrastructure outside of AWS.
+module Network.AWS.Route53
+    ( module Network.AWS.Route53.AssociateVPCWithHostedZone
+    , module Network.AWS.Route53.ChangeResourceRecordSets
+    , module Network.AWS.Route53.ChangeTagsForResource
+    , module Network.AWS.Route53.CreateHealthCheck
+    , module Network.AWS.Route53.CreateHostedZone
+    , module Network.AWS.Route53.CreateReusableDelegationSet
+    , module Network.AWS.Route53.DeleteHealthCheck
+    , module Network.AWS.Route53.DeleteHostedZone
+    , module Network.AWS.Route53.DeleteReusableDelegationSet
+    , module Network.AWS.Route53.DisassociateVPCFromHostedZone
+    , module Network.AWS.Route53.GetChange
+    , module Network.AWS.Route53.GetCheckerIpRanges
+    , module Network.AWS.Route53.GetGeoLocation
+    , module Network.AWS.Route53.GetHealthCheck
+    , module Network.AWS.Route53.GetHealthCheckCount
+    , module Network.AWS.Route53.GetHealthCheckLastFailureReason
+    , module Network.AWS.Route53.GetHealthCheckStatus
+    , module Network.AWS.Route53.GetHostedZone
+    , module Network.AWS.Route53.GetReusableDelegationSet
+    , module Network.AWS.Route53.ListGeoLocations
+    , module Network.AWS.Route53.ListHealthChecks
+    , module Network.AWS.Route53.ListHostedZones
+    , module Network.AWS.Route53.ListResourceRecordSets
+    , module Network.AWS.Route53.ListReusableDelegationSets
+    , module Network.AWS.Route53.ListTagsForResource
+    , module Network.AWS.Route53.ListTagsForResources
+    , module Network.AWS.Route53.Types
+    , module Network.AWS.Route53.UpdateHealthCheck
+    ) where
+
+import Network.AWS.Route53.AssociateVPCWithHostedZone
+import Network.AWS.Route53.ChangeResourceRecordSets
+import Network.AWS.Route53.ChangeTagsForResource
+import Network.AWS.Route53.CreateHealthCheck
+import Network.AWS.Route53.CreateHostedZone
+import Network.AWS.Route53.CreateReusableDelegationSet
+import Network.AWS.Route53.DeleteHealthCheck
+import Network.AWS.Route53.DeleteHostedZone
+import Network.AWS.Route53.DeleteReusableDelegationSet
+import Network.AWS.Route53.DisassociateVPCFromHostedZone
+import Network.AWS.Route53.GetChange
+import Network.AWS.Route53.GetCheckerIpRanges
+import Network.AWS.Route53.GetGeoLocation
+import Network.AWS.Route53.GetHealthCheck
+import Network.AWS.Route53.GetHealthCheckCount
+import Network.AWS.Route53.GetHealthCheckLastFailureReason
+import Network.AWS.Route53.GetHealthCheckStatus
+import Network.AWS.Route53.GetHostedZone
+import Network.AWS.Route53.GetReusableDelegationSet
+import Network.AWS.Route53.ListGeoLocations
+import Network.AWS.Route53.ListHealthChecks
+import Network.AWS.Route53.ListHostedZones
+import Network.AWS.Route53.ListResourceRecordSets
+import Network.AWS.Route53.ListReusableDelegationSets
+import Network.AWS.Route53.ListTagsForResource
+import Network.AWS.Route53.ListTagsForResources
+import Network.AWS.Route53.Types
+import Network.AWS.Route53.UpdateHealthCheck
diff --git a/gen/Network/AWS/Route53/AssociateVPCWithHostedZone.hs b/gen/Network/AWS/Route53/AssociateVPCWithHostedZone.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/AssociateVPCWithHostedZone.hs
@@ -0,0 +1,149 @@
+{-# 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.Route53.AssociateVPCWithHostedZone
+-- 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 action associates a VPC with an hosted zone. To associate a VPC with
+-- an hosted zone, send a POST request to the 2013-04-01/hostedzone/hosted
+-- zone ID/associatevpc resource. The request body must include an XML
+-- document with a AssociateVPCWithHostedZoneRequest element. The response
+-- returns the AssociateVPCWithHostedZoneResponse element that contains
+-- ChangeInfo for you to track the progress of the
+-- AssociateVPCWithHostedZoneRequest you made. See GetChange operation for how
+-- to track the progress of your change.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_AssociateVPCWithHostedZone.html>
+module Network.AWS.Route53.AssociateVPCWithHostedZone
+    (
+    -- * Request
+      AssociateVPCWithHostedZone
+    -- ** Request constructor
+    , associateVPCWithHostedZone
+    -- ** Request lenses
+    , avpcwhzComment
+    , avpcwhzHostedZoneId
+    , avpcwhzVPC
+
+    -- * Response
+    , AssociateVPCWithHostedZoneResponse
+    -- ** Response constructor
+    , associateVPCWithHostedZoneResponse
+    -- ** Response lenses
+    , avpcwhzrChangeInfo
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+data AssociateVPCWithHostedZone = AssociateVPCWithHostedZone
+    { _avpcwhzComment      :: Maybe Text
+    , _avpcwhzHostedZoneId :: Text
+    , _avpcwhzVPC          :: VPC
+    } deriving (Eq, Show)
+
+-- | 'AssociateVPCWithHostedZone' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'avpcwhzComment' @::@ 'Maybe' 'Text'
+--
+-- * 'avpcwhzHostedZoneId' @::@ 'Text'
+--
+-- * 'avpcwhzVPC' @::@ 'VPC'
+--
+associateVPCWithHostedZone :: Text -- ^ 'avpcwhzHostedZoneId'
+                           -> VPC -- ^ 'avpcwhzVPC'
+                           -> AssociateVPCWithHostedZone
+associateVPCWithHostedZone p1 p2 = AssociateVPCWithHostedZone
+    { _avpcwhzHostedZoneId = p1
+    , _avpcwhzVPC          = p2
+    , _avpcwhzComment      = Nothing
+    }
+
+-- | Optional: Any comments you want to include about a
+-- AssociateVPCWithHostedZoneRequest.
+avpcwhzComment :: Lens' AssociateVPCWithHostedZone (Maybe Text)
+avpcwhzComment = lens _avpcwhzComment (\s a -> s { _avpcwhzComment = a })
+
+-- | The ID of the hosted zone you want to associate your VPC with. Note that
+-- you cannot associate a VPC with a hosted zone that doesn't have an
+-- existing VPC association.
+avpcwhzHostedZoneId :: Lens' AssociateVPCWithHostedZone Text
+avpcwhzHostedZoneId =
+    lens _avpcwhzHostedZoneId (\s a -> s { _avpcwhzHostedZoneId = a })
+
+-- | The VPC that you want your hosted zone to be associated with.
+avpcwhzVPC :: Lens' AssociateVPCWithHostedZone VPC
+avpcwhzVPC = lens _avpcwhzVPC (\s a -> s { _avpcwhzVPC = a })
+
+newtype AssociateVPCWithHostedZoneResponse = AssociateVPCWithHostedZoneResponse
+    { _avpcwhzrChangeInfo :: ChangeInfo
+    } deriving (Eq, Show)
+
+-- | 'AssociateVPCWithHostedZoneResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'avpcwhzrChangeInfo' @::@ 'ChangeInfo'
+--
+associateVPCWithHostedZoneResponse :: ChangeInfo -- ^ 'avpcwhzrChangeInfo'
+                                   -> AssociateVPCWithHostedZoneResponse
+associateVPCWithHostedZoneResponse p1 = AssociateVPCWithHostedZoneResponse
+    { _avpcwhzrChangeInfo = p1
+    }
+
+-- | A complex type that contains the ID, the status, and the date and time of
+-- your AssociateVPCWithHostedZoneRequest.
+avpcwhzrChangeInfo :: Lens' AssociateVPCWithHostedZoneResponse ChangeInfo
+avpcwhzrChangeInfo =
+    lens _avpcwhzrChangeInfo (\s a -> s { _avpcwhzrChangeInfo = a })
+
+instance ToPath AssociateVPCWithHostedZone where
+    toPath AssociateVPCWithHostedZone{..} = mconcat
+        [ "/2013-04-01/hostedzone/"
+        , toText _avpcwhzHostedZoneId
+        , "/associatevpc"
+        ]
+
+instance ToQuery AssociateVPCWithHostedZone where
+    toQuery = const mempty
+
+instance ToHeaders AssociateVPCWithHostedZone
+
+instance ToXMLRoot AssociateVPCWithHostedZone where
+    toXMLRoot AssociateVPCWithHostedZone{..} = namespaced ns "AssociateVPCWithHostedZone"
+        [ "VPC"     =@ _avpcwhzVPC
+        , "Comment" =@ _avpcwhzComment
+        ]
+
+instance ToXML AssociateVPCWithHostedZone
+
+instance AWSRequest AssociateVPCWithHostedZone where
+    type Sv AssociateVPCWithHostedZone = Route53
+    type Rs AssociateVPCWithHostedZone = AssociateVPCWithHostedZoneResponse
+
+    request  = post
+    response = xmlResponse
+
+instance FromXML AssociateVPCWithHostedZoneResponse where
+    parseXML x = AssociateVPCWithHostedZoneResponse
+        <$> x .@  "ChangeInfo"
diff --git a/gen/Network/AWS/Route53/ChangeResourceRecordSets.hs b/gen/Network/AWS/Route53/ChangeResourceRecordSets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/ChangeResourceRecordSets.hs
@@ -0,0 +1,148 @@
+{-# 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.Route53.ChangeResourceRecordSets
+-- 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)
+
+-- | Use this action to create or change your authoritative DNS information. To
+-- use this action, send a POST request to the 2013-04-01/hostedzone/hosted
+-- Zone ID/rrset resource. The request body must include an XML document with
+-- a ChangeResourceRecordSetsRequest element. Changes are a list of change
+-- items and are considered transactional. For more information on
+-- transactional changes, also known as change batches, see Creating,
+-- Changing, and Deleting Resource Record Sets Using the Route 53 API in the
+-- Amazon Route 53 Developer Guide. Due to the nature of transactional
+-- changes, you cannot delete the same resource record set more than once in a
+-- single change batch. If you attempt to delete the same change batch more
+-- than once, Route 53 returns an InvalidChangeBatch error. In response to a
+-- ChangeResourceRecordSets request, your DNS data is changed on all Route 53
+-- DNS servers. Initially, the status of a change is PENDING. This means the
+-- change has not yet propagated to all the authoritative Route 53 DNS
+-- servers. When the change is propagated to all hosts, the change returns a
+-- status of INSYNC. Note the following limitations on a
+-- ChangeResourceRecordSets request: - A request cannot contain more than 100
+-- Change elements. - A request cannot contain more than 1000 ResourceRecord
+-- elements. The sum of the number of characters (including spaces) in all
+-- Value elements in a request cannot exceed 32,000 characters.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ChangeResourceRecordSets.html>
+module Network.AWS.Route53.ChangeResourceRecordSets
+    (
+    -- * Request
+      ChangeResourceRecordSets
+    -- ** Request constructor
+    , changeResourceRecordSets
+    -- ** Request lenses
+    , crrsChangeBatch
+    , crrsHostedZoneId
+
+    -- * Response
+    , ChangeResourceRecordSetsResponse
+    -- ** Response constructor
+    , changeResourceRecordSetsResponse
+    -- ** Response lenses
+    , crrsrChangeInfo
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+data ChangeResourceRecordSets = ChangeResourceRecordSets
+    { _crrsChangeBatch  :: ChangeBatch
+    , _crrsHostedZoneId :: Text
+    } deriving (Eq, Show)
+
+-- | 'ChangeResourceRecordSets' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'crrsChangeBatch' @::@ 'ChangeBatch'
+--
+-- * 'crrsHostedZoneId' @::@ 'Text'
+--
+changeResourceRecordSets :: Text -- ^ 'crrsHostedZoneId'
+                         -> ChangeBatch -- ^ 'crrsChangeBatch'
+                         -> ChangeResourceRecordSets
+changeResourceRecordSets p1 p2 = ChangeResourceRecordSets
+    { _crrsHostedZoneId = p1
+    , _crrsChangeBatch  = p2
+    }
+
+-- | A complex type that contains an optional comment and the Changes element.
+crrsChangeBatch :: Lens' ChangeResourceRecordSets ChangeBatch
+crrsChangeBatch = lens _crrsChangeBatch (\s a -> s { _crrsChangeBatch = a })
+
+-- | The ID of the hosted zone that contains the resource record sets that you
+-- want to change.
+crrsHostedZoneId :: Lens' ChangeResourceRecordSets Text
+crrsHostedZoneId = lens _crrsHostedZoneId (\s a -> s { _crrsHostedZoneId = a })
+
+newtype ChangeResourceRecordSetsResponse = ChangeResourceRecordSetsResponse
+    { _crrsrChangeInfo :: ChangeInfo
+    } deriving (Eq, Show)
+
+-- | 'ChangeResourceRecordSetsResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'crrsrChangeInfo' @::@ 'ChangeInfo'
+--
+changeResourceRecordSetsResponse :: ChangeInfo -- ^ 'crrsrChangeInfo'
+                                 -> ChangeResourceRecordSetsResponse
+changeResourceRecordSetsResponse p1 = ChangeResourceRecordSetsResponse
+    { _crrsrChangeInfo = p1
+    }
+
+-- | A complex type that contains information about changes made to your
+-- hosted zone. This element contains an ID that you use when performing a
+-- GetChange action to get detailed information about the change.
+crrsrChangeInfo :: Lens' ChangeResourceRecordSetsResponse ChangeInfo
+crrsrChangeInfo = lens _crrsrChangeInfo (\s a -> s { _crrsrChangeInfo = a })
+
+instance ToPath ChangeResourceRecordSets where
+    toPath ChangeResourceRecordSets{..} = mconcat
+        [ "/2013-04-01/hostedzone/"
+        , toText _crrsHostedZoneId
+        , "/rrset/"
+        ]
+
+instance ToQuery ChangeResourceRecordSets where
+    toQuery = const mempty
+
+instance ToHeaders ChangeResourceRecordSets
+
+instance ToXMLRoot ChangeResourceRecordSets where
+    toXMLRoot ChangeResourceRecordSets{..} = namespaced ns "ChangeResourceRecordSets"
+        [ "ChangeBatch" =@ _crrsChangeBatch
+        ]
+
+instance ToXML ChangeResourceRecordSets
+
+instance AWSRequest ChangeResourceRecordSets where
+    type Sv ChangeResourceRecordSets = Route53
+    type Rs ChangeResourceRecordSets = ChangeResourceRecordSetsResponse
+
+    request  = post
+    response = xmlResponse
+
+instance FromXML ChangeResourceRecordSetsResponse where
+    parseXML x = ChangeResourceRecordSetsResponse
+        <$> x .@  "ChangeInfo"
diff --git a/gen/Network/AWS/Route53/ChangeTagsForResource.hs b/gen/Network/AWS/Route53/ChangeTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/ChangeTagsForResource.hs
@@ -0,0 +1,134 @@
+{-# 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.Route53.ChangeTagsForResource
+-- 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)
+
+-- | 
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ChangeTagsForResource.html>
+module Network.AWS.Route53.ChangeTagsForResource
+    (
+    -- * Request
+      ChangeTagsForResource
+    -- ** Request constructor
+    , changeTagsForResource
+    -- ** Request lenses
+    , ctfrAddTags
+    , ctfrRemoveTagKeys
+    , ctfrResourceId
+    , ctfrResourceType
+
+    -- * Response
+    , ChangeTagsForResourceResponse
+    -- ** Response constructor
+    , changeTagsForResourceResponse
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+data ChangeTagsForResource = ChangeTagsForResource
+    { _ctfrAddTags       :: List1 "Tag" Tag
+    , _ctfrRemoveTagKeys :: List1 "Key" Text
+    , _ctfrResourceId    :: Text
+    , _ctfrResourceType  :: Text
+    } deriving (Eq, Show)
+
+-- | 'ChangeTagsForResource' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ctfrAddTags' @::@ 'NonEmpty' 'Tag'
+--
+-- * 'ctfrRemoveTagKeys' @::@ 'NonEmpty' 'Text'
+--
+-- * 'ctfrResourceId' @::@ 'Text'
+--
+-- * 'ctfrResourceType' @::@ 'Text'
+--
+changeTagsForResource :: Text -- ^ 'ctfrResourceType'
+                      -> Text -- ^ 'ctfrResourceId'
+                      -> NonEmpty Tag -- ^ 'ctfrAddTags'
+                      -> NonEmpty Text -- ^ 'ctfrRemoveTagKeys'
+                      -> ChangeTagsForResource
+changeTagsForResource p1 p2 p3 p4 = ChangeTagsForResource
+    { _ctfrResourceType  = p1
+    , _ctfrResourceId    = p2
+    , _ctfrAddTags       = withIso _List1 (const id) p3
+    , _ctfrRemoveTagKeys = withIso _List1 (const id) p4
+    }
+
+-- | A complex type that contains a list of Tag elements. Each Tag element
+-- identifies a tag that you want to add or update for the specified
+-- resource.
+ctfrAddTags :: Lens' ChangeTagsForResource (NonEmpty Tag)
+ctfrAddTags = lens _ctfrAddTags (\s a -> s { _ctfrAddTags = a }) . _List1
+
+-- | A list of Tag keys that you want to remove from the specified resource.
+ctfrRemoveTagKeys :: Lens' ChangeTagsForResource (NonEmpty Text)
+ctfrRemoveTagKeys =
+    lens _ctfrRemoveTagKeys (\s a -> s { _ctfrRemoveTagKeys = a })
+        . _List1
+
+-- | The ID of the resource for which you want to add, change, or delete tags.
+ctfrResourceId :: Lens' ChangeTagsForResource Text
+ctfrResourceId = lens _ctfrResourceId (\s a -> s { _ctfrResourceId = a })
+
+-- | The type of the resource. The resource type for health checks is
+-- healthcheck.
+ctfrResourceType :: Lens' ChangeTagsForResource Text
+ctfrResourceType = lens _ctfrResourceType (\s a -> s { _ctfrResourceType = a })
+
+data ChangeTagsForResourceResponse = ChangeTagsForResourceResponse
+    deriving (Eq, Ord, Show, Generic)
+
+-- | 'ChangeTagsForResourceResponse' constructor.
+changeTagsForResourceResponse :: ChangeTagsForResourceResponse
+changeTagsForResourceResponse = ChangeTagsForResourceResponse
+
+instance ToPath ChangeTagsForResource where
+    toPath ChangeTagsForResource{..} = mconcat
+        [ "/2013-04-01/tags/"
+        , toText _ctfrResourceType
+        , "/"
+        , toText _ctfrResourceId
+        ]
+
+instance ToQuery ChangeTagsForResource where
+    toQuery = const mempty
+
+instance ToHeaders ChangeTagsForResource
+
+instance ToXMLRoot ChangeTagsForResource where
+    toXMLRoot ChangeTagsForResource{..} = namespaced ns "ChangeTagsForResource"
+        [ "AddTags"       =@ _ctfrAddTags
+        , "RemoveTagKeys" =@ _ctfrRemoveTagKeys
+        ]
+
+instance ToXML ChangeTagsForResource
+
+instance AWSRequest ChangeTagsForResource where
+    type Sv ChangeTagsForResource = Route53
+    type Rs ChangeTagsForResource = ChangeTagsForResourceResponse
+
+    request  = post
+    response = nullResponse ChangeTagsForResourceResponse
diff --git a/gen/Network/AWS/Route53/CreateHealthCheck.hs b/gen/Network/AWS/Route53/CreateHealthCheck.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/CreateHealthCheck.hs
@@ -0,0 +1,144 @@
+{-# 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.Route53.CreateHealthCheck
+-- 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 action creates a new health check. To create a new health check, send
+-- a POST request to the 2013-04-01/healthcheck resource. The request body
+-- must include an XML document with a CreateHealthCheckRequest element. The
+-- response returns the CreateHealthCheckResponse element that contains
+-- metadata about the health check.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_CreateHealthCheck.html>
+module Network.AWS.Route53.CreateHealthCheck
+    (
+    -- * Request
+      CreateHealthCheck
+    -- ** Request constructor
+    , createHealthCheck
+    -- ** Request lenses
+    , chcCallerReference
+    , chcHealthCheckConfig
+
+    -- * Response
+    , CreateHealthCheckResponse
+    -- ** Response constructor
+    , createHealthCheckResponse
+    -- ** Response lenses
+    , chcrHealthCheck
+    , chcrLocation
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+data CreateHealthCheck = CreateHealthCheck
+    { _chcCallerReference   :: Text
+    , _chcHealthCheckConfig :: HealthCheckConfig
+    } deriving (Eq, Show)
+
+-- | 'CreateHealthCheck' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'chcCallerReference' @::@ 'Text'
+--
+-- * 'chcHealthCheckConfig' @::@ 'HealthCheckConfig'
+--
+createHealthCheck :: Text -- ^ 'chcCallerReference'
+                  -> HealthCheckConfig -- ^ 'chcHealthCheckConfig'
+                  -> CreateHealthCheck
+createHealthCheck p1 p2 = CreateHealthCheck
+    { _chcCallerReference   = p1
+    , _chcHealthCheckConfig = p2
+    }
+
+-- | A unique string that identifies the request and that allows failed
+-- CreateHealthCheck requests to be retried without the risk of executing
+-- the operation twice. You must use a unique CallerReference string every
+-- time you create a health check. CallerReference can be any unique string;
+-- you might choose to use a string that identifies your project. Valid
+-- characters are any Unicode code points that are legal in an XML 1.0
+-- document. The UTF-8 encoding of the value must be less than 128 bytes.
+chcCallerReference :: Lens' CreateHealthCheck Text
+chcCallerReference =
+    lens _chcCallerReference (\s a -> s { _chcCallerReference = a })
+
+-- | A complex type that contains health check configuration.
+chcHealthCheckConfig :: Lens' CreateHealthCheck HealthCheckConfig
+chcHealthCheckConfig =
+    lens _chcHealthCheckConfig (\s a -> s { _chcHealthCheckConfig = a })
+
+data CreateHealthCheckResponse = CreateHealthCheckResponse
+    { _chcrHealthCheck :: HealthCheck
+    , _chcrLocation    :: Text
+    } deriving (Eq, Show)
+
+-- | 'CreateHealthCheckResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'chcrHealthCheck' @::@ 'HealthCheck'
+--
+-- * 'chcrLocation' @::@ 'Text'
+--
+createHealthCheckResponse :: HealthCheck -- ^ 'chcrHealthCheck'
+                          -> Text -- ^ 'chcrLocation'
+                          -> CreateHealthCheckResponse
+createHealthCheckResponse p1 p2 = CreateHealthCheckResponse
+    { _chcrHealthCheck = p1
+    , _chcrLocation    = p2
+    }
+
+-- | A complex type that contains identifying information about the health
+-- check.
+chcrHealthCheck :: Lens' CreateHealthCheckResponse HealthCheck
+chcrHealthCheck = lens _chcrHealthCheck (\s a -> s { _chcrHealthCheck = a })
+
+-- | The unique URL representing the new health check.
+chcrLocation :: Lens' CreateHealthCheckResponse Text
+chcrLocation = lens _chcrLocation (\s a -> s { _chcrLocation = a })
+
+instance ToPath CreateHealthCheck where
+    toPath = const "/2013-04-01/healthcheck"
+
+instance ToQuery CreateHealthCheck where
+    toQuery = const mempty
+
+instance ToHeaders CreateHealthCheck
+
+instance ToXMLRoot CreateHealthCheck where
+    toXMLRoot CreateHealthCheck{..} = namespaced ns "CreateHealthCheck"
+        [ "CallerReference"   =@ _chcCallerReference
+        , "HealthCheckConfig" =@ _chcHealthCheckConfig
+        ]
+
+instance ToXML CreateHealthCheck
+
+instance AWSRequest CreateHealthCheck where
+    type Sv CreateHealthCheck = Route53
+    type Rs CreateHealthCheck = CreateHealthCheckResponse
+
+    request  = post
+    response = xmlHeaderResponse $ \h x -> CreateHealthCheckResponse
+        <$> x .@  "HealthCheck"
+        <*> h ~: "Location"
diff --git a/gen/Network/AWS/Route53/CreateHostedZone.hs b/gen/Network/AWS/Route53/CreateHostedZone.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/CreateHostedZone.hs
@@ -0,0 +1,231 @@
+{-# 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.Route53.CreateHostedZone
+-- 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 action creates a new hosted zone. To create a new hosted zone, send a
+-- POST request to the 2013-04-01/hostedzone resource. The request body must
+-- include an XML document with a CreateHostedZoneRequest element. The
+-- response returns the CreateHostedZoneResponse element that contains
+-- metadata about the hosted zone. Route 53 automatically creates a default
+-- SOA record and four NS records for the zone. The NS records in the hosted
+-- zone are the name servers you give your registrar to delegate your domain
+-- to. For more information about SOA and NS records, see NS and SOA Records
+-- that Route 53 Creates for a Hosted Zone in the Amazon Route 53 Developer
+-- Guide. When you create a zone, its initial status is PENDING. This means
+-- that it is not yet available on all DNS servers. The status of the zone
+-- changes to INSYNC when the NS and SOA records are available on all Route 53
+-- DNS servers. When trying to create a hosted zone using a reusable
+-- delegation set, you could specify an optional DelegationSetId, and Route53
+-- would assign those 4 NS records for the zone, instead of alloting a new
+-- one.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_CreateHostedZone.html>
+module Network.AWS.Route53.CreateHostedZone
+    (
+    -- * Request
+      CreateHostedZone
+    -- ** Request constructor
+    , createHostedZone
+    -- ** Request lenses
+    , chzCallerReference
+    , chzDelegationSetId
+    , chzHostedZoneConfig
+    , chzName
+    , chzVPC
+
+    -- * Response
+    , CreateHostedZoneResponse
+    -- ** Response constructor
+    , createHostedZoneResponse
+    -- ** Response lenses
+    , chzrChangeInfo
+    , chzrDelegationSet
+    , chzrHostedZone
+    , chzrLocation
+    , chzrVPC
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+data CreateHostedZone = CreateHostedZone
+    { _chzCallerReference  :: Text
+    , _chzDelegationSetId  :: Maybe Text
+    , _chzHostedZoneConfig :: Maybe HostedZoneConfig
+    , _chzName             :: Text
+    , _chzVPC              :: Maybe VPC
+    } deriving (Eq, Show)
+
+-- | 'CreateHostedZone' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'chzCallerReference' @::@ 'Text'
+--
+-- * 'chzDelegationSetId' @::@ 'Maybe' 'Text'
+--
+-- * 'chzHostedZoneConfig' @::@ 'Maybe' 'HostedZoneConfig'
+--
+-- * 'chzName' @::@ 'Text'
+--
+-- * 'chzVPC' @::@ 'Maybe' 'VPC'
+--
+createHostedZone :: Text -- ^ 'chzName'
+                 -> Text -- ^ 'chzCallerReference'
+                 -> CreateHostedZone
+createHostedZone p1 p2 = CreateHostedZone
+    { _chzName             = p1
+    , _chzCallerReference  = p2
+    , _chzVPC              = Nothing
+    , _chzHostedZoneConfig = Nothing
+    , _chzDelegationSetId  = Nothing
+    }
+
+-- | A unique string that identifies the request and that allows failed
+-- CreateHostedZone requests to be retried without the risk of executing the
+-- operation twice. You must use a unique CallerReference string every time
+-- you create a hosted zone. CallerReference can be any unique string; you
+-- might choose to use a string that identifies your project, such as
+-- DNSMigration_01. Valid characters are any Unicode code points that are
+-- legal in an XML 1.0 document. The UTF-8 encoding of the value must be
+-- less than 128 bytes.
+chzCallerReference :: Lens' CreateHostedZone Text
+chzCallerReference =
+    lens _chzCallerReference (\s a -> s { _chzCallerReference = a })
+
+-- | The delegation set id of the reusable delgation set whose NS records you
+-- want to assign to the new hosted zone.
+chzDelegationSetId :: Lens' CreateHostedZone (Maybe Text)
+chzDelegationSetId =
+    lens _chzDelegationSetId (\s a -> s { _chzDelegationSetId = a })
+
+-- | A complex type that contains an optional comment about your hosted zone.
+chzHostedZoneConfig :: Lens' CreateHostedZone (Maybe HostedZoneConfig)
+chzHostedZoneConfig =
+    lens _chzHostedZoneConfig (\s a -> s { _chzHostedZoneConfig = a })
+
+-- | The name of the domain. This must be a fully-specified domain, for
+-- example, www.example.com. The trailing dot is optional; Route 53 assumes
+-- that the domain name is fully qualified. This means that Route 53 treats
+-- www.example.com (without a trailing dot) and www.example.com. (with a
+-- trailing dot) as identical. This is the name you have registered with
+-- your DNS registrar. You should ask your registrar to change the
+-- authoritative name servers for your domain to the set of NameServers
+-- elements returned in DelegationSet.
+chzName :: Lens' CreateHostedZone Text
+chzName = lens _chzName (\s a -> s { _chzName = a })
+
+-- | The VPC that you want your hosted zone to be associated with. By
+-- providing this parameter, your newly created hosted cannot be resolved
+-- anywhere other than the given VPC.
+chzVPC :: Lens' CreateHostedZone (Maybe VPC)
+chzVPC = lens _chzVPC (\s a -> s { _chzVPC = a })
+
+data CreateHostedZoneResponse = CreateHostedZoneResponse
+    { _chzrChangeInfo    :: ChangeInfo
+    , _chzrDelegationSet :: DelegationSet
+    , _chzrHostedZone    :: HostedZone
+    , _chzrLocation      :: Text
+    , _chzrVPC           :: Maybe VPC
+    } deriving (Eq, Show)
+
+-- | 'CreateHostedZoneResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'chzrChangeInfo' @::@ 'ChangeInfo'
+--
+-- * 'chzrDelegationSet' @::@ 'DelegationSet'
+--
+-- * 'chzrHostedZone' @::@ 'HostedZone'
+--
+-- * 'chzrLocation' @::@ 'Text'
+--
+-- * 'chzrVPC' @::@ 'Maybe' 'VPC'
+--
+createHostedZoneResponse :: HostedZone -- ^ 'chzrHostedZone'
+                         -> ChangeInfo -- ^ 'chzrChangeInfo'
+                         -> DelegationSet -- ^ 'chzrDelegationSet'
+                         -> Text -- ^ 'chzrLocation'
+                         -> CreateHostedZoneResponse
+createHostedZoneResponse p1 p2 p3 p4 = CreateHostedZoneResponse
+    { _chzrHostedZone    = p1
+    , _chzrChangeInfo    = p2
+    , _chzrDelegationSet = p3
+    , _chzrLocation      = p4
+    , _chzrVPC           = Nothing
+    }
+
+-- | A complex type that contains information about the request to create a
+-- hosted zone. This includes an ID that you use when you call the GetChange
+-- action to get the current status of the change request.
+chzrChangeInfo :: Lens' CreateHostedZoneResponse ChangeInfo
+chzrChangeInfo = lens _chzrChangeInfo (\s a -> s { _chzrChangeInfo = a })
+
+-- | A complex type that contains name server information.
+chzrDelegationSet :: Lens' CreateHostedZoneResponse DelegationSet
+chzrDelegationSet =
+    lens _chzrDelegationSet (\s a -> s { _chzrDelegationSet = a })
+
+-- | A complex type that contains identifying information about the hosted
+-- zone.
+chzrHostedZone :: Lens' CreateHostedZoneResponse HostedZone
+chzrHostedZone = lens _chzrHostedZone (\s a -> s { _chzrHostedZone = a })
+
+-- | The unique URL representing the new hosted zone.
+chzrLocation :: Lens' CreateHostedZoneResponse Text
+chzrLocation = lens _chzrLocation (\s a -> s { _chzrLocation = a })
+
+chzrVPC :: Lens' CreateHostedZoneResponse (Maybe VPC)
+chzrVPC = lens _chzrVPC (\s a -> s { _chzrVPC = a })
+
+instance ToPath CreateHostedZone where
+    toPath = const "/2013-04-01/hostedzone"
+
+instance ToQuery CreateHostedZone where
+    toQuery = const mempty
+
+instance ToHeaders CreateHostedZone
+
+instance ToXMLRoot CreateHostedZone where
+    toXMLRoot CreateHostedZone{..} = namespaced ns "CreateHostedZone"
+        [ "Name"             =@ _chzName
+        , "VPC"              =@ _chzVPC
+        , "CallerReference"  =@ _chzCallerReference
+        , "HostedZoneConfig" =@ _chzHostedZoneConfig
+        , "DelegationSetId"  =@ _chzDelegationSetId
+        ]
+
+instance ToXML CreateHostedZone
+
+instance AWSRequest CreateHostedZone where
+    type Sv CreateHostedZone = Route53
+    type Rs CreateHostedZone = CreateHostedZoneResponse
+
+    request  = post
+    response = xmlHeaderResponse $ \h x -> CreateHostedZoneResponse
+        <$> x .@  "ChangeInfo"
+        <*> x .@  "DelegationSet"
+        <*> x .@  "HostedZone"
+        <*> h ~: "Location"
+        <*> x .@? "VPC"
diff --git a/gen/Network/AWS/Route53/CreateReusableDelegationSet.hs b/gen/Network/AWS/Route53/CreateReusableDelegationSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/CreateReusableDelegationSet.hs
@@ -0,0 +1,147 @@
+{-# 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.Route53.CreateReusableDelegationSet
+-- 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 action creates a reusable delegationSet. To create a new reusable
+-- delegationSet, send a POST request to the 2013-04-01/delegationset
+-- resource. The request body must include an XML document with a
+-- CreateReusableDelegationSetRequest element. The response returns the
+-- CreateReusableDelegationSetResponse element that contains metadata about
+-- the delegationSet. If the optional parameter HostedZoneId is specified, it
+-- marks the delegationSet associated with that particular hosted zone as
+-- reusable.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_CreateReusableDelegationSet.html>
+module Network.AWS.Route53.CreateReusableDelegationSet
+    (
+    -- * Request
+      CreateReusableDelegationSet
+    -- ** Request constructor
+    , createReusableDelegationSet
+    -- ** Request lenses
+    , crdsCallerReference
+    , crdsHostedZoneId
+
+    -- * Response
+    , CreateReusableDelegationSetResponse
+    -- ** Response constructor
+    , createReusableDelegationSetResponse
+    -- ** Response lenses
+    , crdsrDelegationSet
+    , crdsrLocation
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+data CreateReusableDelegationSet = CreateReusableDelegationSet
+    { _crdsCallerReference :: Text
+    , _crdsHostedZoneId    :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'CreateReusableDelegationSet' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'crdsCallerReference' @::@ 'Text'
+--
+-- * 'crdsHostedZoneId' @::@ 'Maybe' 'Text'
+--
+createReusableDelegationSet :: Text -- ^ 'crdsCallerReference'
+                            -> CreateReusableDelegationSet
+createReusableDelegationSet p1 = CreateReusableDelegationSet
+    { _crdsCallerReference = p1
+    , _crdsHostedZoneId    = Nothing
+    }
+
+-- | A unique string that identifies the request and that allows failed
+-- CreateReusableDelegationSet requests to be retried without the risk of
+-- executing the operation twice. You must use a unique CallerReference
+-- string every time you create a reusable delegation set. CallerReference
+-- can be any unique string; you might choose to use a string that
+-- identifies your project, such as DNSMigration_01. Valid characters are
+-- any Unicode code points that are legal in an XML 1.0 document. The UTF-8
+-- encoding of the value must be less than 128 bytes.
+crdsCallerReference :: Lens' CreateReusableDelegationSet Text
+crdsCallerReference =
+    lens _crdsCallerReference (\s a -> s { _crdsCallerReference = a })
+
+-- | The ID of the hosted zone whose delegation set you want to mark as
+-- reusable. It is an optional parameter.
+crdsHostedZoneId :: Lens' CreateReusableDelegationSet (Maybe Text)
+crdsHostedZoneId = lens _crdsHostedZoneId (\s a -> s { _crdsHostedZoneId = a })
+
+data CreateReusableDelegationSetResponse = CreateReusableDelegationSetResponse
+    { _crdsrDelegationSet :: DelegationSet
+    , _crdsrLocation      :: Text
+    } deriving (Eq, Show)
+
+-- | 'CreateReusableDelegationSetResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'crdsrDelegationSet' @::@ 'DelegationSet'
+--
+-- * 'crdsrLocation' @::@ 'Text'
+--
+createReusableDelegationSetResponse :: DelegationSet -- ^ 'crdsrDelegationSet'
+                                    -> Text -- ^ 'crdsrLocation'
+                                    -> CreateReusableDelegationSetResponse
+createReusableDelegationSetResponse p1 p2 = CreateReusableDelegationSetResponse
+    { _crdsrDelegationSet = p1
+    , _crdsrLocation      = p2
+    }
+
+-- | A complex type that contains name server information.
+crdsrDelegationSet :: Lens' CreateReusableDelegationSetResponse DelegationSet
+crdsrDelegationSet =
+    lens _crdsrDelegationSet (\s a -> s { _crdsrDelegationSet = a })
+
+-- | The unique URL representing the new reusbale delegation set.
+crdsrLocation :: Lens' CreateReusableDelegationSetResponse Text
+crdsrLocation = lens _crdsrLocation (\s a -> s { _crdsrLocation = a })
+
+instance ToPath CreateReusableDelegationSet where
+    toPath = const "/2013-04-01/delegationset"
+
+instance ToQuery CreateReusableDelegationSet where
+    toQuery = const mempty
+
+instance ToHeaders CreateReusableDelegationSet
+
+instance ToXMLRoot CreateReusableDelegationSet where
+    toXMLRoot CreateReusableDelegationSet{..} = namespaced ns "CreateReusableDelegationSet"
+        [ "CallerReference" =@ _crdsCallerReference
+        , "HostedZoneId"    =@ _crdsHostedZoneId
+        ]
+
+instance ToXML CreateReusableDelegationSet
+
+instance AWSRequest CreateReusableDelegationSet where
+    type Sv CreateReusableDelegationSet = Route53
+    type Rs CreateReusableDelegationSet = CreateReusableDelegationSetResponse
+
+    request  = post
+    response = xmlHeaderResponse $ \h x -> CreateReusableDelegationSetResponse
+        <$> x .@  "DelegationSet"
+        <*> h ~: "Location"
diff --git a/gen/Network/AWS/Route53/DeleteHealthCheck.hs b/gen/Network/AWS/Route53/DeleteHealthCheck.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/DeleteHealthCheck.hs
@@ -0,0 +1,102 @@
+{-# 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.Route53.DeleteHealthCheck
+-- 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 action deletes a health check. To delete a health check, send a DELETE
+-- request to the 2013-04-01/healthcheck/health check ID resource. You can
+-- delete a health check only if there are no resource record sets associated
+-- with this health check. If resource record sets are associated with this
+-- health check, you must disassociate them before you can delete your health
+-- check. If you try to delete a health check that is associated with resource
+-- record sets, Route 53 will deny your request with a HealthCheckInUse error.
+-- For information about disassociating the records from your health check,
+-- see ChangeResourceRecordSets.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_DeleteHealthCheck.html>
+module Network.AWS.Route53.DeleteHealthCheck
+    (
+    -- * Request
+      DeleteHealthCheck
+    -- ** Request constructor
+    , deleteHealthCheck
+    -- ** Request lenses
+    , dhcHealthCheckId
+
+    -- * Response
+    , DeleteHealthCheckResponse
+    -- ** Response constructor
+    , deleteHealthCheckResponse
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+newtype DeleteHealthCheck = DeleteHealthCheck
+    { _dhcHealthCheckId :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'DeleteHealthCheck' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dhcHealthCheckId' @::@ 'Text'
+--
+deleteHealthCheck :: Text -- ^ 'dhcHealthCheckId'
+                  -> DeleteHealthCheck
+deleteHealthCheck p1 = DeleteHealthCheck
+    { _dhcHealthCheckId = p1
+    }
+
+-- | The ID of the health check to delete.
+dhcHealthCheckId :: Lens' DeleteHealthCheck Text
+dhcHealthCheckId = lens _dhcHealthCheckId (\s a -> s { _dhcHealthCheckId = a })
+
+data DeleteHealthCheckResponse = DeleteHealthCheckResponse
+    deriving (Eq, Ord, Show, Generic)
+
+-- | 'DeleteHealthCheckResponse' constructor.
+deleteHealthCheckResponse :: DeleteHealthCheckResponse
+deleteHealthCheckResponse = DeleteHealthCheckResponse
+
+instance ToPath DeleteHealthCheck where
+    toPath DeleteHealthCheck{..} = mconcat
+        [ "/2013-04-01/healthcheck/"
+        , toText _dhcHealthCheckId
+        ]
+
+instance ToQuery DeleteHealthCheck where
+    toQuery = const mempty
+
+instance ToHeaders DeleteHealthCheck
+
+instance ToXMLRoot DeleteHealthCheck where
+    toXMLRoot = const (namespaced ns "DeleteHealthCheck" [])
+
+instance ToXML DeleteHealthCheck
+
+instance AWSRequest DeleteHealthCheck where
+    type Sv DeleteHealthCheck = Route53
+    type Rs DeleteHealthCheck = DeleteHealthCheckResponse
+
+    request  = delete
+    response = nullResponse DeleteHealthCheckResponse
diff --git a/gen/Network/AWS/Route53/DeleteHostedZone.hs b/gen/Network/AWS/Route53/DeleteHostedZone.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/DeleteHostedZone.hs
@@ -0,0 +1,123 @@
+{-# 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.Route53.DeleteHostedZone
+-- 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 action deletes a hosted zone. To delete a hosted zone, send a DELETE
+-- request to the 2013-04-01/hostedzone/hosted zone ID resource. For more
+-- information about deleting a hosted zone, see Deleting a Hosted Zone in the
+-- Amazon Route 53 Developer Guide. You can delete a hosted zone only if there
+-- are no resource record sets other than the default SOA record and NS
+-- resource record sets. If your hosted zone contains other resource record
+-- sets, you must delete them before you can delete your hosted zone. If you
+-- try to delete a hosted zone that contains other resource record sets, Route
+-- 53 will deny your request with a HostedZoneNotEmpty error. For information
+-- about deleting records from your hosted zone, see ChangeResourceRecordSets.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_DeleteHostedZone.html>
+module Network.AWS.Route53.DeleteHostedZone
+    (
+    -- * Request
+      DeleteHostedZone
+    -- ** Request constructor
+    , deleteHostedZone
+    -- ** Request lenses
+    , dhzId
+
+    -- * Response
+    , DeleteHostedZoneResponse
+    -- ** Response constructor
+    , deleteHostedZoneResponse
+    -- ** Response lenses
+    , dhzrChangeInfo
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+newtype DeleteHostedZone = DeleteHostedZone
+    { _dhzId :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'DeleteHostedZone' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dhzId' @::@ 'Text'
+--
+deleteHostedZone :: Text -- ^ 'dhzId'
+                 -> DeleteHostedZone
+deleteHostedZone p1 = DeleteHostedZone
+    { _dhzId = p1
+    }
+
+-- | The ID of the hosted zone you want to delete.
+dhzId :: Lens' DeleteHostedZone Text
+dhzId = lens _dhzId (\s a -> s { _dhzId = a })
+
+newtype DeleteHostedZoneResponse = DeleteHostedZoneResponse
+    { _dhzrChangeInfo :: ChangeInfo
+    } deriving (Eq, Show)
+
+-- | 'DeleteHostedZoneResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dhzrChangeInfo' @::@ 'ChangeInfo'
+--
+deleteHostedZoneResponse :: ChangeInfo -- ^ 'dhzrChangeInfo'
+                         -> DeleteHostedZoneResponse
+deleteHostedZoneResponse p1 = DeleteHostedZoneResponse
+    { _dhzrChangeInfo = p1
+    }
+
+-- | A complex type that contains the ID, the status, and the date and time of
+-- your delete request.
+dhzrChangeInfo :: Lens' DeleteHostedZoneResponse ChangeInfo
+dhzrChangeInfo = lens _dhzrChangeInfo (\s a -> s { _dhzrChangeInfo = a })
+
+instance ToPath DeleteHostedZone where
+    toPath DeleteHostedZone{..} = mconcat
+        [ "/2013-04-01/hostedzone/"
+        , toText _dhzId
+        ]
+
+instance ToQuery DeleteHostedZone where
+    toQuery = const mempty
+
+instance ToHeaders DeleteHostedZone
+
+instance ToXMLRoot DeleteHostedZone where
+    toXMLRoot = const (namespaced ns "DeleteHostedZone" [])
+
+instance ToXML DeleteHostedZone
+
+instance AWSRequest DeleteHostedZone where
+    type Sv DeleteHostedZone = Route53
+    type Rs DeleteHostedZone = DeleteHostedZoneResponse
+
+    request  = delete
+    response = xmlResponse
+
+instance FromXML DeleteHostedZoneResponse where
+    parseXML x = DeleteHostedZoneResponse
+        <$> x .@  "ChangeInfo"
diff --git a/gen/Network/AWS/Route53/DeleteReusableDelegationSet.hs b/gen/Network/AWS/Route53/DeleteReusableDelegationSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/DeleteReusableDelegationSet.hs
@@ -0,0 +1,101 @@
+{-# 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.Route53.DeleteReusableDelegationSet
+-- 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 action deletes a reusable delegation set. To delete a reusable
+-- delegation set, send a DELETE request to the
+-- 2013-04-01/delegationset/delegation set ID resource. You can delete a
+-- reusable delegation set only if there are no associated hosted zones. If
+-- your reusable delegation set contains associated hosted zones, you must
+-- delete them before you can delete your reusable delegation set. If you try
+-- to delete a reusable delegation set that contains associated hosted zones,
+-- Route 53 will deny your request with a DelegationSetInUse error.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_DeleteReusableDelegationSet.html>
+module Network.AWS.Route53.DeleteReusableDelegationSet
+    (
+    -- * Request
+      DeleteReusableDelegationSet
+    -- ** Request constructor
+    , deleteReusableDelegationSet
+    -- ** Request lenses
+    , drdsId
+
+    -- * Response
+    , DeleteReusableDelegationSetResponse
+    -- ** Response constructor
+    , deleteReusableDelegationSetResponse
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+newtype DeleteReusableDelegationSet = DeleteReusableDelegationSet
+    { _drdsId :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'DeleteReusableDelegationSet' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'drdsId' @::@ 'Text'
+--
+deleteReusableDelegationSet :: Text -- ^ 'drdsId'
+                            -> DeleteReusableDelegationSet
+deleteReusableDelegationSet p1 = DeleteReusableDelegationSet
+    { _drdsId = p1
+    }
+
+-- | The ID of the reusable delegation set you want to delete.
+drdsId :: Lens' DeleteReusableDelegationSet Text
+drdsId = lens _drdsId (\s a -> s { _drdsId = a })
+
+data DeleteReusableDelegationSetResponse = DeleteReusableDelegationSetResponse
+    deriving (Eq, Ord, Show, Generic)
+
+-- | 'DeleteReusableDelegationSetResponse' constructor.
+deleteReusableDelegationSetResponse :: DeleteReusableDelegationSetResponse
+deleteReusableDelegationSetResponse = DeleteReusableDelegationSetResponse
+
+instance ToPath DeleteReusableDelegationSet where
+    toPath DeleteReusableDelegationSet{..} = mconcat
+        [ "/2013-04-01/delegationset/"
+        , toText _drdsId
+        ]
+
+instance ToQuery DeleteReusableDelegationSet where
+    toQuery = const mempty
+
+instance ToHeaders DeleteReusableDelegationSet
+
+instance ToXMLRoot DeleteReusableDelegationSet where
+    toXMLRoot = const (namespaced ns "DeleteReusableDelegationSet" [])
+
+instance ToXML DeleteReusableDelegationSet
+
+instance AWSRequest DeleteReusableDelegationSet where
+    type Sv DeleteReusableDelegationSet = Route53
+    type Rs DeleteReusableDelegationSet = DeleteReusableDelegationSetResponse
+
+    request  = delete
+    response = nullResponse DeleteReusableDelegationSetResponse
diff --git a/gen/Network/AWS/Route53/DisassociateVPCFromHostedZone.hs b/gen/Network/AWS/Route53/DisassociateVPCFromHostedZone.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/DisassociateVPCFromHostedZone.hs
@@ -0,0 +1,148 @@
+{-# 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.Route53.DisassociateVPCFromHostedZone
+-- 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 action disassociates a VPC from an hosted zone. To disassociate a VPC
+-- to a hosted zone, send a POST request to the 2013-04-01/hostedzone/hosted
+-- zone ID/disassociatevpc resource. The request body must include an XML
+-- document with a DisassociateVPCFromHostedZoneRequest element. The response
+-- returns the DisassociateVPCFromHostedZoneResponse element that contains
+-- ChangeInfo for you to track the progress of the
+-- DisassociateVPCFromHostedZoneRequest you made. See GetChange operation for
+-- how to track the progress of your change.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_DisassociateVPCFromHostedZone.html>
+module Network.AWS.Route53.DisassociateVPCFromHostedZone
+    (
+    -- * Request
+      DisassociateVPCFromHostedZone
+    -- ** Request constructor
+    , disassociateVPCFromHostedZone
+    -- ** Request lenses
+    , dvpcfhzComment
+    , dvpcfhzHostedZoneId
+    , dvpcfhzVPC
+
+    -- * Response
+    , DisassociateVPCFromHostedZoneResponse
+    -- ** Response constructor
+    , disassociateVPCFromHostedZoneResponse
+    -- ** Response lenses
+    , dvpcfhzrChangeInfo
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+data DisassociateVPCFromHostedZone = DisassociateVPCFromHostedZone
+    { _dvpcfhzComment      :: Maybe Text
+    , _dvpcfhzHostedZoneId :: Text
+    , _dvpcfhzVPC          :: VPC
+    } deriving (Eq, Show)
+
+-- | 'DisassociateVPCFromHostedZone' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dvpcfhzComment' @::@ 'Maybe' 'Text'
+--
+-- * 'dvpcfhzHostedZoneId' @::@ 'Text'
+--
+-- * 'dvpcfhzVPC' @::@ 'VPC'
+--
+disassociateVPCFromHostedZone :: Text -- ^ 'dvpcfhzHostedZoneId'
+                              -> VPC -- ^ 'dvpcfhzVPC'
+                              -> DisassociateVPCFromHostedZone
+disassociateVPCFromHostedZone p1 p2 = DisassociateVPCFromHostedZone
+    { _dvpcfhzHostedZoneId = p1
+    , _dvpcfhzVPC          = p2
+    , _dvpcfhzComment      = Nothing
+    }
+
+-- | Optional: Any comments you want to include about a
+-- DisassociateVPCFromHostedZoneRequest.
+dvpcfhzComment :: Lens' DisassociateVPCFromHostedZone (Maybe Text)
+dvpcfhzComment = lens _dvpcfhzComment (\s a -> s { _dvpcfhzComment = a })
+
+-- | The ID of the hosted zone you want to disassociate your VPC from. Note
+-- that you cannot disassociate the last VPC from a hosted zone.
+dvpcfhzHostedZoneId :: Lens' DisassociateVPCFromHostedZone Text
+dvpcfhzHostedZoneId =
+    lens _dvpcfhzHostedZoneId (\s a -> s { _dvpcfhzHostedZoneId = a })
+
+-- | The VPC that you want your hosted zone to be disassociated from.
+dvpcfhzVPC :: Lens' DisassociateVPCFromHostedZone VPC
+dvpcfhzVPC = lens _dvpcfhzVPC (\s a -> s { _dvpcfhzVPC = a })
+
+newtype DisassociateVPCFromHostedZoneResponse = DisassociateVPCFromHostedZoneResponse
+    { _dvpcfhzrChangeInfo :: ChangeInfo
+    } deriving (Eq, Show)
+
+-- | 'DisassociateVPCFromHostedZoneResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dvpcfhzrChangeInfo' @::@ 'ChangeInfo'
+--
+disassociateVPCFromHostedZoneResponse :: ChangeInfo -- ^ 'dvpcfhzrChangeInfo'
+                                      -> DisassociateVPCFromHostedZoneResponse
+disassociateVPCFromHostedZoneResponse p1 = DisassociateVPCFromHostedZoneResponse
+    { _dvpcfhzrChangeInfo = p1
+    }
+
+-- | A complex type that contains the ID, the status, and the date and time of
+-- your DisassociateVPCFromHostedZoneRequest.
+dvpcfhzrChangeInfo :: Lens' DisassociateVPCFromHostedZoneResponse ChangeInfo
+dvpcfhzrChangeInfo =
+    lens _dvpcfhzrChangeInfo (\s a -> s { _dvpcfhzrChangeInfo = a })
+
+instance ToPath DisassociateVPCFromHostedZone where
+    toPath DisassociateVPCFromHostedZone{..} = mconcat
+        [ "/2013-04-01/hostedzone/"
+        , toText _dvpcfhzHostedZoneId
+        , "/disassociatevpc"
+        ]
+
+instance ToQuery DisassociateVPCFromHostedZone where
+    toQuery = const mempty
+
+instance ToHeaders DisassociateVPCFromHostedZone
+
+instance ToXMLRoot DisassociateVPCFromHostedZone where
+    toXMLRoot DisassociateVPCFromHostedZone{..} = namespaced ns "DisassociateVPCFromHostedZone"
+        [ "VPC"     =@ _dvpcfhzVPC
+        , "Comment" =@ _dvpcfhzComment
+        ]
+
+instance ToXML DisassociateVPCFromHostedZone
+
+instance AWSRequest DisassociateVPCFromHostedZone where
+    type Sv DisassociateVPCFromHostedZone = Route53
+    type Rs DisassociateVPCFromHostedZone = DisassociateVPCFromHostedZoneResponse
+
+    request  = post
+    response = xmlResponse
+
+instance FromXML DisassociateVPCFromHostedZoneResponse where
+    parseXML x = DisassociateVPCFromHostedZoneResponse
+        <$> x .@  "ChangeInfo"
diff --git a/gen/Network/AWS/Route53/GetChange.hs b/gen/Network/AWS/Route53/GetChange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/GetChange.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.Route53.GetChange
+-- 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 action returns the current status of a change batch request. The
+-- status is one of the following values: - PENDING indicates that the changes
+-- in this request have not replicated to all Route 53 DNS servers. This is
+-- the initial status of all change batch requests. - INSYNC indicates that
+-- the changes have replicated to all Amazon Route 53 DNS servers.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetChange.html>
+module Network.AWS.Route53.GetChange
+    (
+    -- * Request
+      GetChange
+    -- ** Request constructor
+    , getChange
+    -- ** Request lenses
+    , gcId
+
+    -- * Response
+    , GetChangeResponse
+    -- ** Response constructor
+    , getChangeResponse
+    -- ** Response lenses
+    , gcrChangeInfo
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+newtype GetChange = GetChange
+    { _gcId :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'GetChange' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'gcId' @::@ 'Text'
+--
+getChange :: Text -- ^ 'gcId'
+          -> GetChange
+getChange p1 = GetChange
+    { _gcId = p1
+    }
+
+-- | The ID of the change batch request. The value that you specify here is
+-- the value that ChangeResourceRecordSets returned in the Id element when
+-- you submitted the request.
+gcId :: Lens' GetChange Text
+gcId = lens _gcId (\s a -> s { _gcId = a })
+
+newtype GetChangeResponse = GetChangeResponse
+    { _gcrChangeInfo :: ChangeInfo
+    } deriving (Eq, Show)
+
+-- | 'GetChangeResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'gcrChangeInfo' @::@ 'ChangeInfo'
+--
+getChangeResponse :: ChangeInfo -- ^ 'gcrChangeInfo'
+                  -> GetChangeResponse
+getChangeResponse p1 = GetChangeResponse
+    { _gcrChangeInfo = p1
+    }
+
+-- | A complex type that contains information about the specified change
+-- batch, including the change batch ID, the status of the change, and the
+-- date and time of the request.
+gcrChangeInfo :: Lens' GetChangeResponse ChangeInfo
+gcrChangeInfo = lens _gcrChangeInfo (\s a -> s { _gcrChangeInfo = a })
+
+instance ToPath GetChange where
+    toPath GetChange{..} = mconcat
+        [ "/2013-04-01/change/"
+        , toText _gcId
+        ]
+
+instance ToQuery GetChange where
+    toQuery = const mempty
+
+instance ToHeaders GetChange
+
+instance ToXMLRoot GetChange where
+    toXMLRoot = const (namespaced ns "GetChange" [])
+
+instance ToXML GetChange
+
+instance AWSRequest GetChange where
+    type Sv GetChange = Route53
+    type Rs GetChange = GetChangeResponse
+
+    request  = get
+    response = xmlResponse
+
+instance FromXML GetChangeResponse where
+    parseXML x = GetChangeResponse
+        <$> x .@  "ChangeInfo"
diff --git a/gen/Network/AWS/Route53/GetCheckerIpRanges.hs b/gen/Network/AWS/Route53/GetCheckerIpRanges.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/GetCheckerIpRanges.hs
@@ -0,0 +1,107 @@
+{-# 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.Route53.GetCheckerIpRanges
+-- 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)
+
+-- | To retrieve a list of the IP ranges used by Amazon Route 53 health checkers
+-- to check the health of your resources, send a GET request to the
+-- 2013-04-01/checkeripranges resource. You can use these IP addresses to
+-- configure router and firewall rules to allow health checkers to check the
+-- health of your resources.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetCheckerIpRanges.html>
+module Network.AWS.Route53.GetCheckerIpRanges
+    (
+    -- * Request
+      GetCheckerIpRanges
+    -- ** Request constructor
+    , getCheckerIpRanges
+
+    -- * Response
+    , GetCheckerIpRangesResponse
+    -- ** Response constructor
+    , getCheckerIpRangesResponse
+    -- ** Response lenses
+    , gcirrCheckerIpRanges
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+data GetCheckerIpRanges = GetCheckerIpRanges
+    deriving (Eq, Ord, Show, Generic)
+
+-- | 'GetCheckerIpRanges' constructor.
+getCheckerIpRanges :: GetCheckerIpRanges
+getCheckerIpRanges = GetCheckerIpRanges
+
+newtype GetCheckerIpRangesResponse = GetCheckerIpRangesResponse
+    { _gcirrCheckerIpRanges :: List "CheckerIpRanges" Text
+    } deriving (Eq, Ord, Show, Monoid, Semigroup)
+
+instance GHC.Exts.IsList GetCheckerIpRangesResponse where
+    type Item GetCheckerIpRangesResponse = Text
+
+    fromList = GetCheckerIpRangesResponse . GHC.Exts.fromList
+    toList   = GHC.Exts.toList . _gcirrCheckerIpRanges
+
+-- | 'GetCheckerIpRangesResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'gcirrCheckerIpRanges' @::@ ['Text']
+--
+getCheckerIpRangesResponse :: GetCheckerIpRangesResponse
+getCheckerIpRangesResponse = GetCheckerIpRangesResponse
+    { _gcirrCheckerIpRanges = mempty
+    }
+
+-- | A complex type that contains sorted list of IP ranges in CIDR format for
+-- Amazon Route 53 health checkers.
+gcirrCheckerIpRanges :: Lens' GetCheckerIpRangesResponse [Text]
+gcirrCheckerIpRanges =
+    lens _gcirrCheckerIpRanges (\s a -> s { _gcirrCheckerIpRanges = a })
+        . _List
+
+instance ToPath GetCheckerIpRanges where
+    toPath = const "/2013-04-01/checkeripranges"
+
+instance ToQuery GetCheckerIpRanges where
+    toQuery = const mempty
+
+instance ToHeaders GetCheckerIpRanges
+
+instance ToXMLRoot GetCheckerIpRanges where
+    toXMLRoot = const (namespaced ns "GetCheckerIpRanges" [])
+
+instance ToXML GetCheckerIpRanges
+
+instance AWSRequest GetCheckerIpRanges where
+    type Sv GetCheckerIpRanges = Route53
+    type Rs GetCheckerIpRanges = GetCheckerIpRangesResponse
+
+    request  = get
+    response = xmlResponse
+
+instance FromXML GetCheckerIpRangesResponse where
+    parseXML x = GetCheckerIpRangesResponse
+        <$> x .@  "CheckerIpRanges"
diff --git a/gen/Network/AWS/Route53/GetGeoLocation.hs b/gen/Network/AWS/Route53/GetGeoLocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/GetGeoLocation.hs
@@ -0,0 +1,145 @@
+{-# 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.Route53.GetGeoLocation
+-- 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)
+
+-- | To retrieve a single geo location, send a GET request to the
+-- 2013-04-01/geolocation resource with one of these options: continentcode |
+-- countrycode | countrycode and subdivisioncode.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetGeoLocation.html>
+module Network.AWS.Route53.GetGeoLocation
+    (
+    -- * Request
+      GetGeoLocation
+    -- ** Request constructor
+    , getGeoLocation
+    -- ** Request lenses
+    , gglContinentCode
+    , gglCountryCode
+    , gglSubdivisionCode
+
+    -- * Response
+    , GetGeoLocationResponse
+    -- ** Response constructor
+    , getGeoLocationResponse
+    -- ** Response lenses
+    , gglrGeoLocationDetails
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+data GetGeoLocation = GetGeoLocation
+    { _gglContinentCode   :: Maybe Text
+    , _gglCountryCode     :: Maybe Text
+    , _gglSubdivisionCode :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'GetGeoLocation' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'gglContinentCode' @::@ 'Maybe' 'Text'
+--
+-- * 'gglCountryCode' @::@ 'Maybe' 'Text'
+--
+-- * 'gglSubdivisionCode' @::@ 'Maybe' 'Text'
+--
+getGeoLocation :: GetGeoLocation
+getGeoLocation = GetGeoLocation
+    { _gglContinentCode   = Nothing
+    , _gglCountryCode     = Nothing
+    , _gglSubdivisionCode = Nothing
+    }
+
+-- | The code for a continent geo location. Note: only continent locations
+-- have a continent code. Valid values: AF | AN | AS | EU | OC | NA | SA
+-- Constraint: Specifying ContinentCode with either CountryCode or
+-- SubdivisionCode returns an InvalidInput error.
+gglContinentCode :: Lens' GetGeoLocation (Maybe Text)
+gglContinentCode = lens _gglContinentCode (\s a -> s { _gglContinentCode = a })
+
+-- | The code for a country geo location. The default location uses '*' for
+-- the country code and will match all locations that are not matched by a
+-- geo location. The default geo location uses a * for the country code. All
+-- other country codes follow the ISO 3166 two-character code.
+gglCountryCode :: Lens' GetGeoLocation (Maybe Text)
+gglCountryCode = lens _gglCountryCode (\s a -> s { _gglCountryCode = a })
+
+-- | The code for a country's subdivision (e.g., a province of Canada). A
+-- subdivision code is only valid with the appropriate country code.
+-- Constraint: Specifying SubdivisionCode without CountryCode returns an
+-- InvalidInput error.
+gglSubdivisionCode :: Lens' GetGeoLocation (Maybe Text)
+gglSubdivisionCode =
+    lens _gglSubdivisionCode (\s a -> s { _gglSubdivisionCode = a })
+
+newtype GetGeoLocationResponse = GetGeoLocationResponse
+    { _gglrGeoLocationDetails :: GeoLocationDetails
+    } deriving (Eq, Show)
+
+-- | 'GetGeoLocationResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'gglrGeoLocationDetails' @::@ 'GeoLocationDetails'
+--
+getGeoLocationResponse :: GeoLocationDetails -- ^ 'gglrGeoLocationDetails'
+                       -> GetGeoLocationResponse
+getGeoLocationResponse p1 = GetGeoLocationResponse
+    { _gglrGeoLocationDetails = p1
+    }
+
+-- | A complex type that contains the information about the specified geo
+-- location.
+gglrGeoLocationDetails :: Lens' GetGeoLocationResponse GeoLocationDetails
+gglrGeoLocationDetails =
+    lens _gglrGeoLocationDetails (\s a -> s { _gglrGeoLocationDetails = a })
+
+instance ToPath GetGeoLocation where
+    toPath = const "/2013-04-01/geolocation"
+
+instance ToQuery GetGeoLocation where
+    toQuery GetGeoLocation{..} = mconcat
+        [ "continentcode"   =? _gglContinentCode
+        , "countrycode"     =? _gglCountryCode
+        , "subdivisioncode" =? _gglSubdivisionCode
+        ]
+
+instance ToHeaders GetGeoLocation
+
+instance ToXMLRoot GetGeoLocation where
+    toXMLRoot = const (namespaced ns "GetGeoLocation" [])
+
+instance ToXML GetGeoLocation
+
+instance AWSRequest GetGeoLocation where
+    type Sv GetGeoLocation = Route53
+    type Rs GetGeoLocation = GetGeoLocationResponse
+
+    request  = get
+    response = xmlResponse
+
+instance FromXML GetGeoLocationResponse where
+    parseXML x = GetGeoLocationResponse
+        <$> x .@  "GeoLocationDetails"
diff --git a/gen/Network/AWS/Route53/GetHealthCheck.hs b/gen/Network/AWS/Route53/GetHealthCheck.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/GetHealthCheck.hs
@@ -0,0 +1,115 @@
+{-# 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.Route53.GetHealthCheck
+-- 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)
+
+-- | To retrieve the health check, send a GET request to the
+-- 2013-04-01/healthcheck/health check ID resource.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetHealthCheck.html>
+module Network.AWS.Route53.GetHealthCheck
+    (
+    -- * Request
+      GetHealthCheck
+    -- ** Request constructor
+    , getHealthCheck
+    -- ** Request lenses
+    , ghcHealthCheckId
+
+    -- * Response
+    , GetHealthCheckResponse
+    -- ** Response constructor
+    , getHealthCheckResponse
+    -- ** Response lenses
+    , ghcrHealthCheck
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+newtype GetHealthCheck = GetHealthCheck
+    { _ghcHealthCheckId :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'GetHealthCheck' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ghcHealthCheckId' @::@ 'Text'
+--
+getHealthCheck :: Text -- ^ 'ghcHealthCheckId'
+               -> GetHealthCheck
+getHealthCheck p1 = GetHealthCheck
+    { _ghcHealthCheckId = p1
+    }
+
+-- | The ID of the health check to retrieve.
+ghcHealthCheckId :: Lens' GetHealthCheck Text
+ghcHealthCheckId = lens _ghcHealthCheckId (\s a -> s { _ghcHealthCheckId = a })
+
+newtype GetHealthCheckResponse = GetHealthCheckResponse
+    { _ghcrHealthCheck :: HealthCheck
+    } deriving (Eq, Show)
+
+-- | 'GetHealthCheckResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ghcrHealthCheck' @::@ 'HealthCheck'
+--
+getHealthCheckResponse :: HealthCheck -- ^ 'ghcrHealthCheck'
+                       -> GetHealthCheckResponse
+getHealthCheckResponse p1 = GetHealthCheckResponse
+    { _ghcrHealthCheck = p1
+    }
+
+-- | A complex type that contains the information about the specified health
+-- check.
+ghcrHealthCheck :: Lens' GetHealthCheckResponse HealthCheck
+ghcrHealthCheck = lens _ghcrHealthCheck (\s a -> s { _ghcrHealthCheck = a })
+
+instance ToPath GetHealthCheck where
+    toPath GetHealthCheck{..} = mconcat
+        [ "/2013-04-01/healthcheck/"
+        , toText _ghcHealthCheckId
+        ]
+
+instance ToQuery GetHealthCheck where
+    toQuery = const mempty
+
+instance ToHeaders GetHealthCheck
+
+instance ToXMLRoot GetHealthCheck where
+    toXMLRoot = const (namespaced ns "GetHealthCheck" [])
+
+instance ToXML GetHealthCheck
+
+instance AWSRequest GetHealthCheck where
+    type Sv GetHealthCheck = Route53
+    type Rs GetHealthCheck = GetHealthCheckResponse
+
+    request  = get
+    response = xmlResponse
+
+instance FromXML GetHealthCheckResponse where
+    parseXML x = GetHealthCheckResponse
+        <$> x .@  "HealthCheck"
diff --git a/gen/Network/AWS/Route53/GetHealthCheckCount.hs b/gen/Network/AWS/Route53/GetHealthCheckCount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/GetHealthCheckCount.hs
@@ -0,0 +1,97 @@
+{-# 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.Route53.GetHealthCheckCount
+-- 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)
+
+-- | To retrieve a count of all your health checks, send a GET request to the
+-- 2013-04-01/healthcheckcount resource.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetHealthCheckCount.html>
+module Network.AWS.Route53.GetHealthCheckCount
+    (
+    -- * Request
+      GetHealthCheckCount
+    -- ** Request constructor
+    , getHealthCheckCount
+
+    -- * Response
+    , GetHealthCheckCountResponse
+    -- ** Response constructor
+    , getHealthCheckCountResponse
+    -- ** Response lenses
+    , ghccrHealthCheckCount
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+data GetHealthCheckCount = GetHealthCheckCount
+    deriving (Eq, Ord, Show, Generic)
+
+-- | 'GetHealthCheckCount' constructor.
+getHealthCheckCount :: GetHealthCheckCount
+getHealthCheckCount = GetHealthCheckCount
+
+newtype GetHealthCheckCountResponse = GetHealthCheckCountResponse
+    { _ghccrHealthCheckCount :: Integer
+    } deriving (Eq, Ord, Show, Enum, Num, Integral, Real)
+
+-- | 'GetHealthCheckCountResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ghccrHealthCheckCount' @::@ 'Integer'
+--
+getHealthCheckCountResponse :: Integer -- ^ 'ghccrHealthCheckCount'
+                            -> GetHealthCheckCountResponse
+getHealthCheckCountResponse p1 = GetHealthCheckCountResponse
+    { _ghccrHealthCheckCount = p1
+    }
+
+-- | The number of health checks associated with the current AWS account.
+ghccrHealthCheckCount :: Lens' GetHealthCheckCountResponse Integer
+ghccrHealthCheckCount =
+    lens _ghccrHealthCheckCount (\s a -> s { _ghccrHealthCheckCount = a })
+
+instance ToPath GetHealthCheckCount where
+    toPath = const "/2013-04-01/healthcheckcount"
+
+instance ToQuery GetHealthCheckCount where
+    toQuery = const mempty
+
+instance ToHeaders GetHealthCheckCount
+
+instance ToXMLRoot GetHealthCheckCount where
+    toXMLRoot = const (namespaced ns "GetHealthCheckCount" [])
+
+instance ToXML GetHealthCheckCount
+
+instance AWSRequest GetHealthCheckCount where
+    type Sv GetHealthCheckCount = Route53
+    type Rs GetHealthCheckCount = GetHealthCheckCountResponse
+
+    request  = get
+    response = xmlResponse
+
+instance FromXML GetHealthCheckCountResponse where
+    parseXML x = GetHealthCheckCountResponse
+        <$> x .@  "HealthCheckCount"
diff --git a/gen/Network/AWS/Route53/GetHealthCheckLastFailureReason.hs b/gen/Network/AWS/Route53/GetHealthCheckLastFailureReason.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/GetHealthCheckLastFailureReason.hs
@@ -0,0 +1,128 @@
+{-# 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.Route53.GetHealthCheckLastFailureReason
+-- 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)
+
+-- | If you want to learn why a health check is currently failing or why it
+-- failed most recently (if at all), you can get the failure reason for the
+-- most recent failure. Send a GET request to the
+-- 2013-04-01/healthcheck/health check ID/lastfailurereason resource.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetHealthCheckLastFailureReason.html>
+module Network.AWS.Route53.GetHealthCheckLastFailureReason
+    (
+    -- * Request
+      GetHealthCheckLastFailureReason
+    -- ** Request constructor
+    , getHealthCheckLastFailureReason
+    -- ** Request lenses
+    , ghclfrHealthCheckId
+
+    -- * Response
+    , GetHealthCheckLastFailureReasonResponse
+    -- ** Response constructor
+    , getHealthCheckLastFailureReasonResponse
+    -- ** Response lenses
+    , ghclfrrHealthCheckObservations
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+newtype GetHealthCheckLastFailureReason = GetHealthCheckLastFailureReason
+    { _ghclfrHealthCheckId :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'GetHealthCheckLastFailureReason' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ghclfrHealthCheckId' @::@ 'Text'
+--
+getHealthCheckLastFailureReason :: Text -- ^ 'ghclfrHealthCheckId'
+                                -> GetHealthCheckLastFailureReason
+getHealthCheckLastFailureReason p1 = GetHealthCheckLastFailureReason
+    { _ghclfrHealthCheckId = p1
+    }
+
+-- | The ID of the health check for which you want to retrieve the reason for
+-- the most recent failure.
+ghclfrHealthCheckId :: Lens' GetHealthCheckLastFailureReason Text
+ghclfrHealthCheckId =
+    lens _ghclfrHealthCheckId (\s a -> s { _ghclfrHealthCheckId = a })
+
+newtype GetHealthCheckLastFailureReasonResponse = GetHealthCheckLastFailureReasonResponse
+    { _ghclfrrHealthCheckObservations :: List "HealthCheckObservation" HealthCheckObservation
+    } deriving (Eq, Show, Monoid, Semigroup)
+
+instance GHC.Exts.IsList GetHealthCheckLastFailureReasonResponse where
+    type Item GetHealthCheckLastFailureReasonResponse = HealthCheckObservation
+
+    fromList = GetHealthCheckLastFailureReasonResponse . GHC.Exts.fromList
+    toList   = GHC.Exts.toList . _ghclfrrHealthCheckObservations
+
+-- | 'GetHealthCheckLastFailureReasonResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ghclfrrHealthCheckObservations' @::@ ['HealthCheckObservation']
+--
+getHealthCheckLastFailureReasonResponse :: GetHealthCheckLastFailureReasonResponse
+getHealthCheckLastFailureReasonResponse = GetHealthCheckLastFailureReasonResponse
+    { _ghclfrrHealthCheckObservations = mempty
+    }
+
+-- | A list that contains one HealthCheckObservation element for each Route 53
+-- health checker.
+ghclfrrHealthCheckObservations :: Lens' GetHealthCheckLastFailureReasonResponse [HealthCheckObservation]
+ghclfrrHealthCheckObservations =
+    lens _ghclfrrHealthCheckObservations
+        (\s a -> s { _ghclfrrHealthCheckObservations = a })
+            . _List
+
+instance ToPath GetHealthCheckLastFailureReason where
+    toPath GetHealthCheckLastFailureReason{..} = mconcat
+        [ "/2013-04-01/healthcheck/"
+        , toText _ghclfrHealthCheckId
+        , "/lastfailurereason"
+        ]
+
+instance ToQuery GetHealthCheckLastFailureReason where
+    toQuery = const mempty
+
+instance ToHeaders GetHealthCheckLastFailureReason
+
+instance ToXMLRoot GetHealthCheckLastFailureReason where
+    toXMLRoot = const (namespaced ns "GetHealthCheckLastFailureReason" [])
+
+instance ToXML GetHealthCheckLastFailureReason
+
+instance AWSRequest GetHealthCheckLastFailureReason where
+    type Sv GetHealthCheckLastFailureReason = Route53
+    type Rs GetHealthCheckLastFailureReason = GetHealthCheckLastFailureReasonResponse
+
+    request  = get
+    response = xmlResponse
+
+instance FromXML GetHealthCheckLastFailureReasonResponse where
+    parseXML x = GetHealthCheckLastFailureReasonResponse
+        <$> x .@  "HealthCheckObservations"
diff --git a/gen/Network/AWS/Route53/GetHealthCheckStatus.hs b/gen/Network/AWS/Route53/GetHealthCheckStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/GetHealthCheckStatus.hs
@@ -0,0 +1,127 @@
+{-# 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.Route53.GetHealthCheckStatus
+-- 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)
+
+-- | To retrieve the health check status, send a GET request to the
+-- 2013-04-01/healthcheck/health check ID/status resource. You can use this
+-- call to get a health check's current status.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetHealthCheckStatus.html>
+module Network.AWS.Route53.GetHealthCheckStatus
+    (
+    -- * Request
+      GetHealthCheckStatus
+    -- ** Request constructor
+    , getHealthCheckStatus
+    -- ** Request lenses
+    , ghcsHealthCheckId
+
+    -- * Response
+    , GetHealthCheckStatusResponse
+    -- ** Response constructor
+    , getHealthCheckStatusResponse
+    -- ** Response lenses
+    , ghcsrHealthCheckObservations
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+newtype GetHealthCheckStatus = GetHealthCheckStatus
+    { _ghcsHealthCheckId :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'GetHealthCheckStatus' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ghcsHealthCheckId' @::@ 'Text'
+--
+getHealthCheckStatus :: Text -- ^ 'ghcsHealthCheckId'
+                     -> GetHealthCheckStatus
+getHealthCheckStatus p1 = GetHealthCheckStatus
+    { _ghcsHealthCheckId = p1
+    }
+
+-- | The ID of the health check for which you want to retrieve the most recent
+-- status.
+ghcsHealthCheckId :: Lens' GetHealthCheckStatus Text
+ghcsHealthCheckId =
+    lens _ghcsHealthCheckId (\s a -> s { _ghcsHealthCheckId = a })
+
+newtype GetHealthCheckStatusResponse = GetHealthCheckStatusResponse
+    { _ghcsrHealthCheckObservations :: List "HealthCheckObservation" HealthCheckObservation
+    } deriving (Eq, Show, Monoid, Semigroup)
+
+instance GHC.Exts.IsList GetHealthCheckStatusResponse where
+    type Item GetHealthCheckStatusResponse = HealthCheckObservation
+
+    fromList = GetHealthCheckStatusResponse . GHC.Exts.fromList
+    toList   = GHC.Exts.toList . _ghcsrHealthCheckObservations
+
+-- | 'GetHealthCheckStatusResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ghcsrHealthCheckObservations' @::@ ['HealthCheckObservation']
+--
+getHealthCheckStatusResponse :: GetHealthCheckStatusResponse
+getHealthCheckStatusResponse = GetHealthCheckStatusResponse
+    { _ghcsrHealthCheckObservations = mempty
+    }
+
+-- | A list that contains one HealthCheckObservation element for each Route 53
+-- health checker.
+ghcsrHealthCheckObservations :: Lens' GetHealthCheckStatusResponse [HealthCheckObservation]
+ghcsrHealthCheckObservations =
+    lens _ghcsrHealthCheckObservations
+        (\s a -> s { _ghcsrHealthCheckObservations = a })
+            . _List
+
+instance ToPath GetHealthCheckStatus where
+    toPath GetHealthCheckStatus{..} = mconcat
+        [ "/2013-04-01/healthcheck/"
+        , toText _ghcsHealthCheckId
+        , "/status"
+        ]
+
+instance ToQuery GetHealthCheckStatus where
+    toQuery = const mempty
+
+instance ToHeaders GetHealthCheckStatus
+
+instance ToXMLRoot GetHealthCheckStatus where
+    toXMLRoot = const (namespaced ns "GetHealthCheckStatus" [])
+
+instance ToXML GetHealthCheckStatus
+
+instance AWSRequest GetHealthCheckStatus where
+    type Sv GetHealthCheckStatus = Route53
+    type Rs GetHealthCheckStatus = GetHealthCheckStatusResponse
+
+    request  = get
+    response = xmlResponse
+
+instance FromXML GetHealthCheckStatusResponse where
+    parseXML x = GetHealthCheckStatusResponse
+        <$> x .@  "HealthCheckObservations"
diff --git a/gen/Network/AWS/Route53/GetHostedZone.hs b/gen/Network/AWS/Route53/GetHostedZone.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/GetHostedZone.hs
@@ -0,0 +1,142 @@
+{-# 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.Route53.GetHostedZone
+-- 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)
+
+-- | To retrieve the delegation set for a hosted zone, send a GET request to the
+-- 2013-04-01/hostedzone/hosted zone ID resource. The delegation set is the
+-- four Route 53 name servers that were assigned to the hosted zone when you
+-- created it.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetHostedZone.html>
+module Network.AWS.Route53.GetHostedZone
+    (
+    -- * Request
+      GetHostedZone
+    -- ** Request constructor
+    , getHostedZone
+    -- ** Request lenses
+    , ghzId
+
+    -- * Response
+    , GetHostedZoneResponse
+    -- ** Response constructor
+    , getHostedZoneResponse
+    -- ** Response lenses
+    , ghzrDelegationSet
+    , ghzrHostedZone
+    , ghzrVPCs
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+newtype GetHostedZone = GetHostedZone
+    { _ghzId :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'GetHostedZone' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ghzId' @::@ 'Text'
+--
+getHostedZone :: Text -- ^ 'ghzId'
+              -> GetHostedZone
+getHostedZone p1 = GetHostedZone
+    { _ghzId = p1
+    }
+
+-- | The ID of the hosted zone for which you want to get a list of the name
+-- servers in the delegation set.
+ghzId :: Lens' GetHostedZone Text
+ghzId = lens _ghzId (\s a -> s { _ghzId = a })
+
+data GetHostedZoneResponse = GetHostedZoneResponse
+    { _ghzrDelegationSet :: Maybe DelegationSet
+    , _ghzrHostedZone    :: HostedZone
+    , _ghzrVPCs          :: List1 "VPC" VPC
+    } deriving (Eq, Show)
+
+-- | 'GetHostedZoneResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ghzrDelegationSet' @::@ 'Maybe' 'DelegationSet'
+--
+-- * 'ghzrHostedZone' @::@ 'HostedZone'
+--
+-- * 'ghzrVPCs' @::@ 'NonEmpty' 'VPC'
+--
+getHostedZoneResponse :: HostedZone -- ^ 'ghzrHostedZone'
+                      -> NonEmpty VPC -- ^ 'ghzrVPCs'
+                      -> GetHostedZoneResponse
+getHostedZoneResponse p1 p2 = GetHostedZoneResponse
+    { _ghzrHostedZone    = p1
+    , _ghzrVPCs          = withIso _List1 (const id) p2
+    , _ghzrDelegationSet = Nothing
+    }
+
+-- | A complex type that contains information about the name servers for the
+-- specified hosted zone.
+ghzrDelegationSet :: Lens' GetHostedZoneResponse (Maybe DelegationSet)
+ghzrDelegationSet =
+    lens _ghzrDelegationSet (\s a -> s { _ghzrDelegationSet = a })
+
+-- | A complex type that contains the information about the specified hosted
+-- zone.
+ghzrHostedZone :: Lens' GetHostedZoneResponse HostedZone
+ghzrHostedZone = lens _ghzrHostedZone (\s a -> s { _ghzrHostedZone = a })
+
+-- | A complex type that contains information about VPCs associated with the
+-- specified hosted zone.
+ghzrVPCs :: Lens' GetHostedZoneResponse (NonEmpty VPC)
+ghzrVPCs = lens _ghzrVPCs (\s a -> s { _ghzrVPCs = a }) . _List1
+
+instance ToPath GetHostedZone where
+    toPath GetHostedZone{..} = mconcat
+        [ "/2013-04-01/hostedzone/"
+        , toText _ghzId
+        ]
+
+instance ToQuery GetHostedZone where
+    toQuery = const mempty
+
+instance ToHeaders GetHostedZone
+
+instance ToXMLRoot GetHostedZone where
+    toXMLRoot = const (namespaced ns "GetHostedZone" [])
+
+instance ToXML GetHostedZone
+
+instance AWSRequest GetHostedZone where
+    type Sv GetHostedZone = Route53
+    type Rs GetHostedZone = GetHostedZoneResponse
+
+    request  = get
+    response = xmlResponse
+
+instance FromXML GetHostedZoneResponse where
+    parseXML x = GetHostedZoneResponse
+        <$> x .@? "DelegationSet"
+        <*> x .@  "HostedZone"
+        <*> x .@  "VPCs"
diff --git a/gen/Network/AWS/Route53/GetReusableDelegationSet.hs b/gen/Network/AWS/Route53/GetReusableDelegationSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/GetReusableDelegationSet.hs
@@ -0,0 +1,117 @@
+{-# 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.Route53.GetReusableDelegationSet
+-- 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)
+
+-- | To retrieve the reusable delegation set, send a GET request to the
+-- 2013-04-01/delegationset/delegation set ID resource.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetReusableDelegationSet.html>
+module Network.AWS.Route53.GetReusableDelegationSet
+    (
+    -- * Request
+      GetReusableDelegationSet
+    -- ** Request constructor
+    , getReusableDelegationSet
+    -- ** Request lenses
+    , grdsId
+
+    -- * Response
+    , GetReusableDelegationSetResponse
+    -- ** Response constructor
+    , getReusableDelegationSetResponse
+    -- ** Response lenses
+    , grdsrDelegationSet
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+newtype GetReusableDelegationSet = GetReusableDelegationSet
+    { _grdsId :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'GetReusableDelegationSet' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'grdsId' @::@ 'Text'
+--
+getReusableDelegationSet :: Text -- ^ 'grdsId'
+                         -> GetReusableDelegationSet
+getReusableDelegationSet p1 = GetReusableDelegationSet
+    { _grdsId = p1
+    }
+
+-- | The ID of the reusable delegation set for which you want to get a list of
+-- the name server.
+grdsId :: Lens' GetReusableDelegationSet Text
+grdsId = lens _grdsId (\s a -> s { _grdsId = a })
+
+newtype GetReusableDelegationSetResponse = GetReusableDelegationSetResponse
+    { _grdsrDelegationSet :: DelegationSet
+    } deriving (Eq, Show)
+
+-- | 'GetReusableDelegationSetResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'grdsrDelegationSet' @::@ 'DelegationSet'
+--
+getReusableDelegationSetResponse :: DelegationSet -- ^ 'grdsrDelegationSet'
+                                 -> GetReusableDelegationSetResponse
+getReusableDelegationSetResponse p1 = GetReusableDelegationSetResponse
+    { _grdsrDelegationSet = p1
+    }
+
+-- | A complex type that contains the information about the nameservers for
+-- the specified delegation set ID.
+grdsrDelegationSet :: Lens' GetReusableDelegationSetResponse DelegationSet
+grdsrDelegationSet =
+    lens _grdsrDelegationSet (\s a -> s { _grdsrDelegationSet = a })
+
+instance ToPath GetReusableDelegationSet where
+    toPath GetReusableDelegationSet{..} = mconcat
+        [ "/2013-04-01/delegationset/"
+        , toText _grdsId
+        ]
+
+instance ToQuery GetReusableDelegationSet where
+    toQuery = const mempty
+
+instance ToHeaders GetReusableDelegationSet
+
+instance ToXMLRoot GetReusableDelegationSet where
+    toXMLRoot = const (namespaced ns "GetReusableDelegationSet" [])
+
+instance ToXML GetReusableDelegationSet
+
+instance AWSRequest GetReusableDelegationSet where
+    type Sv GetReusableDelegationSet = Route53
+    type Rs GetReusableDelegationSet = GetReusableDelegationSetResponse
+
+    request  = get
+    response = xmlResponse
+
+instance FromXML GetReusableDelegationSetResponse where
+    parseXML x = GetReusableDelegationSetResponse
+        <$> x .@  "DelegationSet"
diff --git a/gen/Network/AWS/Route53/ListGeoLocations.hs b/gen/Network/AWS/Route53/ListGeoLocations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/ListGeoLocations.hs
@@ -0,0 +1,239 @@
+{-# 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.Route53.ListGeoLocations
+-- 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)
+
+-- | To retrieve a list of supported geo locations, send a GET request to the
+-- 2013-04-01/geolocations resource. The response to this request includes a
+-- GeoLocationDetailsList element with zero, one, or multiple
+-- GeoLocationDetails child elements. The list is sorted by country code, and
+-- then subdivision code, followed by continents at the end of the list. By
+-- default, the list of geo locations is displayed on a single page. You can
+-- control the length of the page that is displayed by using the MaxItems
+-- parameter. If the list is truncated, IsTruncated will be set to true and a
+-- combination of NextContinentCode, NextCountryCode, NextSubdivisionCode will
+-- be populated. You can pass these as parameters to StartContinentCode,
+-- StartCountryCode, StartSubdivisionCode to control the geo location that the
+-- list begins with.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListGeoLocations.html>
+module Network.AWS.Route53.ListGeoLocations
+    (
+    -- * Request
+      ListGeoLocations
+    -- ** Request constructor
+    , listGeoLocations
+    -- ** Request lenses
+    , lglMaxItems
+    , lglStartContinentCode
+    , lglStartCountryCode
+    , lglStartSubdivisionCode
+
+    -- * Response
+    , ListGeoLocationsResponse
+    -- ** Response constructor
+    , listGeoLocationsResponse
+    -- ** Response lenses
+    , lglrGeoLocationDetailsList
+    , lglrIsTruncated
+    , lglrMaxItems
+    , lglrNextContinentCode
+    , lglrNextCountryCode
+    , lglrNextSubdivisionCode
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+data ListGeoLocations = ListGeoLocations
+    { _lglMaxItems             :: Maybe Text
+    , _lglStartContinentCode   :: Maybe Text
+    , _lglStartCountryCode     :: Maybe Text
+    , _lglStartSubdivisionCode :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'ListGeoLocations' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'lglMaxItems' @::@ 'Maybe' 'Text'
+--
+-- * 'lglStartContinentCode' @::@ 'Maybe' 'Text'
+--
+-- * 'lglStartCountryCode' @::@ 'Maybe' 'Text'
+--
+-- * 'lglStartSubdivisionCode' @::@ 'Maybe' 'Text'
+--
+listGeoLocations :: ListGeoLocations
+listGeoLocations = ListGeoLocations
+    { _lglStartContinentCode   = Nothing
+    , _lglStartCountryCode     = Nothing
+    , _lglStartSubdivisionCode = Nothing
+    , _lglMaxItems             = Nothing
+    }
+
+-- | The maximum number of geo locations you want in the response body.
+lglMaxItems :: Lens' ListGeoLocations (Maybe Text)
+lglMaxItems = lens _lglMaxItems (\s a -> s { _lglMaxItems = a })
+
+-- | The first continent code in the lexicographic ordering of geo locations
+-- that you want the ListGeoLocations request to list. For non-continent geo
+-- locations, this should be null. Valid values: AF | AN | AS | EU | OC | NA
+-- | SA Constraint: Specifying ContinentCode with either CountryCode or
+-- SubdivisionCode returns an InvalidInput error.
+lglStartContinentCode :: Lens' ListGeoLocations (Maybe Text)
+lglStartContinentCode =
+    lens _lglStartContinentCode (\s a -> s { _lglStartContinentCode = a })
+
+-- | The first country code in the lexicographic ordering of geo locations
+-- that you want the ListGeoLocations request to list. The default geo
+-- location uses a * for the country code. All other country codes follow
+-- the ISO 3166 two-character code.
+lglStartCountryCode :: Lens' ListGeoLocations (Maybe Text)
+lglStartCountryCode =
+    lens _lglStartCountryCode (\s a -> s { _lglStartCountryCode = a })
+
+-- | The first subdivision code in the lexicographic ordering of geo locations
+-- that you want the ListGeoLocations request to list. Constraint:
+-- Specifying SubdivisionCode without CountryCode returns an InvalidInput
+-- error.
+lglStartSubdivisionCode :: Lens' ListGeoLocations (Maybe Text)
+lglStartSubdivisionCode =
+    lens _lglStartSubdivisionCode (\s a -> s { _lglStartSubdivisionCode = a })
+
+data ListGeoLocationsResponse = ListGeoLocationsResponse
+    { _lglrGeoLocationDetailsList :: List "GeoLocationDetails" GeoLocationDetails
+    , _lglrIsTruncated            :: Bool
+    , _lglrMaxItems               :: Text
+    , _lglrNextContinentCode      :: Maybe Text
+    , _lglrNextCountryCode        :: Maybe Text
+    , _lglrNextSubdivisionCode    :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'ListGeoLocationsResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'lglrGeoLocationDetailsList' @::@ ['GeoLocationDetails']
+--
+-- * 'lglrIsTruncated' @::@ 'Bool'
+--
+-- * 'lglrMaxItems' @::@ 'Text'
+--
+-- * 'lglrNextContinentCode' @::@ 'Maybe' 'Text'
+--
+-- * 'lglrNextCountryCode' @::@ 'Maybe' 'Text'
+--
+-- * 'lglrNextSubdivisionCode' @::@ 'Maybe' 'Text'
+--
+listGeoLocationsResponse :: Bool -- ^ 'lglrIsTruncated'
+                         -> Text -- ^ 'lglrMaxItems'
+                         -> ListGeoLocationsResponse
+listGeoLocationsResponse p1 p2 = ListGeoLocationsResponse
+    { _lglrIsTruncated            = p1
+    , _lglrMaxItems               = p2
+    , _lglrGeoLocationDetailsList = mempty
+    , _lglrNextContinentCode      = Nothing
+    , _lglrNextCountryCode        = Nothing
+    , _lglrNextSubdivisionCode    = Nothing
+    }
+
+-- | A complex type that contains information about the geo locations that are
+-- returned by the request.
+lglrGeoLocationDetailsList :: Lens' ListGeoLocationsResponse [GeoLocationDetails]
+lglrGeoLocationDetailsList =
+    lens _lglrGeoLocationDetailsList
+        (\s a -> s { _lglrGeoLocationDetailsList = a })
+            . _List
+
+-- | A flag that indicates whether there are more geo locations to be listed.
+-- If your results were truncated, you can make a follow-up request for the
+-- next page of results by using the values included in the
+-- ListGeoLocationsResponse$NextContinentCode,
+-- ListGeoLocationsResponse$NextCountryCode and
+-- ListGeoLocationsResponse$NextSubdivisionCode elements. Valid Values: true
+-- | false.
+lglrIsTruncated :: Lens' ListGeoLocationsResponse Bool
+lglrIsTruncated = lens _lglrIsTruncated (\s a -> s { _lglrIsTruncated = a })
+
+-- | The maximum number of records you requested. The maximum value of
+-- MaxItems is 100.
+lglrMaxItems :: Lens' ListGeoLocationsResponse Text
+lglrMaxItems = lens _lglrMaxItems (\s a -> s { _lglrMaxItems = a })
+
+-- | If the results were truncated, the continent code of the next geo
+-- location in the list. This element is present only if
+-- ListGeoLocationsResponse$IsTruncated is true and the next geo location to
+-- list is a continent location.
+lglrNextContinentCode :: Lens' ListGeoLocationsResponse (Maybe Text)
+lglrNextContinentCode =
+    lens _lglrNextContinentCode (\s a -> s { _lglrNextContinentCode = a })
+
+-- | If the results were truncated, the country code of the next geo location
+-- in the list. This element is present only if
+-- ListGeoLocationsResponse$IsTruncated is true and the next geo location to
+-- list is not a continent location.
+lglrNextCountryCode :: Lens' ListGeoLocationsResponse (Maybe Text)
+lglrNextCountryCode =
+    lens _lglrNextCountryCode (\s a -> s { _lglrNextCountryCode = a })
+
+-- | If the results were truncated, the subdivision code of the next geo
+-- location in the list. This element is present only if
+-- ListGeoLocationsResponse$IsTruncated is true and the next geo location
+-- has a subdivision.
+lglrNextSubdivisionCode :: Lens' ListGeoLocationsResponse (Maybe Text)
+lglrNextSubdivisionCode =
+    lens _lglrNextSubdivisionCode (\s a -> s { _lglrNextSubdivisionCode = a })
+
+instance ToPath ListGeoLocations where
+    toPath = const "/2013-04-01/geolocations"
+
+instance ToQuery ListGeoLocations where
+    toQuery ListGeoLocations{..} = mconcat
+        [ "maxitems"             =? _lglMaxItems
+        , "startcontinentcode"   =? _lglStartContinentCode
+        , "startcountrycode"     =? _lglStartCountryCode
+        , "startsubdivisioncode" =? _lglStartSubdivisionCode
+        ]
+
+instance ToHeaders ListGeoLocations
+
+instance ToXMLRoot ListGeoLocations where
+    toXMLRoot = const (namespaced ns "ListGeoLocations" [])
+
+instance ToXML ListGeoLocations
+
+instance AWSRequest ListGeoLocations where
+    type Sv ListGeoLocations = Route53
+    type Rs ListGeoLocations = ListGeoLocationsResponse
+
+    request  = get
+    response = xmlResponse
+
+instance FromXML ListGeoLocationsResponse where
+    parseXML x = ListGeoLocationsResponse
+        <$> x .@  "GeoLocationDetailsList"
+        <*> x .@  "IsTruncated"
+        <*> x .@  "MaxItems"
+        <*> x .@? "NextContinentCode"
+        <*> x .@? "NextCountryCode"
+        <*> x .@? "NextSubdivisionCode"
diff --git a/gen/Network/AWS/Route53/ListHealthChecks.hs b/gen/Network/AWS/Route53/ListHealthChecks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/ListHealthChecks.hs
@@ -0,0 +1,194 @@
+{-# 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.Route53.ListHealthChecks
+-- 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)
+
+-- | To retrieve a list of your health checks, send a GET request to the
+-- 2013-04-01/healthcheck resource. The response to this request includes a
+-- HealthChecks element with zero, one, or multiple HealthCheck child
+-- elements. By default, the list of health checks is displayed on a single
+-- page. You can control the length of the page that is displayed by using the
+-- MaxItems parameter. You can use the Marker parameter to control the health
+-- check that the list begins with. Amazon Route 53 returns a maximum of 100
+-- items. If you set MaxItems to a value greater than 100, Amazon Route 53
+-- returns only the first 100.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListHealthChecks.html>
+module Network.AWS.Route53.ListHealthChecks
+    (
+    -- * Request
+      ListHealthChecks
+    -- ** Request constructor
+    , listHealthChecks
+    -- ** Request lenses
+    , lhcMarker
+    , lhcMaxItems
+
+    -- * Response
+    , ListHealthChecksResponse
+    -- ** Response constructor
+    , listHealthChecksResponse
+    -- ** Response lenses
+    , lhcrHealthChecks
+    , lhcrIsTruncated
+    , lhcrMarker
+    , lhcrMaxItems
+    , lhcrNextMarker
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+data ListHealthChecks = ListHealthChecks
+    { _lhcMarker   :: Maybe Text
+    , _lhcMaxItems :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'ListHealthChecks' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'lhcMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'lhcMaxItems' @::@ 'Maybe' 'Text'
+--
+listHealthChecks :: ListHealthChecks
+listHealthChecks = ListHealthChecks
+    { _lhcMarker   = Nothing
+    , _lhcMaxItems = Nothing
+    }
+
+-- | If the request returned more than one page of results, submit another
+-- request and specify the value of NextMarker from the last response in the
+-- marker parameter to get the next page of results.
+lhcMarker :: Lens' ListHealthChecks (Maybe Text)
+lhcMarker = lens _lhcMarker (\s a -> s { _lhcMarker = a })
+
+-- | Specify the maximum number of health checks to return per page of
+-- results.
+lhcMaxItems :: Lens' ListHealthChecks (Maybe Text)
+lhcMaxItems = lens _lhcMaxItems (\s a -> s { _lhcMaxItems = a })
+
+data ListHealthChecksResponse = ListHealthChecksResponse
+    { _lhcrHealthChecks :: List "HealthCheck" HealthCheck
+    , _lhcrIsTruncated  :: Bool
+    , _lhcrMarker       :: Text
+    , _lhcrMaxItems     :: Text
+    , _lhcrNextMarker   :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'ListHealthChecksResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'lhcrHealthChecks' @::@ ['HealthCheck']
+--
+-- * 'lhcrIsTruncated' @::@ 'Bool'
+--
+-- * 'lhcrMarker' @::@ 'Text'
+--
+-- * 'lhcrMaxItems' @::@ 'Text'
+--
+-- * 'lhcrNextMarker' @::@ 'Maybe' 'Text'
+--
+listHealthChecksResponse :: Text -- ^ 'lhcrMarker'
+                         -> Bool -- ^ 'lhcrIsTruncated'
+                         -> Text -- ^ 'lhcrMaxItems'
+                         -> ListHealthChecksResponse
+listHealthChecksResponse p1 p2 p3 = ListHealthChecksResponse
+    { _lhcrMarker       = p1
+    , _lhcrIsTruncated  = p2
+    , _lhcrMaxItems     = p3
+    , _lhcrHealthChecks = mempty
+    , _lhcrNextMarker   = Nothing
+    }
+
+-- | A complex type that contains information about the health checks
+-- associated with the current AWS account.
+lhcrHealthChecks :: Lens' ListHealthChecksResponse [HealthCheck]
+lhcrHealthChecks = lens _lhcrHealthChecks (\s a -> s { _lhcrHealthChecks = a }) . _List
+
+-- | A flag indicating whether there are more health checks to be listed. If
+-- your results were truncated, you can make a follow-up request for the
+-- next page of results by using the Marker element. Valid Values: true |
+-- false.
+lhcrIsTruncated :: Lens' ListHealthChecksResponse Bool
+lhcrIsTruncated = lens _lhcrIsTruncated (\s a -> s { _lhcrIsTruncated = a })
+
+-- | If the request returned more than one page of results, submit another
+-- request and specify the value of NextMarker from the last response in the
+-- marker parameter to get the next page of results.
+lhcrMarker :: Lens' ListHealthChecksResponse Text
+lhcrMarker = lens _lhcrMarker (\s a -> s { _lhcrMarker = a })
+
+-- | The maximum number of health checks to be included in the response body.
+-- If the number of health checks associated with this AWS account exceeds
+-- MaxItems, the value of ListHealthChecksResponse$IsTruncated in the
+-- response is true. Call ListHealthChecks again and specify the value of
+-- ListHealthChecksResponse$NextMarker in the ListHostedZonesRequest$Marker
+-- element to get the next page of results.
+lhcrMaxItems :: Lens' ListHealthChecksResponse Text
+lhcrMaxItems = lens _lhcrMaxItems (\s a -> s { _lhcrMaxItems = a })
+
+-- | Indicates where to continue listing health checks. If
+-- ListHealthChecksResponse$IsTruncated is true, make another request to
+-- ListHealthChecks and include the value of the NextMarker element in the
+-- Marker element to get the next page of results.
+lhcrNextMarker :: Lens' ListHealthChecksResponse (Maybe Text)
+lhcrNextMarker = lens _lhcrNextMarker (\s a -> s { _lhcrNextMarker = a })
+
+instance ToPath ListHealthChecks where
+    toPath = const "/2013-04-01/healthcheck"
+
+instance ToQuery ListHealthChecks where
+    toQuery ListHealthChecks{..} = mconcat
+        [ "marker"   =? _lhcMarker
+        , "maxitems" =? _lhcMaxItems
+        ]
+
+instance ToHeaders ListHealthChecks
+
+instance ToXMLRoot ListHealthChecks where
+    toXMLRoot = const (namespaced ns "ListHealthChecks" [])
+
+instance ToXML ListHealthChecks
+
+instance AWSRequest ListHealthChecks where
+    type Sv ListHealthChecks = Route53
+    type Rs ListHealthChecks = ListHealthChecksResponse
+
+    request  = get
+    response = xmlResponse
+
+instance FromXML ListHealthChecksResponse where
+    parseXML x = ListHealthChecksResponse
+        <$> x .@  "HealthChecks"
+        <*> x .@  "IsTruncated"
+        <*> x .@  "Marker"
+        <*> x .@  "MaxItems"
+        <*> x .@? "NextMarker"
+
+instance AWSPager ListHealthChecks where
+    page rq rs
+        | stop (rs ^. lhcrIsTruncated) = Nothing
+        | otherwise = Just $ rq
+            & lhcMarker .~ rs ^. lhcrNextMarker
diff --git a/gen/Network/AWS/Route53/ListHostedZones.hs b/gen/Network/AWS/Route53/ListHostedZones.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/ListHostedZones.hs
@@ -0,0 +1,203 @@
+{-# 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.Route53.ListHostedZones
+-- 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)
+
+-- | To retrieve a list of your hosted zones, send a GET request to the
+-- 2013-04-01/hostedzone resource. The response to this request includes a
+-- HostedZones element with zero, one, or multiple HostedZone child elements.
+-- By default, the list of hosted zones is displayed on a single page. You can
+-- control the length of the page that is displayed by using the MaxItems
+-- parameter. You can use the Marker parameter to control the hosted zone that
+-- the list begins with. Amazon Route 53 returns a maximum of 100 items. If
+-- you set MaxItems to a value greater than 100, Amazon Route 53 returns only
+-- the first 100.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListHostedZones.html>
+module Network.AWS.Route53.ListHostedZones
+    (
+    -- * Request
+      ListHostedZones
+    -- ** Request constructor
+    , listHostedZones
+    -- ** Request lenses
+    , lhzDelegationSetId
+    , lhzMarker
+    , lhzMaxItems
+
+    -- * Response
+    , ListHostedZonesResponse
+    -- ** Response constructor
+    , listHostedZonesResponse
+    -- ** Response lenses
+    , lhzrHostedZones
+    , lhzrIsTruncated
+    , lhzrMarker
+    , lhzrMaxItems
+    , lhzrNextMarker
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+data ListHostedZones = ListHostedZones
+    { _lhzDelegationSetId :: Maybe Text
+    , _lhzMarker          :: Maybe Text
+    , _lhzMaxItems        :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'ListHostedZones' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'lhzDelegationSetId' @::@ 'Maybe' 'Text'
+--
+-- * 'lhzMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'lhzMaxItems' @::@ 'Maybe' 'Text'
+--
+listHostedZones :: ListHostedZones
+listHostedZones = ListHostedZones
+    { _lhzMarker          = Nothing
+    , _lhzMaxItems        = Nothing
+    , _lhzDelegationSetId = Nothing
+    }
+
+lhzDelegationSetId :: Lens' ListHostedZones (Maybe Text)
+lhzDelegationSetId =
+    lens _lhzDelegationSetId (\s a -> s { _lhzDelegationSetId = a })
+
+-- | If the request returned more than one page of results, submit another
+-- request and specify the value of NextMarker from the last response in the
+-- marker parameter to get the next page of results.
+lhzMarker :: Lens' ListHostedZones (Maybe Text)
+lhzMarker = lens _lhzMarker (\s a -> s { _lhzMarker = a })
+
+-- | Specify the maximum number of hosted zones to return per page of results.
+lhzMaxItems :: Lens' ListHostedZones (Maybe Text)
+lhzMaxItems = lens _lhzMaxItems (\s a -> s { _lhzMaxItems = a })
+
+data ListHostedZonesResponse = ListHostedZonesResponse
+    { _lhzrHostedZones :: List "HostedZone" HostedZone
+    , _lhzrIsTruncated :: Bool
+    , _lhzrMarker      :: Text
+    , _lhzrMaxItems    :: Text
+    , _lhzrNextMarker  :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'ListHostedZonesResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'lhzrHostedZones' @::@ ['HostedZone']
+--
+-- * 'lhzrIsTruncated' @::@ 'Bool'
+--
+-- * 'lhzrMarker' @::@ 'Text'
+--
+-- * 'lhzrMaxItems' @::@ 'Text'
+--
+-- * 'lhzrNextMarker' @::@ 'Maybe' 'Text'
+--
+listHostedZonesResponse :: Text -- ^ 'lhzrMarker'
+                        -> Bool -- ^ 'lhzrIsTruncated'
+                        -> Text -- ^ 'lhzrMaxItems'
+                        -> ListHostedZonesResponse
+listHostedZonesResponse p1 p2 p3 = ListHostedZonesResponse
+    { _lhzrMarker      = p1
+    , _lhzrIsTruncated = p2
+    , _lhzrMaxItems    = p3
+    , _lhzrHostedZones = mempty
+    , _lhzrNextMarker  = Nothing
+    }
+
+-- | A complex type that contains information about the hosted zones
+-- associated with the current AWS account.
+lhzrHostedZones :: Lens' ListHostedZonesResponse [HostedZone]
+lhzrHostedZones = lens _lhzrHostedZones (\s a -> s { _lhzrHostedZones = a }) . _List
+
+-- | A flag indicating whether there are more hosted zones to be listed. If
+-- your results were truncated, you can make a follow-up request for the
+-- next page of results by using the Marker element. Valid Values: true |
+-- false.
+lhzrIsTruncated :: Lens' ListHostedZonesResponse Bool
+lhzrIsTruncated = lens _lhzrIsTruncated (\s a -> s { _lhzrIsTruncated = a })
+
+-- | If the request returned more than one page of results, submit another
+-- request and specify the value of NextMarker from the last response in the
+-- marker parameter to get the next page of results.
+lhzrMarker :: Lens' ListHostedZonesResponse Text
+lhzrMarker = lens _lhzrMarker (\s a -> s { _lhzrMarker = a })
+
+-- | The maximum number of hosted zones to be included in the response body.
+-- If the number of hosted zones associated with this AWS account exceeds
+-- MaxItems, the value of ListHostedZonesResponse$IsTruncated in the
+-- response is true. Call ListHostedZones again and specify the value of
+-- ListHostedZonesResponse$NextMarker in the ListHostedZonesRequest$Marker
+-- element to get the next page of results.
+lhzrMaxItems :: Lens' ListHostedZonesResponse Text
+lhzrMaxItems = lens _lhzrMaxItems (\s a -> s { _lhzrMaxItems = a })
+
+-- | Indicates where to continue listing hosted zones. If
+-- ListHostedZonesResponse$IsTruncated is true, make another request to
+-- ListHostedZones and include the value of the NextMarker element in the
+-- Marker element to get the next page of results.
+lhzrNextMarker :: Lens' ListHostedZonesResponse (Maybe Text)
+lhzrNextMarker = lens _lhzrNextMarker (\s a -> s { _lhzrNextMarker = a })
+
+instance ToPath ListHostedZones where
+    toPath = const "/2013-04-01/hostedzone"
+
+instance ToQuery ListHostedZones where
+    toQuery ListHostedZones{..} = mconcat
+        [ "delegationsetid" =? _lhzDelegationSetId
+        , "marker"          =? _lhzMarker
+        , "maxitems"        =? _lhzMaxItems
+        ]
+
+instance ToHeaders ListHostedZones
+
+instance ToXMLRoot ListHostedZones where
+    toXMLRoot = const (namespaced ns "ListHostedZones" [])
+
+instance ToXML ListHostedZones
+
+instance AWSRequest ListHostedZones where
+    type Sv ListHostedZones = Route53
+    type Rs ListHostedZones = ListHostedZonesResponse
+
+    request  = get
+    response = xmlResponse
+
+instance FromXML ListHostedZonesResponse where
+    parseXML x = ListHostedZonesResponse
+        <$> x .@  "HostedZones"
+        <*> x .@  "IsTruncated"
+        <*> x .@  "Marker"
+        <*> x .@  "MaxItems"
+        <*> x .@? "NextMarker"
+
+instance AWSPager ListHostedZones where
+    page rq rs
+        | stop (rs ^. lhzrIsTruncated) = Nothing
+        | otherwise = Just $ rq
+            & lhzMarker .~ rs ^. lhzrNextMarker
diff --git a/gen/Network/AWS/Route53/ListResourceRecordSets.hs b/gen/Network/AWS/Route53/ListResourceRecordSets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/ListResourceRecordSets.hs
@@ -0,0 +1,283 @@
+{-# 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.Route53.ListResourceRecordSets
+-- 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)
+
+-- | Imagine all the resource record sets in a zone listed out in front of you.
+-- Imagine them sorted lexicographically first by DNS name (with the labels
+-- reversed, like "com.amazon.www" for example), and secondarily,
+-- lexicographically by record type. This operation retrieves at most MaxItems
+-- resource record sets from this list, in order, starting at a position
+-- specified by the Name and Type arguments: If both Name and Type are
+-- omitted, this means start the results at the first RRSET in the HostedZone.
+-- If Name is specified but Type is omitted, this means start the results at
+-- the first RRSET in the list whose name is greater than or equal to Name. If
+-- both Name and Type are specified, this means start the results at the first
+-- RRSET in the list whose name is greater than or equal to Name and whose
+-- type is greater than or equal to Type. It is an error to specify the Type
+-- but not the Name. Use ListResourceRecordSets to retrieve a single known
+-- record set by specifying the record set's name and type, and setting
+-- MaxItems = 1 To retrieve all the records in a HostedZone, first pause any
+-- processes making calls to ChangeResourceRecordSets. Initially call
+-- ListResourceRecordSets without a Name and Type to get the first page of
+-- record sets. For subsequent calls, set Name and Type to the NextName and
+-- NextType values returned by the previous response. In the presence of
+-- concurrent ChangeResourceRecordSets calls, there is no consistency of
+-- results across calls to ListResourceRecordSets. The only way to get a
+-- consistent multi-page snapshot of all RRSETs in a zone is to stop making
+-- changes while pagination is in progress. However, the results from
+-- ListResourceRecordSets are consistent within a page. If MakeChange calls
+-- are taking place concurrently, the result of each one will either be
+-- completely visible in your results or not at all. You will not see partial
+-- changes, or changes that do not ultimately succeed. (This follows from the
+-- fact that MakeChange is atomic) The results from ListResourceRecordSets are
+-- strongly consistent with ChangeResourceRecordSets. To be precise, if a
+-- single process makes a call to ChangeResourceRecordSets and receives a
+-- successful response, the effects of that change will be visible in a
+-- subsequent call to ListResourceRecordSets by that process.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListResourceRecordSets.html>
+module Network.AWS.Route53.ListResourceRecordSets
+    (
+    -- * Request
+      ListResourceRecordSets
+    -- ** Request constructor
+    , listResourceRecordSets
+    -- ** Request lenses
+    , lrrsHostedZoneId
+    , lrrsMaxItems
+    , lrrsStartRecordIdentifier
+    , lrrsStartRecordName
+    , lrrsStartRecordType
+
+    -- * Response
+    , ListResourceRecordSetsResponse
+    -- ** Response constructor
+    , listResourceRecordSetsResponse
+    -- ** Response lenses
+    , lrrsrIsTruncated
+    , lrrsrMaxItems
+    , lrrsrNextRecordIdentifier
+    , lrrsrNextRecordName
+    , lrrsrNextRecordType
+    , lrrsrResourceRecordSets
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+data ListResourceRecordSets = ListResourceRecordSets
+    { _lrrsHostedZoneId          :: Text
+    , _lrrsMaxItems              :: Maybe Text
+    , _lrrsStartRecordIdentifier :: Maybe Text
+    , _lrrsStartRecordName       :: Maybe Text
+    , _lrrsStartRecordType       :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'ListResourceRecordSets' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'lrrsHostedZoneId' @::@ 'Text'
+--
+-- * 'lrrsMaxItems' @::@ 'Maybe' 'Text'
+--
+-- * 'lrrsStartRecordIdentifier' @::@ 'Maybe' 'Text'
+--
+-- * 'lrrsStartRecordName' @::@ 'Maybe' 'Text'
+--
+-- * 'lrrsStartRecordType' @::@ 'Maybe' 'Text'
+--
+listResourceRecordSets :: Text -- ^ 'lrrsHostedZoneId'
+                       -> ListResourceRecordSets
+listResourceRecordSets p1 = ListResourceRecordSets
+    { _lrrsHostedZoneId          = p1
+    , _lrrsStartRecordName       = Nothing
+    , _lrrsStartRecordType       = Nothing
+    , _lrrsStartRecordIdentifier = Nothing
+    , _lrrsMaxItems              = Nothing
+    }
+
+-- | The ID of the hosted zone that contains the resource record sets that you
+-- want to get.
+lrrsHostedZoneId :: Lens' ListResourceRecordSets Text
+lrrsHostedZoneId = lens _lrrsHostedZoneId (\s a -> s { _lrrsHostedZoneId = a })
+
+-- | The maximum number of records you want in the response body.
+lrrsMaxItems :: Lens' ListResourceRecordSets (Maybe Text)
+lrrsMaxItems = lens _lrrsMaxItems (\s a -> s { _lrrsMaxItems = a })
+
+-- | Weighted resource record sets only: If results were truncated for a given
+-- DNS name and type, specify the value of
+-- ListResourceRecordSetsResponse$NextRecordIdentifier from the previous
+-- response to get the next resource record set that has the current DNS
+-- name and type.
+lrrsStartRecordIdentifier :: Lens' ListResourceRecordSets (Maybe Text)
+lrrsStartRecordIdentifier =
+    lens _lrrsStartRecordIdentifier
+        (\s a -> s { _lrrsStartRecordIdentifier = a })
+
+-- | The first name in the lexicographic ordering of domain names that you
+-- want the ListResourceRecordSets request to list.
+lrrsStartRecordName :: Lens' ListResourceRecordSets (Maybe Text)
+lrrsStartRecordName =
+    lens _lrrsStartRecordName (\s a -> s { _lrrsStartRecordName = a })
+
+-- | The DNS type at which to begin the listing of resource record sets. Valid
+-- values: A | AAAA | CNAME | MX | NS | PTR | SOA | SPF | SRV | TXT Values
+-- for Weighted Resource Record Sets: A | AAAA | CNAME | TXT Values for
+-- Regional Resource Record Sets: A | AAAA | CNAME | TXT Values for Alias
+-- Resource Record Sets: A | AAAA Constraint: Specifying type without
+-- specifying name returns an InvalidInput error.
+lrrsStartRecordType :: Lens' ListResourceRecordSets (Maybe Text)
+lrrsStartRecordType =
+    lens _lrrsStartRecordType (\s a -> s { _lrrsStartRecordType = a })
+
+data ListResourceRecordSetsResponse = ListResourceRecordSetsResponse
+    { _lrrsrIsTruncated          :: Bool
+    , _lrrsrMaxItems             :: Text
+    , _lrrsrNextRecordIdentifier :: Maybe Text
+    , _lrrsrNextRecordName       :: Maybe Text
+    , _lrrsrNextRecordType       :: Maybe Text
+    , _lrrsrResourceRecordSets   :: List "ResourceRecordSet" ResourceRecordSet
+    } deriving (Eq, Show)
+
+-- | 'ListResourceRecordSetsResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'lrrsrIsTruncated' @::@ 'Bool'
+--
+-- * 'lrrsrMaxItems' @::@ 'Text'
+--
+-- * 'lrrsrNextRecordIdentifier' @::@ 'Maybe' 'Text'
+--
+-- * 'lrrsrNextRecordName' @::@ 'Maybe' 'Text'
+--
+-- * 'lrrsrNextRecordType' @::@ 'Maybe' 'Text'
+--
+-- * 'lrrsrResourceRecordSets' @::@ ['ResourceRecordSet']
+--
+listResourceRecordSetsResponse :: Bool -- ^ 'lrrsrIsTruncated'
+                               -> Text -- ^ 'lrrsrMaxItems'
+                               -> ListResourceRecordSetsResponse
+listResourceRecordSetsResponse p1 p2 = ListResourceRecordSetsResponse
+    { _lrrsrIsTruncated          = p1
+    , _lrrsrMaxItems             = p2
+    , _lrrsrResourceRecordSets   = mempty
+    , _lrrsrNextRecordName       = Nothing
+    , _lrrsrNextRecordType       = Nothing
+    , _lrrsrNextRecordIdentifier = Nothing
+    }
+
+-- | A flag that indicates whether there are more resource record sets to be
+-- listed. If your results were truncated, you can make a follow-up request
+-- for the next page of results by using the
+-- ListResourceRecordSetsResponse$NextRecordName element. Valid Values: true
+-- | false.
+lrrsrIsTruncated :: Lens' ListResourceRecordSetsResponse Bool
+lrrsrIsTruncated = lens _lrrsrIsTruncated (\s a -> s { _lrrsrIsTruncated = a })
+
+-- | The maximum number of records you requested. The maximum value of
+-- MaxItems is 100.
+lrrsrMaxItems :: Lens' ListResourceRecordSetsResponse Text
+lrrsrMaxItems = lens _lrrsrMaxItems (\s a -> s { _lrrsrMaxItems = a })
+
+-- | Weighted resource record sets only: If results were truncated for a given
+-- DNS name and type, the value of SetIdentifier for the next resource
+-- record set that has the current DNS name and type.
+lrrsrNextRecordIdentifier :: Lens' ListResourceRecordSetsResponse (Maybe Text)
+lrrsrNextRecordIdentifier =
+    lens _lrrsrNextRecordIdentifier
+        (\s a -> s { _lrrsrNextRecordIdentifier = a })
+
+-- | If the results were truncated, the name of the next record in the list.
+-- This element is present only if
+-- ListResourceRecordSetsResponse$IsTruncated is true.
+lrrsrNextRecordName :: Lens' ListResourceRecordSetsResponse (Maybe Text)
+lrrsrNextRecordName =
+    lens _lrrsrNextRecordName (\s a -> s { _lrrsrNextRecordName = a })
+
+-- | If the results were truncated, the type of the next record in the list.
+-- This element is present only if
+-- ListResourceRecordSetsResponse$IsTruncated is true.
+lrrsrNextRecordType :: Lens' ListResourceRecordSetsResponse (Maybe Text)
+lrrsrNextRecordType =
+    lens _lrrsrNextRecordType (\s a -> s { _lrrsrNextRecordType = a })
+
+-- | A complex type that contains information about the resource record sets
+-- that are returned by the request.
+lrrsrResourceRecordSets :: Lens' ListResourceRecordSetsResponse [ResourceRecordSet]
+lrrsrResourceRecordSets =
+    lens _lrrsrResourceRecordSets (\s a -> s { _lrrsrResourceRecordSets = a })
+        . _List
+
+instance ToPath ListResourceRecordSets where
+    toPath ListResourceRecordSets{..} = mconcat
+        [ "/2013-04-01/hostedzone/"
+        , toText _lrrsHostedZoneId
+        , "/rrset"
+        ]
+
+instance ToQuery ListResourceRecordSets where
+    toQuery ListResourceRecordSets{..} = mconcat
+        [ "name"       =? _lrrsStartRecordName
+        , "type"       =? _lrrsStartRecordType
+        , "identifier" =? _lrrsStartRecordIdentifier
+        , "maxitems"   =? _lrrsMaxItems
+        ]
+
+instance ToHeaders ListResourceRecordSets
+
+instance ToXMLRoot ListResourceRecordSets where
+    toXMLRoot = const (namespaced ns "ListResourceRecordSets" [])
+
+instance ToXML ListResourceRecordSets
+
+instance AWSRequest ListResourceRecordSets where
+    type Sv ListResourceRecordSets = Route53
+    type Rs ListResourceRecordSets = ListResourceRecordSetsResponse
+
+    request  = get
+    response = xmlResponse
+
+instance FromXML ListResourceRecordSetsResponse where
+    parseXML x = ListResourceRecordSetsResponse
+        <$> x .@  "IsTruncated"
+        <*> x .@  "MaxItems"
+        <*> x .@? "NextRecordIdentifier"
+        <*> x .@? "NextRecordName"
+        <*> x .@? "NextRecordType"
+        <*> x .@  "ResourceRecordSets"
+
+instance AWSPager ListResourceRecordSets where
+    page rq rs
+        | stop (rs ^. lrrsrIsTruncated) = Nothing
+        | isNothing p1 && isNothing p2 && isNothing p3 = Nothing
+        | otherwise = Just $ rq
+            & lrrsStartRecordName .~ p1
+            & lrrsStartRecordType .~ p2
+            & lrrsStartRecordIdentifier .~ p3
+      where
+        p1 = rs ^. lrrsrNextRecordName
+        p2 = rs ^. lrrsrNextRecordType
+        p3 = rs ^. lrrsrNextRecordIdentifier
diff --git a/gen/Network/AWS/Route53/ListReusableDelegationSets.hs b/gen/Network/AWS/Route53/ListReusableDelegationSets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/ListReusableDelegationSets.hs
@@ -0,0 +1,192 @@
+{-# 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.Route53.ListReusableDelegationSets
+-- 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)
+
+-- | To retrieve a list of your reusable delegation sets, send a GET request to
+-- the 2013-04-01/delegationset resource. The response to this request
+-- includes a DelegationSets element with zero, one, or multiple DelegationSet
+-- child elements. By default, the list of delegation sets is displayed on a
+-- single page. You can control the length of the page that is displayed by
+-- using the MaxItems parameter. You can use the Marker parameter to control
+-- the delegation set that the list begins with. Amazon Route 53 returns a
+-- maximum of 100 items. If you set MaxItems to a value greater than 100,
+-- Amazon Route 53 returns only the first 100.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListReusableDelegationSets.html>
+module Network.AWS.Route53.ListReusableDelegationSets
+    (
+    -- * Request
+      ListReusableDelegationSets
+    -- ** Request constructor
+    , listReusableDelegationSets
+    -- ** Request lenses
+    , lrdsMarker
+    , lrdsMaxItems
+
+    -- * Response
+    , ListReusableDelegationSetsResponse
+    -- ** Response constructor
+    , listReusableDelegationSetsResponse
+    -- ** Response lenses
+    , lrdsrDelegationSets
+    , lrdsrIsTruncated
+    , lrdsrMarker
+    , lrdsrMaxItems
+    , lrdsrNextMarker
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+data ListReusableDelegationSets = ListReusableDelegationSets
+    { _lrdsMarker   :: Maybe Text
+    , _lrdsMaxItems :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'ListReusableDelegationSets' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'lrdsMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'lrdsMaxItems' @::@ 'Maybe' 'Text'
+--
+listReusableDelegationSets :: ListReusableDelegationSets
+listReusableDelegationSets = ListReusableDelegationSets
+    { _lrdsMarker   = Nothing
+    , _lrdsMaxItems = Nothing
+    }
+
+-- | If the request returned more than one page of results, submit another
+-- request and specify the value of NextMarker from the last response in the
+-- marker parameter to get the next page of results.
+lrdsMarker :: Lens' ListReusableDelegationSets (Maybe Text)
+lrdsMarker = lens _lrdsMarker (\s a -> s { _lrdsMarker = a })
+
+-- | Specify the maximum number of reusable delegation sets to return per page
+-- of results.
+lrdsMaxItems :: Lens' ListReusableDelegationSets (Maybe Text)
+lrdsMaxItems = lens _lrdsMaxItems (\s a -> s { _lrdsMaxItems = a })
+
+data ListReusableDelegationSetsResponse = ListReusableDelegationSetsResponse
+    { _lrdsrDelegationSets :: List "DelegationSet" DelegationSet
+    , _lrdsrIsTruncated    :: Bool
+    , _lrdsrMarker         :: Text
+    , _lrdsrMaxItems       :: Text
+    , _lrdsrNextMarker     :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'ListReusableDelegationSetsResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'lrdsrDelegationSets' @::@ ['DelegationSet']
+--
+-- * 'lrdsrIsTruncated' @::@ 'Bool'
+--
+-- * 'lrdsrMarker' @::@ 'Text'
+--
+-- * 'lrdsrMaxItems' @::@ 'Text'
+--
+-- * 'lrdsrNextMarker' @::@ 'Maybe' 'Text'
+--
+listReusableDelegationSetsResponse :: Text -- ^ 'lrdsrMarker'
+                                   -> Bool -- ^ 'lrdsrIsTruncated'
+                                   -> Text -- ^ 'lrdsrMaxItems'
+                                   -> ListReusableDelegationSetsResponse
+listReusableDelegationSetsResponse p1 p2 p3 = ListReusableDelegationSetsResponse
+    { _lrdsrMarker         = p1
+    , _lrdsrIsTruncated    = p2
+    , _lrdsrMaxItems       = p3
+    , _lrdsrDelegationSets = mempty
+    , _lrdsrNextMarker     = Nothing
+    }
+
+-- | A complex type that contains information about the reusable delegation
+-- sets associated with the current AWS account.
+lrdsrDelegationSets :: Lens' ListReusableDelegationSetsResponse [DelegationSet]
+lrdsrDelegationSets =
+    lens _lrdsrDelegationSets (\s a -> s { _lrdsrDelegationSets = a })
+        . _List
+
+-- | A flag indicating whether there are more reusable delegation sets to be
+-- listed. If your results were truncated, you can make a follow-up request
+-- for the next page of results by using the Marker element. Valid Values:
+-- true | false.
+lrdsrIsTruncated :: Lens' ListReusableDelegationSetsResponse Bool
+lrdsrIsTruncated = lens _lrdsrIsTruncated (\s a -> s { _lrdsrIsTruncated = a })
+
+-- | If the request returned more than one page of results, submit another
+-- request and specify the value of NextMarker from the last response in the
+-- marker parameter to get the next page of results.
+lrdsrMarker :: Lens' ListReusableDelegationSetsResponse Text
+lrdsrMarker = lens _lrdsrMarker (\s a -> s { _lrdsrMarker = a })
+
+-- | The maximum number of reusable delegation sets to be included in the
+-- response body. If the number of reusable delegation sets associated with
+-- this AWS account exceeds MaxItems, the value of
+-- ListReusablDelegationSetsResponse$IsTruncated in the response is true.
+-- Call ListReusableDelegationSets again and specify the value of
+-- ListReusableDelegationSetsResponse$NextMarker in the
+-- ListReusableDelegationSetsRequest$Marker element to get the next page of
+-- results.
+lrdsrMaxItems :: Lens' ListReusableDelegationSetsResponse Text
+lrdsrMaxItems = lens _lrdsrMaxItems (\s a -> s { _lrdsrMaxItems = a })
+
+-- | Indicates where to continue listing reusable delegation sets. If
+-- ListReusableDelegationSetsResponse$IsTruncated is true, make another
+-- request to ListReusableDelegationSets and include the value of the
+-- NextMarker element in the Marker element to get the next page of results.
+lrdsrNextMarker :: Lens' ListReusableDelegationSetsResponse (Maybe Text)
+lrdsrNextMarker = lens _lrdsrNextMarker (\s a -> s { _lrdsrNextMarker = a })
+
+instance ToPath ListReusableDelegationSets where
+    toPath = const "/2013-04-01/delegationset"
+
+instance ToQuery ListReusableDelegationSets where
+    toQuery ListReusableDelegationSets{..} = mconcat
+        [ "marker"   =? _lrdsMarker
+        , "maxitems" =? _lrdsMaxItems
+        ]
+
+instance ToHeaders ListReusableDelegationSets
+
+instance ToXMLRoot ListReusableDelegationSets where
+    toXMLRoot = const (namespaced ns "ListReusableDelegationSets" [])
+
+instance ToXML ListReusableDelegationSets
+
+instance AWSRequest ListReusableDelegationSets where
+    type Sv ListReusableDelegationSets = Route53
+    type Rs ListReusableDelegationSets = ListReusableDelegationSetsResponse
+
+    request  = get
+    response = xmlResponse
+
+instance FromXML ListReusableDelegationSetsResponse where
+    parseXML x = ListReusableDelegationSetsResponse
+        <$> x .@  "DelegationSets"
+        <*> x .@  "IsTruncated"
+        <*> x .@  "Marker"
+        <*> x .@  "MaxItems"
+        <*> x .@? "NextMarker"
diff --git a/gen/Network/AWS/Route53/ListTagsForResource.hs b/gen/Network/AWS/Route53/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/ListTagsForResource.hs
@@ -0,0 +1,127 @@
+{-# 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.Route53.ListTagsForResource
+-- 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)
+
+-- | 
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListTagsForResource.html>
+module Network.AWS.Route53.ListTagsForResource
+    (
+    -- * Request
+      ListTagsForResource
+    -- ** Request constructor
+    , listTagsForResource
+    -- ** Request lenses
+    , ltfrResourceId
+    , ltfrResourceType
+
+    -- * Response
+    , ListTagsForResourceResponse
+    -- ** Response constructor
+    , listTagsForResourceResponse
+    -- ** Response lenses
+    , ltfrrResourceTagSet
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+data ListTagsForResource = ListTagsForResource
+    { _ltfrResourceId   :: Text
+    , _ltfrResourceType :: Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'ListTagsForResource' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ltfrResourceId' @::@ 'Text'
+--
+-- * 'ltfrResourceType' @::@ 'Text'
+--
+listTagsForResource :: Text -- ^ 'ltfrResourceType'
+                    -> Text -- ^ 'ltfrResourceId'
+                    -> ListTagsForResource
+listTagsForResource p1 p2 = ListTagsForResource
+    { _ltfrResourceType = p1
+    , _ltfrResourceId   = p2
+    }
+
+-- | The ID of the resource for which you want to retrieve tags.
+ltfrResourceId :: Lens' ListTagsForResource Text
+ltfrResourceId = lens _ltfrResourceId (\s a -> s { _ltfrResourceId = a })
+
+-- | The type of the resource. The resource type for health checks is
+-- healthcheck.
+ltfrResourceType :: Lens' ListTagsForResource Text
+ltfrResourceType = lens _ltfrResourceType (\s a -> s { _ltfrResourceType = a })
+
+newtype ListTagsForResourceResponse = ListTagsForResourceResponse
+    { _ltfrrResourceTagSet :: ResourceTagSet
+    } deriving (Eq, Show)
+
+-- | 'ListTagsForResourceResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ltfrrResourceTagSet' @::@ 'ResourceTagSet'
+--
+listTagsForResourceResponse :: ResourceTagSet -- ^ 'ltfrrResourceTagSet'
+                            -> ListTagsForResourceResponse
+listTagsForResourceResponse p1 = ListTagsForResourceResponse
+    { _ltfrrResourceTagSet = p1
+    }
+
+-- | A ResourceTagSet containing tags associated with the specified resource.
+ltfrrResourceTagSet :: Lens' ListTagsForResourceResponse ResourceTagSet
+ltfrrResourceTagSet =
+    lens _ltfrrResourceTagSet (\s a -> s { _ltfrrResourceTagSet = a })
+
+instance ToPath ListTagsForResource where
+    toPath ListTagsForResource{..} = mconcat
+        [ "/2013-04-01/tags/"
+        , toText _ltfrResourceType
+        , "/"
+        , toText _ltfrResourceId
+        ]
+
+instance ToQuery ListTagsForResource where
+    toQuery = const mempty
+
+instance ToHeaders ListTagsForResource
+
+instance ToXMLRoot ListTagsForResource where
+    toXMLRoot = const (namespaced ns "ListTagsForResource" [])
+
+instance ToXML ListTagsForResource
+
+instance AWSRequest ListTagsForResource where
+    type Sv ListTagsForResource = Route53
+    type Rs ListTagsForResource = ListTagsForResourceResponse
+
+    request  = get
+    response = xmlResponse
+
+instance FromXML ListTagsForResourceResponse where
+    parseXML x = ListTagsForResourceResponse
+        <$> x .@  "ResourceTagSet"
diff --git a/gen/Network/AWS/Route53/ListTagsForResources.hs b/gen/Network/AWS/Route53/ListTagsForResources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/ListTagsForResources.hs
@@ -0,0 +1,136 @@
+{-# 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.Route53.ListTagsForResources
+-- 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)
+
+-- | 
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListTagsForResources.html>
+module Network.AWS.Route53.ListTagsForResources
+    (
+    -- * Request
+      ListTagsForResources
+    -- ** Request constructor
+    , listTagsForResources
+    -- ** Request lenses
+    , ltfr1ResourceIds
+    , ltfr1ResourceType
+
+    -- * Response
+    , ListTagsForResourcesResponse
+    -- ** Response constructor
+    , listTagsForResourcesResponse
+    -- ** Response lenses
+    , ltfrrResourceTagSets
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+data ListTagsForResources = ListTagsForResources
+    { _ltfr1ResourceIds  :: List1 "ResourceId" Text
+    , _ltfr1ResourceType :: Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'ListTagsForResources' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ltfr1ResourceIds' @::@ 'NonEmpty' 'Text'
+--
+-- * 'ltfr1ResourceType' @::@ 'Text'
+--
+listTagsForResources :: Text -- ^ 'ltfr1ResourceType'
+                     -> NonEmpty Text -- ^ 'ltfr1ResourceIds'
+                     -> ListTagsForResources
+listTagsForResources p1 p2 = ListTagsForResources
+    { _ltfr1ResourceType = p1
+    , _ltfr1ResourceIds  = withIso _List1 (const id) p2
+    }
+
+-- | A complex type that contains the ResourceId element for each resource for
+-- which you want to get a list of tags.
+ltfr1ResourceIds :: Lens' ListTagsForResources (NonEmpty Text)
+ltfr1ResourceIds = lens _ltfr1ResourceIds (\s a -> s { _ltfr1ResourceIds = a }) . _List1
+
+-- | The type of the resources. The resource type for health checks is
+-- healthcheck.
+ltfr1ResourceType :: Lens' ListTagsForResources Text
+ltfr1ResourceType =
+    lens _ltfr1ResourceType (\s a -> s { _ltfr1ResourceType = a })
+
+newtype ListTagsForResourcesResponse = ListTagsForResourcesResponse
+    { _ltfrrResourceTagSets :: List "ResourceTagSet" ResourceTagSet
+    } deriving (Eq, Show, Monoid, Semigroup)
+
+instance GHC.Exts.IsList ListTagsForResourcesResponse where
+    type Item ListTagsForResourcesResponse = ResourceTagSet
+
+    fromList = ListTagsForResourcesResponse . GHC.Exts.fromList
+    toList   = GHC.Exts.toList . _ltfrrResourceTagSets
+
+-- | 'ListTagsForResourcesResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ltfrrResourceTagSets' @::@ ['ResourceTagSet']
+--
+listTagsForResourcesResponse :: ListTagsForResourcesResponse
+listTagsForResourcesResponse = ListTagsForResourcesResponse
+    { _ltfrrResourceTagSets = mempty
+    }
+
+-- | A list of ResourceTagSets containing tags associated with the specified
+-- resources.
+ltfrrResourceTagSets :: Lens' ListTagsForResourcesResponse [ResourceTagSet]
+ltfrrResourceTagSets =
+    lens _ltfrrResourceTagSets (\s a -> s { _ltfrrResourceTagSets = a })
+        . _List
+
+instance ToPath ListTagsForResources where
+    toPath ListTagsForResources{..} = mconcat
+        [ "/2013-04-01/tags/"
+        , toText _ltfr1ResourceType
+        ]
+
+instance ToQuery ListTagsForResources where
+    toQuery = const mempty
+
+instance ToHeaders ListTagsForResources
+
+instance ToXMLRoot ListTagsForResources where
+    toXMLRoot ListTagsForResources{..} = namespaced ns "ListTagsForResources"
+        [ "ResourceIds" =@ _ltfr1ResourceIds
+        ]
+
+instance ToXML ListTagsForResources
+
+instance AWSRequest ListTagsForResources where
+    type Sv ListTagsForResources = Route53
+    type Rs ListTagsForResources = ListTagsForResourcesResponse
+
+    request  = post
+    response = xmlResponse
+
+instance FromXML ListTagsForResourcesResponse where
+    parseXML x = ListTagsForResourcesResponse
+        <$> x .@  "ResourceTagSets"
diff --git a/gen/Network/AWS/Route53/Types.hs b/gen/Network/AWS/Route53/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/Types.hs
@@ -0,0 +1,1495 @@
+{-# 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.Route53.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.Route53.Types
+    (
+    -- * Service
+      Route53
+    -- ** Error
+    , RESTError
+    -- ** XML
+    , ns
+
+    -- * AliasTarget
+    , AliasTarget
+    , aliasTarget
+    , atDNSName
+    , atEvaluateTargetHealth
+    , atHostedZoneId
+
+    -- * ResourceRecord
+    , ResourceRecord
+    , resourceRecord
+    , rrValue
+
+    -- * Tag
+    , Tag
+    , tag
+    , tagKey
+    , tagValue
+
+    -- * GeoLocationDetails
+    , GeoLocationDetails
+    , geoLocationDetails
+    , gldContinentCode
+    , gldContinentName
+    , gldCountryCode
+    , gldCountryName
+    , gldSubdivisionCode
+    , gldSubdivisionName
+
+    -- * HealthCheck
+    , HealthCheck
+    , healthCheck
+    , hcCallerReference
+    , hcHealthCheckConfig
+    , hcHealthCheckVersion
+    , hcId
+
+    -- * VPCRegion
+    , VPCRegion (..)
+
+    -- * ChangeAction
+    , ChangeAction (..)
+
+    -- * TagResourceType
+    , TagResourceType (..)
+
+    -- * HealthCheckConfig
+    , HealthCheckConfig
+    , healthCheckConfig
+    , hccFailureThreshold
+    , hccFullyQualifiedDomainName
+    , hccIPAddress
+    , hccPort
+    , hccRequestInterval
+    , hccResourcePath
+    , hccSearchString
+    , hccType
+
+    -- * Change
+    , Change
+    , change
+    , cAction
+    , cResourceRecordSet
+
+    -- * ResourceRecordSetFailover
+    , ResourceRecordSetFailover (..)
+
+    -- * HostedZone
+    , HostedZone
+    , hostedZone
+    , hzCallerReference
+    , hzConfig
+    , hzId
+    , hzName
+    , hzResourceRecordSetCount
+
+    -- * ResourceTagSet
+    , ResourceTagSet
+    , resourceTagSet
+    , rtsResourceId
+    , rtsResourceType
+    , rtsTags
+
+    -- * ChangeStatus
+    , ChangeStatus (..)
+
+    -- * ChangeBatch
+    , ChangeBatch
+    , changeBatch
+    , cbChanges
+    , cbComment
+
+    -- * StatusReport
+    , StatusReport
+    , statusReport
+    , srCheckedTime
+    , srStatus
+
+    -- * HealthCheckType
+    , HealthCheckType (..)
+
+    -- * VPC
+    , VPC
+    , vpc
+    , vpcVPCId
+    , vpcVPCRegion
+
+    -- * HostedZoneConfig
+    , HostedZoneConfig
+    , hostedZoneConfig
+    , hzcComment
+    , hzcPrivateZone
+
+    -- * ResourceRecordSet
+    , ResourceRecordSet
+    , resourceRecordSet
+    , rrsAliasTarget
+    , rrsFailover
+    , rrsGeoLocation
+    , rrsHealthCheckId
+    , rrsName
+    , rrsRegion
+    , rrsResourceRecords
+    , rrsSetIdentifier
+    , rrsTTL
+    , rrsType
+    , rrsWeight
+
+    -- * DelegationSet
+    , DelegationSet
+    , delegationSet
+    , dsCallerReference
+    , dsId
+    , dsNameServers
+
+    -- * ChangeInfo
+    , ChangeInfo
+    , changeInfo
+    , ciComment
+    , ciId
+    , ciStatus
+    , ciSubmittedAt
+
+    -- * GeoLocation
+    , GeoLocation
+    , geoLocation
+    , glContinentCode
+    , glCountryCode
+    , glSubdivisionCode
+
+    -- * HealthCheckObservation
+    , HealthCheckObservation
+    , healthCheckObservation
+    , hcoIPAddress
+    , hcoStatusReport
+    ) where
+
+import Network.AWS.Error
+import Network.AWS.Prelude
+import Network.AWS.Signing.V3
+import qualified GHC.Exts
+
+-- | Version @2013-04-01@ of the Amazon Route 53 service.
+data Route53
+
+instance AWSService Route53 where
+    type Sg Route53 = V3
+    type Er Route53 = RESTError
+
+    service = Service
+        { _svcEndpoint     = global
+        , _svcAbbrev       = "Route53"
+        , _svcPrefix       = "route53"
+        , _svcVersion      = "2013-04-01"
+        , _svcTargetPrefix = Nothing
+        , _svcJSONVersion  = Nothing
+        }
+
+    handle = restError statusSuccess
+
+ns :: Text
+ns = "http://route53.amazonaws.com/doc/2013-04-01/"
+
+data AliasTarget = AliasTarget
+    { _atDNSName              :: Text
+    , _atEvaluateTargetHealth :: Bool
+    , _atHostedZoneId         :: Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'AliasTarget' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'atDNSName' @::@ 'Text'
+--
+-- * 'atEvaluateTargetHealth' @::@ 'Bool'
+--
+-- * 'atHostedZoneId' @::@ 'Text'
+--
+aliasTarget :: Text -- ^ 'atHostedZoneId'
+            -> Text -- ^ 'atDNSName'
+            -> Bool -- ^ 'atEvaluateTargetHealth'
+            -> AliasTarget
+aliasTarget p1 p2 p3 = AliasTarget
+    { _atHostedZoneId         = p1
+    , _atDNSName              = p2
+    , _atEvaluateTargetHealth = p3
+    }
+
+-- | Alias resource record sets only: The external DNS name associated with
+-- the AWS Resource. For more information and an example, see Creating Alias
+-- Resource Record Sets in the Amazon Route 53 Developer Guide.
+atDNSName :: Lens' AliasTarget Text
+atDNSName = lens _atDNSName (\s a -> s { _atDNSName = a })
+
+-- | Alias resource record sets only: A boolean value that indicates whether
+-- this Resource Record Set should respect the health status of any health
+-- checks associated with the ALIAS target record which it is linked to. For
+-- more information and an example, see Creating Alias Resource Record Sets
+-- in the Amazon Route 53 Developer Guide.
+atEvaluateTargetHealth :: Lens' AliasTarget Bool
+atEvaluateTargetHealth =
+    lens _atEvaluateTargetHealth (\s a -> s { _atEvaluateTargetHealth = a })
+
+-- | Alias resource record sets only: The value of the hosted zone ID for the
+-- AWS resource. For more information and an example, see Creating Alias
+-- Resource Record Sets in the Amazon Route 53 Developer Guide.
+atHostedZoneId :: Lens' AliasTarget Text
+atHostedZoneId = lens _atHostedZoneId (\s a -> s { _atHostedZoneId = a })
+
+instance FromXML AliasTarget where
+    parseXML x = AliasTarget
+        <$> x .@  "DNSName"
+        <*> x .@  "EvaluateTargetHealth"
+        <*> x .@  "HostedZoneId"
+
+instance ToXML AliasTarget where
+    toXML AliasTarget{..} = nodes "AliasTarget"
+        [ "HostedZoneId"         =@ _atHostedZoneId
+        , "DNSName"              =@ _atDNSName
+        , "EvaluateTargetHealth" =@ _atEvaluateTargetHealth
+        ]
+
+newtype ResourceRecord = ResourceRecord
+    { _rrValue :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'ResourceRecord' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rrValue' @::@ 'Text'
+--
+resourceRecord :: Text -- ^ 'rrValue'
+               -> ResourceRecord
+resourceRecord p1 = ResourceRecord
+    { _rrValue = p1
+    }
+
+-- | The value of the Value element for the current resource record set.
+rrValue :: Lens' ResourceRecord Text
+rrValue = lens _rrValue (\s a -> s { _rrValue = a })
+
+instance FromXML ResourceRecord where
+    parseXML x = ResourceRecord
+        <$> x .@  "Value"
+
+instance ToXML ResourceRecord where
+    toXML ResourceRecord{..} = nodes "ResourceRecord"
+        [ "Value" =@ _rrValue
+        ]
+
+data Tag = Tag
+    { _tagKey   :: Maybe Text
+    , _tagValue :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'Tag' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'tagKey' @::@ 'Maybe' 'Text'
+--
+-- * 'tagValue' @::@ 'Maybe' 'Text'
+--
+tag :: Tag
+tag = Tag
+    { _tagKey   = Nothing
+    , _tagValue = Nothing
+    }
+
+-- | The key for a Tag.
+tagKey :: Lens' Tag (Maybe Text)
+tagKey = lens _tagKey (\s a -> s { _tagKey = a })
+
+-- | The value for a Tag.
+tagValue :: Lens' Tag (Maybe Text)
+tagValue = lens _tagValue (\s a -> s { _tagValue = a })
+
+instance FromXML Tag where
+    parseXML x = Tag
+        <$> x .@? "Key"
+        <*> x .@? "Value"
+
+instance ToXML Tag where
+    toXML Tag{..} = nodes "Tag"
+        [ "Key"   =@ _tagKey
+        , "Value" =@ _tagValue
+        ]
+
+data GeoLocationDetails = GeoLocationDetails
+    { _gldContinentCode   :: Maybe Text
+    , _gldContinentName   :: Maybe Text
+    , _gldCountryCode     :: Maybe Text
+    , _gldCountryName     :: Maybe Text
+    , _gldSubdivisionCode :: Maybe Text
+    , _gldSubdivisionName :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'GeoLocationDetails' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'gldContinentCode' @::@ 'Maybe' 'Text'
+--
+-- * 'gldContinentName' @::@ 'Maybe' 'Text'
+--
+-- * 'gldCountryCode' @::@ 'Maybe' 'Text'
+--
+-- * 'gldCountryName' @::@ 'Maybe' 'Text'
+--
+-- * 'gldSubdivisionCode' @::@ 'Maybe' 'Text'
+--
+-- * 'gldSubdivisionName' @::@ 'Maybe' 'Text'
+--
+geoLocationDetails :: GeoLocationDetails
+geoLocationDetails = GeoLocationDetails
+    { _gldContinentCode   = Nothing
+    , _gldContinentName   = Nothing
+    , _gldCountryCode     = Nothing
+    , _gldCountryName     = Nothing
+    , _gldSubdivisionCode = Nothing
+    , _gldSubdivisionName = Nothing
+    }
+
+-- | The code for a continent geo location. Note: only continent locations
+-- have a continent code.
+gldContinentCode :: Lens' GeoLocationDetails (Maybe Text)
+gldContinentCode = lens _gldContinentCode (\s a -> s { _gldContinentCode = a })
+
+-- | The name of the continent. This element is only present if ContinentCode
+-- is also present.
+gldContinentName :: Lens' GeoLocationDetails (Maybe Text)
+gldContinentName = lens _gldContinentName (\s a -> s { _gldContinentName = a })
+
+-- | The code for a country geo location. The default location uses '*' for
+-- the country code and will match all locations that are not matched by a
+-- geo location. The default geo location uses a * for the country code. All
+-- other country codes follow the ISO 3166 two-character code.
+gldCountryCode :: Lens' GeoLocationDetails (Maybe Text)
+gldCountryCode = lens _gldCountryCode (\s a -> s { _gldCountryCode = a })
+
+-- | The name of the country. This element is only present if CountryCode is
+-- also present.
+gldCountryName :: Lens' GeoLocationDetails (Maybe Text)
+gldCountryName = lens _gldCountryName (\s a -> s { _gldCountryName = a })
+
+-- | The code for a country's subdivision (e.g., a province of Canada). A
+-- subdivision code is only valid with the appropriate country code.
+gldSubdivisionCode :: Lens' GeoLocationDetails (Maybe Text)
+gldSubdivisionCode =
+    lens _gldSubdivisionCode (\s a -> s { _gldSubdivisionCode = a })
+
+-- | The name of the subdivision. This element is only present if
+-- SubdivisionCode is also present.
+gldSubdivisionName :: Lens' GeoLocationDetails (Maybe Text)
+gldSubdivisionName =
+    lens _gldSubdivisionName (\s a -> s { _gldSubdivisionName = a })
+
+instance FromXML GeoLocationDetails where
+    parseXML x = GeoLocationDetails
+        <$> x .@? "ContinentCode"
+        <*> x .@? "ContinentName"
+        <*> x .@? "CountryCode"
+        <*> x .@? "CountryName"
+        <*> x .@? "SubdivisionCode"
+        <*> x .@? "SubdivisionName"
+
+instance ToXML GeoLocationDetails where
+    toXML GeoLocationDetails{..} = nodes "GeoLocationDetails"
+        [ "ContinentCode"   =@ _gldContinentCode
+        , "ContinentName"   =@ _gldContinentName
+        , "CountryCode"     =@ _gldCountryCode
+        , "CountryName"     =@ _gldCountryName
+        , "SubdivisionCode" =@ _gldSubdivisionCode
+        , "SubdivisionName" =@ _gldSubdivisionName
+        ]
+
+data HealthCheck = HealthCheck
+    { _hcCallerReference    :: Text
+    , _hcHealthCheckConfig  :: HealthCheckConfig
+    , _hcHealthCheckVersion :: Nat
+    , _hcId                 :: Text
+    } deriving (Eq, Show)
+
+-- | 'HealthCheck' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'hcCallerReference' @::@ 'Text'
+--
+-- * 'hcHealthCheckConfig' @::@ 'HealthCheckConfig'
+--
+-- * 'hcHealthCheckVersion' @::@ 'Natural'
+--
+-- * 'hcId' @::@ 'Text'
+--
+healthCheck :: Text -- ^ 'hcId'
+            -> Text -- ^ 'hcCallerReference'
+            -> HealthCheckConfig -- ^ 'hcHealthCheckConfig'
+            -> Natural -- ^ 'hcHealthCheckVersion'
+            -> HealthCheck
+healthCheck p1 p2 p3 p4 = HealthCheck
+    { _hcId                 = p1
+    , _hcCallerReference    = p2
+    , _hcHealthCheckConfig  = p3
+    , _hcHealthCheckVersion = withIso _Nat (const id) p4
+    }
+
+-- | A unique string that identifies the request to create the health check.
+hcCallerReference :: Lens' HealthCheck Text
+hcCallerReference =
+    lens _hcCallerReference (\s a -> s { _hcCallerReference = a })
+
+-- | A complex type that contains the health check configuration.
+hcHealthCheckConfig :: Lens' HealthCheck HealthCheckConfig
+hcHealthCheckConfig =
+    lens _hcHealthCheckConfig (\s a -> s { _hcHealthCheckConfig = a })
+
+-- | The version of the health check. You can optionally pass this value in a
+-- call to UpdateHealthCheck to prevent overwriting another change to the
+-- health check.
+hcHealthCheckVersion :: Lens' HealthCheck Natural
+hcHealthCheckVersion =
+    lens _hcHealthCheckVersion (\s a -> s { _hcHealthCheckVersion = a })
+        . _Nat
+
+-- | The ID of the specified health check.
+hcId :: Lens' HealthCheck Text
+hcId = lens _hcId (\s a -> s { _hcId = a })
+
+instance FromXML HealthCheck where
+    parseXML x = HealthCheck
+        <$> x .@  "CallerReference"
+        <*> x .@  "HealthCheckConfig"
+        <*> x .@  "HealthCheckVersion"
+        <*> x .@  "Id"
+
+instance ToXML HealthCheck where
+    toXML HealthCheck{..} = nodes "HealthCheck"
+        [ "Id"                 =@ _hcId
+        , "CallerReference"    =@ _hcCallerReference
+        , "HealthCheckConfig"  =@ _hcHealthCheckConfig
+        , "HealthCheckVersion" =@ _hcHealthCheckVersion
+        ]
+
+data VPCRegion
+    = ApNortheast1 -- ^ ap-northeast-1
+    | ApSoutheast1 -- ^ ap-southeast-1
+    | ApSoutheast2 -- ^ ap-southeast-2
+    | CnNorth1     -- ^ cn-north-1
+    | EuCentral1   -- ^ eu-central-1
+    | EuWest1      -- ^ eu-west-1
+    | SaEast1      -- ^ sa-east-1
+    | UsEast1      -- ^ us-east-1
+    | UsWest1      -- ^ us-west-1
+    | UsWest2      -- ^ us-west-2
+      deriving (Eq, Ord, Show, Generic, Enum)
+
+instance Hashable VPCRegion
+
+instance FromText VPCRegion where
+    parser = match "ap-northeast-1" ApNortheast1
+         <|> match "ap-southeast-1" ApSoutheast1
+         <|> match "ap-southeast-2" ApSoutheast2
+         <|> match "cn-north-1"     CnNorth1
+         <|> match "eu-central-1"   EuCentral1
+         <|> match "eu-west-1"      EuWest1
+         <|> match "sa-east-1"      SaEast1
+         <|> match "us-east-1"      UsEast1
+         <|> match "us-west-1"      UsWest1
+         <|> match "us-west-2"      UsWest2
+
+instance ToText VPCRegion where
+    toText = \case
+        ApNortheast1 -> "ap-northeast-1"
+        ApSoutheast1 -> "ap-southeast-1"
+        ApSoutheast2 -> "ap-southeast-2"
+        CnNorth1     -> "cn-north-1"
+        EuCentral1   -> "eu-central-1"
+        EuWest1      -> "eu-west-1"
+        SaEast1      -> "sa-east-1"
+        UsEast1      -> "us-east-1"
+        UsWest1      -> "us-west-1"
+        UsWest2      -> "us-west-2"
+
+instance FromXML VPCRegion where
+    parseXML = parseXMLText "VPCRegion"
+
+instance ToXML VPCRegion where
+    toXML = toXMLText
+
+data ChangeAction
+    = Create  -- ^ CREATE
+    | Delete' -- ^ DELETE
+    | Upsert  -- ^ UPSERT
+      deriving (Eq, Ord, Show, Generic, Enum)
+
+instance Hashable ChangeAction
+
+instance FromText ChangeAction where
+    parser = match "CREATE" Create
+         <|> match "DELETE" Delete'
+         <|> match "UPSERT" Upsert
+
+instance ToText ChangeAction where
+    toText = \case
+        Create  -> "CREATE"
+        Delete' -> "DELETE"
+        Upsert  -> "UPSERT"
+
+instance FromXML ChangeAction where
+    parseXML = parseXMLText "ChangeAction"
+
+instance ToXML ChangeAction where
+    toXML = toXMLText
+
+data TagResourceType
+    = Healthcheck -- ^ healthcheck
+      deriving (Eq, Ord, Show, Generic, Enum)
+
+instance Hashable TagResourceType
+
+instance FromText TagResourceType where
+    parser = match "healthcheck" Healthcheck
+
+instance ToText TagResourceType where
+    toText Healthcheck = "healthcheck"
+
+instance FromXML TagResourceType where
+    parseXML = parseXMLText "TagResourceType"
+
+instance ToXML TagResourceType where
+    toXML = toXMLText
+
+data HealthCheckConfig = HealthCheckConfig
+    { _hccFailureThreshold         :: Maybe Nat
+    , _hccFullyQualifiedDomainName :: Maybe Text
+    , _hccIPAddress                :: Maybe Text
+    , _hccPort                     :: Maybe Nat
+    , _hccRequestInterval          :: Maybe Nat
+    , _hccResourcePath             :: Maybe Text
+    , _hccSearchString             :: Maybe Text
+    , _hccType                     :: Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'HealthCheckConfig' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'hccFailureThreshold' @::@ 'Maybe' 'Natural'
+--
+-- * 'hccFullyQualifiedDomainName' @::@ 'Maybe' 'Text'
+--
+-- * 'hccIPAddress' @::@ 'Maybe' 'Text'
+--
+-- * 'hccPort' @::@ 'Maybe' 'Natural'
+--
+-- * 'hccRequestInterval' @::@ 'Maybe' 'Natural'
+--
+-- * 'hccResourcePath' @::@ 'Maybe' 'Text'
+--
+-- * 'hccSearchString' @::@ 'Maybe' 'Text'
+--
+-- * 'hccType' @::@ 'Text'
+--
+healthCheckConfig :: Text -- ^ 'hccType'
+                  -> HealthCheckConfig
+healthCheckConfig p1 = HealthCheckConfig
+    { _hccType                     = p1
+    , _hccIPAddress                = Nothing
+    , _hccPort                     = Nothing
+    , _hccResourcePath             = Nothing
+    , _hccFullyQualifiedDomainName = Nothing
+    , _hccSearchString             = Nothing
+    , _hccRequestInterval          = Nothing
+    , _hccFailureThreshold         = Nothing
+    }
+
+-- | The number of consecutive health checks that an endpoint must pass or
+-- fail for Route 53 to change the current status of the endpoint from
+-- unhealthy to healthy or vice versa. Valid values are integers between 1
+-- and 10. For more information, see "How Amazon Route 53 Determines Whether
+-- an Endpoint Is Healthy" in the Amazon Route 53 Developer Guide.
+hccFailureThreshold :: Lens' HealthCheckConfig (Maybe Natural)
+hccFailureThreshold =
+    lens _hccFailureThreshold (\s a -> s { _hccFailureThreshold = a })
+        . mapping _Nat
+
+-- | Fully qualified domain name of the instance to be health checked.
+hccFullyQualifiedDomainName :: Lens' HealthCheckConfig (Maybe Text)
+hccFullyQualifiedDomainName =
+    lens _hccFullyQualifiedDomainName
+        (\s a -> s { _hccFullyQualifiedDomainName = a })
+
+-- | IP Address of the instance being checked.
+hccIPAddress :: Lens' HealthCheckConfig (Maybe Text)
+hccIPAddress = lens _hccIPAddress (\s a -> s { _hccIPAddress = a })
+
+-- | Port on which connection will be opened to the instance to health check.
+-- For HTTP and HTTP_STR_MATCH this defaults to 80 if the port is not
+-- specified. For HTTPS and HTTPS_STR_MATCH this defaults to 443 if the port
+-- is not specified.
+hccPort :: Lens' HealthCheckConfig (Maybe Natural)
+hccPort = lens _hccPort (\s a -> s { _hccPort = a }) . mapping _Nat
+
+-- | The number of seconds between the time that Route 53 gets a response from
+-- your endpoint and the time that it sends the next health-check request.
+-- Each Route 53 health checker makes requests at this interval. Valid
+-- values are 10 and 30. The default value is 30.
+hccRequestInterval :: Lens' HealthCheckConfig (Maybe Natural)
+hccRequestInterval =
+    lens _hccRequestInterval (\s a -> s { _hccRequestInterval = a })
+        . mapping _Nat
+
+-- | Path to ping on the instance to check the health. Required for HTTP,
+-- HTTPS, HTTP_STR_MATCH, and HTTPS_STR_MATCH health checks, HTTP request is
+-- issued to the instance on the given port and path.
+hccResourcePath :: Lens' HealthCheckConfig (Maybe Text)
+hccResourcePath = lens _hccResourcePath (\s a -> s { _hccResourcePath = a })
+
+-- | A string to search for in the body of a health check response. Required
+-- for HTTP_STR_MATCH and HTTPS_STR_MATCH health checks.
+hccSearchString :: Lens' HealthCheckConfig (Maybe Text)
+hccSearchString = lens _hccSearchString (\s a -> s { _hccSearchString = a })
+
+-- | The type of health check to be performed. Currently supported types are
+-- TCP, HTTP, HTTPS, HTTP_STR_MATCH, and HTTPS_STR_MATCH.
+hccType :: Lens' HealthCheckConfig Text
+hccType = lens _hccType (\s a -> s { _hccType = a })
+
+instance FromXML HealthCheckConfig where
+    parseXML x = HealthCheckConfig
+        <$> x .@? "FailureThreshold"
+        <*> x .@? "FullyQualifiedDomainName"
+        <*> x .@? "IPAddress"
+        <*> x .@? "Port"
+        <*> x .@? "RequestInterval"
+        <*> x .@? "ResourcePath"
+        <*> x .@? "SearchString"
+        <*> x .@  "Type"
+
+instance ToXML HealthCheckConfig where
+    toXML HealthCheckConfig{..} = nodes "HealthCheckConfig"
+        [ "IPAddress"                =@ _hccIPAddress
+        , "Port"                     =@ _hccPort
+        , "Type"                     =@ _hccType
+        , "ResourcePath"             =@ _hccResourcePath
+        , "FullyQualifiedDomainName" =@ _hccFullyQualifiedDomainName
+        , "SearchString"             =@ _hccSearchString
+        , "RequestInterval"          =@ _hccRequestInterval
+        , "FailureThreshold"         =@ _hccFailureThreshold
+        ]
+
+data Change = Change
+    { _cAction            :: Text
+    , _cResourceRecordSet :: ResourceRecordSet
+    } deriving (Eq, Show)
+
+-- | 'Change' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cAction' @::@ 'Text'
+--
+-- * 'cResourceRecordSet' @::@ 'ResourceRecordSet'
+--
+change :: Text -- ^ 'cAction'
+       -> ResourceRecordSet -- ^ 'cResourceRecordSet'
+       -> Change
+change p1 p2 = Change
+    { _cAction            = p1
+    , _cResourceRecordSet = p2
+    }
+
+-- | The action to perform. Valid values: CREATE | DELETE | UPSERT.
+cAction :: Lens' Change Text
+cAction = lens _cAction (\s a -> s { _cAction = a })
+
+-- | Information about the resource record set to create or delete.
+cResourceRecordSet :: Lens' Change ResourceRecordSet
+cResourceRecordSet =
+    lens _cResourceRecordSet (\s a -> s { _cResourceRecordSet = a })
+
+instance FromXML Change where
+    parseXML x = Change
+        <$> x .@  "Action"
+        <*> x .@  "ResourceRecordSet"
+
+instance ToXML Change where
+    toXML Change{..} = nodes "Change"
+        [ "Action"            =@ _cAction
+        , "ResourceRecordSet" =@ _cResourceRecordSet
+        ]
+
+data ResourceRecordSetFailover
+    = Primary   -- ^ PRIMARY
+    | Secondary -- ^ SECONDARY
+      deriving (Eq, Ord, Show, Generic, Enum)
+
+instance Hashable ResourceRecordSetFailover
+
+instance FromText ResourceRecordSetFailover where
+    parser = match "PRIMARY"   Primary
+         <|> match "SECONDARY" Secondary
+
+instance ToText ResourceRecordSetFailover where
+    toText = \case
+        Primary   -> "PRIMARY"
+        Secondary -> "SECONDARY"
+
+instance FromXML ResourceRecordSetFailover where
+    parseXML = parseXMLText "ResourceRecordSetFailover"
+
+instance ToXML ResourceRecordSetFailover where
+    toXML = toXMLText
+
+data HostedZone = HostedZone
+    { _hzCallerReference        :: Text
+    , _hzConfig                 :: Maybe HostedZoneConfig
+    , _hzId                     :: Text
+    , _hzName                   :: Text
+    , _hzResourceRecordSetCount :: Maybe Integer
+    } deriving (Eq, Show)
+
+-- | 'HostedZone' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'hzCallerReference' @::@ 'Text'
+--
+-- * 'hzConfig' @::@ 'Maybe' 'HostedZoneConfig'
+--
+-- * 'hzId' @::@ 'Text'
+--
+-- * 'hzName' @::@ 'Text'
+--
+-- * 'hzResourceRecordSetCount' @::@ 'Maybe' 'Integer'
+--
+hostedZone :: Text -- ^ 'hzId'
+           -> Text -- ^ 'hzName'
+           -> Text -- ^ 'hzCallerReference'
+           -> HostedZone
+hostedZone p1 p2 p3 = HostedZone
+    { _hzId                     = p1
+    , _hzName                   = p2
+    , _hzCallerReference        = p3
+    , _hzConfig                 = Nothing
+    , _hzResourceRecordSetCount = Nothing
+    }
+
+-- | A unique string that identifies the request to create the hosted zone.
+hzCallerReference :: Lens' HostedZone Text
+hzCallerReference =
+    lens _hzCallerReference (\s a -> s { _hzCallerReference = a })
+
+-- | A complex type that contains the Comment element.
+hzConfig :: Lens' HostedZone (Maybe HostedZoneConfig)
+hzConfig = lens _hzConfig (\s a -> s { _hzConfig = a })
+
+-- | The ID of the specified hosted zone.
+hzId :: Lens' HostedZone Text
+hzId = lens _hzId (\s a -> s { _hzId = a })
+
+-- | The name of the domain. This must be a fully-specified domain, for
+-- example, www.example.com. The trailing dot is optional; Route 53 assumes
+-- that the domain name is fully qualified. This means that Route 53 treats
+-- www.example.com (without a trailing dot) and www.example.com. (with a
+-- trailing dot) as identical. This is the name you have registered with
+-- your DNS registrar. You should ask your registrar to change the
+-- authoritative name servers for your domain to the set of NameServers
+-- elements returned in DelegationSet.
+hzName :: Lens' HostedZone Text
+hzName = lens _hzName (\s a -> s { _hzName = a })
+
+-- | Total number of resource record sets in the hosted zone.
+hzResourceRecordSetCount :: Lens' HostedZone (Maybe Integer)
+hzResourceRecordSetCount =
+    lens _hzResourceRecordSetCount
+        (\s a -> s { _hzResourceRecordSetCount = a })
+
+instance FromXML HostedZone where
+    parseXML x = HostedZone
+        <$> x .@  "CallerReference"
+        <*> x .@? "Config"
+        <*> x .@  "Id"
+        <*> x .@  "Name"
+        <*> x .@? "ResourceRecordSetCount"
+
+instance ToXML HostedZone where
+    toXML HostedZone{..} = nodes "HostedZone"
+        [ "Id"                     =@ _hzId
+        , "Name"                   =@ _hzName
+        , "CallerReference"        =@ _hzCallerReference
+        , "Config"                 =@ _hzConfig
+        , "ResourceRecordSetCount" =@ _hzResourceRecordSetCount
+        ]
+
+data ResourceTagSet = ResourceTagSet
+    { _rtsResourceId   :: Maybe Text
+    , _rtsResourceType :: Maybe Text
+    , _rtsTags         :: List1 "Tag" Tag
+    } deriving (Eq, Show)
+
+-- | 'ResourceTagSet' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rtsResourceId' @::@ 'Maybe' 'Text'
+--
+-- * 'rtsResourceType' @::@ 'Maybe' 'Text'
+--
+-- * 'rtsTags' @::@ 'NonEmpty' 'Tag'
+--
+resourceTagSet :: NonEmpty Tag -- ^ 'rtsTags'
+               -> ResourceTagSet
+resourceTagSet p1 = ResourceTagSet
+    { _rtsTags         = withIso _List1 (const id) p1
+    , _rtsResourceType = Nothing
+    , _rtsResourceId   = Nothing
+    }
+
+-- | The ID for the specified resource.
+rtsResourceId :: Lens' ResourceTagSet (Maybe Text)
+rtsResourceId = lens _rtsResourceId (\s a -> s { _rtsResourceId = a })
+
+-- | The type of the resource. The resource type for health checks is
+-- healthcheck.
+rtsResourceType :: Lens' ResourceTagSet (Maybe Text)
+rtsResourceType = lens _rtsResourceType (\s a -> s { _rtsResourceType = a })
+
+-- | The tags associated with the specified resource.
+rtsTags :: Lens' ResourceTagSet (NonEmpty Tag)
+rtsTags = lens _rtsTags (\s a -> s { _rtsTags = a }) . _List1
+
+instance FromXML ResourceTagSet where
+    parseXML x = ResourceTagSet
+        <$> x .@? "ResourceId"
+        <*> x .@? "ResourceType"
+        <*> x .@  "Tags"
+
+instance ToXML ResourceTagSet where
+    toXML ResourceTagSet{..} = nodes "ResourceTagSet"
+        [ "ResourceType" =@ _rtsResourceType
+        , "ResourceId"   =@ _rtsResourceId
+        , "Tags"         =@ _rtsTags
+        ]
+
+data ChangeStatus
+    = Insync  -- ^ INSYNC
+    | Pending -- ^ PENDING
+      deriving (Eq, Ord, Show, Generic, Enum)
+
+instance Hashable ChangeStatus
+
+instance FromText ChangeStatus where
+    parser = match "INSYNC"  Insync
+         <|> match "PENDING" Pending
+
+instance ToText ChangeStatus where
+    toText = \case
+        Insync  -> "INSYNC"
+        Pending -> "PENDING"
+
+instance FromXML ChangeStatus where
+    parseXML = parseXMLText "ChangeStatus"
+
+instance ToXML ChangeStatus where
+    toXML = toXMLText
+
+data ChangeBatch = ChangeBatch
+    { _cbChanges :: List1 "Change" Change
+    , _cbComment :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'ChangeBatch' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cbChanges' @::@ 'NonEmpty' 'Change'
+--
+-- * 'cbComment' @::@ 'Maybe' 'Text'
+--
+changeBatch :: NonEmpty Change -- ^ 'cbChanges'
+            -> ChangeBatch
+changeBatch p1 = ChangeBatch
+    { _cbChanges = withIso _List1 (const id) p1
+    , _cbComment = Nothing
+    }
+
+-- | A complex type that contains one Change element for each resource record
+-- set that you want to create or delete.
+cbChanges :: Lens' ChangeBatch (NonEmpty Change)
+cbChanges = lens _cbChanges (\s a -> s { _cbChanges = a }) . _List1
+
+-- | Optional: Any comments you want to include about a change batch request.
+cbComment :: Lens' ChangeBatch (Maybe Text)
+cbComment = lens _cbComment (\s a -> s { _cbComment = a })
+
+instance FromXML ChangeBatch where
+    parseXML x = ChangeBatch
+        <$> x .@  "Changes"
+        <*> x .@? "Comment"
+
+instance ToXML ChangeBatch where
+    toXML ChangeBatch{..} = nodes "ChangeBatch"
+        [ "Comment" =@ _cbComment
+        , "Changes" =@ _cbChanges
+        ]
+
+data StatusReport = StatusReport
+    { _srCheckedTime :: Maybe RFC822
+    , _srStatus      :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'StatusReport' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'srCheckedTime' @::@ 'Maybe' 'UTCTime'
+--
+-- * 'srStatus' @::@ 'Maybe' 'Text'
+--
+statusReport :: StatusReport
+statusReport = StatusReport
+    { _srStatus      = Nothing
+    , _srCheckedTime = Nothing
+    }
+
+-- | The date and time the health check status was observed, in the format
+-- YYYY-MM-DDThh:mm:ssZ, as specified in the ISO 8601 standard (for example,
+-- 2009-11-19T19:37:58Z). The Z after the time indicates that the time is
+-- listed in Coordinated Universal Time (UTC), which is synonymous with
+-- Greenwich Mean Time in this context.
+srCheckedTime :: Lens' StatusReport (Maybe UTCTime)
+srCheckedTime = lens _srCheckedTime (\s a -> s { _srCheckedTime = a }) . mapping _Time
+
+-- | The observed health check status.
+srStatus :: Lens' StatusReport (Maybe Text)
+srStatus = lens _srStatus (\s a -> s { _srStatus = a })
+
+instance FromXML StatusReport where
+    parseXML x = StatusReport
+        <$> x .@? "CheckedTime"
+        <*> x .@? "Status"
+
+instance ToXML StatusReport where
+    toXML StatusReport{..} = nodes "StatusReport"
+        [ "Status"      =@ _srStatus
+        , "CheckedTime" =@ _srCheckedTime
+        ]
+
+data HealthCheckType
+    = Http          -- ^ HTTP
+    | HttpStrMatch  -- ^ HTTP_STR_MATCH
+    | Https         -- ^ HTTPS
+    | HttpsStrMatch -- ^ HTTPS_STR_MATCH
+    | Tcp           -- ^ TCP
+      deriving (Eq, Ord, Show, Generic, Enum)
+
+instance Hashable HealthCheckType
+
+instance FromText HealthCheckType where
+    parser = match "HTTP"            Http
+         <|> match "HTTP_STR_MATCH"  HttpStrMatch
+         <|> match "HTTPS"           Https
+         <|> match "HTTPS_STR_MATCH" HttpsStrMatch
+         <|> match "TCP"             Tcp
+
+instance ToText HealthCheckType where
+    toText = \case
+        Http          -> "HTTP"
+        HttpStrMatch  -> "HTTP_STR_MATCH"
+        Https         -> "HTTPS"
+        HttpsStrMatch -> "HTTPS_STR_MATCH"
+        Tcp           -> "TCP"
+
+instance FromXML HealthCheckType where
+    parseXML = parseXMLText "HealthCheckType"
+
+instance ToXML HealthCheckType where
+    toXML = toXMLText
+
+data VPC = VPC
+    { _vpcVPCId     :: Maybe Text
+    , _vpcVPCRegion :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'VPC' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'vpcVPCId' @::@ 'Maybe' 'Text'
+--
+-- * 'vpcVPCRegion' @::@ 'Maybe' 'Text'
+--
+vpc :: VPC
+vpc = VPC
+    { _vpcVPCRegion = Nothing
+    , _vpcVPCId     = Nothing
+    }
+
+vpcVPCId :: Lens' VPC (Maybe Text)
+vpcVPCId = lens _vpcVPCId (\s a -> s { _vpcVPCId = a })
+
+vpcVPCRegion :: Lens' VPC (Maybe Text)
+vpcVPCRegion = lens _vpcVPCRegion (\s a -> s { _vpcVPCRegion = a })
+
+instance FromXML VPC where
+    parseXML x = VPC
+        <$> x .@? "VPCId"
+        <*> x .@? "VPCRegion"
+
+instance ToXMLRoot VPC where
+    toXMLRoot VPC{..} = namespaced ns "VPC"
+        [ "VPCRegion" =@ _vpcVPCRegion
+        , "VPCId"     =@ _vpcVPCId
+        ]
+
+instance ToXML VPC
+
+data HostedZoneConfig = HostedZoneConfig
+    { _hzcComment     :: Maybe Text
+    , _hzcPrivateZone :: Maybe Bool
+    } deriving (Eq, Ord, Show)
+
+-- | 'HostedZoneConfig' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'hzcComment' @::@ 'Maybe' 'Text'
+--
+-- * 'hzcPrivateZone' @::@ 'Maybe' 'Bool'
+--
+hostedZoneConfig :: HostedZoneConfig
+hostedZoneConfig = HostedZoneConfig
+    { _hzcComment     = Nothing
+    , _hzcPrivateZone = Nothing
+    }
+
+-- | An optional comment about your hosted zone. If you don't want to specify
+-- a comment, you can omit the HostedZoneConfig and Comment elements from
+-- the XML document.
+hzcComment :: Lens' HostedZoneConfig (Maybe Text)
+hzcComment = lens _hzcComment (\s a -> s { _hzcComment = a })
+
+-- | A value that indicates whether this is a private hosted zone. The value
+-- is returned in the response; do not specify it in the request.
+hzcPrivateZone :: Lens' HostedZoneConfig (Maybe Bool)
+hzcPrivateZone = lens _hzcPrivateZone (\s a -> s { _hzcPrivateZone = a })
+
+instance FromXML HostedZoneConfig where
+    parseXML x = HostedZoneConfig
+        <$> x .@? "Comment"
+        <*> x .@? "PrivateZone"
+
+instance ToXML HostedZoneConfig where
+    toXML HostedZoneConfig{..} = nodes "HostedZoneConfig"
+        [ "Comment"     =@ _hzcComment
+        , "PrivateZone" =@ _hzcPrivateZone
+        ]
+
+data ResourceRecordSet = ResourceRecordSet
+    { _rrsAliasTarget     :: Maybe AliasTarget
+    , _rrsFailover        :: Maybe Text
+    , _rrsGeoLocation     :: Maybe GeoLocation
+    , _rrsHealthCheckId   :: Maybe Text
+    , _rrsName            :: Text
+    , _rrsRegion          :: Maybe Text
+    , _rrsResourceRecords :: List1 "ResourceRecord" ResourceRecord
+    , _rrsSetIdentifier   :: Maybe Text
+    , _rrsTTL             :: Maybe Nat
+    , _rrsType            :: Text
+    , _rrsWeight          :: Maybe Nat
+    } deriving (Eq, Show)
+
+-- | 'ResourceRecordSet' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rrsAliasTarget' @::@ 'Maybe' 'AliasTarget'
+--
+-- * 'rrsFailover' @::@ 'Maybe' 'Text'
+--
+-- * 'rrsGeoLocation' @::@ 'Maybe' 'GeoLocation'
+--
+-- * 'rrsHealthCheckId' @::@ 'Maybe' 'Text'
+--
+-- * 'rrsName' @::@ 'Text'
+--
+-- * 'rrsRegion' @::@ 'Maybe' 'Text'
+--
+-- * 'rrsResourceRecords' @::@ 'NonEmpty' 'ResourceRecord'
+--
+-- * 'rrsSetIdentifier' @::@ 'Maybe' 'Text'
+--
+-- * 'rrsTTL' @::@ 'Maybe' 'Natural'
+--
+-- * 'rrsType' @::@ 'Text'
+--
+-- * 'rrsWeight' @::@ 'Maybe' 'Natural'
+--
+resourceRecordSet :: Text -- ^ 'rrsName'
+                  -> Text -- ^ 'rrsType'
+                  -> NonEmpty ResourceRecord -- ^ 'rrsResourceRecords'
+                  -> ResourceRecordSet
+resourceRecordSet p1 p2 p3 = ResourceRecordSet
+    { _rrsName            = p1
+    , _rrsType            = p2
+    , _rrsResourceRecords = withIso _List1 (const id) p3
+    , _rrsSetIdentifier   = Nothing
+    , _rrsWeight          = Nothing
+    , _rrsRegion          = Nothing
+    , _rrsGeoLocation     = Nothing
+    , _rrsFailover        = Nothing
+    , _rrsTTL             = Nothing
+    , _rrsAliasTarget     = Nothing
+    , _rrsHealthCheckId   = Nothing
+    }
+
+-- | Alias resource record sets only: Information about the AWS resource to
+-- which you are redirecting traffic.
+rrsAliasTarget :: Lens' ResourceRecordSet (Maybe AliasTarget)
+rrsAliasTarget = lens _rrsAliasTarget (\s a -> s { _rrsAliasTarget = a })
+
+-- | Failover resource record sets only: Among resource record sets that have
+-- the same combination of DNS name and type, a value that indicates whether
+-- the current resource record set is a primary or secondary resource record
+-- set. A failover set may contain at most one resource record set marked as
+-- primary and one resource record set marked as secondary. A resource
+-- record set marked as primary will be returned if any of the following are
+-- true: (1) an associated health check is passing, (2) if the resource
+-- record set is an alias with the evaluate target health and at least one
+-- target resource record set is healthy, (3) both the primary and secondary
+-- resource record set are failing health checks or (4) there is no
+-- secondary resource record set. A secondary resource record set will be
+-- returned if: (1) the primary is failing a health check and either the
+-- secondary is passing a health check or has no associated health check, or
+-- (2) there is no primary resource record set. Valid values: PRIMARY |
+-- SECONDARY.
+rrsFailover :: Lens' ResourceRecordSet (Maybe Text)
+rrsFailover = lens _rrsFailover (\s a -> s { _rrsFailover = a })
+
+-- | Geo location resource record sets only: Among resource record sets that
+-- have the same combination of DNS name and type, a value that specifies
+-- the geo location for the current resource record set.
+rrsGeoLocation :: Lens' ResourceRecordSet (Maybe GeoLocation)
+rrsGeoLocation = lens _rrsGeoLocation (\s a -> s { _rrsGeoLocation = a })
+
+-- | Health Check resource record sets only, not required for alias resource
+-- record sets: An identifier that is used to identify health check
+-- associated with the resource record set.
+rrsHealthCheckId :: Lens' ResourceRecordSet (Maybe Text)
+rrsHealthCheckId = lens _rrsHealthCheckId (\s a -> s { _rrsHealthCheckId = a })
+
+-- | The domain name of the current resource record set.
+rrsName :: Lens' ResourceRecordSet Text
+rrsName = lens _rrsName (\s a -> s { _rrsName = a })
+
+-- | Latency-based resource record sets only: Among resource record sets that
+-- have the same combination of DNS name and type, a value that specifies
+-- the AWS region for the current resource record set.
+rrsRegion :: Lens' ResourceRecordSet (Maybe Text)
+rrsRegion = lens _rrsRegion (\s a -> s { _rrsRegion = a })
+
+-- | A complex type that contains the resource records for the current
+-- resource record set.
+rrsResourceRecords :: Lens' ResourceRecordSet (NonEmpty ResourceRecord)
+rrsResourceRecords =
+    lens _rrsResourceRecords (\s a -> s { _rrsResourceRecords = a })
+        . _List1
+
+-- | Weighted, Latency, Geo, and Failover resource record sets only: An
+-- identifier that differentiates among multiple resource record sets that
+-- have the same combination of DNS name and type.
+rrsSetIdentifier :: Lens' ResourceRecordSet (Maybe Text)
+rrsSetIdentifier = lens _rrsSetIdentifier (\s a -> s { _rrsSetIdentifier = a })
+
+-- | The cache time to live for the current resource record set.
+rrsTTL :: Lens' ResourceRecordSet (Maybe Natural)
+rrsTTL = lens _rrsTTL (\s a -> s { _rrsTTL = a }) . mapping _Nat
+
+-- | The type of the current resource record set.
+rrsType :: Lens' ResourceRecordSet Text
+rrsType = lens _rrsType (\s a -> s { _rrsType = a })
+
+-- | Weighted resource record sets only: Among resource record sets that have
+-- the same combination of DNS name and type, a value that determines what
+-- portion of traffic for the current resource record set is routed to the
+-- associated location.
+rrsWeight :: Lens' ResourceRecordSet (Maybe Natural)
+rrsWeight = lens _rrsWeight (\s a -> s { _rrsWeight = a }) . mapping _Nat
+
+instance FromXML ResourceRecordSet where
+    parseXML x = ResourceRecordSet
+        <$> x .@? "AliasTarget"
+        <*> x .@? "Failover"
+        <*> x .@? "GeoLocation"
+        <*> x .@? "HealthCheckId"
+        <*> x .@  "Name"
+        <*> x .@? "Region"
+        <*> x .@  "ResourceRecords"
+        <*> x .@? "SetIdentifier"
+        <*> x .@? "TTL"
+        <*> x .@  "Type"
+        <*> x .@? "Weight"
+
+instance ToXML ResourceRecordSet where
+    toXML ResourceRecordSet{..} = nodes "ResourceRecordSet"
+        [ "Name"            =@ _rrsName
+        , "Type"            =@ _rrsType
+        , "SetIdentifier"   =@ _rrsSetIdentifier
+        , "Weight"          =@ _rrsWeight
+        , "Region"          =@ _rrsRegion
+        , "GeoLocation"     =@ _rrsGeoLocation
+        , "Failover"        =@ _rrsFailover
+        , "TTL"             =@ _rrsTTL
+        , "ResourceRecords" =@ _rrsResourceRecords
+        , "AliasTarget"     =@ _rrsAliasTarget
+        , "HealthCheckId"   =@ _rrsHealthCheckId
+        ]
+
+data DelegationSet = DelegationSet
+    { _dsCallerReference :: Maybe Text
+    , _dsId              :: Maybe Text
+    , _dsNameServers     :: List1 "NameServer" Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'DelegationSet' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dsCallerReference' @::@ 'Maybe' 'Text'
+--
+-- * 'dsId' @::@ 'Maybe' 'Text'
+--
+-- * 'dsNameServers' @::@ 'NonEmpty' 'Text'
+--
+delegationSet :: NonEmpty Text -- ^ 'dsNameServers'
+              -> DelegationSet
+delegationSet p1 = DelegationSet
+    { _dsNameServers     = withIso _List1 (const id) p1
+    , _dsId              = Nothing
+    , _dsCallerReference = Nothing
+    }
+
+dsCallerReference :: Lens' DelegationSet (Maybe Text)
+dsCallerReference =
+    lens _dsCallerReference (\s a -> s { _dsCallerReference = a })
+
+dsId :: Lens' DelegationSet (Maybe Text)
+dsId = lens _dsId (\s a -> s { _dsId = a })
+
+-- | A complex type that contains the authoritative name servers for the
+-- hosted zone. Use the method provided by your domain registrar to add an
+-- NS record to your domain for each NameServer that is assigned to your
+-- hosted zone.
+dsNameServers :: Lens' DelegationSet (NonEmpty Text)
+dsNameServers = lens _dsNameServers (\s a -> s { _dsNameServers = a }) . _List1
+
+instance FromXML DelegationSet where
+    parseXML x = DelegationSet
+        <$> x .@? "CallerReference"
+        <*> x .@? "Id"
+        <*> x .@  "NameServers"
+
+instance ToXMLRoot DelegationSet where
+    toXMLRoot DelegationSet{..} = namespaced ns "DelegationSet"
+        [ "Id"              =@ _dsId
+        , "CallerReference" =@ _dsCallerReference
+        , "NameServers"     =@ _dsNameServers
+        ]
+
+instance ToXML DelegationSet
+
+data ChangeInfo = ChangeInfo
+    { _ciComment     :: Maybe Text
+    , _ciId          :: Text
+    , _ciStatus      :: Text
+    , _ciSubmittedAt :: RFC822
+    } deriving (Eq, Ord, Show)
+
+-- | 'ChangeInfo' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ciComment' @::@ 'Maybe' 'Text'
+--
+-- * 'ciId' @::@ 'Text'
+--
+-- * 'ciStatus' @::@ 'Text'
+--
+-- * 'ciSubmittedAt' @::@ 'UTCTime'
+--
+changeInfo :: Text -- ^ 'ciId'
+           -> Text -- ^ 'ciStatus'
+           -> UTCTime -- ^ 'ciSubmittedAt'
+           -> ChangeInfo
+changeInfo p1 p2 p3 = ChangeInfo
+    { _ciId          = p1
+    , _ciStatus      = p2
+    , _ciSubmittedAt = withIso _Time (const id) p3
+    , _ciComment     = Nothing
+    }
+
+-- | A complex type that describes change information about changes made to
+-- your hosted zone. This element contains an ID that you use when
+-- performing a GetChange action to get detailed information about the
+-- change.
+ciComment :: Lens' ChangeInfo (Maybe Text)
+ciComment = lens _ciComment (\s a -> s { _ciComment = a })
+
+-- | The ID of the request. Use this ID to track when the change has completed
+-- across all Amazon Route 53 DNS servers.
+ciId :: Lens' ChangeInfo Text
+ciId = lens _ciId (\s a -> s { _ciId = a })
+
+-- | The current state of the request. PENDING indicates that this request has
+-- not yet been applied to all Amazon Route 53 DNS servers. Valid Values:
+-- PENDING | INSYNC.
+ciStatus :: Lens' ChangeInfo Text
+ciStatus = lens _ciStatus (\s a -> s { _ciStatus = a })
+
+-- | The date and time the change was submitted, in the format
+-- YYYY-MM-DDThh:mm:ssZ, as specified in the ISO 8601 standard (for example,
+-- 2009-11-19T19:37:58Z). The Z after the time indicates that the time is
+-- listed in Coordinated Universal Time (UTC), which is synonymous with
+-- Greenwich Mean Time in this context.
+ciSubmittedAt :: Lens' ChangeInfo UTCTime
+ciSubmittedAt = lens _ciSubmittedAt (\s a -> s { _ciSubmittedAt = a }) . _Time
+
+instance FromXML ChangeInfo where
+    parseXML x = ChangeInfo
+        <$> x .@? "Comment"
+        <*> x .@  "Id"
+        <*> x .@  "Status"
+        <*> x .@  "SubmittedAt"
+
+instance ToXML ChangeInfo where
+    toXML ChangeInfo{..} = nodes "ChangeInfo"
+        [ "Id"          =@ _ciId
+        , "Status"      =@ _ciStatus
+        , "SubmittedAt" =@ _ciSubmittedAt
+        , "Comment"     =@ _ciComment
+        ]
+
+data GeoLocation = GeoLocation
+    { _glContinentCode   :: Maybe Text
+    , _glCountryCode     :: Maybe Text
+    , _glSubdivisionCode :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'GeoLocation' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'glContinentCode' @::@ 'Maybe' 'Text'
+--
+-- * 'glCountryCode' @::@ 'Maybe' 'Text'
+--
+-- * 'glSubdivisionCode' @::@ 'Maybe' 'Text'
+--
+geoLocation :: GeoLocation
+geoLocation = GeoLocation
+    { _glContinentCode   = Nothing
+    , _glCountryCode     = Nothing
+    , _glSubdivisionCode = Nothing
+    }
+
+-- | The code for a continent geo location. Note: only continent locations
+-- have a continent code. Valid values: AF | AN | AS | EU | OC | NA | SA
+-- Constraint: Specifying ContinentCode with either CountryCode or
+-- SubdivisionCode returns an InvalidInput error.
+glContinentCode :: Lens' GeoLocation (Maybe Text)
+glContinentCode = lens _glContinentCode (\s a -> s { _glContinentCode = a })
+
+-- | The code for a country geo location. The default location uses '*' for
+-- the country code and will match all locations that are not matched by a
+-- geo location. The default geo location uses a * for the country code. All
+-- other country codes follow the ISO 3166 two-character code.
+glCountryCode :: Lens' GeoLocation (Maybe Text)
+glCountryCode = lens _glCountryCode (\s a -> s { _glCountryCode = a })
+
+-- | The code for a country's subdivision (e.g., a province of Canada). A
+-- subdivision code is only valid with the appropriate country code.
+-- Constraint: Specifying SubdivisionCode without CountryCode returns an
+-- InvalidInput error.
+glSubdivisionCode :: Lens' GeoLocation (Maybe Text)
+glSubdivisionCode =
+    lens _glSubdivisionCode (\s a -> s { _glSubdivisionCode = a })
+
+instance FromXML GeoLocation where
+    parseXML x = GeoLocation
+        <$> x .@? "ContinentCode"
+        <*> x .@? "CountryCode"
+        <*> x .@? "SubdivisionCode"
+
+instance ToXML GeoLocation where
+    toXML GeoLocation{..} = nodes "GeoLocation"
+        [ "ContinentCode"   =@ _glContinentCode
+        , "CountryCode"     =@ _glCountryCode
+        , "SubdivisionCode" =@ _glSubdivisionCode
+        ]
+
+data HealthCheckObservation = HealthCheckObservation
+    { _hcoIPAddress    :: Maybe Text
+    , _hcoStatusReport :: Maybe StatusReport
+    } deriving (Eq, Show)
+
+-- | 'HealthCheckObservation' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'hcoIPAddress' @::@ 'Maybe' 'Text'
+--
+-- * 'hcoStatusReport' @::@ 'Maybe' 'StatusReport'
+--
+healthCheckObservation :: HealthCheckObservation
+healthCheckObservation = HealthCheckObservation
+    { _hcoIPAddress    = Nothing
+    , _hcoStatusReport = Nothing
+    }
+
+-- | The IP address of the Route 53 health checker that performed the health
+-- check.
+hcoIPAddress :: Lens' HealthCheckObservation (Maybe Text)
+hcoIPAddress = lens _hcoIPAddress (\s a -> s { _hcoIPAddress = a })
+
+-- | A complex type that contains information about the health check status
+-- for the current observation.
+hcoStatusReport :: Lens' HealthCheckObservation (Maybe StatusReport)
+hcoStatusReport = lens _hcoStatusReport (\s a -> s { _hcoStatusReport = a })
+
+instance FromXML HealthCheckObservation where
+    parseXML x = HealthCheckObservation
+        <$> x .@? "IPAddress"
+        <*> x .@? "StatusReport"
+
+instance ToXMLRoot HealthCheckObservation where
+    toXMLRoot HealthCheckObservation{..} = namespaced ns "HealthCheckObservation"
+        [ "IPAddress"    =@ _hcoIPAddress
+        , "StatusReport" =@ _hcoStatusReport
+        ]
+
+instance ToXML HealthCheckObservation
diff --git a/gen/Network/AWS/Route53/UpdateHealthCheck.hs b/gen/Network/AWS/Route53/UpdateHealthCheck.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/UpdateHealthCheck.hs
@@ -0,0 +1,213 @@
+{-# 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.Route53.UpdateHealthCheck
+-- 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 action updates an existing health check. To update a health check,
+-- send a POST request to the 2013-04-01/healthcheck/health check ID resource.
+-- The request body must include an XML document with an
+-- UpdateHealthCheckRequest element. The response returns an
+-- UpdateHealthCheckResponse element, which contains metadata about the health
+-- check.
+--
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_UpdateHealthCheck.html>
+module Network.AWS.Route53.UpdateHealthCheck
+    (
+    -- * Request
+      UpdateHealthCheck
+    -- ** Request constructor
+    , updateHealthCheck
+    -- ** Request lenses
+    , uhcFailureThreshold
+    , uhcFullyQualifiedDomainName
+    , uhcHealthCheckId
+    , uhcHealthCheckVersion
+    , uhcIPAddress
+    , uhcPort
+    , uhcResourcePath
+    , uhcSearchString
+
+    -- * Response
+    , UpdateHealthCheckResponse
+    -- ** Response constructor
+    , updateHealthCheckResponse
+    -- ** Response lenses
+    , uhcrHealthCheck
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.RestXML
+import Network.AWS.Route53.Types
+import qualified GHC.Exts
+
+data UpdateHealthCheck = UpdateHealthCheck
+    { _uhcFailureThreshold         :: Maybe Nat
+    , _uhcFullyQualifiedDomainName :: Maybe Text
+    , _uhcHealthCheckId            :: Text
+    , _uhcHealthCheckVersion       :: Maybe Nat
+    , _uhcIPAddress                :: Maybe Text
+    , _uhcPort                     :: Maybe Nat
+    , _uhcResourcePath             :: Maybe Text
+    , _uhcSearchString             :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'UpdateHealthCheck' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'uhcFailureThreshold' @::@ 'Maybe' 'Natural'
+--
+-- * 'uhcFullyQualifiedDomainName' @::@ 'Maybe' 'Text'
+--
+-- * 'uhcHealthCheckId' @::@ 'Text'
+--
+-- * 'uhcHealthCheckVersion' @::@ 'Maybe' 'Natural'
+--
+-- * 'uhcIPAddress' @::@ 'Maybe' 'Text'
+--
+-- * 'uhcPort' @::@ 'Maybe' 'Natural'
+--
+-- * 'uhcResourcePath' @::@ 'Maybe' 'Text'
+--
+-- * 'uhcSearchString' @::@ 'Maybe' 'Text'
+--
+updateHealthCheck :: Text -- ^ 'uhcHealthCheckId'
+                  -> UpdateHealthCheck
+updateHealthCheck p1 = UpdateHealthCheck
+    { _uhcHealthCheckId            = p1
+    , _uhcHealthCheckVersion       = Nothing
+    , _uhcIPAddress                = Nothing
+    , _uhcPort                     = Nothing
+    , _uhcResourcePath             = Nothing
+    , _uhcFullyQualifiedDomainName = Nothing
+    , _uhcSearchString             = Nothing
+    , _uhcFailureThreshold         = Nothing
+    }
+
+-- | The number of consecutive health checks that an endpoint must pass or
+-- fail for Route 53 to change the current status of the endpoint from
+-- unhealthy to healthy or vice versa. Valid values are integers between 1
+-- and 10. For more information, see "How Amazon Route 53 Determines Whether
+-- an Endpoint Is Healthy" in the Amazon Route 53 Developer Guide. Specify
+-- this value only if you want to change it.
+uhcFailureThreshold :: Lens' UpdateHealthCheck (Maybe Natural)
+uhcFailureThreshold =
+    lens _uhcFailureThreshold (\s a -> s { _uhcFailureThreshold = a })
+        . mapping _Nat
+
+-- | Fully qualified domain name of the instance to be health checked. Specify
+-- this value only if you want to change it.
+uhcFullyQualifiedDomainName :: Lens' UpdateHealthCheck (Maybe Text)
+uhcFullyQualifiedDomainName =
+    lens _uhcFullyQualifiedDomainName
+        (\s a -> s { _uhcFullyQualifiedDomainName = a })
+
+-- | The ID of the health check to update.
+uhcHealthCheckId :: Lens' UpdateHealthCheck Text
+uhcHealthCheckId = lens _uhcHealthCheckId (\s a -> s { _uhcHealthCheckId = a })
+
+-- | Optional. When you specify a health check version, Route 53 compares this
+-- value with the current value in the health check, which prevents you from
+-- updating the health check when the versions don't match. Using
+-- HealthCheckVersion lets you prevent overwriting another change to the
+-- health check.
+uhcHealthCheckVersion :: Lens' UpdateHealthCheck (Maybe Natural)
+uhcHealthCheckVersion =
+    lens _uhcHealthCheckVersion (\s a -> s { _uhcHealthCheckVersion = a })
+        . mapping _Nat
+
+-- | The IP address of the resource that you want to check. Specify this value
+-- only if you want to change it.
+uhcIPAddress :: Lens' UpdateHealthCheck (Maybe Text)
+uhcIPAddress = lens _uhcIPAddress (\s a -> s { _uhcIPAddress = a })
+
+-- | The port on which you want Route 53 to open a connection to perform
+-- health checks. Specify this value only if you want to change it.
+uhcPort :: Lens' UpdateHealthCheck (Maybe Natural)
+uhcPort = lens _uhcPort (\s a -> s { _uhcPort = a }) . mapping _Nat
+
+-- | The path that you want Amazon Route 53 to request when performing health
+-- checks. The path can be any value for which your endpoint will return an
+-- HTTP status code of 2xx or 3xx when the endpoint is healthy, for example
+-- the file /docs/route53-health-check.html. Specify this value only if you
+-- want to change it.
+uhcResourcePath :: Lens' UpdateHealthCheck (Maybe Text)
+uhcResourcePath = lens _uhcResourcePath (\s a -> s { _uhcResourcePath = a })
+
+-- | If the value of Type is HTTP_STR_MATCH or HTTP_STR_MATCH, the string that
+-- you want Route 53 to search for in the response body from the specified
+-- resource. If the string appears in the response body, Route 53 considers
+-- the resource healthy. Specify this value only if you want to change it.
+uhcSearchString :: Lens' UpdateHealthCheck (Maybe Text)
+uhcSearchString = lens _uhcSearchString (\s a -> s { _uhcSearchString = a })
+
+newtype UpdateHealthCheckResponse = UpdateHealthCheckResponse
+    { _uhcrHealthCheck :: HealthCheck
+    } deriving (Eq, Show)
+
+-- | 'UpdateHealthCheckResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'uhcrHealthCheck' @::@ 'HealthCheck'
+--
+updateHealthCheckResponse :: HealthCheck -- ^ 'uhcrHealthCheck'
+                          -> UpdateHealthCheckResponse
+updateHealthCheckResponse p1 = UpdateHealthCheckResponse
+    { _uhcrHealthCheck = p1
+    }
+
+uhcrHealthCheck :: Lens' UpdateHealthCheckResponse HealthCheck
+uhcrHealthCheck = lens _uhcrHealthCheck (\s a -> s { _uhcrHealthCheck = a })
+
+instance ToPath UpdateHealthCheck where
+    toPath UpdateHealthCheck{..} = mconcat
+        [ "/2013-04-01/healthcheck/"
+        , toText _uhcHealthCheckId
+        ]
+
+instance ToQuery UpdateHealthCheck where
+    toQuery = const mempty
+
+instance ToHeaders UpdateHealthCheck
+
+instance ToXMLRoot UpdateHealthCheck where
+    toXMLRoot UpdateHealthCheck{..} = namespaced ns "UpdateHealthCheck"
+        [ "HealthCheckVersion"       =@ _uhcHealthCheckVersion
+        , "IPAddress"                =@ _uhcIPAddress
+        , "Port"                     =@ _uhcPort
+        , "ResourcePath"             =@ _uhcResourcePath
+        , "FullyQualifiedDomainName" =@ _uhcFullyQualifiedDomainName
+        , "SearchString"             =@ _uhcSearchString
+        , "FailureThreshold"         =@ _uhcFailureThreshold
+        ]
+
+instance ToXML UpdateHealthCheck
+
+instance AWSRequest UpdateHealthCheck where
+    type Sv UpdateHealthCheck = Route53
+    type Rs UpdateHealthCheck = UpdateHealthCheckResponse
+
+    request  = post
+    response = xmlResponse
+
+instance FromXML UpdateHealthCheckResponse where
+    parseXML x = UpdateHealthCheckResponse
+        <$> x .@  "HealthCheck"
