diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,23 +1,36 @@
 # 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_!
-
+* [Version](#version)
 * [Description](#description)
 * [Contribute](#contribute)
 * [Licence](#licence)
 
+
+## Version
+
+`1.0.0`
+
+
 ## 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.
+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 the [AWS API Reference](http://docs.aws.amazon.com/Route53/latest/APIReference/Welcome.html).
 
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information and sending requests.
+
+Use of lenses is required for constructing and manipulating types.
+This is due to the amount of nesting of AWS types and transparency regarding
+de/serialisation into more palatable Haskell values.
+The provided lenses should be compatible with any of the major lens libraries
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
 
 ## Contribute
 
diff --git a/amazonka-route53.cabal b/amazonka-route53.cabal
--- a/amazonka-route53.cabal
+++ b/amazonka-route53.cabal
@@ -1,12 +1,12 @@
 name:                  amazonka-route53
-version:               0.3.6.1
+version:               1.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
+copyright:             Copyright (c) 2013-2015 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 extra-source-files:    README.md
@@ -14,17 +14,25 @@
 
 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.
-
+    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>
+    The types from this library are intended to be used with
+    <http://hackage.haskell.org/package/amazonka amazonka>, which provides
+    mechanisms for specifying AuthN/AuthZ information and sending requests.
     .
-    /Warning:/ This is an experimental preview release which is still under
-    heavy development and not intended for public consumption, caveat emptor!
+    Use of lenses is required for constructing and manipulating types.
+    This is due to the amount of nesting of AWS types and transparency regarding
+    de/serialisation into more palatable Haskell values.
+    The provided lenses should be compatible with any of the major lens libraries
+    such as <http://hackage.haskell.org/package/lens lens> or
+    <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+    .
+    See "Network.AWS.Route53" and the <http://docs.aws.amazon.com/Route53/latest/APIReference/Welcome.html AWS API Reference>
+    to get started.
 
 source-repository head
     type:     git
@@ -49,7 +57,7 @@
         , Network.AWS.Route53.DeleteReusableDelegationSet
         , Network.AWS.Route53.DisassociateVPCFromHostedZone
         , Network.AWS.Route53.GetChange
-        , Network.AWS.Route53.GetCheckerIpRanges
+        , Network.AWS.Route53.GetCheckerIPRanges
         , Network.AWS.Route53.GetGeoLocation
         , Network.AWS.Route53.GetHealthCheck
         , Network.AWS.Route53.GetHealthCheckCount
@@ -69,10 +77,41 @@
         , Network.AWS.Route53.Types
         , Network.AWS.Route53.UpdateHealthCheck
         , Network.AWS.Route53.UpdateHostedZoneComment
+        , Network.AWS.Route53.Waiters
 
     other-modules:
           Network.AWS.Route53.Internal
+        , Network.AWS.Route53.Types.Product
+        , Network.AWS.Route53.Types.Sum
 
     build-depends:
-          amazonka-core == 0.3.6.*
+          amazonka-core == 1.0.0.*
         , base          >= 4.7     && < 5
+
+test-suite amazonka-route53-test
+    type:              exitcode-stdio-1.0
+    default-language:  Haskell2010
+    hs-source-dirs:    test
+    main-is:           Main.hs
+
+    ghc-options:       -Wall -threaded
+
+    -- This is not comprehensive if modules have manually been added.
+    -- It exists to ensure cabal 'somewhat' detects test module changes.
+    other-modules:
+          Test.AWS.Route53
+        , Test.AWS.Gen.Route53
+        , Test.AWS.Route53.Internal
+
+    build-depends:
+          amazonka-core == 1.0.0
+        , amazonka-test == 1.0.0
+        , amazonka-route53 == 1.0.0
+        , base
+        , bytestring
+        , lens
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/gen/Network/AWS/Route53.hs b/gen/Network/AWS/Route53.hs
--- a/gen/Network/AWS/Route53.hs
+++ b/gen/Network/AWS/Route53.hs
@@ -1,83 +1,448 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Amazon 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.
+-- 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>
 module Network.AWS.Route53
-    ( module Network.AWS.Route53.AssociateVPCWithHostedZone
+    (
+    -- * Service
+      Route53
+
+    -- * Errors
+    -- $errors
+
+    -- ** HealthCheckVersionMismatch
+    , _HealthCheckVersionMismatch
+
+    -- ** InvalidInput
+    , _InvalidInput
+
+    -- ** HostedZoneNotEmpty
+    , _HostedZoneNotEmpty
+
+    -- ** InvalidArgument
+    , _InvalidArgument
+
+    -- ** DelegationSetAlreadyReusable
+    , _DelegationSetAlreadyReusable
+
+    -- ** PriorRequestNotComplete
+    , _PriorRequestNotComplete
+
+    -- ** InvalidChangeBatch
+    , _InvalidChangeBatch
+
+    -- ** InvalidDomainName
+    , _InvalidDomainName
+
+    -- ** DelegationSetNotReusable
+    , _DelegationSetNotReusable
+
+    -- ** HealthCheckAlreadyExists
+    , _HealthCheckAlreadyExists
+
+    -- ** HostedZoneNotFound
+    , _HostedZoneNotFound
+
+    -- ** DelegationSetInUse
+    , _DelegationSetInUse
+
+    -- ** NoSuchDelegationSet
+    , _NoSuchDelegationSet
+
+    -- ** NoSuchGeoLocation
+    , _NoSuchGeoLocation
+
+    -- ** DelegationSetNotAvailable
+    , _DelegationSetNotAvailable
+
+    -- ** VPCAssociationNotFound
+    , _VPCAssociationNotFound
+
+    -- ** ThrottlingException
+    , _ThrottlingException
+
+    -- ** NoSuchChange
+    , _NoSuchChange
+
+    -- ** LimitsExceeded
+    , _LimitsExceeded
+
+    -- ** IncompatibleVersion
+    , _IncompatibleVersion
+
+    -- ** NoSuchHostedZone
+    , _NoSuchHostedZone
+
+    -- ** TooManyHostedZones
+    , _TooManyHostedZones
+
+    -- ** PublicZoneVPCAssociation
+    , _PublicZoneVPCAssociation
+
+    -- ** ConflictingDomainExists
+    , _ConflictingDomainExists
+
+    -- ** LastVPCAssociation
+    , _LastVPCAssociation
+
+    -- ** HealthCheckInUse
+    , _HealthCheckInUse
+
+    -- ** DelegationSetAlreadyCreated
+    , _DelegationSetAlreadyCreated
+
+    -- ** TooManyHealthChecks
+    , _TooManyHealthChecks
+
+    -- ** NoSuchHealthCheck
+    , _NoSuchHealthCheck
+
+    -- ** HostedZoneAlreadyExists
+    , _HostedZoneAlreadyExists
+
+    -- ** InvalidVPCId
+    , _InvalidVPCId
+
+    -- * Waiters
+    -- $waiters
+
+    -- ** ResourceRecordSetsChanged
+    , resourceRecordSetsChanged
+
+    -- * Operations
+    -- $operations
+
+    -- ** AssociateVPCWithHostedZone
+    , module Network.AWS.Route53.AssociateVPCWithHostedZone
+
+    -- ** GetHealthCheckLastFailureReason
+    , module Network.AWS.Route53.GetHealthCheckLastFailureReason
+
+    -- ** ListHostedZonesByName
+    , module Network.AWS.Route53.ListHostedZonesByName
+
+    -- ** DeleteReusableDelegationSet
+    , module Network.AWS.Route53.DeleteReusableDelegationSet
+
+    -- ** ListReusableDelegationSets
+    , module Network.AWS.Route53.ListReusableDelegationSets
+
+    -- ** GetCheckerIPRanges
+    , module Network.AWS.Route53.GetCheckerIPRanges
+
+    -- ** ListTagsForResource
+    , module Network.AWS.Route53.ListTagsForResource
+
+    -- ** ChangeResourceRecordSets
     , module Network.AWS.Route53.ChangeResourceRecordSets
-    , module Network.AWS.Route53.ChangeTagsForResource
-    , module Network.AWS.Route53.CreateHealthCheck
+
+    -- ** GetChange
+    , module Network.AWS.Route53.GetChange
+
+    -- ** CreateHostedZone
     , module Network.AWS.Route53.CreateHostedZone
-    , module Network.AWS.Route53.CreateReusableDelegationSet
+
+    -- ** DeleteHealthCheck
     , module Network.AWS.Route53.DeleteHealthCheck
-    , module Network.AWS.Route53.DeleteHostedZone
-    , module Network.AWS.Route53.DeleteReusableDelegationSet
+
+    -- ** UpdateHealthCheck
+    , module Network.AWS.Route53.UpdateHealthCheck
+
+    -- ** ChangeTagsForResource
+    , module Network.AWS.Route53.ChangeTagsForResource
+
+    -- ** CreateHealthCheck
+    , module Network.AWS.Route53.CreateHealthCheck
+
+    -- ** ListHostedZones (Paginated)
+    , module Network.AWS.Route53.ListHostedZones
+
+    -- ** DisassociateVPCFromHostedZone
     , module Network.AWS.Route53.DisassociateVPCFromHostedZone
-    , module Network.AWS.Route53.GetChange
-    , module Network.AWS.Route53.GetCheckerIpRanges
-    , module Network.AWS.Route53.GetGeoLocation
+
+    -- ** GetHostedZone
+    , module Network.AWS.Route53.GetHostedZone
+
+    -- ** ListGeoLocations
+    , module Network.AWS.Route53.ListGeoLocations
+
+    -- ** GetHealthCheck
     , module Network.AWS.Route53.GetHealthCheck
+
+    -- ** ListResourceRecordSets (Paginated)
+    , module Network.AWS.Route53.ListResourceRecordSets
+
+    -- ** GetHealthCheckCount
     , module Network.AWS.Route53.GetHealthCheckCount
-    , module Network.AWS.Route53.GetHealthCheckLastFailureReason
-    , module Network.AWS.Route53.GetHealthCheckStatus
-    , module Network.AWS.Route53.GetHostedZone
+
+    -- ** CreateReusableDelegationSet
+    , module Network.AWS.Route53.CreateReusableDelegationSet
+
+    -- ** GetHostedZoneCount
     , module Network.AWS.Route53.GetHostedZoneCount
+
+    -- ** GetReusableDelegationSet
     , module Network.AWS.Route53.GetReusableDelegationSet
-    , module Network.AWS.Route53.ListGeoLocations
+
+    -- ** UpdateHostedZoneComment
+    , module Network.AWS.Route53.UpdateHostedZoneComment
+
+    -- ** GetHealthCheckStatus
+    , module Network.AWS.Route53.GetHealthCheckStatus
+
+    -- ** ListHealthChecks (Paginated)
     , module Network.AWS.Route53.ListHealthChecks
-    , module Network.AWS.Route53.ListHostedZones
-    , module Network.AWS.Route53.ListHostedZonesByName
-    , module Network.AWS.Route53.ListResourceRecordSets
-    , module Network.AWS.Route53.ListReusableDelegationSets
-    , module Network.AWS.Route53.ListTagsForResource
+
+    -- ** DeleteHostedZone
+    , module Network.AWS.Route53.DeleteHostedZone
+
+    -- ** GetGeoLocation
+    , module Network.AWS.Route53.GetGeoLocation
+
+    -- ** ListTagsForResources
     , module Network.AWS.Route53.ListTagsForResources
-    , module Network.AWS.Route53.Types
-    , module Network.AWS.Route53.UpdateHealthCheck
-    , module Network.AWS.Route53.UpdateHostedZoneComment
+
+    -- * Types
+
+    -- ** Re-exported Types
+    , module Network.AWS.Route53.Internal
+
+    -- ** ChangeAction
+    , ChangeAction (..)
+
+    -- ** ChangeStatus
+    , ChangeStatus (..)
+
+    -- ** Failover
+    , Failover (..)
+
+    -- ** HealthCheckType
+    , HealthCheckType (..)
+
+    -- ** RecordType
+    , RecordType (..)
+
+    -- ** TagResourceType
+    , TagResourceType (..)
+
+    -- ** VPCRegion
+    , VPCRegion (..)
+
+    -- ** AliasTarget
+    , AliasTarget
+    , aliasTarget
+    , atHostedZoneId
+    , atDNSName
+    , atEvaluateTargetHealth
+
+    -- ** Change
+    , Change
+    , change
+    , cAction
+    , cResourceRecordSet
+
+    -- ** ChangeBatch
+    , ChangeBatch
+    , changeBatch
+    , cbComment
+    , cbChanges
+
+    -- ** ChangeInfo
+    , ChangeInfo
+    , changeInfo
+    , ciComment
+    , ciId
+    , ciStatus
+    , ciSubmittedAt
+
+    -- ** DelegationSet
+    , DelegationSet
+    , delegationSet
+    , dsId
+    , dsCallerReference
+    , dsNameServers
+
+    -- ** GeoLocation
+    , GeoLocation
+    , geoLocation
+    , glSubdivisionCode
+    , glCountryCode
+    , glContinentCode
+
+    -- ** GeoLocationDetails
+    , GeoLocationDetails
+    , geoLocationDetails
+    , gldSubdivisionName
+    , gldSubdivisionCode
+    , gldCountryName
+    , gldCountryCode
+    , gldContinentCode
+    , gldContinentName
+
+    -- ** HealthCheck
+    , HealthCheck
+    , healthCheck
+    , hcId
+    , hcCallerReference
+    , hcHealthCheckConfig
+    , hcHealthCheckVersion
+
+    -- ** HealthCheckConfig
+    , HealthCheckConfig
+    , healthCheckConfig
+    , hccIPAddress
+    , hccFailureThreshold
+    , hccSearchString
+    , hccResourcePath
+    , hccFullyQualifiedDomainName
+    , hccRequestInterval
+    , hccPort
+    , hccType
+
+    -- ** HealthCheckObservation
+    , HealthCheckObservation
+    , healthCheckObservation
+    , hcoIPAddress
+    , hcoStatusReport
+
+    -- ** HostedZone
+    , HostedZone
+    , hostedZone
+    , hzConfig
+    , hzResourceRecordSetCount
+    , hzId
+    , hzName
+    , hzCallerReference
+
+    -- ** HostedZoneConfig
+    , HostedZoneConfig
+    , hostedZoneConfig
+    , hzcPrivateZone
+    , hzcComment
+
+    -- ** ResourceRecord
+    , ResourceRecord
+    , resourceRecord
+    , rrValue
+
+    -- ** ResourceRecordSet
+    , ResourceRecordSet
+    , resourceRecordSet
+    , rrsResourceRecords
+    , rrsTTL
+    , rrsAliasTarget
+    , rrsWeight
+    , rrsSetIdentifier
+    , rrsFailover
+    , rrsHealthCheckId
+    , rrsRegion
+    , rrsGeoLocation
+    , rrsName
+    , rrsType
+
+    -- ** ResourceTagSet
+    , ResourceTagSet
+    , resourceTagSet
+    , rtsResourceId
+    , rtsResourceType
+    , rtsTags
+
+    -- ** StatusReport
+    , StatusReport
+    , statusReport
+    , srStatus
+    , srCheckedTime
+
+    -- ** Tag
+    , Tag
+    , tag
+    , tagValue
+    , tagKey
+
+    -- ** VPC
+    , VPC
+    , vpc
+    , vpcVPCRegion
+    , vpcVPCId
     ) 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.GetHostedZoneCount
-import Network.AWS.Route53.GetReusableDelegationSet
-import Network.AWS.Route53.ListGeoLocations
-import Network.AWS.Route53.ListHealthChecks
-import Network.AWS.Route53.ListHostedZones
-import Network.AWS.Route53.ListHostedZonesByName
-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
-import Network.AWS.Route53.UpdateHostedZoneComment
+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.GetHostedZoneCount
+import           Network.AWS.Route53.GetReusableDelegationSet
+import           Network.AWS.Route53.Internal
+import           Network.AWS.Route53.ListGeoLocations
+import           Network.AWS.Route53.ListHealthChecks
+import           Network.AWS.Route53.ListHostedZones
+import           Network.AWS.Route53.ListHostedZonesByName
+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
+import           Network.AWS.Route53.UpdateHostedZoneComment
+import           Network.AWS.Route53.Waiters
+
+{- $errors
+Error matchers are designed for use with the functions provided by
+<http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+This allows catching (and rethrowing) service specific errors returned
+by 'Route53'.
+-}
+
+{- $operations
+Some AWS operations return results that are incomplete and require subsequent
+requests in order to obtain the entire result set. The process of sending
+subsequent requests to continue where a previous request left off is called
+pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+1000 objects at a time, and you must send subsequent requests with the
+appropriate Marker in order to retrieve the next page of results.
+
+Operations that have an 'AWSPager' instance can transparently perform subsequent
+requests, correctly setting Markers and other request facets to iterate through
+the entire result set of a truncated API operation. Operations which support
+this have an additional note in the documentation.
+
+Many operations have the ability to filter results on the server side. See the
+individual operation parameters for details.
+-}
+
+{- $waiters
+Waiters poll by repeatedly sending a request until some remote success condition
+configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+determines how many attempts should be made, in addition to delay and retry strategies.
+-}
diff --git a/gen/Network/AWS/Route53/AssociateVPCWithHostedZone.hs b/gen/Network/AWS/Route53/AssociateVPCWithHostedZone.hs
--- a/gen/Network/AWS/Route53/AssociateVPCWithHostedZone.hs
+++ b/gen/Network/AWS/Route53/AssociateVPCWithHostedZone.hs
@@ -1,149 +1,168 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | This action associates a VPC with an hosted zone.
+-- 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.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_AssociateVPCWithHostedZone.html AWS API Reference> for AssociateVPCWithHostedZone.
 module Network.AWS.Route53.AssociateVPCWithHostedZone
     (
-    -- * Request
-      AssociateVPCWithHostedZone
-    -- ** Request constructor
-    , associateVPCWithHostedZone
-    -- ** Request lenses
-    , avpcwhzComment
-    , avpcwhzHostedZoneId
-    , avpcwhzVPC
+    -- * Creating a Request
+      associateVPCWithHostedZone
+    , AssociateVPCWithHostedZone
+    -- * Request Lenses
+    , avwhzComment
+    , avwhzHostedZoneId
+    , avwhzVPC
 
-    -- * Response
-    , AssociateVPCWithHostedZoneResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , associateVPCWithHostedZoneResponse
-    -- ** Response lenses
-    , avpcwhzrChangeInfo
+    , AssociateVPCWithHostedZoneResponse
+    -- * Response Lenses
+    , avwhzrsStatus
+    , avwhzrsChangeInfo
     ) 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, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
--- | 'AssociateVPCWithHostedZone' constructor.
+-- | A complex type that contains information about the request to associate
+-- a VPC with an hosted zone.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'associateVPCWithHostedZone' smart constructor.
+data AssociateVPCWithHostedZone = AssociateVPCWithHostedZone'
+    { _avwhzComment      :: !(Maybe Text)
+    , _avwhzHostedZoneId :: !Text
+    , _avwhzVPC          :: !VPC
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AssociateVPCWithHostedZone' with the minimum fields required to make a request.
 --
--- * 'avpcwhzComment' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'avpcwhzHostedZoneId' @::@ 'Text'
+-- * 'avwhzComment'
 --
--- * 'avpcwhzVPC' @::@ 'VPC'
+-- * 'avwhzHostedZoneId'
 --
-associateVPCWithHostedZone :: Text -- ^ 'avpcwhzHostedZoneId'
-                           -> VPC -- ^ 'avpcwhzVPC'
-                           -> AssociateVPCWithHostedZone
-associateVPCWithHostedZone p1 p2 = AssociateVPCWithHostedZone
-    { _avpcwhzHostedZoneId = p1
-    , _avpcwhzVPC          = p2
-    , _avpcwhzComment      = Nothing
+-- * 'avwhzVPC'
+associateVPCWithHostedZone
+    :: Text -- ^ 'avwhzHostedZoneId'
+    -> VPC -- ^ 'avwhzVPC'
+    -> AssociateVPCWithHostedZone
+associateVPCWithHostedZone pHostedZoneId_ pVPC_ =
+    AssociateVPCWithHostedZone'
+    { _avwhzComment = Nothing
+    , _avwhzHostedZoneId = pHostedZoneId_
+    , _avwhzVPC = pVPC_
     }
 
--- | /Optional:/ Any comments you want to include about a 'AssociateVPCWithHostedZoneRequest'.
-avpcwhzComment :: Lens' AssociateVPCWithHostedZone (Maybe Text)
-avpcwhzComment = lens _avpcwhzComment (\s a -> s { _avpcwhzComment = a })
+-- | /Optional:/ Any comments you want to include about a
+-- 'AssociateVPCWithHostedZoneRequest'.
+avwhzComment :: Lens' AssociateVPCWithHostedZone (Maybe Text)
+avwhzComment = lens _avwhzComment (\ s a -> s{_avwhzComment = 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 })
+-- Note that you cannot associate a VPC with a hosted zone that doesn\'t
+-- have an existing VPC association.
+avwhzHostedZoneId :: Lens' AssociateVPCWithHostedZone Text
+avwhzHostedZoneId = lens _avwhzHostedZoneId (\ s a -> s{_avwhzHostedZoneId = 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 })
+avwhzVPC :: Lens' AssociateVPCWithHostedZone VPC
+avwhzVPC = lens _avwhzVPC (\ s a -> s{_avwhzVPC = a});
 
-newtype AssociateVPCWithHostedZoneResponse = AssociateVPCWithHostedZoneResponse
-    { _avpcwhzrChangeInfo :: ChangeInfo
-    } deriving (Eq, Read, Show)
+instance AWSRequest AssociateVPCWithHostedZone where
+        type Sv AssociateVPCWithHostedZone = Route53
+        type Rs AssociateVPCWithHostedZone =
+             AssociateVPCWithHostedZoneResponse
+        request = postXML
+        response
+          = receiveXML
+              (\ s h x ->
+                 AssociateVPCWithHostedZoneResponse' <$>
+                   (pure (fromEnum s)) <*> (x .@ "ChangeInfo"))
 
--- | 'AssociateVPCWithHostedZoneResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'avpcwhzrChangeInfo' @::@ 'ChangeInfo'
---
-associateVPCWithHostedZoneResponse :: ChangeInfo -- ^ 'avpcwhzrChangeInfo'
-                                   -> AssociateVPCWithHostedZoneResponse
-associateVPCWithHostedZoneResponse p1 = AssociateVPCWithHostedZoneResponse
-    { _avpcwhzrChangeInfo = p1
-    }
+instance ToElement AssociateVPCWithHostedZone where
+        toElement
+          = mkElement
+              "{https://route53.amazonaws.com/doc/2013-04-01/}AssociateVPCWithHostedZoneRequest"
 
--- | 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 ToHeaders AssociateVPCWithHostedZone where
+        toHeaders = const mempty
 
 instance ToPath AssociateVPCWithHostedZone where
-    toPath AssociateVPCWithHostedZone{..} = mconcat
-        [ "/2013-04-01/hostedzone/"
-        , toText _avpcwhzHostedZoneId
-        , "/associatevpc"
-        ]
+        toPath AssociateVPCWithHostedZone'{..}
+          = mconcat
+              ["/2013-04-01/hostedzone/", toBS _avwhzHostedZoneId,
+               "/associatevpc"]
 
 instance ToQuery AssociateVPCWithHostedZone where
-    toQuery = const mempty
-
-instance ToHeaders AssociateVPCWithHostedZone
+        toQuery = const mempty
 
-instance ToXMLRoot AssociateVPCWithHostedZone where
-    toXMLRoot AssociateVPCWithHostedZone{..} = namespaced ns "AssociateVPCWithHostedZone"
-        [ "VPC"     =@ _avpcwhzVPC
-        , "Comment" =@ _avpcwhzComment
-        ]
+instance ToXML AssociateVPCWithHostedZone where
+        toXML AssociateVPCWithHostedZone'{..}
+          = mconcat
+              ["Comment" @= _avwhzComment, "VPC" @= _avwhzVPC]
 
-instance ToXML AssociateVPCWithHostedZone
+-- | A complex type containing the response information for the request.
+--
+-- /See:/ 'associateVPCWithHostedZoneResponse' smart constructor.
+data AssociateVPCWithHostedZoneResponse = AssociateVPCWithHostedZoneResponse'
+    { _avwhzrsStatus     :: !Int
+    , _avwhzrsChangeInfo :: !ChangeInfo
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest AssociateVPCWithHostedZone where
-    type Sv AssociateVPCWithHostedZone = Route53
-    type Rs AssociateVPCWithHostedZone = AssociateVPCWithHostedZoneResponse
+-- | Creates a value of 'AssociateVPCWithHostedZoneResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'avwhzrsStatus'
+--
+-- * 'avwhzrsChangeInfo'
+associateVPCWithHostedZoneResponse
+    :: Int -- ^ 'avwhzrsStatus'
+    -> ChangeInfo -- ^ 'avwhzrsChangeInfo'
+    -> AssociateVPCWithHostedZoneResponse
+associateVPCWithHostedZoneResponse pStatus_ pChangeInfo_ =
+    AssociateVPCWithHostedZoneResponse'
+    { _avwhzrsStatus = pStatus_
+    , _avwhzrsChangeInfo = pChangeInfo_
+    }
 
-    request  = post
-    response = xmlResponse
+-- | The response status code.
+avwhzrsStatus :: Lens' AssociateVPCWithHostedZoneResponse Int
+avwhzrsStatus = lens _avwhzrsStatus (\ s a -> s{_avwhzrsStatus = a});
 
-instance FromXML AssociateVPCWithHostedZoneResponse where
-    parseXML x = AssociateVPCWithHostedZoneResponse
-        <$> x .@  "ChangeInfo"
+-- | A complex type that contains the ID, the status, and the date and time
+-- of your 'AssociateVPCWithHostedZoneRequest'.
+avwhzrsChangeInfo :: Lens' AssociateVPCWithHostedZoneResponse ChangeInfo
+avwhzrsChangeInfo = lens _avwhzrsChangeInfo (\ s a -> s{_avwhzrsChangeInfo = a});
diff --git a/gen/Network/AWS/Route53/ChangeResourceRecordSets.hs b/gen/Network/AWS/Route53/ChangeResourceRecordSets.hs
--- a/gen/Network/AWS/Route53/ChangeResourceRecordSets.hs
+++ b/gen/Network/AWS/Route53/ChangeResourceRecordSets.hs
@@ -1,153 +1,179 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | 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 ZoneID//rrset resource. The request body must include an XML document with a 'ChangeResourceRecordSetsRequest' element.
+-- 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 <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/RRSchanges.html#RRSchanges_API Creating, Changing, and Deleting Resource Record Sets Using the Route 53 API> in the /Amazon Route 53 Developer Guide/.
+-- more information on transactional changes, also known as change batches,
+-- see
+-- <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/RRSchanges.html#RRSchanges_API 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'.
+-- 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.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ChangeResourceRecordSets.html AWS API Reference> for ChangeResourceRecordSets.
 module Network.AWS.Route53.ChangeResourceRecordSets
     (
-    -- * Request
-      ChangeResourceRecordSets
-    -- ** Request constructor
-    , changeResourceRecordSets
-    -- ** Request lenses
-    , crrsChangeBatch
+    -- * Creating a Request
+      changeResourceRecordSets
+    , ChangeResourceRecordSets
+    -- * Request Lenses
     , crrsHostedZoneId
+    , crrsChangeBatch
 
-    -- * Response
-    , ChangeResourceRecordSetsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , changeResourceRecordSetsResponse
-    -- ** Response lenses
-    , crrsrChangeInfo
+    , ChangeResourceRecordSetsResponse
+    -- * Response Lenses
+    , crrsrsStatus
+    , crrsrsChangeInfo
     ) 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, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
--- | 'ChangeResourceRecordSets' constructor.
+-- | A complex type that contains a change batch.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'changeResourceRecordSets' smart constructor.
+data ChangeResourceRecordSets = ChangeResourceRecordSets'
+    { _crrsHostedZoneId :: !Text
+    , _crrsChangeBatch  :: !ChangeBatch
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChangeResourceRecordSets' with the minimum fields required to make a request.
 --
--- * 'crrsChangeBatch' @::@ 'ChangeBatch'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'crrsHostedZoneId' @::@ 'Text'
+-- * 'crrsHostedZoneId'
 --
-changeResourceRecordSets :: Text -- ^ 'crrsHostedZoneId'
-                         -> ChangeBatch -- ^ 'crrsChangeBatch'
-                         -> ChangeResourceRecordSets
-changeResourceRecordSets p1 p2 = ChangeResourceRecordSets
-    { _crrsHostedZoneId = p1
-    , _crrsChangeBatch  = p2
+-- * 'crrsChangeBatch'
+changeResourceRecordSets
+    :: Text -- ^ 'crrsHostedZoneId'
+    -> ChangeBatch -- ^ 'crrsChangeBatch'
+    -> ChangeResourceRecordSets
+changeResourceRecordSets pHostedZoneId_ pChangeBatch_ =
+    ChangeResourceRecordSets'
+    { _crrsHostedZoneId = pHostedZoneId_
+    , _crrsChangeBatch = pChangeBatch_
     }
 
--- | 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.
+-- | 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 })
+crrsHostedZoneId = lens _crrsHostedZoneId (\ s a -> s{_crrsHostedZoneId = a});
 
-newtype ChangeResourceRecordSetsResponse = ChangeResourceRecordSetsResponse
-    { _crrsrChangeInfo :: ChangeInfo
-    } deriving (Eq, Read, Show)
+-- | A complex type that contains an optional comment and the 'Changes'
+-- element.
+crrsChangeBatch :: Lens' ChangeResourceRecordSets ChangeBatch
+crrsChangeBatch = lens _crrsChangeBatch (\ s a -> s{_crrsChangeBatch = a});
 
--- | 'ChangeResourceRecordSetsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'crrsrChangeInfo' @::@ 'ChangeInfo'
---
-changeResourceRecordSetsResponse :: ChangeInfo -- ^ 'crrsrChangeInfo'
-                                 -> ChangeResourceRecordSetsResponse
-changeResourceRecordSetsResponse p1 = ChangeResourceRecordSetsResponse
-    { _crrsrChangeInfo = p1
-    }
+instance AWSRequest ChangeResourceRecordSets where
+        type Sv ChangeResourceRecordSets = Route53
+        type Rs ChangeResourceRecordSets =
+             ChangeResourceRecordSetsResponse
+        request = postXML
+        response
+          = receiveXML
+              (\ s h x ->
+                 ChangeResourceRecordSetsResponse' <$>
+                   (pure (fromEnum s)) <*> (x .@ "ChangeInfo"))
 
--- | 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 ToElement ChangeResourceRecordSets where
+        toElement
+          = mkElement
+              "{https://route53.amazonaws.com/doc/2013-04-01/}ChangeResourceRecordSetsRequest"
 
+instance ToHeaders ChangeResourceRecordSets where
+        toHeaders = const mempty
+
 instance ToPath ChangeResourceRecordSets where
-    toPath ChangeResourceRecordSets{..} = mconcat
-        [ "/2013-04-01/hostedzone/"
-        , toText _crrsHostedZoneId
-        , "/rrset/"
-        ]
+        toPath ChangeResourceRecordSets'{..}
+          = mconcat
+              ["/2013-04-01/hostedzone/", toBS _crrsHostedZoneId,
+               "/rrset/"]
 
 instance ToQuery ChangeResourceRecordSets where
-    toQuery = const mempty
-
-instance ToHeaders ChangeResourceRecordSets
+        toQuery = const mempty
 
-instance ToXMLRoot ChangeResourceRecordSets where
-    toXMLRoot ChangeResourceRecordSets{..} = namespaced ns "ChangeResourceRecordSets"
-        [ "ChangeBatch" =@ _crrsChangeBatch
-        ]
+instance ToXML ChangeResourceRecordSets where
+        toXML ChangeResourceRecordSets'{..}
+          = mconcat ["ChangeBatch" @= _crrsChangeBatch]
 
-instance ToXML ChangeResourceRecordSets
+-- | A complex type containing the response for the request.
+--
+-- /See:/ 'changeResourceRecordSetsResponse' smart constructor.
+data ChangeResourceRecordSetsResponse = ChangeResourceRecordSetsResponse'
+    { _crrsrsStatus     :: !Int
+    , _crrsrsChangeInfo :: !ChangeInfo
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest ChangeResourceRecordSets where
-    type Sv ChangeResourceRecordSets = Route53
-    type Rs ChangeResourceRecordSets = ChangeResourceRecordSetsResponse
+-- | Creates a value of 'ChangeResourceRecordSetsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crrsrsStatus'
+--
+-- * 'crrsrsChangeInfo'
+changeResourceRecordSetsResponse
+    :: Int -- ^ 'crrsrsStatus'
+    -> ChangeInfo -- ^ 'crrsrsChangeInfo'
+    -> ChangeResourceRecordSetsResponse
+changeResourceRecordSetsResponse pStatus_ pChangeInfo_ =
+    ChangeResourceRecordSetsResponse'
+    { _crrsrsStatus = pStatus_
+    , _crrsrsChangeInfo = pChangeInfo_
+    }
 
-    request  = post
-    response = xmlResponse
+-- | The response status code.
+crrsrsStatus :: Lens' ChangeResourceRecordSetsResponse Int
+crrsrsStatus = lens _crrsrsStatus (\ s a -> s{_crrsrsStatus = a});
 
-instance FromXML ChangeResourceRecordSetsResponse where
-    parseXML x = ChangeResourceRecordSetsResponse
-        <$> x .@  "ChangeInfo"
+-- | 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.
+crrsrsChangeInfo :: Lens' ChangeResourceRecordSetsResponse ChangeInfo
+crrsrsChangeInfo = lens _crrsrsChangeInfo (\ s a -> s{_crrsrsChangeInfo = a});
diff --git a/gen/Network/AWS/Route53/ChangeTagsForResource.hs b/gen/Network/AWS/Route53/ChangeTagsForResource.hs
--- a/gen/Network/AWS/Route53/ChangeTagsForResource.hs
+++ b/gen/Network/AWS/Route53/ChangeTagsForResource.hs
@@ -1,96 +1,94 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ChangeTagsForResource.html>
+-- Undocumented operation.
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ChangeTagsForResource.html AWS API Reference> for ChangeTagsForResource.
 module Network.AWS.Route53.ChangeTagsForResource
     (
-    -- * Request
-      ChangeTagsForResource
-    -- ** Request constructor
-    , changeTagsForResource
-    -- ** Request lenses
-    , ctfrAddTags
+    -- * Creating a Request
+      changeTagsForResource
+    , ChangeTagsForResource
+    -- * Request Lenses
     , ctfrRemoveTagKeys
-    , ctfrResourceId
+    , ctfrAddTags
     , ctfrResourceType
+    , ctfrResourceId
 
-    -- * Response
-    , ChangeTagsForResourceResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , changeTagsForResourceResponse
+    , ChangeTagsForResourceResponse
+    -- * Response Lenses
+    , ctfrrsStatus
     ) 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  :: TagResourceType
-    } deriving (Eq, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
--- | 'ChangeTagsForResource' constructor.
+-- | A complex type containing information about a request to add, change, or
+-- delete the tags that are associated with a resource.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'changeTagsForResource' smart constructor.
+data ChangeTagsForResource = ChangeTagsForResource'
+    { _ctfrRemoveTagKeys :: !(Maybe (List1 Text))
+    , _ctfrAddTags       :: !(Maybe (List1 Tag))
+    , _ctfrResourceType  :: !TagResourceType
+    , _ctfrResourceId    :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChangeTagsForResource' with the minimum fields required to make a request.
 --
--- * 'ctfrAddTags' @::@ 'NonEmpty' 'Tag'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ctfrRemoveTagKeys' @::@ 'NonEmpty' 'Text'
+-- * 'ctfrRemoveTagKeys'
 --
--- * 'ctfrResourceId' @::@ 'Text'
+-- * 'ctfrAddTags'
 --
--- * 'ctfrResourceType' @::@ 'TagResourceType'
+-- * 'ctfrResourceType'
 --
-changeTagsForResource :: TagResourceType -- ^ '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
+-- * 'ctfrResourceId'
+changeTagsForResource
+    :: TagResourceType -- ^ 'ctfrResourceType'
+    -> Text -- ^ 'ctfrResourceId'
+    -> ChangeTagsForResource
+changeTagsForResource pResourceType_ pResourceId_ =
+    ChangeTagsForResource'
+    { _ctfrRemoveTagKeys = Nothing
+    , _ctfrAddTags = Nothing
+    , _ctfrResourceType = pResourceType_
+    , _ctfrResourceId = pResourceId_
     }
 
--- | 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
+-- | A list of 'Tag' keys that you want to remove from the specified
+-- resource.
+ctfrRemoveTagKeys :: Lens' ChangeTagsForResource (Maybe (NonEmpty Text))
+ctfrRemoveTagKeys = lens _ctfrRemoveTagKeys (\ s a -> s{_ctfrRemoveTagKeys = a}) . mapping _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 })
+-- | 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 (Maybe (NonEmpty Tag))
+ctfrAddTags = lens _ctfrAddTags (\ s a -> s{_ctfrAddTags = a}) . mapping _List1;
 
 -- | The type of the resource.
 --
@@ -98,39 +96,69 @@
 --
 -- - The resource type for hosted zones is 'hostedzone'.
 ctfrResourceType :: Lens' ChangeTagsForResource TagResourceType
-ctfrResourceType = lens _ctfrResourceType (\s a -> s { _ctfrResourceType = a })
+ctfrResourceType = lens _ctfrResourceType (\ s a -> s{_ctfrResourceType = a});
 
-data ChangeTagsForResourceResponse = ChangeTagsForResourceResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+-- | 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});
 
--- | 'ChangeTagsForResourceResponse' constructor.
-changeTagsForResourceResponse :: ChangeTagsForResourceResponse
-changeTagsForResourceResponse = ChangeTagsForResourceResponse
+instance AWSRequest ChangeTagsForResource where
+        type Sv ChangeTagsForResource = Route53
+        type Rs ChangeTagsForResource =
+             ChangeTagsForResourceResponse
+        request = postXML
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 ChangeTagsForResourceResponse' <$>
+                   (pure (fromEnum s)))
 
+instance ToElement ChangeTagsForResource where
+        toElement
+          = mkElement
+              "{https://route53.amazonaws.com/doc/2013-04-01/}ChangeTagsForResourceRequest"
+
+instance ToHeaders ChangeTagsForResource where
+        toHeaders = const mempty
+
 instance ToPath ChangeTagsForResource where
-    toPath ChangeTagsForResource{..} = mconcat
-        [ "/2013-04-01/tags/"
-        , toText _ctfrResourceType
-        , "/"
-        , toText _ctfrResourceId
-        ]
+        toPath ChangeTagsForResource'{..}
+          = mconcat
+              ["/2013-04-01/tags/", toBS _ctfrResourceType, "/",
+               toBS _ctfrResourceId]
 
 instance ToQuery ChangeTagsForResource where
-    toQuery = const mempty
-
-instance ToHeaders ChangeTagsForResource
+        toQuery = const mempty
 
-instance ToXMLRoot ChangeTagsForResource where
-    toXMLRoot ChangeTagsForResource{..} = namespaced ns "ChangeTagsForResource"
-        [ "AddTags"       =@ _ctfrAddTags
-        , "RemoveTagKeys" =@ _ctfrRemoveTagKeys
-        ]
+instance ToXML ChangeTagsForResource where
+        toXML ChangeTagsForResource'{..}
+          = mconcat
+              ["RemoveTagKeys" @=
+                 toXML (toXMLList "Key" <$> _ctfrRemoveTagKeys),
+               "AddTags" @=
+                 toXML (toXMLList "Tag" <$> _ctfrAddTags)]
 
-instance ToXML ChangeTagsForResource
+-- | Empty response for the request.
+--
+-- /See:/ 'changeTagsForResourceResponse' smart constructor.
+newtype ChangeTagsForResourceResponse = ChangeTagsForResourceResponse'
+    { _ctfrrsStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest ChangeTagsForResource where
-    type Sv ChangeTagsForResource = Route53
-    type Rs ChangeTagsForResource = ChangeTagsForResourceResponse
+-- | Creates a value of 'ChangeTagsForResourceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ctfrrsStatus'
+changeTagsForResourceResponse
+    :: Int -- ^ 'ctfrrsStatus'
+    -> ChangeTagsForResourceResponse
+changeTagsForResourceResponse pStatus_ =
+    ChangeTagsForResourceResponse'
+    { _ctfrrsStatus = pStatus_
+    }
 
-    request  = post
-    response = nullResponse ChangeTagsForResourceResponse
+-- | The response status code.
+ctfrrsStatus :: Lens' ChangeTagsForResourceResponse Int
+ctfrrsStatus = lens _ctfrrsStatus (\ s a -> s{_ctfrrsStatus = a});
diff --git a/gen/Network/AWS/Route53/CreateHealthCheck.hs b/gen/Network/AWS/Route53/CreateHealthCheck.hs
--- a/gen/Network/AWS/Route53/CreateHealthCheck.hs
+++ b/gen/Network/AWS/Route53/CreateHealthCheck.hs
@@ -1,144 +1,170 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | This action creates a new health check.
+-- 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.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_CreateHealthCheck.html AWS API Reference> for CreateHealthCheck.
 module Network.AWS.Route53.CreateHealthCheck
     (
-    -- * Request
-      CreateHealthCheck
-    -- ** Request constructor
-    , createHealthCheck
-    -- ** Request lenses
+    -- * Creating a Request
+      createHealthCheck
+    , CreateHealthCheck
+    -- * Request Lenses
     , chcCallerReference
     , chcHealthCheckConfig
 
-    -- * Response
-    , CreateHealthCheckResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createHealthCheckResponse
-    -- ** Response lenses
-    , chcrHealthCheck
-    , chcrLocation
+    , CreateHealthCheckResponse
+    -- * Response Lenses
+    , chcrsStatus
+    , chcrsHealthCheck
+    , chcrsLocation
     ) 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, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
--- | 'CreateHealthCheck' constructor.
+-- | >A complex type that contains information about the request to create a
+-- health check.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'createHealthCheck' smart constructor.
+data CreateHealthCheck = CreateHealthCheck'
+    { _chcCallerReference   :: !Text
+    , _chcHealthCheckConfig :: !HealthCheckConfig
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateHealthCheck' with the minimum fields required to make a request.
 --
--- * 'chcCallerReference' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'chcHealthCheckConfig' @::@ 'HealthCheckConfig'
+-- * 'chcCallerReference'
 --
-createHealthCheck :: Text -- ^ 'chcCallerReference'
-                  -> HealthCheckConfig -- ^ 'chcHealthCheckConfig'
-                  -> CreateHealthCheck
-createHealthCheck p1 p2 = CreateHealthCheck
-    { _chcCallerReference   = p1
-    , _chcHealthCheckConfig = p2
+-- * 'chcHealthCheckConfig'
+createHealthCheck
+    :: Text -- ^ 'chcCallerReference'
+    -> HealthCheckConfig -- ^ 'chcHealthCheckConfig'
+    -> CreateHealthCheck
+createHealthCheck pCallerReference_ pHealthCheckConfig_ =
+    CreateHealthCheck'
+    { _chcCallerReference = pCallerReference_
+    , _chcHealthCheckConfig = pHealthCheckConfig_
     }
 
--- | 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.
+-- | 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.
+-- 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 })
+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, Read, Show)
+chcHealthCheckConfig = lens _chcHealthCheckConfig (\ s a -> s{_chcHealthCheckConfig = a});
 
--- | '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
-    }
+instance AWSRequest CreateHealthCheck where
+        type Sv CreateHealthCheck = Route53
+        type Rs CreateHealthCheck = CreateHealthCheckResponse
+        request = postXML
+        response
+          = receiveXML
+              (\ s h x ->
+                 CreateHealthCheckResponse' <$>
+                   (pure (fromEnum s)) <*> (x .@ "HealthCheck") <*>
+                     (h .# "Location"))
 
--- | A complex type that contains identifying information about the health check.
-chcrHealthCheck :: Lens' CreateHealthCheckResponse HealthCheck
-chcrHealthCheck = lens _chcrHealthCheck (\s a -> s { _chcrHealthCheck = a })
+instance ToElement CreateHealthCheck where
+        toElement
+          = mkElement
+              "{https://route53.amazonaws.com/doc/2013-04-01/}CreateHealthCheckRequest"
 
--- | The unique URL representing the new health check.
-chcrLocation :: Lens' CreateHealthCheckResponse Text
-chcrLocation = lens _chcrLocation (\s a -> s { _chcrLocation = a })
+instance ToHeaders CreateHealthCheck where
+        toHeaders = const mempty
 
 instance ToPath CreateHealthCheck where
-    toPath = const "/2013-04-01/healthcheck"
+        toPath = const "/2013-04-01/healthcheck"
 
 instance ToQuery CreateHealthCheck where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders CreateHealthCheck
+instance ToXML CreateHealthCheck where
+        toXML CreateHealthCheck'{..}
+          = mconcat
+              ["CallerReference" @= _chcCallerReference,
+               "HealthCheckConfig" @= _chcHealthCheckConfig]
 
-instance ToXMLRoot CreateHealthCheck where
-    toXMLRoot CreateHealthCheck{..} = namespaced ns "CreateHealthCheck"
-        [ "CallerReference"   =@ _chcCallerReference
-        , "HealthCheckConfig" =@ _chcHealthCheckConfig
-        ]
+-- | A complex type containing the response information for the new health
+-- check.
+--
+-- /See:/ 'createHealthCheckResponse' smart constructor.
+data CreateHealthCheckResponse = CreateHealthCheckResponse'
+    { _chcrsStatus      :: !Int
+    , _chcrsHealthCheck :: !HealthCheck
+    , _chcrsLocation    :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToXML CreateHealthCheck
+-- | Creates a value of 'CreateHealthCheckResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'chcrsStatus'
+--
+-- * 'chcrsHealthCheck'
+--
+-- * 'chcrsLocation'
+createHealthCheckResponse
+    :: Int -- ^ 'chcrsStatus'
+    -> HealthCheck -- ^ 'chcrsHealthCheck'
+    -> Text -- ^ 'chcrsLocation'
+    -> CreateHealthCheckResponse
+createHealthCheckResponse pStatus_ pHealthCheck_ pLocation_ =
+    CreateHealthCheckResponse'
+    { _chcrsStatus = pStatus_
+    , _chcrsHealthCheck = pHealthCheck_
+    , _chcrsLocation = pLocation_
+    }
 
-instance AWSRequest CreateHealthCheck where
-    type Sv CreateHealthCheck = Route53
-    type Rs CreateHealthCheck = CreateHealthCheckResponse
+-- | The response status code.
+chcrsStatus :: Lens' CreateHealthCheckResponse Int
+chcrsStatus = lens _chcrsStatus (\ s a -> s{_chcrsStatus = a});
 
-    request  = post
-    response = xmlHeaderResponse $ \h x -> CreateHealthCheckResponse
-        <$> x .@  "HealthCheck"
-        <*> h ~:  "Location"
+-- | A complex type that contains identifying information about the health
+-- check.
+chcrsHealthCheck :: Lens' CreateHealthCheckResponse HealthCheck
+chcrsHealthCheck = lens _chcrsHealthCheck (\ s a -> s{_chcrsHealthCheck = a});
+
+-- | The unique URL representing the new health check.
+chcrsLocation :: Lens' CreateHealthCheckResponse Text
+chcrsLocation = lens _chcrsLocation (\ s a -> s{_chcrsLocation = a});
diff --git a/gen/Network/AWS/Route53/CreateHostedZone.hs b/gen/Network/AWS/Route53/CreateHostedZone.hs
--- a/gen/Network/AWS/Route53/CreateHostedZone.hs
+++ b/gen/Network/AWS/Route53/CreateHostedZone.hs
@@ -1,235 +1,260 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | This action creates a new hosted zone.
+-- 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.
+-- 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 <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/SOA-NSrecords.html NS and SOA Records that Route 53 Creates for a Hosted Zone> in
--- the /Amazon Route 53 Developer Guide/.
+-- 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
+-- <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/SOA-NSrecords.html 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 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.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_CreateHostedZone.html AWS API Reference> for CreateHostedZone.
 module Network.AWS.Route53.CreateHostedZone
     (
-    -- * Request
-      CreateHostedZone
-    -- ** Request constructor
-    , createHostedZone
-    -- ** Request lenses
-    , chzCallerReference
+    -- * Creating a Request
+      createHostedZone
+    , CreateHostedZone
+    -- * Request Lenses
     , chzDelegationSetId
     , chzHostedZoneConfig
-    , chzName
     , chzVPC
+    , chzName
+    , chzCallerReference
 
-    -- * Response
-    , CreateHostedZoneResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createHostedZoneResponse
-    -- ** Response lenses
-    , chzrChangeInfo
-    , chzrDelegationSet
-    , chzrHostedZone
-    , chzrLocation
-    , chzrVPC
+    , CreateHostedZoneResponse
+    -- * Response Lenses
+    , chzrsVPC
+    , chzrsStatus
+    , chzrsHostedZone
+    , chzrsChangeInfo
+    , chzrsDelegationSet
+    , chzrsLocation
     ) 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, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
--- | 'CreateHostedZone' constructor.
+-- | A complex type that contains information about the request to create a
+-- hosted zone.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'createHostedZone' smart constructor.
+data CreateHostedZone = CreateHostedZone'
+    { _chzDelegationSetId  :: !(Maybe Text)
+    , _chzHostedZoneConfig :: !(Maybe HostedZoneConfig)
+    , _chzVPC              :: !(Maybe VPC)
+    , _chzName             :: !Text
+    , _chzCallerReference  :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateHostedZone' with the minimum fields required to make a request.
 --
--- * 'chzCallerReference' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'chzDelegationSetId' @::@ 'Maybe' 'Text'
+-- * 'chzDelegationSetId'
 --
--- * 'chzHostedZoneConfig' @::@ 'Maybe' 'HostedZoneConfig'
+-- * 'chzHostedZoneConfig'
 --
--- * 'chzName' @::@ 'Text'
+-- * 'chzVPC'
 --
--- * 'chzVPC' @::@ 'Maybe' 'VPC'
+-- * 'chzName'
 --
-createHostedZone :: Text -- ^ 'chzName'
-                 -> Text -- ^ 'chzCallerReference'
-                 -> CreateHostedZone
-createHostedZone p1 p2 = CreateHostedZone
-    { _chzName             = p1
-    , _chzCallerReference  = p2
-    , _chzVPC              = Nothing
+-- * 'chzCallerReference'
+createHostedZone
+    :: Text -- ^ 'chzName'
+    -> Text -- ^ 'chzCallerReference'
+    -> CreateHostedZone
+createHostedZone pName_ pCallerReference_ =
+    CreateHostedZone'
+    { _chzDelegationSetId = Nothing
     , _chzHostedZoneConfig = Nothing
-    , _chzDelegationSetId  = Nothing
+    , _chzVPC = Nothing
+    , _chzName = pName_
+    , _chzCallerReference = pCallerReference_
     }
 
--- | 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.
+-- | 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 })
+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 })
+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
+-- | 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});
+
+-- | 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'.
+-- 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 })
+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 })
+-- | 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});
 
-data CreateHostedZoneResponse = CreateHostedZoneResponse
-    { _chzrChangeInfo    :: ChangeInfo
-    , _chzrDelegationSet :: DelegationSet
-    , _chzrHostedZone    :: HostedZone
-    , _chzrLocation      :: Text
-    , _chzrVPC           :: Maybe VPC
-    } deriving (Eq, Read, Show)
+instance AWSRequest CreateHostedZone where
+        type Sv CreateHostedZone = Route53
+        type Rs CreateHostedZone = CreateHostedZoneResponse
+        request = postXML
+        response
+          = receiveXML
+              (\ s h x ->
+                 CreateHostedZoneResponse' <$>
+                   (x .@? "VPC") <*> (pure (fromEnum s)) <*>
+                     (x .@ "HostedZone")
+                     <*> (x .@ "ChangeInfo")
+                     <*> (x .@ "DelegationSet")
+                     <*> (h .# "Location"))
 
--- | 'CreateHostedZoneResponse' constructor.
+instance ToElement CreateHostedZone where
+        toElement
+          = mkElement
+              "{https://route53.amazonaws.com/doc/2013-04-01/}CreateHostedZoneRequest"
+
+instance ToHeaders CreateHostedZone where
+        toHeaders = const mempty
+
+instance ToPath CreateHostedZone where
+        toPath = const "/2013-04-01/hostedzone"
+
+instance ToQuery CreateHostedZone where
+        toQuery = const mempty
+
+instance ToXML CreateHostedZone where
+        toXML CreateHostedZone'{..}
+          = mconcat
+              ["DelegationSetId" @= _chzDelegationSetId,
+               "HostedZoneConfig" @= _chzHostedZoneConfig,
+               "VPC" @= _chzVPC, "Name" @= _chzName,
+               "CallerReference" @= _chzCallerReference]
+
+-- | A complex type containing the response information for the new hosted
+-- zone.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'createHostedZoneResponse' smart constructor.
+data CreateHostedZoneResponse = CreateHostedZoneResponse'
+    { _chzrsVPC           :: !(Maybe VPC)
+    , _chzrsStatus        :: !Int
+    , _chzrsHostedZone    :: !HostedZone
+    , _chzrsChangeInfo    :: !ChangeInfo
+    , _chzrsDelegationSet :: !DelegationSet
+    , _chzrsLocation      :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateHostedZoneResponse' with the minimum fields required to make a request.
 --
--- * 'chzrChangeInfo' @::@ 'ChangeInfo'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'chzrDelegationSet' @::@ 'DelegationSet'
+-- * 'chzrsVPC'
 --
--- * 'chzrHostedZone' @::@ 'HostedZone'
+-- * 'chzrsStatus'
 --
--- * 'chzrLocation' @::@ 'Text'
+-- * 'chzrsHostedZone'
 --
--- * 'chzrVPC' @::@ 'Maybe' 'VPC'
+-- * 'chzrsChangeInfo'
 --
-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
+-- * 'chzrsDelegationSet'
+--
+-- * 'chzrsLocation'
+createHostedZoneResponse
+    :: Int -- ^ 'chzrsStatus'
+    -> HostedZone -- ^ 'chzrsHostedZone'
+    -> ChangeInfo -- ^ 'chzrsChangeInfo'
+    -> DelegationSet -- ^ 'chzrsDelegationSet'
+    -> Text -- ^ 'chzrsLocation'
+    -> CreateHostedZoneResponse
+createHostedZoneResponse pStatus_ pHostedZone_ pChangeInfo_ pDelegationSet_ pLocation_ =
+    CreateHostedZoneResponse'
+    { _chzrsVPC = Nothing
+    , _chzrsStatus = pStatus_
+    , _chzrsHostedZone = pHostedZone_
+    , _chzrsChangeInfo = pChangeInfo_
+    , _chzrsDelegationSet = pDelegationSet_
+    , _chzrsLocation = pLocation_
     }
 
--- | 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
+-- | Undocumented member.
+chzrsVPC :: Lens' CreateHostedZoneResponse (Maybe VPC)
+chzrsVPC = lens _chzrsVPC (\ s a -> s{_chzrsVPC = a});
 
-instance ToHeaders CreateHostedZone
+-- | The response status code.
+chzrsStatus :: Lens' CreateHostedZoneResponse Int
+chzrsStatus = lens _chzrsStatus (\ s a -> s{_chzrsStatus = a});
 
-instance ToXMLRoot CreateHostedZone where
-    toXMLRoot CreateHostedZone{..} = namespaced ns "CreateHostedZone"
-        [ "Name"             =@ _chzName
-        , "VPC"              =@ _chzVPC
-        , "CallerReference"  =@ _chzCallerReference
-        , "HostedZoneConfig" =@ _chzHostedZoneConfig
-        , "DelegationSetId"  =@ _chzDelegationSetId
-        ]
+-- | A complex type that contains identifying information about the hosted
+-- zone.
+chzrsHostedZone :: Lens' CreateHostedZoneResponse HostedZone
+chzrsHostedZone = lens _chzrsHostedZone (\ s a -> s{_chzrsHostedZone = a});
 
-instance ToXML CreateHostedZone
+-- | 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.
+chzrsChangeInfo :: Lens' CreateHostedZoneResponse ChangeInfo
+chzrsChangeInfo = lens _chzrsChangeInfo (\ s a -> s{_chzrsChangeInfo = a});
 
-instance AWSRequest CreateHostedZone where
-    type Sv CreateHostedZone = Route53
-    type Rs CreateHostedZone = CreateHostedZoneResponse
+-- | A complex type that contains name server information.
+chzrsDelegationSet :: Lens' CreateHostedZoneResponse DelegationSet
+chzrsDelegationSet = lens _chzrsDelegationSet (\ s a -> s{_chzrsDelegationSet = a});
 
-    request  = post
-    response = xmlHeaderResponse $ \h x -> CreateHostedZoneResponse
-        <$> x .@  "ChangeInfo"
-        <*> x .@  "DelegationSet"
-        <*> x .@  "HostedZone"
-        <*> h ~:  "Location"
-        <*> x .@? "VPC"
+-- | The unique URL representing the new hosted zone.
+chzrsLocation :: Lens' CreateHostedZoneResponse Text
+chzrsLocation = lens _chzrsLocation (\ s a -> s{_chzrsLocation = a});
diff --git a/gen/Network/AWS/Route53/CreateReusableDelegationSet.hs b/gen/Network/AWS/Route53/CreateReusableDelegationSet.hs
--- a/gen/Network/AWS/Route53/CreateReusableDelegationSet.hs
+++ b/gen/Network/AWS/Route53/CreateReusableDelegationSet.hs
@@ -1,147 +1,167 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | This action creates a reusable delegationSet.
+-- 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.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_CreateReusableDelegationSet.html AWS API Reference> for CreateReusableDelegationSet.
 module Network.AWS.Route53.CreateReusableDelegationSet
     (
-    -- * Request
-      CreateReusableDelegationSet
-    -- ** Request constructor
-    , createReusableDelegationSet
-    -- ** Request lenses
-    , crdsCallerReference
+    -- * Creating a Request
+      createReusableDelegationSet
+    , CreateReusableDelegationSet
+    -- * Request Lenses
     , crdsHostedZoneId
+    , crdsCallerReference
 
-    -- * Response
-    , CreateReusableDelegationSetResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createReusableDelegationSetResponse
-    -- ** Response lenses
-    , crdsrDelegationSet
-    , crdsrLocation
+    , CreateReusableDelegationSetResponse
+    -- * Response Lenses
+    , crdsrsStatus
+    , crdsrsDelegationSet
+    , crdsrsLocation
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.Route53.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
-data CreateReusableDelegationSet = CreateReusableDelegationSet
-    { _crdsCallerReference :: Text
-    , _crdsHostedZoneId    :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'createReusableDelegationSet' smart constructor.
+data CreateReusableDelegationSet = CreateReusableDelegationSet'
+    { _crdsHostedZoneId    :: !(Maybe Text)
+    , _crdsCallerReference :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CreateReusableDelegationSet' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CreateReusableDelegationSet' with the minimum fields required to make a request.
 --
--- * 'crdsCallerReference' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'crdsHostedZoneId' @::@ 'Maybe' 'Text'
+-- * 'crdsHostedZoneId'
 --
-createReusableDelegationSet :: Text -- ^ 'crdsCallerReference'
-                            -> CreateReusableDelegationSet
-createReusableDelegationSet p1 = CreateReusableDelegationSet
-    { _crdsCallerReference = p1
-    , _crdsHostedZoneId    = Nothing
+-- * 'crdsCallerReference'
+createReusableDelegationSet
+    :: Text -- ^ 'crdsCallerReference'
+    -> CreateReusableDelegationSet
+createReusableDelegationSet pCallerReference_ =
+    CreateReusableDelegationSet'
+    { _crdsHostedZoneId = Nothing
+    , _crdsCallerReference = pCallerReference_
     }
 
--- | 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.
+-- | 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, Read, Show)
+crdsHostedZoneId = lens _crdsHostedZoneId (\ s a -> s{_crdsHostedZoneId = a});
 
--- | 'CreateReusableDelegationSetResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'crdsrDelegationSet' @::@ 'DelegationSet'
---
--- * 'crdsrLocation' @::@ 'Text'
+-- | 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'.
 --
-createReusableDelegationSetResponse :: DelegationSet -- ^ 'crdsrDelegationSet'
-                                    -> Text -- ^ 'crdsrLocation'
-                                    -> CreateReusableDelegationSetResponse
-createReusableDelegationSetResponse p1 p2 = CreateReusableDelegationSetResponse
-    { _crdsrDelegationSet = p1
-    , _crdsrLocation      = p2
-    }
+-- 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});
 
--- | A complex type that contains name server information.
-crdsrDelegationSet :: Lens' CreateReusableDelegationSetResponse DelegationSet
-crdsrDelegationSet =
-    lens _crdsrDelegationSet (\s a -> s { _crdsrDelegationSet = a })
+instance AWSRequest CreateReusableDelegationSet where
+        type Sv CreateReusableDelegationSet = Route53
+        type Rs CreateReusableDelegationSet =
+             CreateReusableDelegationSetResponse
+        request = postXML
+        response
+          = receiveXML
+              (\ s h x ->
+                 CreateReusableDelegationSetResponse' <$>
+                   (pure (fromEnum s)) <*> (x .@ "DelegationSet") <*>
+                     (h .# "Location"))
 
--- | The unique URL representing the new reusbale delegation set.
-crdsrLocation :: Lens' CreateReusableDelegationSetResponse Text
-crdsrLocation = lens _crdsrLocation (\s a -> s { _crdsrLocation = a })
+instance ToElement CreateReusableDelegationSet where
+        toElement
+          = mkElement
+              "{https://route53.amazonaws.com/doc/2013-04-01/}CreateReusableDelegationSetRequest"
 
+instance ToHeaders CreateReusableDelegationSet where
+        toHeaders = const mempty
+
 instance ToPath CreateReusableDelegationSet where
-    toPath = const "/2013-04-01/delegationset"
+        toPath = const "/2013-04-01/delegationset"
 
 instance ToQuery CreateReusableDelegationSet where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders CreateReusableDelegationSet
+instance ToXML CreateReusableDelegationSet where
+        toXML CreateReusableDelegationSet'{..}
+          = mconcat
+              ["HostedZoneId" @= _crdsHostedZoneId,
+               "CallerReference" @= _crdsCallerReference]
 
-instance ToXMLRoot CreateReusableDelegationSet where
-    toXMLRoot CreateReusableDelegationSet{..} = namespaced ns "CreateReusableDelegationSet"
-        [ "CallerReference" =@ _crdsCallerReference
-        , "HostedZoneId"    =@ _crdsHostedZoneId
-        ]
+-- | /See:/ 'createReusableDelegationSetResponse' smart constructor.
+data CreateReusableDelegationSetResponse = CreateReusableDelegationSetResponse'
+    { _crdsrsStatus        :: !Int
+    , _crdsrsDelegationSet :: !DelegationSet
+    , _crdsrsLocation      :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToXML CreateReusableDelegationSet
+-- | Creates a value of 'CreateReusableDelegationSetResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crdsrsStatus'
+--
+-- * 'crdsrsDelegationSet'
+--
+-- * 'crdsrsLocation'
+createReusableDelegationSetResponse
+    :: Int -- ^ 'crdsrsStatus'
+    -> DelegationSet -- ^ 'crdsrsDelegationSet'
+    -> Text -- ^ 'crdsrsLocation'
+    -> CreateReusableDelegationSetResponse
+createReusableDelegationSetResponse pStatus_ pDelegationSet_ pLocation_ =
+    CreateReusableDelegationSetResponse'
+    { _crdsrsStatus = pStatus_
+    , _crdsrsDelegationSet = pDelegationSet_
+    , _crdsrsLocation = pLocation_
+    }
 
-instance AWSRequest CreateReusableDelegationSet where
-    type Sv CreateReusableDelegationSet = Route53
-    type Rs CreateReusableDelegationSet = CreateReusableDelegationSetResponse
+-- | The response status code.
+crdsrsStatus :: Lens' CreateReusableDelegationSetResponse Int
+crdsrsStatus = lens _crdsrsStatus (\ s a -> s{_crdsrsStatus = a});
 
-    request  = post
-    response = xmlHeaderResponse $ \h x -> CreateReusableDelegationSetResponse
-        <$> x .@  "DelegationSet"
-        <*> h ~:  "Location"
+-- | A complex type that contains name server information.
+crdsrsDelegationSet :: Lens' CreateReusableDelegationSetResponse DelegationSet
+crdsrsDelegationSet = lens _crdsrsDelegationSet (\ s a -> s{_crdsrsDelegationSet = a});
+
+-- | The unique URL representing the new reusbale delegation set.
+crdsrsLocation :: Lens' CreateReusableDelegationSetResponse Text
+crdsrsLocation = lens _crdsrsLocation (\ s a -> s{_crdsrsLocation = a});
diff --git a/gen/Network/AWS/Route53/DeleteHealthCheck.hs b/gen/Network/AWS/Route53/DeleteHealthCheck.hs
--- a/gen/Network/AWS/Route53/DeleteHealthCheck.hs
+++ b/gen/Network/AWS/Route53/DeleteHealthCheck.hs
@@ -1,105 +1,122 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | This action deletes a health check. To delete a health check, send a 'DELETE'
--- request to the '2013-04-01/healthcheck//health check ID/ resource.
+-- 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'.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_DeleteHealthCheck.html AWS API Reference> for DeleteHealthCheck.
 module Network.AWS.Route53.DeleteHealthCheck
     (
-    -- * Request
-      DeleteHealthCheck
-    -- ** Request constructor
-    , deleteHealthCheck
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteHealthCheck
+    , DeleteHealthCheck
+    -- * Request Lenses
     , dhcHealthCheckId
 
-    -- * Response
-    , DeleteHealthCheckResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteHealthCheckResponse
+    , DeleteHealthCheckResponse
+    -- * Response Lenses
+    , dhcrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.Route53.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
-newtype DeleteHealthCheck = DeleteHealthCheck
+-- | A complex type containing the request information for delete health
+-- check.
+--
+-- /See:/ 'deleteHealthCheck' smart constructor.
+newtype DeleteHealthCheck = DeleteHealthCheck'
     { _dhcHealthCheckId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteHealthCheck' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteHealthCheck' with the minimum fields required to make a request.
 --
--- * 'dhcHealthCheckId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-deleteHealthCheck :: Text -- ^ 'dhcHealthCheckId'
-                  -> DeleteHealthCheck
-deleteHealthCheck p1 = DeleteHealthCheck
-    { _dhcHealthCheckId = p1
+-- * 'dhcHealthCheckId'
+deleteHealthCheck
+    :: Text -- ^ 'dhcHealthCheckId'
+    -> DeleteHealthCheck
+deleteHealthCheck pHealthCheckId_ =
+    DeleteHealthCheck'
+    { _dhcHealthCheckId = pHealthCheckId_
     }
 
 -- | The ID of the health check to delete.
 dhcHealthCheckId :: Lens' DeleteHealthCheck Text
-dhcHealthCheckId = lens _dhcHealthCheckId (\s a -> s { _dhcHealthCheckId = a })
+dhcHealthCheckId = lens _dhcHealthCheckId (\ s a -> s{_dhcHealthCheckId = a});
 
-data DeleteHealthCheckResponse = DeleteHealthCheckResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteHealthCheck where
+        type Sv DeleteHealthCheck = Route53
+        type Rs DeleteHealthCheck = DeleteHealthCheckResponse
+        request = delete
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteHealthCheckResponse' <$> (pure (fromEnum s)))
 
--- | 'DeleteHealthCheckResponse' constructor.
-deleteHealthCheckResponse :: DeleteHealthCheckResponse
-deleteHealthCheckResponse = DeleteHealthCheckResponse
+instance ToHeaders DeleteHealthCheck where
+        toHeaders = const mempty
 
 instance ToPath DeleteHealthCheck where
-    toPath DeleteHealthCheck{..} = mconcat
-        [ "/2013-04-01/healthcheck/"
-        , toText _dhcHealthCheckId
-        ]
+        toPath DeleteHealthCheck'{..}
+          = mconcat
+              ["/2013-04-01/healthcheck/", toBS _dhcHealthCheckId]
 
 instance ToQuery DeleteHealthCheck where
-    toQuery = const mempty
-
-instance ToHeaders DeleteHealthCheck
-
-instance ToXMLRoot DeleteHealthCheck where
-    toXMLRoot = const (namespaced ns "DeleteHealthCheck" [])
+        toQuery = const mempty
 
-instance ToXML DeleteHealthCheck
+-- | Empty response for the request.
+--
+-- /See:/ 'deleteHealthCheckResponse' smart constructor.
+newtype DeleteHealthCheckResponse = DeleteHealthCheckResponse'
+    { _dhcrsStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest DeleteHealthCheck where
-    type Sv DeleteHealthCheck = Route53
-    type Rs DeleteHealthCheck = DeleteHealthCheckResponse
+-- | Creates a value of 'DeleteHealthCheckResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dhcrsStatus'
+deleteHealthCheckResponse
+    :: Int -- ^ 'dhcrsStatus'
+    -> DeleteHealthCheckResponse
+deleteHealthCheckResponse pStatus_ =
+    DeleteHealthCheckResponse'
+    { _dhcrsStatus = pStatus_
+    }
 
-    request  = delete
-    response = nullResponse DeleteHealthCheckResponse
+-- | The response status code.
+dhcrsStatus :: Lens' DeleteHealthCheckResponse Int
+dhcrsStatus = lens _dhcrsStatus (\ s a -> s{_dhcrsStatus = a});
diff --git a/gen/Network/AWS/Route53/DeleteHostedZone.hs b/gen/Network/AWS/Route53/DeleteHostedZone.hs
--- a/gen/Network/AWS/Route53/DeleteHostedZone.hs
+++ b/gen/Network/AWS/Route53/DeleteHostedZone.hs
@@ -1,126 +1,137 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | This action deletes a hosted zone. To delete a hosted zone, send a 'DELETE'
--- request to the '2013-04-01/hostedzone//hosted zone ID/ resource.
+-- 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 <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DeleteHostedZone.html Deleting a Hosted Zone>
+-- For more information about deleting a hosted zone, see
+-- <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DeleteHostedZone.html 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'.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_DeleteHostedZone.html AWS API Reference> for DeleteHostedZone.
 module Network.AWS.Route53.DeleteHostedZone
     (
-    -- * Request
-      DeleteHostedZone
-    -- ** Request constructor
-    , deleteHostedZone
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteHostedZone
+    , DeleteHostedZone
+    -- * Request Lenses
     , dhzId
 
-    -- * Response
-    , DeleteHostedZoneResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteHostedZoneResponse
-    -- ** Response lenses
-    , dhzrChangeInfo
+    , DeleteHostedZoneResponse
+    -- * Response Lenses
+    , dhzrsStatus
+    , dhzrsChangeInfo
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.Route53.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
-newtype DeleteHostedZone = DeleteHostedZone
+-- | A complex type that contains information about the hosted zone that you
+-- want to delete.
+--
+-- /See:/ 'deleteHostedZone' smart constructor.
+newtype DeleteHostedZone = DeleteHostedZone'
     { _dhzId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteHostedZone' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteHostedZone' with the minimum fields required to make a request.
 --
--- * 'dhzId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-deleteHostedZone :: Text -- ^ 'dhzId'
-                 -> DeleteHostedZone
-deleteHostedZone p1 = DeleteHostedZone
-    { _dhzId = p1
+-- * 'dhzId'
+deleteHostedZone
+    :: Text -- ^ 'dhzId'
+    -> DeleteHostedZone
+deleteHostedZone pId_ =
+    DeleteHostedZone'
+    { _dhzId = pId_
     }
 
 -- | 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, Read, Show)
+dhzId = lens _dhzId (\ s a -> s{_dhzId = a});
 
--- | 'DeleteHostedZoneResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dhzrChangeInfo' @::@ 'ChangeInfo'
---
-deleteHostedZoneResponse :: ChangeInfo -- ^ 'dhzrChangeInfo'
-                         -> DeleteHostedZoneResponse
-deleteHostedZoneResponse p1 = DeleteHostedZoneResponse
-    { _dhzrChangeInfo = p1
-    }
+instance AWSRequest DeleteHostedZone where
+        type Sv DeleteHostedZone = Route53
+        type Rs DeleteHostedZone = DeleteHostedZoneResponse
+        request = delete
+        response
+          = receiveXML
+              (\ s h x ->
+                 DeleteHostedZoneResponse' <$>
+                   (pure (fromEnum s)) <*> (x .@ "ChangeInfo"))
 
--- | 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 ToHeaders DeleteHostedZone where
+        toHeaders = const mempty
 
 instance ToPath DeleteHostedZone where
-    toPath DeleteHostedZone{..} = mconcat
-        [ "/2013-04-01/hostedzone/"
-        , toText _dhzId
-        ]
+        toPath DeleteHostedZone'{..}
+          = mconcat ["/2013-04-01/hostedzone/", toBS _dhzId]
 
 instance ToQuery DeleteHostedZone where
-    toQuery = const mempty
-
-instance ToHeaders DeleteHostedZone
-
-instance ToXMLRoot DeleteHostedZone where
-    toXMLRoot = const (namespaced ns "DeleteHostedZone" [])
+        toQuery = const mempty
 
-instance ToXML DeleteHostedZone
+-- | A complex type containing the response information for the request.
+--
+-- /See:/ 'deleteHostedZoneResponse' smart constructor.
+data DeleteHostedZoneResponse = DeleteHostedZoneResponse'
+    { _dhzrsStatus     :: !Int
+    , _dhzrsChangeInfo :: !ChangeInfo
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest DeleteHostedZone where
-    type Sv DeleteHostedZone = Route53
-    type Rs DeleteHostedZone = DeleteHostedZoneResponse
+-- | Creates a value of 'DeleteHostedZoneResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dhzrsStatus'
+--
+-- * 'dhzrsChangeInfo'
+deleteHostedZoneResponse
+    :: Int -- ^ 'dhzrsStatus'
+    -> ChangeInfo -- ^ 'dhzrsChangeInfo'
+    -> DeleteHostedZoneResponse
+deleteHostedZoneResponse pStatus_ pChangeInfo_ =
+    DeleteHostedZoneResponse'
+    { _dhzrsStatus = pStatus_
+    , _dhzrsChangeInfo = pChangeInfo_
+    }
 
-    request  = delete
-    response = xmlResponse
+-- | The response status code.
+dhzrsStatus :: Lens' DeleteHostedZoneResponse Int
+dhzrsStatus = lens _dhzrsStatus (\ s a -> s{_dhzrsStatus = a});
 
-instance FromXML DeleteHostedZoneResponse where
-    parseXML x = DeleteHostedZoneResponse
-        <$> x .@  "ChangeInfo"
+-- | A complex type that contains the ID, the status, and the date and time
+-- of your delete request.
+dhzrsChangeInfo :: Lens' DeleteHostedZoneResponse ChangeInfo
+dhzrsChangeInfo = lens _dhzrsChangeInfo (\ s a -> s{_dhzrsChangeInfo = a});
diff --git a/gen/Network/AWS/Route53/DeleteReusableDelegationSet.hs b/gen/Network/AWS/Route53/DeleteReusableDelegationSet.hs
--- a/gen/Network/AWS/Route53/DeleteReusableDelegationSet.hs
+++ b/gen/Network/AWS/Route53/DeleteReusableDelegationSet.hs
@@ -1,103 +1,122 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | This 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.
+-- 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.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_DeleteReusableDelegationSet.html AWS API Reference> for DeleteReusableDelegationSet.
 module Network.AWS.Route53.DeleteReusableDelegationSet
     (
-    -- * Request
-      DeleteReusableDelegationSet
-    -- ** Request constructor
-    , deleteReusableDelegationSet
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteReusableDelegationSet
+    , DeleteReusableDelegationSet
+    -- * Request Lenses
     , drdsId
 
-    -- * Response
-    , DeleteReusableDelegationSetResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteReusableDelegationSetResponse
+    , DeleteReusableDelegationSetResponse
+    -- * Response Lenses
+    , drdsrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.Route53.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
-newtype DeleteReusableDelegationSet = DeleteReusableDelegationSet
+-- | A complex type containing the information for the delete request.
+--
+-- /See:/ 'deleteReusableDelegationSet' smart constructor.
+newtype DeleteReusableDelegationSet = DeleteReusableDelegationSet'
     { _drdsId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteReusableDelegationSet' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteReusableDelegationSet' with the minimum fields required to make a request.
 --
--- * 'drdsId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-deleteReusableDelegationSet :: Text -- ^ 'drdsId'
-                            -> DeleteReusableDelegationSet
-deleteReusableDelegationSet p1 = DeleteReusableDelegationSet
-    { _drdsId = p1
+-- * 'drdsId'
+deleteReusableDelegationSet
+    :: Text -- ^ 'drdsId'
+    -> DeleteReusableDelegationSet
+deleteReusableDelegationSet pId_ =
+    DeleteReusableDelegationSet'
+    { _drdsId = pId_
     }
 
 -- | The ID of the reusable delegation set you want to delete.
 drdsId :: Lens' DeleteReusableDelegationSet Text
-drdsId = lens _drdsId (\s a -> s { _drdsId = a })
+drdsId = lens _drdsId (\ s a -> s{_drdsId = a});
 
-data DeleteReusableDelegationSetResponse = DeleteReusableDelegationSetResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteReusableDelegationSet where
+        type Sv DeleteReusableDelegationSet = Route53
+        type Rs DeleteReusableDelegationSet =
+             DeleteReusableDelegationSetResponse
+        request = delete
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteReusableDelegationSetResponse' <$>
+                   (pure (fromEnum s)))
 
--- | 'DeleteReusableDelegationSetResponse' constructor.
-deleteReusableDelegationSetResponse :: DeleteReusableDelegationSetResponse
-deleteReusableDelegationSetResponse = DeleteReusableDelegationSetResponse
+instance ToHeaders DeleteReusableDelegationSet where
+        toHeaders = const mempty
 
 instance ToPath DeleteReusableDelegationSet where
-    toPath DeleteReusableDelegationSet{..} = mconcat
-        [ "/2013-04-01/delegationset/"
-        , toText _drdsId
-        ]
+        toPath DeleteReusableDelegationSet'{..}
+          = mconcat
+              ["/2013-04-01/delegationset/", toBS _drdsId]
 
 instance ToQuery DeleteReusableDelegationSet where
-    toQuery = const mempty
-
-instance ToHeaders DeleteReusableDelegationSet
-
-instance ToXMLRoot DeleteReusableDelegationSet where
-    toXMLRoot = const (namespaced ns "DeleteReusableDelegationSet" [])
+        toQuery = const mempty
 
-instance ToXML DeleteReusableDelegationSet
+-- | Empty response for the request.
+--
+-- /See:/ 'deleteReusableDelegationSetResponse' smart constructor.
+newtype DeleteReusableDelegationSetResponse = DeleteReusableDelegationSetResponse'
+    { _drdsrsStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest DeleteReusableDelegationSet where
-    type Sv DeleteReusableDelegationSet = Route53
-    type Rs DeleteReusableDelegationSet = DeleteReusableDelegationSetResponse
+-- | Creates a value of 'DeleteReusableDelegationSetResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drdsrsStatus'
+deleteReusableDelegationSetResponse
+    :: Int -- ^ 'drdsrsStatus'
+    -> DeleteReusableDelegationSetResponse
+deleteReusableDelegationSetResponse pStatus_ =
+    DeleteReusableDelegationSetResponse'
+    { _drdsrsStatus = pStatus_
+    }
 
-    request  = delete
-    response = nullResponse DeleteReusableDelegationSetResponse
+-- | The response status code.
+drdsrsStatus :: Lens' DeleteReusableDelegationSetResponse Int
+drdsrsStatus = lens _drdsrsStatus (\ s a -> s{_drdsrsStatus = a});
diff --git a/gen/Network/AWS/Route53/DisassociateVPCFromHostedZone.hs b/gen/Network/AWS/Route53/DisassociateVPCFromHostedZone.hs
--- a/gen/Network/AWS/Route53/DisassociateVPCFromHostedZone.hs
+++ b/gen/Network/AWS/Route53/DisassociateVPCFromHostedZone.hs
@@ -1,149 +1,170 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | This action disassociates a VPC from an hosted zone.
+-- 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.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_DisassociateVPCFromHostedZone.html AWS API Reference> for DisassociateVPCFromHostedZone.
 module Network.AWS.Route53.DisassociateVPCFromHostedZone
     (
-    -- * Request
-      DisassociateVPCFromHostedZone
-    -- ** Request constructor
-    , disassociateVPCFromHostedZone
-    -- ** Request lenses
-    , dvpcfhzComment
-    , dvpcfhzHostedZoneId
-    , dvpcfhzVPC
+    -- * Creating a Request
+      disassociateVPCFromHostedZone
+    , DisassociateVPCFromHostedZone
+    -- * Request Lenses
+    , dvfhzComment
+    , dvfhzHostedZoneId
+    , dvfhzVPC
 
-    -- * Response
-    , DisassociateVPCFromHostedZoneResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , disassociateVPCFromHostedZoneResponse
-    -- ** Response lenses
-    , dvpcfhzrChangeInfo
+    , DisassociateVPCFromHostedZoneResponse
+    -- * Response Lenses
+    , dvfhzrsStatus
+    , dvfhzrsChangeInfo
     ) 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, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
--- | 'DisassociateVPCFromHostedZone' constructor.
+-- | A complex type that contains information about the request to
+-- disassociate a VPC from an hosted zone.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'disassociateVPCFromHostedZone' smart constructor.
+data DisassociateVPCFromHostedZone = DisassociateVPCFromHostedZone'
+    { _dvfhzComment      :: !(Maybe Text)
+    , _dvfhzHostedZoneId :: !Text
+    , _dvfhzVPC          :: !VPC
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DisassociateVPCFromHostedZone' with the minimum fields required to make a request.
 --
--- * 'dvpcfhzComment' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dvpcfhzHostedZoneId' @::@ 'Text'
+-- * 'dvfhzComment'
 --
--- * 'dvpcfhzVPC' @::@ 'VPC'
+-- * 'dvfhzHostedZoneId'
 --
-disassociateVPCFromHostedZone :: Text -- ^ 'dvpcfhzHostedZoneId'
-                              -> VPC -- ^ 'dvpcfhzVPC'
-                              -> DisassociateVPCFromHostedZone
-disassociateVPCFromHostedZone p1 p2 = DisassociateVPCFromHostedZone
-    { _dvpcfhzHostedZoneId = p1
-    , _dvpcfhzVPC          = p2
-    , _dvpcfhzComment      = Nothing
+-- * 'dvfhzVPC'
+disassociateVPCFromHostedZone
+    :: Text -- ^ 'dvfhzHostedZoneId'
+    -> VPC -- ^ 'dvfhzVPC'
+    -> DisassociateVPCFromHostedZone
+disassociateVPCFromHostedZone pHostedZoneId_ pVPC_ =
+    DisassociateVPCFromHostedZone'
+    { _dvfhzComment = Nothing
+    , _dvfhzHostedZoneId = pHostedZoneId_
+    , _dvfhzVPC = pVPC_
     }
 
--- | /Optional:/ Any comments you want to include about a 'DisassociateVPCFromHostedZoneRequest'.
-dvpcfhzComment :: Lens' DisassociateVPCFromHostedZone (Maybe Text)
-dvpcfhzComment = lens _dvpcfhzComment (\s a -> s { _dvpcfhzComment = a })
+-- | /Optional:/ Any comments you want to include about a
+-- 'DisassociateVPCFromHostedZoneRequest'.
+dvfhzComment :: Lens' DisassociateVPCFromHostedZone (Maybe Text)
+dvfhzComment = lens _dvfhzComment (\ s a -> s{_dvfhzComment = 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 })
+dvfhzHostedZoneId :: Lens' DisassociateVPCFromHostedZone Text
+dvfhzHostedZoneId = lens _dvfhzHostedZoneId (\ s a -> s{_dvfhzHostedZoneId = 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 })
+dvfhzVPC :: Lens' DisassociateVPCFromHostedZone VPC
+dvfhzVPC = lens _dvfhzVPC (\ s a -> s{_dvfhzVPC = a});
 
-newtype DisassociateVPCFromHostedZoneResponse = DisassociateVPCFromHostedZoneResponse
-    { _dvpcfhzrChangeInfo :: ChangeInfo
-    } deriving (Eq, Read, Show)
+instance AWSRequest DisassociateVPCFromHostedZone
+         where
+        type Sv DisassociateVPCFromHostedZone = Route53
+        type Rs DisassociateVPCFromHostedZone =
+             DisassociateVPCFromHostedZoneResponse
+        request = postXML
+        response
+          = receiveXML
+              (\ s h x ->
+                 DisassociateVPCFromHostedZoneResponse' <$>
+                   (pure (fromEnum s)) <*> (x .@ "ChangeInfo"))
 
--- | 'DisassociateVPCFromHostedZoneResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dvpcfhzrChangeInfo' @::@ 'ChangeInfo'
---
-disassociateVPCFromHostedZoneResponse :: ChangeInfo -- ^ 'dvpcfhzrChangeInfo'
-                                      -> DisassociateVPCFromHostedZoneResponse
-disassociateVPCFromHostedZoneResponse p1 = DisassociateVPCFromHostedZoneResponse
-    { _dvpcfhzrChangeInfo = p1
-    }
+instance ToElement DisassociateVPCFromHostedZone
+         where
+        toElement
+          = mkElement
+              "{https://route53.amazonaws.com/doc/2013-04-01/}DisassociateVPCFromHostedZoneRequest"
 
--- | 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 ToHeaders DisassociateVPCFromHostedZone
+         where
+        toHeaders = const mempty
 
 instance ToPath DisassociateVPCFromHostedZone where
-    toPath DisassociateVPCFromHostedZone{..} = mconcat
-        [ "/2013-04-01/hostedzone/"
-        , toText _dvpcfhzHostedZoneId
-        , "/disassociatevpc"
-        ]
+        toPath DisassociateVPCFromHostedZone'{..}
+          = mconcat
+              ["/2013-04-01/hostedzone/", toBS _dvfhzHostedZoneId,
+               "/disassociatevpc"]
 
 instance ToQuery DisassociateVPCFromHostedZone where
-    toQuery = const mempty
-
-instance ToHeaders DisassociateVPCFromHostedZone
+        toQuery = const mempty
 
-instance ToXMLRoot DisassociateVPCFromHostedZone where
-    toXMLRoot DisassociateVPCFromHostedZone{..} = namespaced ns "DisassociateVPCFromHostedZone"
-        [ "VPC"     =@ _dvpcfhzVPC
-        , "Comment" =@ _dvpcfhzComment
-        ]
+instance ToXML DisassociateVPCFromHostedZone where
+        toXML DisassociateVPCFromHostedZone'{..}
+          = mconcat
+              ["Comment" @= _dvfhzComment, "VPC" @= _dvfhzVPC]
 
-instance ToXML DisassociateVPCFromHostedZone
+-- | A complex type containing the response information for the request.
+--
+-- /See:/ 'disassociateVPCFromHostedZoneResponse' smart constructor.
+data DisassociateVPCFromHostedZoneResponse = DisassociateVPCFromHostedZoneResponse'
+    { _dvfhzrsStatus     :: !Int
+    , _dvfhzrsChangeInfo :: !ChangeInfo
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest DisassociateVPCFromHostedZone where
-    type Sv DisassociateVPCFromHostedZone = Route53
-    type Rs DisassociateVPCFromHostedZone = DisassociateVPCFromHostedZoneResponse
+-- | Creates a value of 'DisassociateVPCFromHostedZoneResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dvfhzrsStatus'
+--
+-- * 'dvfhzrsChangeInfo'
+disassociateVPCFromHostedZoneResponse
+    :: Int -- ^ 'dvfhzrsStatus'
+    -> ChangeInfo -- ^ 'dvfhzrsChangeInfo'
+    -> DisassociateVPCFromHostedZoneResponse
+disassociateVPCFromHostedZoneResponse pStatus_ pChangeInfo_ =
+    DisassociateVPCFromHostedZoneResponse'
+    { _dvfhzrsStatus = pStatus_
+    , _dvfhzrsChangeInfo = pChangeInfo_
+    }
 
-    request  = post
-    response = xmlResponse
+-- | The response status code.
+dvfhzrsStatus :: Lens' DisassociateVPCFromHostedZoneResponse Int
+dvfhzrsStatus = lens _dvfhzrsStatus (\ s a -> s{_dvfhzrsStatus = a});
 
-instance FromXML DisassociateVPCFromHostedZoneResponse where
-    parseXML x = DisassociateVPCFromHostedZoneResponse
-        <$> x .@  "ChangeInfo"
+-- | A complex type that contains the ID, the status, and the date and time
+-- of your 'DisassociateVPCFromHostedZoneRequest'.
+dvfhzrsChangeInfo :: Lens' DisassociateVPCFromHostedZoneResponse ChangeInfo
+dvfhzrsChangeInfo = lens _dvfhzrsChangeInfo (\ s a -> s{_dvfhzrsChangeInfo = a});
diff --git a/gen/Network/AWS/Route53/GetChange.hs b/gen/Network/AWS/Route53/GetChange.hs
--- a/gen/Network/AWS/Route53/GetChange.hs
+++ b/gen/Network/AWS/Route53/GetChange.hs
@@ -1,127 +1,133 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | This action returns the current status of a change batch request. The status
--- is one of the following values:
+-- 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.
+-- - '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.
+-- - '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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetChange.html AWS API Reference> for GetChange.
 module Network.AWS.Route53.GetChange
     (
-    -- * Request
-      GetChange
-    -- ** Request constructor
-    , getChange
-    -- ** Request lenses
+    -- * Creating a Request
+      getChange
+    , GetChange
+    -- * Request Lenses
     , gcId
 
-    -- * Response
-    , GetChangeResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getChangeResponse
-    -- ** Response lenses
-    , gcrChangeInfo
+    , GetChangeResponse
+    -- * Response Lenses
+    , gcrsStatus
+    , gcrsChangeInfo
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.Route53.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
-newtype GetChange = GetChange
+-- | The input for a GetChange request.
+--
+-- /See:/ 'getChange' smart constructor.
+newtype GetChange = GetChange'
     { _gcId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetChange' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetChange' with the minimum fields required to make a request.
 --
--- * 'gcId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getChange :: Text -- ^ 'gcId'
-          -> GetChange
-getChange p1 = GetChange
-    { _gcId = p1
+-- * 'gcId'
+getChange
+    :: Text -- ^ 'gcId'
+    -> GetChange
+getChange pId_ =
+    GetChange'
+    { _gcId = pId_
     }
 
--- | 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.
+-- | 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, Read, Show)
+gcId = lens _gcId (\ s a -> s{_gcId = a});
 
--- | 'GetChangeResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gcrChangeInfo' @::@ 'ChangeInfo'
---
-getChangeResponse :: ChangeInfo -- ^ 'gcrChangeInfo'
-                  -> GetChangeResponse
-getChangeResponse p1 = GetChangeResponse
-    { _gcrChangeInfo = p1
-    }
+instance AWSRequest GetChange where
+        type Sv GetChange = Route53
+        type Rs GetChange = GetChangeResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetChangeResponse' <$>
+                   (pure (fromEnum s)) <*> (x .@ "ChangeInfo"))
 
--- | 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 ToHeaders GetChange where
+        toHeaders = const mempty
 
 instance ToPath GetChange where
-    toPath GetChange{..} = mconcat
-        [ "/2013-04-01/change/"
-        , toText _gcId
-        ]
+        toPath GetChange'{..}
+          = mconcat ["/2013-04-01/change/", toBS _gcId]
 
 instance ToQuery GetChange where
-    toQuery = const mempty
-
-instance ToHeaders GetChange
-
-instance ToXMLRoot GetChange where
-    toXMLRoot = const (namespaced ns "GetChange" [])
+        toQuery = const mempty
 
-instance ToXML GetChange
+-- | A complex type that contains the 'ChangeInfo' element.
+--
+-- /See:/ 'getChangeResponse' smart constructor.
+data GetChangeResponse = GetChangeResponse'
+    { _gcrsStatus     :: !Int
+    , _gcrsChangeInfo :: !ChangeInfo
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetChange where
-    type Sv GetChange = Route53
-    type Rs GetChange = GetChangeResponse
+-- | Creates a value of 'GetChangeResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcrsStatus'
+--
+-- * 'gcrsChangeInfo'
+getChangeResponse
+    :: Int -- ^ 'gcrsStatus'
+    -> ChangeInfo -- ^ 'gcrsChangeInfo'
+    -> GetChangeResponse
+getChangeResponse pStatus_ pChangeInfo_ =
+    GetChangeResponse'
+    { _gcrsStatus = pStatus_
+    , _gcrsChangeInfo = pChangeInfo_
+    }
 
-    request  = get
-    response = xmlResponse
+-- | The response status code.
+gcrsStatus :: Lens' GetChangeResponse Int
+gcrsStatus = lens _gcrsStatus (\ s a -> s{_gcrsStatus = a});
 
-instance FromXML GetChangeResponse where
-    parseXML x = GetChangeResponse
-        <$> x .@  "ChangeInfo"
+-- | 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.
+gcrsChangeInfo :: Lens' GetChangeResponse ChangeInfo
+gcrsChangeInfo = lens _gcrsChangeInfo (\ s a -> s{_gcrsChangeInfo = a});
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,114 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Route53.GetCheckerIPRanges
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- 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.
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetCheckerIPRanges.html AWS API Reference> for GetCheckerIPRanges.
+module Network.AWS.Route53.GetCheckerIPRanges
+    (
+    -- * Creating a Request
+      getCheckerIPRanges
+    , GetCheckerIPRanges
+
+    -- * Destructuring the Response
+    , getCheckerIPRangesResponse
+    , GetCheckerIPRangesResponse
+    -- * Response Lenses
+    , gcirrsStatus
+    , gcirrsCheckerIPRanges
+    ) where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
+
+-- | Empty request.
+--
+-- /See:/ 'getCheckerIPRanges' smart constructor.
+data GetCheckerIPRanges =
+    GetCheckerIPRanges'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetCheckerIPRanges' with the minimum fields required to make a request.
+--
+getCheckerIPRanges
+    :: GetCheckerIPRanges
+getCheckerIPRanges = GetCheckerIPRanges'
+
+instance AWSRequest GetCheckerIPRanges where
+        type Sv GetCheckerIPRanges = Route53
+        type Rs GetCheckerIPRanges =
+             GetCheckerIPRangesResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetCheckerIPRangesResponse' <$>
+                   (pure (fromEnum s)) <*>
+                     (x .@? "CheckerIpRanges" .!@ mempty >>=
+                        parseXMLList "member"))
+
+instance ToHeaders GetCheckerIPRanges where
+        toHeaders = const mempty
+
+instance ToPath GetCheckerIPRanges where
+        toPath = const "/2013-04-01/checkeripranges"
+
+instance ToQuery GetCheckerIPRanges where
+        toQuery = const mempty
+
+-- | A complex type that contains the 'CheckerIpRanges' element.
+--
+-- /See:/ 'getCheckerIPRangesResponse' smart constructor.
+data GetCheckerIPRangesResponse = GetCheckerIPRangesResponse'
+    { _gcirrsStatus          :: !Int
+    , _gcirrsCheckerIPRanges :: ![Text]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetCheckerIPRangesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcirrsStatus'
+--
+-- * 'gcirrsCheckerIPRanges'
+getCheckerIPRangesResponse
+    :: Int -- ^ 'gcirrsStatus'
+    -> GetCheckerIPRangesResponse
+getCheckerIPRangesResponse pStatus_ =
+    GetCheckerIPRangesResponse'
+    { _gcirrsStatus = pStatus_
+    , _gcirrsCheckerIPRanges = mempty
+    }
+
+-- | The response status code.
+gcirrsStatus :: Lens' GetCheckerIPRangesResponse Int
+gcirrsStatus = lens _gcirrsStatus (\ s a -> s{_gcirrsStatus = a});
+
+-- | A complex type that contains sorted list of IP ranges in CIDR format for
+-- Amazon Route 53 health checkers.
+gcirrsCheckerIPRanges :: Lens' GetCheckerIPRangesResponse [Text]
+gcirrsCheckerIPRanges = lens _gcirrsCheckerIPRanges (\ s a -> s{_gcirrsCheckerIPRanges = a}) . _Coerce;
diff --git a/gen/Network/AWS/Route53/GetCheckerIpRanges.hs b/gen/Network/AWS/Route53/GetCheckerIpRanges.hs
deleted file mode 100644
--- a/gen/Network/AWS/Route53/GetCheckerIpRanges.hs
+++ /dev/null
@@ -1,107 +0,0 @@
-{-# 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)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | 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, Read, Show, Generic)
-
--- | 'GetCheckerIpRanges' constructor.
-getCheckerIpRanges :: GetCheckerIpRanges
-getCheckerIpRanges = GetCheckerIpRanges
-
-newtype GetCheckerIpRangesResponse = GetCheckerIpRangesResponse
-    { _gcirrCheckerIpRanges :: List "CheckerIpRanges" Text
-    } deriving (Eq, Ord, Read, 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" .!@ mempty
diff --git a/gen/Network/AWS/Route53/GetGeoLocation.hs b/gen/Network/AWS/Route53/GetGeoLocation.hs
--- a/gen/Network/AWS/Route53/GetGeoLocation.hs
+++ b/gen/Network/AWS/Route53/GetGeoLocation.hs
@@ -1,149 +1,160 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | 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.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetGeoLocation.html AWS API Reference> for GetGeoLocation.
 module Network.AWS.Route53.GetGeoLocation
     (
-    -- * Request
-      GetGeoLocation
-    -- ** Request constructor
-    , getGeoLocation
-    -- ** Request lenses
-    , gglContinentCode
-    , gglCountryCode
+    -- * Creating a Request
+      getGeoLocation
+    , GetGeoLocation
+    -- * Request Lenses
     , gglSubdivisionCode
+    , gglCountryCode
+    , gglContinentCode
 
-    -- * Response
-    , GetGeoLocationResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getGeoLocationResponse
-    -- ** Response lenses
-    , gglrGeoLocationDetails
+    , GetGeoLocationResponse
+    -- * Response Lenses
+    , gglrsStatus
+    , gglrsGeoLocationDetails
     ) 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, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
--- | 'GetGeoLocation' constructor.
+-- | A complex type that contains information about the request to get a geo
+-- location.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'getGeoLocation' smart constructor.
+data GetGeoLocation = GetGeoLocation'
+    { _gglSubdivisionCode :: !(Maybe Text)
+    , _gglCountryCode     :: !(Maybe Text)
+    , _gglContinentCode   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetGeoLocation' with the minimum fields required to make a request.
 --
--- * 'gglContinentCode' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gglCountryCode' @::@ 'Maybe' 'Text'
+-- * 'gglSubdivisionCode'
 --
--- * 'gglSubdivisionCode' @::@ 'Maybe' 'Text'
+-- * 'gglCountryCode'
 --
-getGeoLocation :: GetGeoLocation
-getGeoLocation = GetGeoLocation
-    { _gglContinentCode   = Nothing
-    , _gglCountryCode     = Nothing
-    , _gglSubdivisionCode = Nothing
+-- * 'gglContinentCode'
+getGeoLocation
+    :: GetGeoLocation
+getGeoLocation =
+    GetGeoLocation'
+    { _gglSubdivisionCode = Nothing
+    , _gglCountryCode = Nothing
+    , _gglContinentCode = 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
+-- | 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.
+-- 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, Read, Show)
+gglSubdivisionCode = lens _gglSubdivisionCode (\ s a -> s{_gglSubdivisionCode = a});
 
--- | 'GetGeoLocationResponse' constructor.
+-- | 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 fields accessible through corresponding lenses are:
+-- 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 continent geo location. Note: only continent locations
+-- have a continent code.
 --
--- * 'gglrGeoLocationDetails' @::@ 'GeoLocationDetails'
+-- Valid values: 'AF' | 'AN' | 'AS' | 'EU' | 'OC' | 'NA' | 'SA'
 --
-getGeoLocationResponse :: GeoLocationDetails -- ^ 'gglrGeoLocationDetails'
-                       -> GetGeoLocationResponse
-getGeoLocationResponse p1 = GetGeoLocationResponse
-    { _gglrGeoLocationDetails = p1
-    }
+-- 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});
 
--- | 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 AWSRequest GetGeoLocation where
+        type Sv GetGeoLocation = Route53
+        type Rs GetGeoLocation = GetGeoLocationResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetGeoLocationResponse' <$>
+                   (pure (fromEnum s)) <*> (x .@ "GeoLocationDetails"))
 
+instance ToHeaders GetGeoLocation where
+        toHeaders = const mempty
+
 instance ToPath GetGeoLocation where
-    toPath = const "/2013-04-01/geolocation"
+        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" [])
+        toQuery GetGeoLocation'{..}
+          = mconcat
+              ["subdivisioncode" =: _gglSubdivisionCode,
+               "countrycode" =: _gglCountryCode,
+               "continentcode" =: _gglContinentCode]
 
-instance ToXML GetGeoLocation
+-- | A complex type containing information about the specified geo location.
+--
+-- /See:/ 'getGeoLocationResponse' smart constructor.
+data GetGeoLocationResponse = GetGeoLocationResponse'
+    { _gglrsStatus             :: !Int
+    , _gglrsGeoLocationDetails :: !GeoLocationDetails
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetGeoLocation where
-    type Sv GetGeoLocation = Route53
-    type Rs GetGeoLocation = GetGeoLocationResponse
+-- | Creates a value of 'GetGeoLocationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gglrsStatus'
+--
+-- * 'gglrsGeoLocationDetails'
+getGeoLocationResponse
+    :: Int -- ^ 'gglrsStatus'
+    -> GeoLocationDetails -- ^ 'gglrsGeoLocationDetails'
+    -> GetGeoLocationResponse
+getGeoLocationResponse pStatus_ pGeoLocationDetails_ =
+    GetGeoLocationResponse'
+    { _gglrsStatus = pStatus_
+    , _gglrsGeoLocationDetails = pGeoLocationDetails_
+    }
 
-    request  = get
-    response = xmlResponse
+-- | The response status code.
+gglrsStatus :: Lens' GetGeoLocationResponse Int
+gglrsStatus = lens _gglrsStatus (\ s a -> s{_gglrsStatus = a});
 
-instance FromXML GetGeoLocationResponse where
-    parseXML x = GetGeoLocationResponse
-        <$> x .@  "GeoLocationDetails"
+-- | A complex type that contains the information about the specified geo
+-- location.
+gglrsGeoLocationDetails :: Lens' GetGeoLocationResponse GeoLocationDetails
+gglrsGeoLocationDetails = lens _gglrsGeoLocationDetails (\ s a -> s{_gglrsGeoLocationDetails = a});
diff --git a/gen/Network/AWS/Route53/GetHealthCheck.hs b/gen/Network/AWS/Route53/GetHealthCheck.hs
--- a/gen/Network/AWS/Route53/GetHealthCheck.hs
+++ b/gen/Network/AWS/Route53/GetHealthCheck.hs
@@ -1,115 +1,125 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | To retrieve the health check, send a 'GET' request to the '2013-04-01/healthcheck//health check ID/ resource.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetHealthCheck.html AWS API Reference> for GetHealthCheck.
 module Network.AWS.Route53.GetHealthCheck
     (
-    -- * Request
-      GetHealthCheck
-    -- ** Request constructor
-    , getHealthCheck
-    -- ** Request lenses
+    -- * Creating a Request
+      getHealthCheck
+    , GetHealthCheck
+    -- * Request Lenses
     , ghcHealthCheckId
 
-    -- * Response
-    , GetHealthCheckResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getHealthCheckResponse
-    -- ** Response lenses
-    , ghcrHealthCheck
+    , GetHealthCheckResponse
+    -- * Response Lenses
+    , ghcrsStatus
+    , ghcrsHealthCheck
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.Route53.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
-newtype GetHealthCheck = GetHealthCheck
+-- | A complex type that contains information about the request to get a
+-- health check.
+--
+-- /See:/ 'getHealthCheck' smart constructor.
+newtype GetHealthCheck = GetHealthCheck'
     { _ghcHealthCheckId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetHealthCheck' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetHealthCheck' with the minimum fields required to make a request.
 --
--- * 'ghcHealthCheckId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getHealthCheck :: Text -- ^ 'ghcHealthCheckId'
-               -> GetHealthCheck
-getHealthCheck p1 = GetHealthCheck
-    { _ghcHealthCheckId = p1
+-- * 'ghcHealthCheckId'
+getHealthCheck
+    :: Text -- ^ 'ghcHealthCheckId'
+    -> GetHealthCheck
+getHealthCheck pHealthCheckId_ =
+    GetHealthCheck'
+    { _ghcHealthCheckId = pHealthCheckId_
     }
 
 -- | 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, Read, Show)
+ghcHealthCheckId = lens _ghcHealthCheckId (\ s a -> s{_ghcHealthCheckId = a});
 
--- | 'GetHealthCheckResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ghcrHealthCheck' @::@ 'HealthCheck'
---
-getHealthCheckResponse :: HealthCheck -- ^ 'ghcrHealthCheck'
-                       -> GetHealthCheckResponse
-getHealthCheckResponse p1 = GetHealthCheckResponse
-    { _ghcrHealthCheck = p1
-    }
+instance AWSRequest GetHealthCheck where
+        type Sv GetHealthCheck = Route53
+        type Rs GetHealthCheck = GetHealthCheckResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetHealthCheckResponse' <$>
+                   (pure (fromEnum s)) <*> (x .@ "HealthCheck"))
 
--- | 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 ToHeaders GetHealthCheck where
+        toHeaders = const mempty
 
 instance ToPath GetHealthCheck where
-    toPath GetHealthCheck{..} = mconcat
-        [ "/2013-04-01/healthcheck/"
-        , toText _ghcHealthCheckId
-        ]
+        toPath GetHealthCheck'{..}
+          = mconcat
+              ["/2013-04-01/healthcheck/", toBS _ghcHealthCheckId]
 
 instance ToQuery GetHealthCheck where
-    toQuery = const mempty
-
-instance ToHeaders GetHealthCheck
-
-instance ToXMLRoot GetHealthCheck where
-    toXMLRoot = const (namespaced ns "GetHealthCheck" [])
+        toQuery = const mempty
 
-instance ToXML GetHealthCheck
+-- | A complex type containing information about the specified health check.
+--
+-- /See:/ 'getHealthCheckResponse' smart constructor.
+data GetHealthCheckResponse = GetHealthCheckResponse'
+    { _ghcrsStatus      :: !Int
+    , _ghcrsHealthCheck :: !HealthCheck
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetHealthCheck where
-    type Sv GetHealthCheck = Route53
-    type Rs GetHealthCheck = GetHealthCheckResponse
+-- | Creates a value of 'GetHealthCheckResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ghcrsStatus'
+--
+-- * 'ghcrsHealthCheck'
+getHealthCheckResponse
+    :: Int -- ^ 'ghcrsStatus'
+    -> HealthCheck -- ^ 'ghcrsHealthCheck'
+    -> GetHealthCheckResponse
+getHealthCheckResponse pStatus_ pHealthCheck_ =
+    GetHealthCheckResponse'
+    { _ghcrsStatus = pStatus_
+    , _ghcrsHealthCheck = pHealthCheck_
+    }
 
-    request  = get
-    response = xmlResponse
+-- | The response status code.
+ghcrsStatus :: Lens' GetHealthCheckResponse Int
+ghcrsStatus = lens _ghcrsStatus (\ s a -> s{_ghcrsStatus = a});
 
-instance FromXML GetHealthCheckResponse where
-    parseXML x = GetHealthCheckResponse
-        <$> x .@  "HealthCheck"
+-- | A complex type that contains the information about the specified health
+-- check.
+ghcrsHealthCheck :: Lens' GetHealthCheckResponse HealthCheck
+ghcrsHealthCheck = lens _ghcrsHealthCheck (\ s a -> s{_ghcrsHealthCheck = a});
diff --git a/gen/Network/AWS/Route53/GetHealthCheckCount.hs b/gen/Network/AWS/Route53/GetHealthCheckCount.hs
--- a/gen/Network/AWS/Route53/GetHealthCheckCount.hs
+++ b/gen/Network/AWS/Route53/GetHealthCheckCount.hs
@@ -1,98 +1,111 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | To retrieve a count of all your health checks, send a 'GET' request to the '2013-04-01/healthcheckcount' resource.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetHealthCheckCount.html AWS API Reference> for GetHealthCheckCount.
 module Network.AWS.Route53.GetHealthCheckCount
     (
-    -- * Request
-      GetHealthCheckCount
-    -- ** Request constructor
-    , getHealthCheckCount
+    -- * Creating a Request
+      getHealthCheckCount
+    , GetHealthCheckCount
 
-    -- * Response
-    , GetHealthCheckCountResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getHealthCheckCountResponse
-    -- ** Response lenses
-    , ghccrHealthCheckCount
+    , GetHealthCheckCountResponse
+    -- * Response Lenses
+    , ghccrsStatus
+    , ghccrsHealthCheckCount
     ) 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, Read, Show, Generic)
-
--- | 'GetHealthCheckCount' constructor.
-getHealthCheckCount :: GetHealthCheckCount
-getHealthCheckCount = GetHealthCheckCount
-
-newtype GetHealthCheckCountResponse = GetHealthCheckCountResponse
-    { _ghccrHealthCheckCount :: Integer
-    } deriving (Eq, Ord, Read, Show, Enum, Num, Integral, Real)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
--- | 'GetHealthCheckCountResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | To retrieve a count of all your health checks, send a 'GET' request to
+-- the '2013-04-01\/healthcheckcount' resource.
 --
--- * 'ghccrHealthCheckCount' @::@ 'Integer'
+-- /See:/ 'getHealthCheckCount' smart constructor.
+data GetHealthCheckCount =
+    GetHealthCheckCount'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetHealthCheckCount' with the minimum fields required to make a request.
 --
-getHealthCheckCountResponse :: Integer -- ^ 'ghccrHealthCheckCount'
-                            -> GetHealthCheckCountResponse
-getHealthCheckCountResponse p1 = GetHealthCheckCountResponse
-    { _ghccrHealthCheckCount = p1
-    }
+getHealthCheckCount
+    :: GetHealthCheckCount
+getHealthCheckCount = GetHealthCheckCount'
 
--- | The number of health checks associated with the current AWS account.
-ghccrHealthCheckCount :: Lens' GetHealthCheckCountResponse Integer
-ghccrHealthCheckCount =
-    lens _ghccrHealthCheckCount (\s a -> s { _ghccrHealthCheckCount = a })
+instance AWSRequest GetHealthCheckCount where
+        type Sv GetHealthCheckCount = Route53
+        type Rs GetHealthCheckCount =
+             GetHealthCheckCountResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetHealthCheckCountResponse' <$>
+                   (pure (fromEnum s)) <*> (x .@ "HealthCheckCount"))
 
+instance ToHeaders GetHealthCheckCount where
+        toHeaders = const mempty
+
 instance ToPath GetHealthCheckCount where
-    toPath = const "/2013-04-01/healthcheckcount"
+        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" [])
+        toQuery = const mempty
 
-instance ToXML GetHealthCheckCount
+-- | A complex type that contains the count of health checks associated with
+-- the current AWS account.
+--
+-- /See:/ 'getHealthCheckCountResponse' smart constructor.
+data GetHealthCheckCountResponse = GetHealthCheckCountResponse'
+    { _ghccrsStatus           :: !Int
+    , _ghccrsHealthCheckCount :: !Integer
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetHealthCheckCount where
-    type Sv GetHealthCheckCount = Route53
-    type Rs GetHealthCheckCount = GetHealthCheckCountResponse
+-- | Creates a value of 'GetHealthCheckCountResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ghccrsStatus'
+--
+-- * 'ghccrsHealthCheckCount'
+getHealthCheckCountResponse
+    :: Int -- ^ 'ghccrsStatus'
+    -> Integer -- ^ 'ghccrsHealthCheckCount'
+    -> GetHealthCheckCountResponse
+getHealthCheckCountResponse pStatus_ pHealthCheckCount_ =
+    GetHealthCheckCountResponse'
+    { _ghccrsStatus = pStatus_
+    , _ghccrsHealthCheckCount = pHealthCheckCount_
+    }
 
-    request  = get
-    response = xmlResponse
+-- | The response status code.
+ghccrsStatus :: Lens' GetHealthCheckCountResponse Int
+ghccrsStatus = lens _ghccrsStatus (\ s a -> s{_ghccrsStatus = a});
 
-instance FromXML GetHealthCheckCountResponse where
-    parseXML x = GetHealthCheckCountResponse
-        <$> x .@  "HealthCheckCount"
+-- | The number of health checks associated with the current AWS account.
+ghccrsHealthCheckCount :: Lens' GetHealthCheckCountResponse Integer
+ghccrsHealthCheckCount = lens _ghccrsHealthCheckCount (\ s a -> s{_ghccrsHealthCheckCount = a});
diff --git a/gen/Network/AWS/Route53/GetHealthCheckLastFailureReason.hs b/gen/Network/AWS/Route53/GetHealthCheckLastFailureReason.hs
--- a/gen/Network/AWS/Route53/GetHealthCheckLastFailureReason.hs
+++ b/gen/Network/AWS/Route53/GetHealthCheckLastFailureReason.hs
@@ -1,130 +1,135 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | 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.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetHealthCheckLastFailureReason.html AWS API Reference> for GetHealthCheckLastFailureReason.
 module Network.AWS.Route53.GetHealthCheckLastFailureReason
     (
-    -- * Request
-      GetHealthCheckLastFailureReason
-    -- ** Request constructor
-    , getHealthCheckLastFailureReason
-    -- ** Request lenses
+    -- * Creating a Request
+      getHealthCheckLastFailureReason
+    , GetHealthCheckLastFailureReason
+    -- * Request Lenses
     , ghclfrHealthCheckId
 
-    -- * Response
-    , GetHealthCheckLastFailureReasonResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getHealthCheckLastFailureReasonResponse
-    -- ** Response lenses
-    , ghclfrrHealthCheckObservations
+    , GetHealthCheckLastFailureReasonResponse
+    -- * Response Lenses
+    , ghclfrrsStatus
+    , ghclfrrsHealthCheckObservations
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.Route53.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
-newtype GetHealthCheckLastFailureReason = GetHealthCheckLastFailureReason
+-- | A complex type that contains information about the request to get the
+-- most recent failure reason for a health check.
+--
+-- /See:/ 'getHealthCheckLastFailureReason' smart constructor.
+newtype GetHealthCheckLastFailureReason = GetHealthCheckLastFailureReason'
     { _ghclfrHealthCheckId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetHealthCheckLastFailureReason' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetHealthCheckLastFailureReason' with the minimum fields required to make a request.
 --
--- * 'ghclfrHealthCheckId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getHealthCheckLastFailureReason :: Text -- ^ 'ghclfrHealthCheckId'
-                                -> GetHealthCheckLastFailureReason
-getHealthCheckLastFailureReason p1 = GetHealthCheckLastFailureReason
-    { _ghclfrHealthCheckId = p1
+-- * 'ghclfrHealthCheckId'
+getHealthCheckLastFailureReason
+    :: Text -- ^ 'ghclfrHealthCheckId'
+    -> GetHealthCheckLastFailureReason
+getHealthCheckLastFailureReason pHealthCheckId_ =
+    GetHealthCheckLastFailureReason'
+    { _ghclfrHealthCheckId = pHealthCheckId_
     }
 
--- | The ID of the health check for which you want to retrieve the reason for the
--- most recent failure.
+-- | 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 })
+ghclfrHealthCheckId = lens _ghclfrHealthCheckId (\ s a -> s{_ghclfrHealthCheckId = a});
 
-newtype GetHealthCheckLastFailureReasonResponse = GetHealthCheckLastFailureReasonResponse
-    { _ghclfrrHealthCheckObservations :: List "HealthCheckObservation" HealthCheckObservation
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
+instance AWSRequest GetHealthCheckLastFailureReason
+         where
+        type Sv GetHealthCheckLastFailureReason = Route53
+        type Rs GetHealthCheckLastFailureReason =
+             GetHealthCheckLastFailureReasonResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetHealthCheckLastFailureReasonResponse' <$>
+                   (pure (fromEnum s)) <*>
+                     (x .@? "HealthCheckObservations" .!@ mempty >>=
+                        parseXMLList "HealthCheckObservation"))
 
-instance GHC.Exts.IsList GetHealthCheckLastFailureReasonResponse where
-    type Item GetHealthCheckLastFailureReasonResponse = HealthCheckObservation
+instance ToHeaders GetHealthCheckLastFailureReason
+         where
+        toHeaders = const mempty
 
-    fromList = GetHealthCheckLastFailureReasonResponse . GHC.Exts.fromList
-    toList   = GHC.Exts.toList . _ghclfrrHealthCheckObservations
+instance ToPath GetHealthCheckLastFailureReason where
+        toPath GetHealthCheckLastFailureReason'{..}
+          = mconcat
+              ["/2013-04-01/healthcheck/",
+               toBS _ghclfrHealthCheckId, "/lastfailurereason"]
 
--- | 'GetHealthCheckLastFailureReasonResponse' constructor.
+instance ToQuery GetHealthCheckLastFailureReason
+         where
+        toQuery = const mempty
+
+-- | A complex type that contains information about the most recent failure
+-- for the specified health check.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'getHealthCheckLastFailureReasonResponse' smart constructor.
+data GetHealthCheckLastFailureReasonResponse = GetHealthCheckLastFailureReasonResponse'
+    { _ghclfrrsStatus                  :: !Int
+    , _ghclfrrsHealthCheckObservations :: ![HealthCheckObservation]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetHealthCheckLastFailureReasonResponse' with the minimum fields required to make a request.
 --
--- * 'ghclfrrHealthCheckObservations' @::@ ['HealthCheckObservation']
+-- Use one of the following lenses to modify other fields as desired:
 --
-getHealthCheckLastFailureReasonResponse :: GetHealthCheckLastFailureReasonResponse
-getHealthCheckLastFailureReasonResponse = GetHealthCheckLastFailureReasonResponse
-    { _ghclfrrHealthCheckObservations = mempty
+-- * 'ghclfrrsStatus'
+--
+-- * 'ghclfrrsHealthCheckObservations'
+getHealthCheckLastFailureReasonResponse
+    :: Int -- ^ 'ghclfrrsStatus'
+    -> GetHealthCheckLastFailureReasonResponse
+getHealthCheckLastFailureReasonResponse pStatus_ =
+    GetHealthCheckLastFailureReasonResponse'
+    { _ghclfrrsStatus = pStatus_
+    , _ghclfrrsHealthCheckObservations = 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
+-- | The response status code.
+ghclfrrsStatus :: Lens' GetHealthCheckLastFailureReasonResponse Int
+ghclfrrsStatus = lens _ghclfrrsStatus (\ s a -> s{_ghclfrrsStatus = a});
 
-instance FromXML GetHealthCheckLastFailureReasonResponse where
-    parseXML x = GetHealthCheckLastFailureReasonResponse
-        <$> x .@? "HealthCheckObservations" .!@ mempty
+-- | A list that contains one 'HealthCheckObservation' element for each Route
+-- 53 health checker.
+ghclfrrsHealthCheckObservations :: Lens' GetHealthCheckLastFailureReasonResponse [HealthCheckObservation]
+ghclfrrsHealthCheckObservations = lens _ghclfrrsHealthCheckObservations (\ s a -> s{_ghclfrrsHealthCheckObservations = a}) . _Coerce;
diff --git a/gen/Network/AWS/Route53/GetHealthCheckStatus.hs b/gen/Network/AWS/Route53/GetHealthCheckStatus.hs
--- a/gen/Network/AWS/Route53/GetHealthCheckStatus.hs
+++ b/gen/Network/AWS/Route53/GetHealthCheckStatus.hs
@@ -1,128 +1,131 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | 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.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetHealthCheckStatus.html AWS API Reference> for GetHealthCheckStatus.
 module Network.AWS.Route53.GetHealthCheckStatus
     (
-    -- * Request
-      GetHealthCheckStatus
-    -- ** Request constructor
-    , getHealthCheckStatus
-    -- ** Request lenses
+    -- * Creating a Request
+      getHealthCheckStatus
+    , GetHealthCheckStatus
+    -- * Request Lenses
     , ghcsHealthCheckId
 
-    -- * Response
-    , GetHealthCheckStatusResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getHealthCheckStatusResponse
-    -- ** Response lenses
-    , ghcsrHealthCheckObservations
+    , GetHealthCheckStatusResponse
+    -- * Response Lenses
+    , ghcsrsStatus
+    , ghcsrsHealthCheckObservations
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.Route53.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
-newtype GetHealthCheckStatus = GetHealthCheckStatus
+-- | A complex type that contains information about the request to get health
+-- check status for a health check.
+--
+-- /See:/ 'getHealthCheckStatus' smart constructor.
+newtype GetHealthCheckStatus = GetHealthCheckStatus'
     { _ghcsHealthCheckId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetHealthCheckStatus' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetHealthCheckStatus' with the minimum fields required to make a request.
 --
--- * 'ghcsHealthCheckId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getHealthCheckStatus :: Text -- ^ 'ghcsHealthCheckId'
-                     -> GetHealthCheckStatus
-getHealthCheckStatus p1 = GetHealthCheckStatus
-    { _ghcsHealthCheckId = p1
+-- * 'ghcsHealthCheckId'
+getHealthCheckStatus
+    :: Text -- ^ 'ghcsHealthCheckId'
+    -> GetHealthCheckStatus
+getHealthCheckStatus pHealthCheckId_ =
+    GetHealthCheckStatus'
+    { _ghcsHealthCheckId = pHealthCheckId_
     }
 
--- | The ID of the health check for which you want to retrieve the most recent
--- status.
+-- | 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, Read, Show, Monoid, Semigroup)
-
-instance GHC.Exts.IsList GetHealthCheckStatusResponse where
-    type Item GetHealthCheckStatusResponse = HealthCheckObservation
-
-    fromList = GetHealthCheckStatusResponse . GHC.Exts.fromList
-    toList   = GHC.Exts.toList . _ghcsrHealthCheckObservations
+ghcsHealthCheckId = lens _ghcsHealthCheckId (\ s a -> s{_ghcsHealthCheckId = a});
 
--- | 'GetHealthCheckStatusResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ghcsrHealthCheckObservations' @::@ ['HealthCheckObservation']
---
-getHealthCheckStatusResponse :: GetHealthCheckStatusResponse
-getHealthCheckStatusResponse = GetHealthCheckStatusResponse
-    { _ghcsrHealthCheckObservations = mempty
-    }
+instance AWSRequest GetHealthCheckStatus where
+        type Sv GetHealthCheckStatus = Route53
+        type Rs GetHealthCheckStatus =
+             GetHealthCheckStatusResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetHealthCheckStatusResponse' <$>
+                   (pure (fromEnum s)) <*>
+                     (x .@? "HealthCheckObservations" .!@ mempty >>=
+                        parseXMLList "HealthCheckObservation"))
 
--- | 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 ToHeaders GetHealthCheckStatus where
+        toHeaders = const mempty
 
 instance ToPath GetHealthCheckStatus where
-    toPath GetHealthCheckStatus{..} = mconcat
-        [ "/2013-04-01/healthcheck/"
-        , toText _ghcsHealthCheckId
-        , "/status"
-        ]
+        toPath GetHealthCheckStatus'{..}
+          = mconcat
+              ["/2013-04-01/healthcheck/", toBS _ghcsHealthCheckId,
+               "/status"]
 
 instance ToQuery GetHealthCheckStatus where
-    toQuery = const mempty
-
-instance ToHeaders GetHealthCheckStatus
-
-instance ToXMLRoot GetHealthCheckStatus where
-    toXMLRoot = const (namespaced ns "GetHealthCheckStatus" [])
+        toQuery = const mempty
 
-instance ToXML GetHealthCheckStatus
+-- | A complex type that contains information about the status of the
+-- specified health check.
+--
+-- /See:/ 'getHealthCheckStatusResponse' smart constructor.
+data GetHealthCheckStatusResponse = GetHealthCheckStatusResponse'
+    { _ghcsrsStatus                  :: !Int
+    , _ghcsrsHealthCheckObservations :: ![HealthCheckObservation]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetHealthCheckStatus where
-    type Sv GetHealthCheckStatus = Route53
-    type Rs GetHealthCheckStatus = GetHealthCheckStatusResponse
+-- | Creates a value of 'GetHealthCheckStatusResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ghcsrsStatus'
+--
+-- * 'ghcsrsHealthCheckObservations'
+getHealthCheckStatusResponse
+    :: Int -- ^ 'ghcsrsStatus'
+    -> GetHealthCheckStatusResponse
+getHealthCheckStatusResponse pStatus_ =
+    GetHealthCheckStatusResponse'
+    { _ghcsrsStatus = pStatus_
+    , _ghcsrsHealthCheckObservations = mempty
+    }
 
-    request  = get
-    response = xmlResponse
+-- | The response status code.
+ghcsrsStatus :: Lens' GetHealthCheckStatusResponse Int
+ghcsrsStatus = lens _ghcsrsStatus (\ s a -> s{_ghcsrsStatus = a});
 
-instance FromXML GetHealthCheckStatusResponse where
-    parseXML x = GetHealthCheckStatusResponse
-        <$> x .@? "HealthCheckObservations" .!@ mempty
+-- | A list that contains one 'HealthCheckObservation' element for each Route
+-- 53 health checker.
+ghcsrsHealthCheckObservations :: Lens' GetHealthCheckStatusResponse [HealthCheckObservation]
+ghcsrsHealthCheckObservations = lens _ghcsrsHealthCheckObservations (\ s a -> s{_ghcsrsHealthCheckObservations = a}) . _Coerce;
diff --git a/gen/Network/AWS/Route53/GetHostedZone.hs b/gen/Network/AWS/Route53/GetHostedZone.hs
--- a/gen/Network/AWS/Route53/GetHostedZone.hs
+++ b/gen/Network/AWS/Route53/GetHostedZone.hs
@@ -1,141 +1,150 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | 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.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetHostedZone.html AWS API Reference> for GetHostedZone.
 module Network.AWS.Route53.GetHostedZone
     (
-    -- * Request
-      GetHostedZone
-    -- ** Request constructor
-    , getHostedZone
-    -- ** Request lenses
+    -- * Creating a Request
+      getHostedZone
+    , GetHostedZone
+    -- * Request Lenses
     , ghzId
 
-    -- * Response
-    , GetHostedZoneResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getHostedZoneResponse
-    -- ** Response lenses
-    , ghzrDelegationSet
-    , ghzrHostedZone
-    , ghzrVPCs
+    , GetHostedZoneResponse
+    -- * Response Lenses
+    , ghzrsVPCs
+    , ghzrsDelegationSet
+    , ghzrsStatus
+    , ghzrsHostedZone
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.Route53.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
-newtype GetHostedZone = GetHostedZone
+-- | The input for a GetHostedZone request.
+--
+-- /See:/ 'getHostedZone' smart constructor.
+newtype GetHostedZone = GetHostedZone'
     { _ghzId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetHostedZone' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetHostedZone' with the minimum fields required to make a request.
 --
--- * 'ghzId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getHostedZone :: Text -- ^ 'ghzId'
-              -> GetHostedZone
-getHostedZone p1 = GetHostedZone
-    { _ghzId = p1
+-- * 'ghzId'
+getHostedZone
+    :: Text -- ^ 'ghzId'
+    -> GetHostedZone
+getHostedZone pId_ =
+    GetHostedZone'
+    { _ghzId = pId_
     }
 
 -- | 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 })
+ghzId = lens _ghzId (\ s a -> s{_ghzId = a});
 
-data GetHostedZoneResponse = GetHostedZoneResponse
-    { _ghzrDelegationSet :: Maybe DelegationSet
-    , _ghzrHostedZone    :: HostedZone
-    , _ghzrVPCs          :: List1 "VPC" VPC
-    } deriving (Eq, Read, Show)
+instance AWSRequest GetHostedZone where
+        type Sv GetHostedZone = Route53
+        type Rs GetHostedZone = GetHostedZoneResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetHostedZoneResponse' <$>
+                   (x .@? "VPCs" .!@ mempty >>=
+                      may (parseXMLList1 "VPC"))
+                     <*> (x .@? "DelegationSet")
+                     <*> (pure (fromEnum s))
+                     <*> (x .@ "HostedZone"))
 
--- | 'GetHostedZoneResponse' constructor.
+instance ToHeaders GetHostedZone where
+        toHeaders = const mempty
+
+instance ToPath GetHostedZone where
+        toPath GetHostedZone'{..}
+          = mconcat ["/2013-04-01/hostedzone/", toBS _ghzId]
+
+instance ToQuery GetHostedZone where
+        toQuery = const mempty
+
+-- | A complex type containing information about the specified hosted zone.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'getHostedZoneResponse' smart constructor.
+data GetHostedZoneResponse = GetHostedZoneResponse'
+    { _ghzrsVPCs          :: !(Maybe (List1 VPC))
+    , _ghzrsDelegationSet :: !(Maybe DelegationSet)
+    , _ghzrsStatus        :: !Int
+    , _ghzrsHostedZone    :: !HostedZone
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetHostedZoneResponse' with the minimum fields required to make a request.
 --
--- * 'ghzrDelegationSet' @::@ 'Maybe' 'DelegationSet'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ghzrHostedZone' @::@ 'HostedZone'
+-- * 'ghzrsVPCs'
 --
--- * 'ghzrVPCs' @::@ 'NonEmpty' 'VPC'
+-- * 'ghzrsDelegationSet'
 --
-getHostedZoneResponse :: HostedZone -- ^ 'ghzrHostedZone'
-                      -> NonEmpty VPC -- ^ 'ghzrVPCs'
-                      -> GetHostedZoneResponse
-getHostedZoneResponse p1 p2 = GetHostedZoneResponse
-    { _ghzrHostedZone    = p1
-    , _ghzrVPCs          = withIso _List1 (const id) p2
-    , _ghzrDelegationSet = Nothing
+-- * 'ghzrsStatus'
+--
+-- * 'ghzrsHostedZone'
+getHostedZoneResponse
+    :: Int -- ^ 'ghzrsStatus'
+    -> HostedZone -- ^ 'ghzrsHostedZone'
+    -> GetHostedZoneResponse
+getHostedZoneResponse pStatus_ pHostedZone_ =
+    GetHostedZoneResponse'
+    { _ghzrsVPCs = Nothing
+    , _ghzrsDelegationSet = Nothing
+    , _ghzrsStatus = pStatus_
+    , _ghzrsHostedZone = pHostedZone_
     }
 
--- | 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
+ghzrsVPCs :: Lens' GetHostedZoneResponse (Maybe (NonEmpty VPC))
+ghzrsVPCs = lens _ghzrsVPCs (\ s a -> s{_ghzrsVPCs = a}) . mapping _List1;
 
-instance AWSRequest GetHostedZone where
-    type Sv GetHostedZone = Route53
-    type Rs GetHostedZone = GetHostedZoneResponse
+-- | A complex type that contains information about the name servers for the
+-- specified hosted zone.
+ghzrsDelegationSet :: Lens' GetHostedZoneResponse (Maybe DelegationSet)
+ghzrsDelegationSet = lens _ghzrsDelegationSet (\ s a -> s{_ghzrsDelegationSet = a});
 
-    request  = get
-    response = xmlResponse
+-- | The response status code.
+ghzrsStatus :: Lens' GetHostedZoneResponse Int
+ghzrsStatus = lens _ghzrsStatus (\ s a -> s{_ghzrsStatus = a});
 
-instance FromXML GetHostedZoneResponse where
-    parseXML x = GetHostedZoneResponse
-        <$> x .@? "DelegationSet"
-        <*> x .@  "HostedZone"
-        <*> x .@  "VPCs"
+-- | A complex type that contains the information about the specified hosted
+-- zone.
+ghzrsHostedZone :: Lens' GetHostedZoneResponse HostedZone
+ghzrsHostedZone = lens _ghzrsHostedZone (\ s a -> s{_ghzrsHostedZone = a});
diff --git a/gen/Network/AWS/Route53/GetHostedZoneCount.hs b/gen/Network/AWS/Route53/GetHostedZoneCount.hs
--- a/gen/Network/AWS/Route53/GetHostedZoneCount.hs
+++ b/gen/Network/AWS/Route53/GetHostedZoneCount.hs
@@ -1,98 +1,111 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.Route53.GetHostedZoneCount
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | To retrieve a count of all your hosted zones, send a 'GET' request to the '2013-04-01/hostedzonecount' resource.
+-- To retrieve a count of all your hosted zones, send a 'GET' request to
+-- the '2013-04-01\/hostedzonecount' resource.
 --
--- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetHostedZoneCount.html>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetHostedZoneCount.html AWS API Reference> for GetHostedZoneCount.
 module Network.AWS.Route53.GetHostedZoneCount
     (
-    -- * Request
-      GetHostedZoneCount
-    -- ** Request constructor
-    , getHostedZoneCount
+    -- * Creating a Request
+      getHostedZoneCount
+    , GetHostedZoneCount
 
-    -- * Response
-    , GetHostedZoneCountResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getHostedZoneCountResponse
-    -- ** Response lenses
-    , ghzcrHostedZoneCount
+    , GetHostedZoneCountResponse
+    -- * Response Lenses
+    , ghzcrsStatus
+    , ghzcrsHostedZoneCount
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.Route53.Types
-import qualified GHC.Exts
-
-data GetHostedZoneCount = GetHostedZoneCount
-    deriving (Eq, Ord, Read, Show, Generic)
-
--- | 'GetHostedZoneCount' constructor.
-getHostedZoneCount :: GetHostedZoneCount
-getHostedZoneCount = GetHostedZoneCount
-
-newtype GetHostedZoneCountResponse = GetHostedZoneCountResponse
-    { _ghzcrHostedZoneCount :: Integer
-    } deriving (Eq, Ord, Read, Show, Enum, Num, Integral, Real)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
--- | 'GetHostedZoneCountResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | To retrieve a count of all your hosted zones, send a 'GET' request to
+-- the '2013-04-01\/hostedzonecount' resource.
 --
--- * 'ghzcrHostedZoneCount' @::@ 'Integer'
+-- /See:/ 'getHostedZoneCount' smart constructor.
+data GetHostedZoneCount =
+    GetHostedZoneCount'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetHostedZoneCount' with the minimum fields required to make a request.
 --
-getHostedZoneCountResponse :: Integer -- ^ 'ghzcrHostedZoneCount'
-                           -> GetHostedZoneCountResponse
-getHostedZoneCountResponse p1 = GetHostedZoneCountResponse
-    { _ghzcrHostedZoneCount = p1
-    }
+getHostedZoneCount
+    :: GetHostedZoneCount
+getHostedZoneCount = GetHostedZoneCount'
 
--- | The number of hosted zones associated with the current AWS account.
-ghzcrHostedZoneCount :: Lens' GetHostedZoneCountResponse Integer
-ghzcrHostedZoneCount =
-    lens _ghzcrHostedZoneCount (\s a -> s { _ghzcrHostedZoneCount = a })
+instance AWSRequest GetHostedZoneCount where
+        type Sv GetHostedZoneCount = Route53
+        type Rs GetHostedZoneCount =
+             GetHostedZoneCountResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetHostedZoneCountResponse' <$>
+                   (pure (fromEnum s)) <*> (x .@ "HostedZoneCount"))
 
+instance ToHeaders GetHostedZoneCount where
+        toHeaders = const mempty
+
 instance ToPath GetHostedZoneCount where
-    toPath = const "/2013-04-01/hostedzonecount"
+        toPath = const "/2013-04-01/hostedzonecount"
 
 instance ToQuery GetHostedZoneCount where
-    toQuery = const mempty
-
-instance ToHeaders GetHostedZoneCount
-
-instance ToXMLRoot GetHostedZoneCount where
-    toXMLRoot = const (namespaced ns "GetHostedZoneCount" [])
+        toQuery = const mempty
 
-instance ToXML GetHostedZoneCount
+-- | A complex type that contains the count of hosted zones associated with
+-- the current AWS account.
+--
+-- /See:/ 'getHostedZoneCountResponse' smart constructor.
+data GetHostedZoneCountResponse = GetHostedZoneCountResponse'
+    { _ghzcrsStatus          :: !Int
+    , _ghzcrsHostedZoneCount :: !Integer
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetHostedZoneCount where
-    type Sv GetHostedZoneCount = Route53
-    type Rs GetHostedZoneCount = GetHostedZoneCountResponse
+-- | Creates a value of 'GetHostedZoneCountResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ghzcrsStatus'
+--
+-- * 'ghzcrsHostedZoneCount'
+getHostedZoneCountResponse
+    :: Int -- ^ 'ghzcrsStatus'
+    -> Integer -- ^ 'ghzcrsHostedZoneCount'
+    -> GetHostedZoneCountResponse
+getHostedZoneCountResponse pStatus_ pHostedZoneCount_ =
+    GetHostedZoneCountResponse'
+    { _ghzcrsStatus = pStatus_
+    , _ghzcrsHostedZoneCount = pHostedZoneCount_
+    }
 
-    request  = get
-    response = xmlResponse
+-- | The response status code.
+ghzcrsStatus :: Lens' GetHostedZoneCountResponse Int
+ghzcrsStatus = lens _ghzcrsStatus (\ s a -> s{_ghzcrsStatus = a});
 
-instance FromXML GetHostedZoneCountResponse where
-    parseXML x = GetHostedZoneCountResponse
-        <$> x .@  "HostedZoneCount"
+-- | The number of hosted zones associated with the current AWS account.
+ghzcrsHostedZoneCount :: Lens' GetHostedZoneCountResponse Integer
+ghzcrsHostedZoneCount = lens _ghzcrsHostedZoneCount (\ s a -> s{_ghzcrsHostedZoneCount = a});
diff --git a/gen/Network/AWS/Route53/GetReusableDelegationSet.hs b/gen/Network/AWS/Route53/GetReusableDelegationSet.hs
--- a/gen/Network/AWS/Route53/GetReusableDelegationSet.hs
+++ b/gen/Network/AWS/Route53/GetReusableDelegationSet.hs
@@ -1,118 +1,127 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | To retrieve the reusable delegation set, send a 'GET' request to the '2013-04-01/delegationset//delegation set ID/ resource.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetReusableDelegationSet.html AWS API Reference> for GetReusableDelegationSet.
 module Network.AWS.Route53.GetReusableDelegationSet
     (
-    -- * Request
-      GetReusableDelegationSet
-    -- ** Request constructor
-    , getReusableDelegationSet
-    -- ** Request lenses
+    -- * Creating a Request
+      getReusableDelegationSet
+    , GetReusableDelegationSet
+    -- * Request Lenses
     , grdsId
 
-    -- * Response
-    , GetReusableDelegationSetResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getReusableDelegationSetResponse
-    -- ** Response lenses
-    , grdsrDelegationSet
+    , GetReusableDelegationSetResponse
+    -- * Response Lenses
+    , grdsrsStatus
+    , grdsrsDelegationSet
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.Route53.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
-newtype GetReusableDelegationSet = GetReusableDelegationSet
+-- | The input for a GetReusableDelegationSet request.
+--
+-- /See:/ 'getReusableDelegationSet' smart constructor.
+newtype GetReusableDelegationSet = GetReusableDelegationSet'
     { _grdsId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetReusableDelegationSet' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetReusableDelegationSet' with the minimum fields required to make a request.
 --
--- * 'grdsId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getReusableDelegationSet :: Text -- ^ 'grdsId'
-                         -> GetReusableDelegationSet
-getReusableDelegationSet p1 = GetReusableDelegationSet
-    { _grdsId = p1
+-- * 'grdsId'
+getReusableDelegationSet
+    :: Text -- ^ 'grdsId'
+    -> GetReusableDelegationSet
+getReusableDelegationSet pId_ =
+    GetReusableDelegationSet'
+    { _grdsId = pId_
     }
 
--- | The ID of the reusable delegation set for which you want to get a list of the
--- name server.
+-- | 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, Read, Show)
+grdsId = lens _grdsId (\ s a -> s{_grdsId = a});
 
--- | 'GetReusableDelegationSetResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'grdsrDelegationSet' @::@ 'DelegationSet'
---
-getReusableDelegationSetResponse :: DelegationSet -- ^ 'grdsrDelegationSet'
-                                 -> GetReusableDelegationSetResponse
-getReusableDelegationSetResponse p1 = GetReusableDelegationSetResponse
-    { _grdsrDelegationSet = p1
-    }
+instance AWSRequest GetReusableDelegationSet where
+        type Sv GetReusableDelegationSet = Route53
+        type Rs GetReusableDelegationSet =
+             GetReusableDelegationSetResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetReusableDelegationSetResponse' <$>
+                   (pure (fromEnum s)) <*> (x .@ "DelegationSet"))
 
--- | 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 ToHeaders GetReusableDelegationSet where
+        toHeaders = const mempty
 
 instance ToPath GetReusableDelegationSet where
-    toPath GetReusableDelegationSet{..} = mconcat
-        [ "/2013-04-01/delegationset/"
-        , toText _grdsId
-        ]
+        toPath GetReusableDelegationSet'{..}
+          = mconcat
+              ["/2013-04-01/delegationset/", toBS _grdsId]
 
 instance ToQuery GetReusableDelegationSet where
-    toQuery = const mempty
-
-instance ToHeaders GetReusableDelegationSet
-
-instance ToXMLRoot GetReusableDelegationSet where
-    toXMLRoot = const (namespaced ns "GetReusableDelegationSet" [])
+        toQuery = const mempty
 
-instance ToXML GetReusableDelegationSet
+-- | A complex type containing information about the specified reusable
+-- delegation set.
+--
+-- /See:/ 'getReusableDelegationSetResponse' smart constructor.
+data GetReusableDelegationSetResponse = GetReusableDelegationSetResponse'
+    { _grdsrsStatus        :: !Int
+    , _grdsrsDelegationSet :: !DelegationSet
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetReusableDelegationSet where
-    type Sv GetReusableDelegationSet = Route53
-    type Rs GetReusableDelegationSet = GetReusableDelegationSetResponse
+-- | Creates a value of 'GetReusableDelegationSetResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'grdsrsStatus'
+--
+-- * 'grdsrsDelegationSet'
+getReusableDelegationSetResponse
+    :: Int -- ^ 'grdsrsStatus'
+    -> DelegationSet -- ^ 'grdsrsDelegationSet'
+    -> GetReusableDelegationSetResponse
+getReusableDelegationSetResponse pStatus_ pDelegationSet_ =
+    GetReusableDelegationSetResponse'
+    { _grdsrsStatus = pStatus_
+    , _grdsrsDelegationSet = pDelegationSet_
+    }
 
-    request  = get
-    response = xmlResponse
+-- | The response status code.
+grdsrsStatus :: Lens' GetReusableDelegationSetResponse Int
+grdsrsStatus = lens _grdsrsStatus (\ s a -> s{_grdsrsStatus = a});
 
-instance FromXML GetReusableDelegationSetResponse where
-    parseXML x = GetReusableDelegationSetResponse
-        <$> x .@  "DelegationSet"
+-- | A complex type that contains the information about the nameservers for
+-- the specified delegation set ID.
+grdsrsDelegationSet :: Lens' GetReusableDelegationSetResponse DelegationSet
+grdsrsDelegationSet = lens _grdsrsDelegationSet (\ s a -> s{_grdsrsDelegationSet = a});
diff --git a/gen/Network/AWS/Route53/ListGeoLocations.hs b/gen/Network/AWS/Route53/ListGeoLocations.hs
--- a/gen/Network/AWS/Route53/ListGeoLocations.hs
+++ b/gen/Network/AWS/Route53/ListGeoLocations.hs
@@ -1,237 +1,253 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | 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.
+-- 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.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListGeoLocations.html AWS API Reference> for ListGeoLocations.
 module Network.AWS.Route53.ListGeoLocations
     (
-    -- * Request
-      ListGeoLocations
-    -- ** Request constructor
-    , listGeoLocations
-    -- ** Request lenses
+    -- * Creating a Request
+      listGeoLocations
+    , ListGeoLocations
+    -- * Request Lenses
+    , lglStartSubdivisionCode
     , lglMaxItems
-    , lglStartContinentCode
     , lglStartCountryCode
-    , lglStartSubdivisionCode
+    , lglStartContinentCode
 
-    -- * Response
-    , ListGeoLocationsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listGeoLocationsResponse
-    -- ** Response lenses
-    , lglrGeoLocationDetailsList
-    , lglrIsTruncated
-    , lglrMaxItems
-    , lglrNextContinentCode
-    , lglrNextCountryCode
-    , lglrNextSubdivisionCode
+    , ListGeoLocationsResponse
+    -- * Response Lenses
+    , lglrsNextContinentCode
+    , lglrsNextCountryCode
+    , lglrsNextSubdivisionCode
+    , lglrsStatus
+    , lglrsGeoLocationDetailsList
+    , lglrsIsTruncated
+    , lglrsMaxItems
     ) 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, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
--- | 'ListGeoLocations' constructor.
+-- | The input for a ListGeoLocations request.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listGeoLocations' smart constructor.
+data ListGeoLocations = ListGeoLocations'
+    { _lglStartSubdivisionCode :: !(Maybe Text)
+    , _lglMaxItems             :: !(Maybe Text)
+    , _lglStartCountryCode     :: !(Maybe Text)
+    , _lglStartContinentCode   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListGeoLocations' with the minimum fields required to make a request.
 --
--- * 'lglMaxItems' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lglStartContinentCode' @::@ 'Maybe' 'Text'
+-- * 'lglStartSubdivisionCode'
 --
--- * 'lglStartCountryCode' @::@ 'Maybe' 'Text'
+-- * 'lglMaxItems'
 --
--- * 'lglStartSubdivisionCode' @::@ 'Maybe' 'Text'
+-- * 'lglStartCountryCode'
 --
-listGeoLocations :: ListGeoLocations
-listGeoLocations = ListGeoLocations
-    { _lglStartContinentCode   = Nothing
-    , _lglStartCountryCode     = Nothing
-    , _lglStartSubdivisionCode = Nothing
-    , _lglMaxItems             = Nothing
+-- * 'lglStartContinentCode'
+listGeoLocations
+    :: ListGeoLocations
+listGeoLocations =
+    ListGeoLocations'
+    { _lglStartSubdivisionCode = Nothing
+    , _lglMaxItems = Nothing
+    , _lglStartCountryCode = Nothing
+    , _lglStartContinentCode = Nothing
     }
 
+-- | 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});
+
 -- | 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 })
+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.
+-- | 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 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.
+-- 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 })
+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 })
+instance AWSRequest ListGeoLocations where
+        type Sv ListGeoLocations = Route53
+        type Rs ListGeoLocations = ListGeoLocationsResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListGeoLocationsResponse' <$>
+                   (x .@? "NextContinentCode") <*>
+                     (x .@? "NextCountryCode")
+                     <*> (x .@? "NextSubdivisionCode")
+                     <*> (pure (fromEnum s))
+                     <*>
+                     (x .@? "GeoLocationDetailsList" .!@ mempty >>=
+                        parseXMLList "GeoLocationDetails")
+                     <*> (x .@ "IsTruncated")
+                     <*> (x .@ "MaxItems"))
 
--- | 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 })
+instance ToHeaders ListGeoLocations where
+        toHeaders = const mempty
 
-data ListGeoLocationsResponse = ListGeoLocationsResponse
-    { _lglrGeoLocationDetailsList :: List "GeoLocationDetails" GeoLocationDetails
-    , _lglrIsTruncated            :: Bool
-    , _lglrMaxItems               :: Text
-    , _lglrNextContinentCode      :: Maybe Text
-    , _lglrNextCountryCode        :: Maybe Text
-    , _lglrNextSubdivisionCode    :: Maybe Text
-    } deriving (Eq, Read, Show)
+instance ToPath ListGeoLocations where
+        toPath = const "/2013-04-01/geolocations"
 
--- | 'ListGeoLocationsResponse' constructor.
+instance ToQuery ListGeoLocations where
+        toQuery ListGeoLocations'{..}
+          = mconcat
+              ["startsubdivisioncode" =: _lglStartSubdivisionCode,
+               "maxitems" =: _lglMaxItems,
+               "startcountrycode" =: _lglStartCountryCode,
+               "startcontinentcode" =: _lglStartContinentCode]
+
+-- | A complex type that contains information about the geo locations that
+-- are returned by the request and information about the response.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listGeoLocationsResponse' smart constructor.
+data ListGeoLocationsResponse = ListGeoLocationsResponse'
+    { _lglrsNextContinentCode      :: !(Maybe Text)
+    , _lglrsNextCountryCode        :: !(Maybe Text)
+    , _lglrsNextSubdivisionCode    :: !(Maybe Text)
+    , _lglrsStatus                 :: !Int
+    , _lglrsGeoLocationDetailsList :: ![GeoLocationDetails]
+    , _lglrsIsTruncated            :: !Bool
+    , _lglrsMaxItems               :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListGeoLocationsResponse' with the minimum fields required to make a request.
 --
--- * 'lglrGeoLocationDetailsList' @::@ ['GeoLocationDetails']
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lglrIsTruncated' @::@ 'Bool'
+-- * 'lglrsNextContinentCode'
 --
--- * 'lglrMaxItems' @::@ 'Text'
+-- * 'lglrsNextCountryCode'
 --
--- * 'lglrNextContinentCode' @::@ 'Maybe' 'Text'
+-- * 'lglrsNextSubdivisionCode'
 --
--- * 'lglrNextCountryCode' @::@ 'Maybe' 'Text'
+-- * 'lglrsStatus'
 --
--- * 'lglrNextSubdivisionCode' @::@ 'Maybe' 'Text'
+-- * 'lglrsGeoLocationDetailsList'
 --
-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.
+-- * 'lglrsIsTruncated'
 --
--- 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"
+-- * 'lglrsMaxItems'
+listGeoLocationsResponse
+    :: Int -- ^ 'lglrsStatus'
+    -> Bool -- ^ 'lglrsIsTruncated'
+    -> Text -- ^ 'lglrsMaxItems'
+    -> ListGeoLocationsResponse
+listGeoLocationsResponse pStatus_ pIsTruncated_ pMaxItems_ =
+    ListGeoLocationsResponse'
+    { _lglrsNextContinentCode = Nothing
+    , _lglrsNextCountryCode = Nothing
+    , _lglrsNextSubdivisionCode = Nothing
+    , _lglrsStatus = pStatus_
+    , _lglrsGeoLocationDetailsList = mempty
+    , _lglrsIsTruncated = pIsTruncated_
+    , _lglrsMaxItems = pMaxItems_
+    }
 
-instance ToQuery ListGeoLocations where
-    toQuery ListGeoLocations{..} = mconcat
-        [ "maxitems"             =? _lglMaxItems
-        , "startcontinentcode"   =? _lglStartContinentCode
-        , "startcountrycode"     =? _lglStartCountryCode
-        , "startsubdivisioncode" =? _lglStartSubdivisionCode
-        ]
+-- | 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.
+lglrsNextContinentCode :: Lens' ListGeoLocationsResponse (Maybe Text)
+lglrsNextContinentCode = lens _lglrsNextContinentCode (\ s a -> s{_lglrsNextContinentCode = a});
 
-instance ToHeaders ListGeoLocations
+-- | 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.
+lglrsNextCountryCode :: Lens' ListGeoLocationsResponse (Maybe Text)
+lglrsNextCountryCode = lens _lglrsNextCountryCode (\ s a -> s{_lglrsNextCountryCode = a});
 
-instance ToXMLRoot ListGeoLocations where
-    toXMLRoot = const (namespaced ns "ListGeoLocations" [])
+-- | 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.
+lglrsNextSubdivisionCode :: Lens' ListGeoLocationsResponse (Maybe Text)
+lglrsNextSubdivisionCode = lens _lglrsNextSubdivisionCode (\ s a -> s{_lglrsNextSubdivisionCode = a});
 
-instance ToXML ListGeoLocations
+-- | The response status code.
+lglrsStatus :: Lens' ListGeoLocationsResponse Int
+lglrsStatus = lens _lglrsStatus (\ s a -> s{_lglrsStatus = a});
 
-instance AWSRequest ListGeoLocations where
-    type Sv ListGeoLocations = Route53
-    type Rs ListGeoLocations = ListGeoLocationsResponse
+-- | A complex type that contains information about the geo locations that
+-- are returned by the request.
+lglrsGeoLocationDetailsList :: Lens' ListGeoLocationsResponse [GeoLocationDetails]
+lglrsGeoLocationDetailsList = lens _lglrsGeoLocationDetailsList (\ s a -> s{_lglrsGeoLocationDetailsList = a}) . _Coerce;
 
-    request  = get
-    response = xmlResponse
+-- | 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'
+lglrsIsTruncated :: Lens' ListGeoLocationsResponse Bool
+lglrsIsTruncated = lens _lglrsIsTruncated (\ s a -> s{_lglrsIsTruncated = a});
 
-instance FromXML ListGeoLocationsResponse where
-    parseXML x = ListGeoLocationsResponse
-        <$> x .@? "GeoLocationDetailsList" .!@ mempty
-        <*> x .@  "IsTruncated"
-        <*> x .@  "MaxItems"
-        <*> x .@? "NextContinentCode"
-        <*> x .@? "NextCountryCode"
-        <*> x .@? "NextSubdivisionCode"
+-- | The maximum number of records you requested. The maximum value of
+-- 'MaxItems' is 100.
+lglrsMaxItems :: Lens' ListGeoLocationsResponse Text
+lglrsMaxItems = lens _lglrsMaxItems (\ s a -> s{_lglrsMaxItems = a});
diff --git a/gen/Network/AWS/Route53/ListHealthChecks.hs b/gen/Network/AWS/Route53/ListHealthChecks.hs
--- a/gen/Network/AWS/Route53/ListHealthChecks.hs
+++ b/gen/Network/AWS/Route53/ListHealthChecks.hs
@@ -1,189 +1,219 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | 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.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListHealthChecks.html AWS API Reference> for ListHealthChecks.
+--
+-- This operation returns paginated results.
 module Network.AWS.Route53.ListHealthChecks
     (
-    -- * Request
-      ListHealthChecks
-    -- ** Request constructor
-    , listHealthChecks
-    -- ** Request lenses
-    , lhcMarker
+    -- * Creating a Request
+      listHealthChecks
+    , ListHealthChecks
+    -- * Request Lenses
     , lhcMaxItems
+    , lhcMarker
 
-    -- * Response
-    , ListHealthChecksResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listHealthChecksResponse
-    -- ** Response lenses
-    , lhcrHealthChecks
-    , lhcrIsTruncated
-    , lhcrMarker
-    , lhcrMaxItems
-    , lhcrNextMarker
+    , ListHealthChecksResponse
+    -- * Response Lenses
+    , lhcrsNextMarker
+    , lhcrsStatus
+    , lhcrsHealthChecks
+    , lhcrsMarker
+    , lhcrsIsTruncated
+    , lhcrsMaxItems
     ) 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, Read, Show)
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
--- | 'ListHealthChecks' constructor.
+-- | 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 or more '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.
 --
--- The fields accessible through corresponding lenses are:
+-- Route 53 returns a maximum of 100 items. If you set 'MaxItems' to a
+-- value greater than 100, Route 53 returns only the first 100.
 --
--- * 'lhcMarker' @::@ 'Maybe' 'Text'
+-- /See:/ 'listHealthChecks' smart constructor.
+data ListHealthChecks = ListHealthChecks'
+    { _lhcMaxItems :: !(Maybe Text)
+    , _lhcMarker   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListHealthChecks' with the minimum fields required to make a request.
 --
--- * 'lhcMaxItems' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-listHealthChecks :: ListHealthChecks
-listHealthChecks = ListHealthChecks
-    { _lhcMarker   = Nothing
-    , _lhcMaxItems = Nothing
+-- * 'lhcMaxItems'
+--
+-- * 'lhcMarker'
+listHealthChecks
+    :: ListHealthChecks
+listHealthChecks =
+    ListHealthChecks'
+    { _lhcMaxItems = Nothing
+    , _lhcMarker = 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.
+-- | 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});
+
+-- | 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 })
+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 })
+instance AWSPager ListHealthChecks where
+        page rq rs
+          | stop (rs ^. lhcrsIsTruncated) = Nothing
+          | isNothing (rs ^. lhcrsNextMarker) = Nothing
+          | otherwise =
+            Just $ rq & lhcMarker .~ rs ^. lhcrsNextMarker
 
-data ListHealthChecksResponse = ListHealthChecksResponse
-    { _lhcrHealthChecks :: List "HealthCheck" HealthCheck
-    , _lhcrIsTruncated  :: Bool
-    , _lhcrMarker       :: Text
-    , _lhcrMaxItems     :: Text
-    , _lhcrNextMarker   :: Maybe Text
-    } deriving (Eq, Read, Show)
+instance AWSRequest ListHealthChecks where
+        type Sv ListHealthChecks = Route53
+        type Rs ListHealthChecks = ListHealthChecksResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListHealthChecksResponse' <$>
+                   (x .@? "NextMarker") <*> (pure (fromEnum s)) <*>
+                     (x .@? "HealthChecks" .!@ mempty >>=
+                        parseXMLList "HealthCheck")
+                     <*> (x .@ "Marker")
+                     <*> (x .@ "IsTruncated")
+                     <*> (x .@ "MaxItems"))
 
--- | 'ListHealthChecksResponse' constructor.
+instance ToHeaders ListHealthChecks where
+        toHeaders = const mempty
+
+instance ToPath ListHealthChecks where
+        toPath = const "/2013-04-01/healthcheck"
+
+instance ToQuery ListHealthChecks where
+        toQuery ListHealthChecks'{..}
+          = mconcat
+              ["maxitems" =: _lhcMaxItems, "marker" =: _lhcMarker]
+
+-- | A complex type that contains the response for the request.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listHealthChecksResponse' smart constructor.
+data ListHealthChecksResponse = ListHealthChecksResponse'
+    { _lhcrsNextMarker   :: !(Maybe Text)
+    , _lhcrsStatus       :: !Int
+    , _lhcrsHealthChecks :: ![HealthCheck]
+    , _lhcrsMarker       :: !Text
+    , _lhcrsIsTruncated  :: !Bool
+    , _lhcrsMaxItems     :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListHealthChecksResponse' with the minimum fields required to make a request.
 --
--- * 'lhcrHealthChecks' @::@ ['HealthCheck']
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lhcrIsTruncated' @::@ 'Bool'
+-- * 'lhcrsNextMarker'
 --
--- * 'lhcrMarker' @::@ 'Text'
+-- * 'lhcrsStatus'
 --
--- * 'lhcrMaxItems' @::@ 'Text'
+-- * 'lhcrsHealthChecks'
 --
--- * 'lhcrNextMarker' @::@ 'Maybe' 'Text'
+-- * 'lhcrsMarker'
 --
-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.
+-- * 'lhcrsIsTruncated'
 --
--- 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
+-- * 'lhcrsMaxItems'
+listHealthChecksResponse
+    :: Int -- ^ 'lhcrsStatus'
+    -> Text -- ^ 'lhcrsMarker'
+    -> Bool -- ^ 'lhcrsIsTruncated'
+    -> Text -- ^ 'lhcrsMaxItems'
+    -> ListHealthChecksResponse
+listHealthChecksResponse pStatus_ pMarker_ pIsTruncated_ pMaxItems_ =
+    ListHealthChecksResponse'
+    { _lhcrsNextMarker = Nothing
+    , _lhcrsStatus = pStatus_
+    , _lhcrsHealthChecks = mempty
+    , _lhcrsMarker = pMarker_
+    , _lhcrsIsTruncated = pIsTruncated_
+    , _lhcrsMaxItems = pMaxItems_
+    }
 
-instance ToXMLRoot ListHealthChecks where
-    toXMLRoot = const (namespaced ns "ListHealthChecks" [])
+-- | 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.
+lhcrsNextMarker :: Lens' ListHealthChecksResponse (Maybe Text)
+lhcrsNextMarker = lens _lhcrsNextMarker (\ s a -> s{_lhcrsNextMarker = a});
 
-instance ToXML ListHealthChecks
+-- | The response status code.
+lhcrsStatus :: Lens' ListHealthChecksResponse Int
+lhcrsStatus = lens _lhcrsStatus (\ s a -> s{_lhcrsStatus = a});
 
-instance AWSRequest ListHealthChecks where
-    type Sv ListHealthChecks = Route53
-    type Rs ListHealthChecks = ListHealthChecksResponse
+-- | A complex type that contains information about the health checks
+-- associated with the current AWS account.
+lhcrsHealthChecks :: Lens' ListHealthChecksResponse [HealthCheck]
+lhcrsHealthChecks = lens _lhcrsHealthChecks (\ s a -> s{_lhcrsHealthChecks = a}) . _Coerce;
 
-    request  = get
-    response = xmlResponse
+-- | 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.
+lhcrsMarker :: Lens' ListHealthChecksResponse Text
+lhcrsMarker = lens _lhcrsMarker (\ s a -> s{_lhcrsMarker = a});
 
-instance FromXML ListHealthChecksResponse where
-    parseXML x = ListHealthChecksResponse
-        <$> x .@? "HealthChecks" .!@ mempty
-        <*> x .@  "IsTruncated"
-        <*> x .@  "Marker"
-        <*> x .@  "MaxItems"
-        <*> x .@? "NextMarker"
+-- | 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'
+lhcrsIsTruncated :: Lens' ListHealthChecksResponse Bool
+lhcrsIsTruncated = lens _lhcrsIsTruncated (\ s a -> s{_lhcrsIsTruncated = a});
 
-instance AWSPager ListHealthChecks where
-    page rq rs
-        | stop (rs ^. lhcrIsTruncated) = Nothing
-        | otherwise = Just $ rq
-            & lhcMarker .~ rs ^. lhcrNextMarker
+-- | 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.
+lhcrsMaxItems :: Lens' ListHealthChecksResponse Text
+lhcrsMaxItems = lens _lhcrsMaxItems (\ s a -> s{_lhcrsMaxItems = a});
diff --git a/gen/Network/AWS/Route53/ListHostedZones.hs b/gen/Network/AWS/Route53/ListHostedZones.hs
--- a/gen/Network/AWS/Route53/ListHostedZones.hs
+++ b/gen/Network/AWS/Route53/ListHostedZones.hs
@@ -1,200 +1,232 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | 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.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListHostedZones.html AWS API Reference> for ListHostedZones.
+--
+-- This operation returns paginated results.
 module Network.AWS.Route53.ListHostedZones
     (
-    -- * Request
-      ListHostedZones
-    -- ** Request constructor
-    , listHostedZones
-    -- ** Request lenses
+    -- * Creating a Request
+      listHostedZones
+    , ListHostedZones
+    -- * Request Lenses
     , lhzDelegationSetId
-    , lhzMarker
     , lhzMaxItems
+    , lhzMarker
 
-    -- * Response
-    , ListHostedZonesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listHostedZonesResponse
-    -- ** Response lenses
-    , lhzrHostedZones
-    , lhzrIsTruncated
-    , lhzrMarker
-    , lhzrMaxItems
-    , lhzrNextMarker
+    , ListHostedZonesResponse
+    -- * Response Lenses
+    , lhzrsNextMarker
+    , lhzrsStatus
+    , lhzrsHostedZones
+    , lhzrsMarker
+    , lhzrsIsTruncated
+    , lhzrsMaxItems
     ) 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, Read, Show)
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
--- | 'ListHostedZones' constructor.
+-- | 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 or more '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. For more information about
+-- listing hosted zones, see
+-- <http://docs.amazonwebservices.com/Route53/latest/DeveloperGuide/ListInfoOnHostedZone.html Listing the Hosted Zones for an AWS Account>
+-- in the /Amazon Route 53 Developer Guide/.
 --
--- The fields accessible through corresponding lenses are:
+-- Route 53 returns a maximum of 100 items. If you set 'MaxItems' to a
+-- value greater than 100, Route 53 returns only the first 100.
 --
--- * 'lhzDelegationSetId' @::@ 'Maybe' 'Text'
+-- /See:/ 'listHostedZones' smart constructor.
+data ListHostedZones = ListHostedZones'
+    { _lhzDelegationSetId :: !(Maybe Text)
+    , _lhzMaxItems        :: !(Maybe Text)
+    , _lhzMarker          :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListHostedZones' with the minimum fields required to make a request.
 --
--- * 'lhzMarker' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lhzMaxItems' @::@ 'Maybe' 'Text'
+-- * 'lhzDelegationSetId'
 --
-listHostedZones :: ListHostedZones
-listHostedZones = ListHostedZones
-    { _lhzMarker          = Nothing
-    , _lhzMaxItems        = Nothing
-    , _lhzDelegationSetId = Nothing
+-- * 'lhzMaxItems'
+--
+-- * 'lhzMarker'
+listHostedZones
+    :: ListHostedZones
+listHostedZones =
+    ListHostedZones'
+    { _lhzDelegationSetId = Nothing
+    , _lhzMaxItems = Nothing
+    , _lhzMarker = Nothing
     }
 
+-- | Undocumented member.
 lhzDelegationSetId :: Lens' ListHostedZones (Maybe Text)
-lhzDelegationSetId =
-    lens _lhzDelegationSetId (\s a -> s { _lhzDelegationSetId = a })
+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.
+-- | 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});
+
+-- | 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 })
+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 })
+instance AWSPager ListHostedZones where
+        page rq rs
+          | stop (rs ^. lhzrsIsTruncated) = Nothing
+          | isNothing (rs ^. lhzrsNextMarker) = Nothing
+          | otherwise =
+            Just $ rq & lhzMarker .~ rs ^. lhzrsNextMarker
 
-data ListHostedZonesResponse = ListHostedZonesResponse
-    { _lhzrHostedZones :: List "HostedZone" HostedZone
-    , _lhzrIsTruncated :: Bool
-    , _lhzrMarker      :: Maybe Text
-    , _lhzrMaxItems    :: Text
-    , _lhzrNextMarker  :: Maybe Text
-    } deriving (Eq, Read, Show)
+instance AWSRequest ListHostedZones where
+        type Sv ListHostedZones = Route53
+        type Rs ListHostedZones = ListHostedZonesResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListHostedZonesResponse' <$>
+                   (x .@? "NextMarker") <*> (pure (fromEnum s)) <*>
+                     (x .@? "HostedZones" .!@ mempty >>=
+                        parseXMLList "HostedZone")
+                     <*> (x .@ "Marker")
+                     <*> (x .@ "IsTruncated")
+                     <*> (x .@ "MaxItems"))
 
--- | 'ListHostedZonesResponse' constructor.
+instance ToHeaders ListHostedZones where
+        toHeaders = const mempty
+
+instance ToPath ListHostedZones where
+        toPath = const "/2013-04-01/hostedzone"
+
+instance ToQuery ListHostedZones where
+        toQuery ListHostedZones'{..}
+          = mconcat
+              ["delegationsetid" =: _lhzDelegationSetId,
+               "maxitems" =: _lhzMaxItems, "marker" =: _lhzMarker]
+
+-- | A complex type that contains the response for the request.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listHostedZonesResponse' smart constructor.
+data ListHostedZonesResponse = ListHostedZonesResponse'
+    { _lhzrsNextMarker  :: !(Maybe Text)
+    , _lhzrsStatus      :: !Int
+    , _lhzrsHostedZones :: ![HostedZone]
+    , _lhzrsMarker      :: !Text
+    , _lhzrsIsTruncated :: !Bool
+    , _lhzrsMaxItems    :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListHostedZonesResponse' with the minimum fields required to make a request.
 --
--- * 'lhzrHostedZones' @::@ ['HostedZone']
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lhzrIsTruncated' @::@ 'Bool'
+-- * 'lhzrsNextMarker'
 --
--- * 'lhzrMarker' @::@ 'Maybe' 'Text'
+-- * 'lhzrsStatus'
 --
--- * 'lhzrMaxItems' @::@ 'Text'
+-- * 'lhzrsHostedZones'
 --
--- * 'lhzrNextMarker' @::@ 'Maybe' 'Text'
+-- * 'lhzrsMarker'
 --
-listHostedZonesResponse :: Bool -- ^ 'lhzrIsTruncated'
-                        -> Text -- ^ 'lhzrMaxItems'
-                        -> ListHostedZonesResponse
-listHostedZonesResponse p1 p2 = ListHostedZonesResponse
-    { _lhzrIsTruncated = p1
-    , _lhzrMaxItems    = p2
-    , _lhzrHostedZones = mempty
-    , _lhzrMarker      = Nothing
-    , _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.
+-- * 'lhzrsIsTruncated'
 --
--- 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 (Maybe 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
+-- * 'lhzrsMaxItems'
+listHostedZonesResponse
+    :: Int -- ^ 'lhzrsStatus'
+    -> Text -- ^ 'lhzrsMarker'
+    -> Bool -- ^ 'lhzrsIsTruncated'
+    -> Text -- ^ 'lhzrsMaxItems'
+    -> ListHostedZonesResponse
+listHostedZonesResponse pStatus_ pMarker_ pIsTruncated_ pMaxItems_ =
+    ListHostedZonesResponse'
+    { _lhzrsNextMarker = Nothing
+    , _lhzrsStatus = pStatus_
+    , _lhzrsHostedZones = mempty
+    , _lhzrsMarker = pMarker_
+    , _lhzrsIsTruncated = pIsTruncated_
+    , _lhzrsMaxItems = pMaxItems_
+    }
 
-instance ToXMLRoot ListHostedZones where
-    toXMLRoot = const (namespaced ns "ListHostedZones" [])
+-- | 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.
+lhzrsNextMarker :: Lens' ListHostedZonesResponse (Maybe Text)
+lhzrsNextMarker = lens _lhzrsNextMarker (\ s a -> s{_lhzrsNextMarker = a});
 
-instance ToXML ListHostedZones
+-- | The response status code.
+lhzrsStatus :: Lens' ListHostedZonesResponse Int
+lhzrsStatus = lens _lhzrsStatus (\ s a -> s{_lhzrsStatus = a});
 
-instance AWSRequest ListHostedZones where
-    type Sv ListHostedZones = Route53
-    type Rs ListHostedZones = ListHostedZonesResponse
+-- | A complex type that contains information about the hosted zones
+-- associated with the current AWS account.
+lhzrsHostedZones :: Lens' ListHostedZonesResponse [HostedZone]
+lhzrsHostedZones = lens _lhzrsHostedZones (\ s a -> s{_lhzrsHostedZones = a}) . _Coerce;
 
-    request  = get
-    response = xmlResponse
+-- | 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.
+lhzrsMarker :: Lens' ListHostedZonesResponse Text
+lhzrsMarker = lens _lhzrsMarker (\ s a -> s{_lhzrsMarker = a});
 
-instance FromXML ListHostedZonesResponse where
-    parseXML x = ListHostedZonesResponse
-        <$> x .@? "HostedZones" .!@ mempty
-        <*> x .@  "IsTruncated"
-        <*> x .@? "Marker"
-        <*> x .@  "MaxItems"
-        <*> x .@? "NextMarker"
+-- | 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'
+lhzrsIsTruncated :: Lens' ListHostedZonesResponse Bool
+lhzrsIsTruncated = lens _lhzrsIsTruncated (\ s a -> s{_lhzrsIsTruncated = a});
 
-instance AWSPager ListHostedZones where
-    page rq rs
-        | stop (rs ^. lhzrIsTruncated) = Nothing
-        | otherwise = Just $ rq
-            & lhzMarker .~ rs ^. lhzrNextMarker
+-- | 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.
+lhzrsMaxItems :: Lens' ListHostedZonesResponse Text
+lhzrsMaxItems = lens _lhzrsMaxItems (\ s a -> s{_lhzrsMaxItems = a});
diff --git a/gen/Network/AWS/Route53/ListHostedZonesByName.hs b/gen/Network/AWS/Route53/ListHostedZonesByName.hs
--- a/gen/Network/AWS/Route53/ListHostedZonesByName.hs
+++ b/gen/Network/AWS/Route53/ListHostedZonesByName.hs
@@ -1,232 +1,260 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.Route53.ListHostedZonesByName
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | To retrieve a list of your hosted zones in lexicographic order, send a 'GET'
--- request to the '2013-04-01/hostedzonesbyname' resource. The response to this
--- request includes a 'HostedZones' element with zero or more 'HostedZone' child
--- elements lexicographically ordered by DNS name. 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 'DNSName' and 'HostedZoneId' parameters to control the hosted zone that the list begins
--- with.
+-- To retrieve a list of your hosted zones in lexicographic order, send a
+-- 'GET' request to the '2013-04-01\/hostedzonesbyname' resource. The
+-- response to this request includes a 'HostedZones' element with zero or
+-- more 'HostedZone' child elements lexicographically ordered by DNS name.
+-- 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 'DNSName' and 'HostedZoneId'
+-- parameters 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_ListHostedZonesByName.html>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListHostedZonesByName.html AWS API Reference> for ListHostedZonesByName.
 module Network.AWS.Route53.ListHostedZonesByName
     (
-    -- * Request
-      ListHostedZonesByName
-    -- ** Request constructor
-    , listHostedZonesByName
-    -- ** Request lenses
-    , lhzbnDNSName
+    -- * Creating a Request
+      listHostedZonesByName
+    , ListHostedZonesByName
+    -- * Request Lenses
     , lhzbnHostedZoneId
     , lhzbnMaxItems
+    , lhzbnDNSName
 
-    -- * Response
-    , ListHostedZonesByNameResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listHostedZonesByNameResponse
-    -- ** Response lenses
-    , lhzbnrDNSName
-    , lhzbnrHostedZoneId
-    , lhzbnrHostedZones
-    , lhzbnrIsTruncated
-    , lhzbnrMaxItems
-    , lhzbnrNextDNSName
-    , lhzbnrNextHostedZoneId
+    , ListHostedZonesByNameResponse
+    -- * Response Lenses
+    , lhzbnrsHostedZoneId
+    , lhzbnrsNextHostedZoneId
+    , lhzbnrsDNSName
+    , lhzbnrsNextDNSName
+    , lhzbnrsStatus
+    , lhzbnrsHostedZones
+    , lhzbnrsIsTruncated
+    , lhzbnrsMaxItems
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.Route53.Types
-import qualified GHC.Exts
-
-data ListHostedZonesByName = ListHostedZonesByName
-    { _lhzbnDNSName      :: Maybe Text
-    , _lhzbnHostedZoneId :: Maybe Text
-    , _lhzbnMaxItems     :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
--- | 'ListHostedZonesByName' constructor.
+-- | To retrieve a list of your hosted zones in lexicographic order, send a
+-- 'GET' request to the '2013-04-01\/hostedzonesbyname' resource. The
+-- response to this request includes a 'HostedZones' element with zero or
+-- more 'HostedZone' child elements lexicographically ordered by DNS name.
+-- 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 'DNSName' and 'HostedZoneId'
+-- parameters to control the hosted zone that the list begins with.
 --
--- The fields accessible through corresponding lenses are:
+-- For more information about listing hosted zones, see
+-- <http://docs.amazonwebservices.com/Route53/latest/DeveloperGuide/ListInfoOnHostedZone.html Listing the Hosted Zones for an AWS Account>
+-- in the /Amazon Route 53 Developer Guide/.
 --
--- * 'lhzbnDNSName' @::@ 'Maybe' 'Text'
+-- /See:/ 'listHostedZonesByName' smart constructor.
+data ListHostedZonesByName = ListHostedZonesByName'
+    { _lhzbnHostedZoneId :: !(Maybe Text)
+    , _lhzbnMaxItems     :: !(Maybe Text)
+    , _lhzbnDNSName      :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListHostedZonesByName' with the minimum fields required to make a request.
 --
--- * 'lhzbnHostedZoneId' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lhzbnMaxItems' @::@ 'Maybe' 'Text'
+-- * 'lhzbnHostedZoneId'
 --
-listHostedZonesByName :: ListHostedZonesByName
-listHostedZonesByName = ListHostedZonesByName
-    { _lhzbnDNSName      = Nothing
-    , _lhzbnHostedZoneId = Nothing
-    , _lhzbnMaxItems     = Nothing
+-- * 'lhzbnMaxItems'
+--
+-- * 'lhzbnDNSName'
+listHostedZonesByName
+    :: ListHostedZonesByName
+listHostedZonesByName =
+    ListHostedZonesByName'
+    { _lhzbnHostedZoneId = Nothing
+    , _lhzbnMaxItems = Nothing
+    , _lhzbnDNSName = Nothing
     }
 
--- | The first name in the lexicographic ordering of domain names that you want
--- the 'ListHostedZonesByNameRequest' request to list.
+-- | If the request returned more than one page of results, submit another
+-- request and specify the value of 'NextDNSName' and 'NextHostedZoneId'
+-- from the last response in the 'DNSName' and 'HostedZoneId' parameters to
+-- get the next page of results.
+lhzbnHostedZoneId :: Lens' ListHostedZonesByName (Maybe Text)
+lhzbnHostedZoneId = lens _lhzbnHostedZoneId (\ s a -> s{_lhzbnHostedZoneId = a});
+
+-- | Specify the maximum number of hosted zones to return per page of
+-- results.
+lhzbnMaxItems :: Lens' ListHostedZonesByName (Maybe Text)
+lhzbnMaxItems = lens _lhzbnMaxItems (\ s a -> s{_lhzbnMaxItems = a});
+
+-- | The first name in the lexicographic ordering of domain names that you
+-- want the 'ListHostedZonesByNameRequest' request to list.
 --
 -- If the request returned more than one page of results, submit another
--- request and specify the value of 'NextDNSName' and 'NextHostedZoneId' from the
--- last response in the 'DNSName' and 'HostedZoneId' parameters to get the next page
--- of results.
+-- request and specify the value of 'NextDNSName' and 'NextHostedZoneId'
+-- from the last response in the 'DNSName' and 'HostedZoneId' parameters to
+-- get the next page of results.
 lhzbnDNSName :: Lens' ListHostedZonesByName (Maybe Text)
-lhzbnDNSName = lens _lhzbnDNSName (\s a -> s { _lhzbnDNSName = a })
+lhzbnDNSName = lens _lhzbnDNSName (\ s a -> s{_lhzbnDNSName = a});
 
--- | If the request returned more than one page of results, submit another request
--- and specify the value of 'NextDNSName' and 'NextHostedZoneId' from the last
--- response in the 'DNSName' and 'HostedZoneId' parameters to get the next page of
--- results.
-lhzbnHostedZoneId :: Lens' ListHostedZonesByName (Maybe Text)
-lhzbnHostedZoneId =
-    lens _lhzbnHostedZoneId (\s a -> s { _lhzbnHostedZoneId = a })
+instance AWSRequest ListHostedZonesByName where
+        type Sv ListHostedZonesByName = Route53
+        type Rs ListHostedZonesByName =
+             ListHostedZonesByNameResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListHostedZonesByNameResponse' <$>
+                   (x .@? "HostedZoneId") <*> (x .@? "NextHostedZoneId")
+                     <*> (x .@? "DNSName")
+                     <*> (x .@? "NextDNSName")
+                     <*> (pure (fromEnum s))
+                     <*>
+                     (x .@? "HostedZones" .!@ mempty >>=
+                        parseXMLList "HostedZone")
+                     <*> (x .@ "IsTruncated")
+                     <*> (x .@ "MaxItems"))
 
--- | Specify the maximum number of hosted zones to return per page of results.
-lhzbnMaxItems :: Lens' ListHostedZonesByName (Maybe Text)
-lhzbnMaxItems = lens _lhzbnMaxItems (\s a -> s { _lhzbnMaxItems = a })
+instance ToHeaders ListHostedZonesByName where
+        toHeaders = const mempty
 
-data ListHostedZonesByNameResponse = ListHostedZonesByNameResponse
-    { _lhzbnrDNSName          :: Maybe Text
-    , _lhzbnrHostedZoneId     :: Maybe Text
-    , _lhzbnrHostedZones      :: List "HostedZone" HostedZone
-    , _lhzbnrIsTruncated      :: Bool
-    , _lhzbnrMaxItems         :: Text
-    , _lhzbnrNextDNSName      :: Maybe Text
-    , _lhzbnrNextHostedZoneId :: Maybe Text
-    } deriving (Eq, Read, Show)
+instance ToPath ListHostedZonesByName where
+        toPath = const "/2013-04-01/hostedzonesbyname"
 
--- | 'ListHostedZonesByNameResponse' constructor.
+instance ToQuery ListHostedZonesByName where
+        toQuery ListHostedZonesByName'{..}
+          = mconcat
+              ["hostedzoneid" =: _lhzbnHostedZoneId,
+               "maxitems" =: _lhzbnMaxItems,
+               "dnsname" =: _lhzbnDNSName]
+
+-- | A complex type that contains the response for the request.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listHostedZonesByNameResponse' smart constructor.
+data ListHostedZonesByNameResponse = ListHostedZonesByNameResponse'
+    { _lhzbnrsHostedZoneId     :: !(Maybe Text)
+    , _lhzbnrsNextHostedZoneId :: !(Maybe Text)
+    , _lhzbnrsDNSName          :: !(Maybe Text)
+    , _lhzbnrsNextDNSName      :: !(Maybe Text)
+    , _lhzbnrsStatus           :: !Int
+    , _lhzbnrsHostedZones      :: ![HostedZone]
+    , _lhzbnrsIsTruncated      :: !Bool
+    , _lhzbnrsMaxItems         :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListHostedZonesByNameResponse' with the minimum fields required to make a request.
 --
--- * 'lhzbnrDNSName' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lhzbnrHostedZoneId' @::@ 'Maybe' 'Text'
+-- * 'lhzbnrsHostedZoneId'
 --
--- * 'lhzbnrHostedZones' @::@ ['HostedZone']
+-- * 'lhzbnrsNextHostedZoneId'
 --
--- * 'lhzbnrIsTruncated' @::@ 'Bool'
+-- * 'lhzbnrsDNSName'
 --
--- * 'lhzbnrMaxItems' @::@ 'Text'
+-- * 'lhzbnrsNextDNSName'
 --
--- * 'lhzbnrNextDNSName' @::@ 'Maybe' 'Text'
+-- * 'lhzbnrsStatus'
 --
--- * 'lhzbnrNextHostedZoneId' @::@ 'Maybe' 'Text'
+-- * 'lhzbnrsHostedZones'
 --
-listHostedZonesByNameResponse :: Bool -- ^ 'lhzbnrIsTruncated'
-                              -> Text -- ^ 'lhzbnrMaxItems'
-                              -> ListHostedZonesByNameResponse
-listHostedZonesByNameResponse p1 p2 = ListHostedZonesByNameResponse
-    { _lhzbnrIsTruncated      = p1
-    , _lhzbnrMaxItems         = p2
-    , _lhzbnrHostedZones      = mempty
-    , _lhzbnrDNSName          = Nothing
-    , _lhzbnrHostedZoneId     = Nothing
-    , _lhzbnrNextDNSName      = Nothing
-    , _lhzbnrNextHostedZoneId = Nothing
+-- * 'lhzbnrsIsTruncated'
+--
+-- * 'lhzbnrsMaxItems'
+listHostedZonesByNameResponse
+    :: Int -- ^ 'lhzbnrsStatus'
+    -> Bool -- ^ 'lhzbnrsIsTruncated'
+    -> Text -- ^ 'lhzbnrsMaxItems'
+    -> ListHostedZonesByNameResponse
+listHostedZonesByNameResponse pStatus_ pIsTruncated_ pMaxItems_ =
+    ListHostedZonesByNameResponse'
+    { _lhzbnrsHostedZoneId = Nothing
+    , _lhzbnrsNextHostedZoneId = Nothing
+    , _lhzbnrsDNSName = Nothing
+    , _lhzbnrsNextDNSName = Nothing
+    , _lhzbnrsStatus = pStatus_
+    , _lhzbnrsHostedZones = mempty
+    , _lhzbnrsIsTruncated = pIsTruncated_
+    , _lhzbnrsMaxItems = pMaxItems_
     }
 
--- | The 'DNSName' value sent in the request.
-lhzbnrDNSName :: Lens' ListHostedZonesByNameResponse (Maybe Text)
-lhzbnrDNSName = lens _lhzbnrDNSName (\s a -> s { _lhzbnrDNSName = a })
-
 -- | The 'HostedZoneId' value sent in the request.
-lhzbnrHostedZoneId :: Lens' ListHostedZonesByNameResponse (Maybe Text)
-lhzbnrHostedZoneId =
-    lens _lhzbnrHostedZoneId (\s a -> s { _lhzbnrHostedZoneId = a })
-
--- | A complex type that contains information about the hosted zones associated
--- with the current AWS account.
-lhzbnrHostedZones :: Lens' ListHostedZonesByNameResponse [HostedZone]
-lhzbnrHostedZones =
-    lens _lhzbnrHostedZones (\s a -> s { _lhzbnrHostedZones = 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 'NextDNSName' and 'NextHostedZoneId' elements.
---
--- Valid Values: 'true' | 'false'
-lhzbnrIsTruncated :: Lens' ListHostedZonesByNameResponse Bool
-lhzbnrIsTruncated =
-    lens _lhzbnrIsTruncated (\s a -> s { _lhzbnrIsTruncated = 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 'ListHostedZonesByNameResponse$IsTruncated' in the response is 'true'
--- . Call 'ListHostedZonesByName' again and specify the value of 'ListHostedZonesByNameResponse$NextDNSName' and 'ListHostedZonesByNameResponse$NextHostedZoneId' elements respectively to
--- get the next page of results.
-lhzbnrMaxItems :: Lens' ListHostedZonesByNameResponse Text
-lhzbnrMaxItems = lens _lhzbnrMaxItems (\s a -> s { _lhzbnrMaxItems = a })
-
--- | If 'ListHostedZonesByNameResponse$IsTruncated' is 'true', there are more hosted
--- zones associated with the current AWS account. To get the next page of
--- results, make another request to 'ListHostedZonesByName'. Specify the value of 'ListHostedZonesByNameResponse$NextDNSName' in the 'ListHostedZonesByNameRequest$DNSName' element and 'ListHostedZonesByNameResponse$NextHostedZoneId' in the 'ListHostedZonesByNameRequest$HostedZoneId' element.
-lhzbnrNextDNSName :: Lens' ListHostedZonesByNameResponse (Maybe Text)
-lhzbnrNextDNSName =
-    lens _lhzbnrNextDNSName (\s a -> s { _lhzbnrNextDNSName = a })
-
--- | If 'ListHostedZonesByNameResponse$IsTruncated' is 'true', there are more hosted
--- zones associated with the current AWS account. To get the next page of
--- results, make another request to 'ListHostedZonesByName'. Specify the value of 'ListHostedZonesByNameResponse$NextDNSName' in the 'ListHostedZonesByNameRequest$DNSName' element and 'ListHostedZonesByNameResponse$NextHostedZoneId' in the 'ListHostedZonesByNameRequest$HostedZoneId' element.
-lhzbnrNextHostedZoneId :: Lens' ListHostedZonesByNameResponse (Maybe Text)
-lhzbnrNextHostedZoneId =
-    lens _lhzbnrNextHostedZoneId (\s a -> s { _lhzbnrNextHostedZoneId = a })
-
-instance ToPath ListHostedZonesByName where
-    toPath = const "/2013-04-01/hostedzonesbyname"
+lhzbnrsHostedZoneId :: Lens' ListHostedZonesByNameResponse (Maybe Text)
+lhzbnrsHostedZoneId = lens _lhzbnrsHostedZoneId (\ s a -> s{_lhzbnrsHostedZoneId = a});
 
-instance ToQuery ListHostedZonesByName where
-    toQuery ListHostedZonesByName{..} = mconcat
-        [ "dnsname"      =? _lhzbnDNSName
-        , "hostedzoneid" =? _lhzbnHostedZoneId
-        , "maxitems"     =? _lhzbnMaxItems
-        ]
+-- | If ListHostedZonesByNameResponse$IsTruncated is 'true', there are more
+-- hosted zones associated with the current AWS account. To get the next
+-- page of results, make another request to 'ListHostedZonesByName'.
+-- Specify the value of ListHostedZonesByNameResponse$NextDNSName in the
+-- ListHostedZonesByNameRequest$DNSName element and
+-- ListHostedZonesByNameResponse$NextHostedZoneId in the
+-- ListHostedZonesByNameRequest$HostedZoneId element.
+lhzbnrsNextHostedZoneId :: Lens' ListHostedZonesByNameResponse (Maybe Text)
+lhzbnrsNextHostedZoneId = lens _lhzbnrsNextHostedZoneId (\ s a -> s{_lhzbnrsNextHostedZoneId = a});
 
-instance ToHeaders ListHostedZonesByName
+-- | The 'DNSName' value sent in the request.
+lhzbnrsDNSName :: Lens' ListHostedZonesByNameResponse (Maybe Text)
+lhzbnrsDNSName = lens _lhzbnrsDNSName (\ s a -> s{_lhzbnrsDNSName = a});
 
-instance ToXMLRoot ListHostedZonesByName where
-    toXMLRoot = const (namespaced ns "ListHostedZonesByName" [])
+-- | If ListHostedZonesByNameResponse$IsTruncated is 'true', there are more
+-- hosted zones associated with the current AWS account. To get the next
+-- page of results, make another request to 'ListHostedZonesByName'.
+-- Specify the value of ListHostedZonesByNameResponse$NextDNSName in the
+-- ListHostedZonesByNameRequest$DNSName element and
+-- ListHostedZonesByNameResponse$NextHostedZoneId in the
+-- ListHostedZonesByNameRequest$HostedZoneId element.
+lhzbnrsNextDNSName :: Lens' ListHostedZonesByNameResponse (Maybe Text)
+lhzbnrsNextDNSName = lens _lhzbnrsNextDNSName (\ s a -> s{_lhzbnrsNextDNSName = a});
 
-instance ToXML ListHostedZonesByName
+-- | The response status code.
+lhzbnrsStatus :: Lens' ListHostedZonesByNameResponse Int
+lhzbnrsStatus = lens _lhzbnrsStatus (\ s a -> s{_lhzbnrsStatus = a});
 
-instance AWSRequest ListHostedZonesByName where
-    type Sv ListHostedZonesByName = Route53
-    type Rs ListHostedZonesByName = ListHostedZonesByNameResponse
+-- | A complex type that contains information about the hosted zones
+-- associated with the current AWS account.
+lhzbnrsHostedZones :: Lens' ListHostedZonesByNameResponse [HostedZone]
+lhzbnrsHostedZones = lens _lhzbnrsHostedZones (\ s a -> s{_lhzbnrsHostedZones = a}) . _Coerce;
 
-    request  = get
-    response = xmlResponse
+-- | 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 'NextDNSName' and 'NextHostedZoneId'
+-- elements.
+--
+-- Valid Values: 'true' | 'false'
+lhzbnrsIsTruncated :: Lens' ListHostedZonesByNameResponse Bool
+lhzbnrsIsTruncated = lens _lhzbnrsIsTruncated (\ s a -> s{_lhzbnrsIsTruncated = a});
 
-instance FromXML ListHostedZonesByNameResponse where
-    parseXML x = ListHostedZonesByNameResponse
-        <$> x .@? "DNSName"
-        <*> x .@? "HostedZoneId"
-        <*> x .@? "HostedZones" .!@ mempty
-        <*> x .@  "IsTruncated"
-        <*> x .@  "MaxItems"
-        <*> x .@? "NextDNSName"
-        <*> x .@? "NextHostedZoneId"
+-- | 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 ListHostedZonesByNameResponse$IsTruncated in
+-- the response is 'true'. Call 'ListHostedZonesByName' again and specify
+-- the value of ListHostedZonesByNameResponse$NextDNSName and
+-- ListHostedZonesByNameResponse$NextHostedZoneId elements respectively to
+-- get the next page of results.
+lhzbnrsMaxItems :: Lens' ListHostedZonesByNameResponse Text
+lhzbnrsMaxItems = lens _lhzbnrsMaxItems (\ s a -> s{_lhzbnrsMaxItems = a});
diff --git a/gen/Network/AWS/Route53/ListResourceRecordSets.hs b/gen/Network/AWS/Route53/ListResourceRecordSets.hs
--- a/gen/Network/AWS/Route53/ListResourceRecordSets.hs
+++ b/gen/Network/AWS/Route53/ListResourceRecordSets.hs
@@ -1,157 +1,146 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | 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:
+-- 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
+-- -   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.
+-- 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)
+-- 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.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListResourceRecordSets.html AWS API Reference> for ListResourceRecordSets.
+--
+-- This operation returns paginated results.
 module Network.AWS.Route53.ListResourceRecordSets
     (
-    -- * Request
-      ListResourceRecordSets
-    -- ** Request constructor
-    , listResourceRecordSets
-    -- ** Request lenses
-    , lrrsHostedZoneId
-    , lrrsMaxItems
-    , lrrsStartRecordIdentifier
+    -- * Creating a Request
+      listResourceRecordSets
+    , ListResourceRecordSets
+    -- * Request Lenses
     , lrrsStartRecordName
     , lrrsStartRecordType
+    , lrrsStartRecordIdentifier
+    , lrrsMaxItems
+    , lrrsHostedZoneId
 
-    -- * Response
-    , ListResourceRecordSetsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listResourceRecordSetsResponse
-    -- ** Response lenses
-    , lrrsrIsTruncated
-    , lrrsrMaxItems
-    , lrrsrNextRecordIdentifier
-    , lrrsrNextRecordName
-    , lrrsrNextRecordType
-    , lrrsrResourceRecordSets
+    , ListResourceRecordSetsResponse
+    -- * Response Lenses
+    , lrrsrsNextRecordType
+    , lrrsrsNextRecordName
+    , lrrsrsNextRecordIdentifier
+    , lrrsrsStatus
+    , lrrsrsResourceRecordSets
+    , lrrsrsIsTruncated
+    , lrrsrsMaxItems
     ) 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 RecordType
-    } deriving (Eq, Read, Show)
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
--- | 'ListResourceRecordSets' constructor.
+-- | The input for a ListResourceRecordSets request.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listResourceRecordSets' smart constructor.
+data ListResourceRecordSets = ListResourceRecordSets'
+    { _lrrsStartRecordName       :: !(Maybe Text)
+    , _lrrsStartRecordType       :: !(Maybe RecordType)
+    , _lrrsStartRecordIdentifier :: !(Maybe Text)
+    , _lrrsMaxItems              :: !(Maybe Text)
+    , _lrrsHostedZoneId          :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListResourceRecordSets' with the minimum fields required to make a request.
 --
--- * 'lrrsHostedZoneId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lrrsMaxItems' @::@ 'Maybe' 'Text'
+-- * 'lrrsStartRecordName'
 --
--- * 'lrrsStartRecordIdentifier' @::@ 'Maybe' 'Text'
+-- * 'lrrsStartRecordType'
 --
--- * 'lrrsStartRecordName' @::@ 'Maybe' 'Text'
+-- * 'lrrsStartRecordIdentifier'
 --
--- * 'lrrsStartRecordType' @::@ 'Maybe' 'RecordType'
+-- * 'lrrsMaxItems'
 --
-listResourceRecordSets :: Text -- ^ 'lrrsHostedZoneId'
-                       -> ListResourceRecordSets
-listResourceRecordSets p1 = ListResourceRecordSets
-    { _lrrsHostedZoneId          = p1
-    , _lrrsStartRecordName       = Nothing
-    , _lrrsStartRecordType       = Nothing
+-- * 'lrrsHostedZoneId'
+listResourceRecordSets
+    :: Text -- ^ 'lrrsHostedZoneId'
+    -> ListResourceRecordSets
+listResourceRecordSets pHostedZoneId_ =
+    ListResourceRecordSets'
+    { _lrrsStartRecordName = Nothing
+    , _lrrsStartRecordType = Nothing
     , _lrrsStartRecordIdentifier = Nothing
-    , _lrrsMaxItems              = Nothing
+    , _lrrsMaxItems = Nothing
+    , _lrrsHostedZoneId = pHostedZoneId_
     }
 
--- | 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.
+-- | 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 })
+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'
+-- Valid values: 'A' | 'AAAA' | 'CNAME' | 'MX' | 'NS' | 'PTR' | 'SOA' |
+-- 'SPF' | 'SRV' | 'TXT'
 --
 -- Values for Weighted Resource Record Sets: 'A' | 'AAAA' | 'CNAME' | 'TXT'
 --
@@ -159,138 +148,162 @@
 --
 -- Values for Alias Resource Record Sets: 'A' | 'AAAA'
 --
--- Constraint: Specifying 'type' without specifying 'name' returns an 'InvalidInput'
--- error.
+-- Constraint: Specifying 'type' without specifying 'name' returns an
+-- InvalidInput error.
 lrrsStartRecordType :: Lens' ListResourceRecordSets (Maybe RecordType)
-lrrsStartRecordType =
-    lens _lrrsStartRecordType (\s a -> s { _lrrsStartRecordType = a })
+lrrsStartRecordType = lens _lrrsStartRecordType (\ s a -> s{_lrrsStartRecordType = a});
 
-data ListResourceRecordSetsResponse = ListResourceRecordSetsResponse
-    { _lrrsrIsTruncated          :: Bool
-    , _lrrsrMaxItems             :: Text
-    , _lrrsrNextRecordIdentifier :: Maybe Text
-    , _lrrsrNextRecordName       :: Maybe Text
-    , _lrrsrNextRecordType       :: Maybe RecordType
-    , _lrrsrResourceRecordSets   :: List "ResourceRecordSet" ResourceRecordSet
-    } deriving (Eq, Read, Show)
+-- | /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});
 
--- | 'ListResourceRecordSetsResponse' constructor.
+-- | The maximum number of records you want in the response body.
+lrrsMaxItems :: Lens' ListResourceRecordSets (Maybe Text)
+lrrsMaxItems = lens _lrrsMaxItems (\ s a -> s{_lrrsMaxItems = a});
+
+-- | 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});
+
+instance AWSPager ListResourceRecordSets where
+        page rq rs
+          | stop (rs ^. lrrsrsIsTruncated) = Nothing
+          | isNothing (rs ^. lrrsrsNextRecordName) &&
+              isNothing (rs ^. lrrsrsNextRecordType)
+              && isNothing (rs ^. lrrsrsNextRecordIdentifier)
+            = Nothing
+          | otherwise =
+            Just $ rq &
+              lrrsStartRecordName .~ rs ^. lrrsrsNextRecordName
+              & lrrsStartRecordType .~ rs ^. lrrsrsNextRecordType
+              &
+              lrrsStartRecordIdentifier .~
+                rs ^. lrrsrsNextRecordIdentifier
+
+instance AWSRequest ListResourceRecordSets where
+        type Sv ListResourceRecordSets = Route53
+        type Rs ListResourceRecordSets =
+             ListResourceRecordSetsResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListResourceRecordSetsResponse' <$>
+                   (x .@? "NextRecordType") <*> (x .@? "NextRecordName")
+                     <*> (x .@? "NextRecordIdentifier")
+                     <*> (pure (fromEnum s))
+                     <*>
+                     (x .@? "ResourceRecordSets" .!@ mempty >>=
+                        parseXMLList "ResourceRecordSet")
+                     <*> (x .@ "IsTruncated")
+                     <*> (x .@ "MaxItems"))
+
+instance ToHeaders ListResourceRecordSets where
+        toHeaders = const mempty
+
+instance ToPath ListResourceRecordSets where
+        toPath ListResourceRecordSets'{..}
+          = mconcat
+              ["/2013-04-01/hostedzone/", toBS _lrrsHostedZoneId,
+               "/rrset"]
+
+instance ToQuery ListResourceRecordSets where
+        toQuery ListResourceRecordSets'{..}
+          = mconcat
+              ["name" =: _lrrsStartRecordName,
+               "type" =: _lrrsStartRecordType,
+               "identifier" =: _lrrsStartRecordIdentifier,
+               "maxitems" =: _lrrsMaxItems]
+
+-- | A complex type that contains information about the resource record sets
+-- that are returned by the request and information about the response.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listResourceRecordSetsResponse' smart constructor.
+data ListResourceRecordSetsResponse = ListResourceRecordSetsResponse'
+    { _lrrsrsNextRecordType       :: !(Maybe RecordType)
+    , _lrrsrsNextRecordName       :: !(Maybe Text)
+    , _lrrsrsNextRecordIdentifier :: !(Maybe Text)
+    , _lrrsrsStatus               :: !Int
+    , _lrrsrsResourceRecordSets   :: ![ResourceRecordSet]
+    , _lrrsrsIsTruncated          :: !Bool
+    , _lrrsrsMaxItems             :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListResourceRecordSetsResponse' with the minimum fields required to make a request.
 --
--- * 'lrrsrIsTruncated' @::@ 'Bool'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lrrsrMaxItems' @::@ 'Text'
+-- * 'lrrsrsNextRecordType'
 --
--- * 'lrrsrNextRecordIdentifier' @::@ 'Maybe' 'Text'
+-- * 'lrrsrsNextRecordName'
 --
--- * 'lrrsrNextRecordName' @::@ 'Maybe' 'Text'
+-- * 'lrrsrsNextRecordIdentifier'
 --
--- * 'lrrsrNextRecordType' @::@ 'Maybe' 'RecordType'
+-- * 'lrrsrsStatus'
 --
--- * 'lrrsrResourceRecordSets' @::@ ['ResourceRecordSet']
+-- * 'lrrsrsResourceRecordSets'
 --
-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.
+-- * 'lrrsrsIsTruncated'
 --
--- 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 RecordType)
-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
-        ]
+-- * 'lrrsrsMaxItems'
+listResourceRecordSetsResponse
+    :: Int -- ^ 'lrrsrsStatus'
+    -> Bool -- ^ 'lrrsrsIsTruncated'
+    -> Text -- ^ 'lrrsrsMaxItems'
+    -> ListResourceRecordSetsResponse
+listResourceRecordSetsResponse pStatus_ pIsTruncated_ pMaxItems_ =
+    ListResourceRecordSetsResponse'
+    { _lrrsrsNextRecordType = Nothing
+    , _lrrsrsNextRecordName = Nothing
+    , _lrrsrsNextRecordIdentifier = Nothing
+    , _lrrsrsStatus = pStatus_
+    , _lrrsrsResourceRecordSets = mempty
+    , _lrrsrsIsTruncated = pIsTruncated_
+    , _lrrsrsMaxItems = pMaxItems_
+    }
 
-instance ToHeaders ListResourceRecordSets
+-- | If the results were truncated, the type of the next record in the list.
+-- This element is present only if
+-- ListResourceRecordSetsResponse$IsTruncated is true.
+lrrsrsNextRecordType :: Lens' ListResourceRecordSetsResponse (Maybe RecordType)
+lrrsrsNextRecordType = lens _lrrsrsNextRecordType (\ s a -> s{_lrrsrsNextRecordType = a});
 
-instance ToXMLRoot ListResourceRecordSets where
-    toXMLRoot = const (namespaced ns "ListResourceRecordSets" [])
+-- | If the results were truncated, the name of the next record in the list.
+-- This element is present only if
+-- ListResourceRecordSetsResponse$IsTruncated is true.
+lrrsrsNextRecordName :: Lens' ListResourceRecordSetsResponse (Maybe Text)
+lrrsrsNextRecordName = lens _lrrsrsNextRecordName (\ s a -> s{_lrrsrsNextRecordName = a});
 
-instance ToXML ListResourceRecordSets
+-- | /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.
+lrrsrsNextRecordIdentifier :: Lens' ListResourceRecordSetsResponse (Maybe Text)
+lrrsrsNextRecordIdentifier = lens _lrrsrsNextRecordIdentifier (\ s a -> s{_lrrsrsNextRecordIdentifier = a});
 
-instance AWSRequest ListResourceRecordSets where
-    type Sv ListResourceRecordSets = Route53
-    type Rs ListResourceRecordSets = ListResourceRecordSetsResponse
+-- | The response status code.
+lrrsrsStatus :: Lens' ListResourceRecordSetsResponse Int
+lrrsrsStatus = lens _lrrsrsStatus (\ s a -> s{_lrrsrsStatus = a});
 
-    request  = get
-    response = xmlResponse
+-- | A complex type that contains information about the resource record sets
+-- that are returned by the request.
+lrrsrsResourceRecordSets :: Lens' ListResourceRecordSetsResponse [ResourceRecordSet]
+lrrsrsResourceRecordSets = lens _lrrsrsResourceRecordSets (\ s a -> s{_lrrsrsResourceRecordSets = a}) . _Coerce;
 
-instance FromXML ListResourceRecordSetsResponse where
-    parseXML x = ListResourceRecordSetsResponse
-        <$> x .@  "IsTruncated"
-        <*> x .@  "MaxItems"
-        <*> x .@? "NextRecordIdentifier"
-        <*> x .@? "NextRecordName"
-        <*> x .@? "NextRecordType"
-        <*> x .@? "ResourceRecordSets" .!@ mempty
+-- | 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'
+lrrsrsIsTruncated :: Lens' ListResourceRecordSetsResponse Bool
+lrrsrsIsTruncated = lens _lrrsrsIsTruncated (\ s a -> s{_lrrsrsIsTruncated = a});
 
-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
+-- | The maximum number of records you requested. The maximum value of
+-- 'MaxItems' is 100.
+lrrsrsMaxItems :: Lens' ListResourceRecordSetsResponse Text
+lrrsrsMaxItems = lens _lrrsrsMaxItems (\ s a -> s{_lrrsrsMaxItems = a});
diff --git a/gen/Network/AWS/Route53/ListReusableDelegationSets.hs b/gen/Network/AWS/Route53/ListReusableDelegationSets.hs
--- a/gen/Network/AWS/Route53/ListReusableDelegationSets.hs
+++ b/gen/Network/AWS/Route53/ListReusableDelegationSets.hs
@@ -1,190 +1,216 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | 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.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListReusableDelegationSets.html AWS API Reference> for ListReusableDelegationSets.
 module Network.AWS.Route53.ListReusableDelegationSets
     (
-    -- * Request
-      ListReusableDelegationSets
-    -- ** Request constructor
-    , listReusableDelegationSets
-    -- ** Request lenses
-    , lrdsMarker
+    -- * Creating a Request
+      listReusableDelegationSets
+    , ListReusableDelegationSets
+    -- * Request Lenses
     , lrdsMaxItems
+    , lrdsMarker
 
-    -- * Response
-    , ListReusableDelegationSetsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listReusableDelegationSetsResponse
-    -- ** Response lenses
-    , lrdsrDelegationSets
-    , lrdsrIsTruncated
-    , lrdsrMarker
-    , lrdsrMaxItems
-    , lrdsrNextMarker
+    , ListReusableDelegationSetsResponse
+    -- * Response Lenses
+    , lrdsrsNextMarker
+    , lrdsrsStatus
+    , lrdsrsDelegationSets
+    , lrdsrsMarker
+    , lrdsrsIsTruncated
+    , lrdsrsMaxItems
     ) 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, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
--- | 'ListReusableDelegationSets' constructor.
+-- | 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 or more
+-- 'DelegationSet' child elements. By default, the list of reusable
+-- 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.
 --
--- The fields accessible through corresponding lenses are:
+-- Route 53 returns a maximum of 100 items. If you set 'MaxItems' to a
+-- value greater than 100, Route 53 returns only the first 100.
 --
--- * 'lrdsMarker' @::@ 'Maybe' 'Text'
+-- /See:/ 'listReusableDelegationSets' smart constructor.
+data ListReusableDelegationSets = ListReusableDelegationSets'
+    { _lrdsMaxItems :: !(Maybe Text)
+    , _lrdsMarker   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListReusableDelegationSets' with the minimum fields required to make a request.
 --
--- * 'lrdsMaxItems' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-listReusableDelegationSets :: ListReusableDelegationSets
-listReusableDelegationSets = ListReusableDelegationSets
-    { _lrdsMarker   = Nothing
-    , _lrdsMaxItems = Nothing
+-- * 'lrdsMaxItems'
+--
+-- * 'lrdsMarker'
+listReusableDelegationSets
+    :: ListReusableDelegationSets
+listReusableDelegationSets =
+    ListReusableDelegationSets'
+    { _lrdsMaxItems = Nothing
+    , _lrdsMarker = 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.
+-- | 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});
+
+-- | 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 })
+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 })
+instance AWSRequest ListReusableDelegationSets where
+        type Sv ListReusableDelegationSets = Route53
+        type Rs ListReusableDelegationSets =
+             ListReusableDelegationSetsResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListReusableDelegationSetsResponse' <$>
+                   (x .@? "NextMarker") <*> (pure (fromEnum s)) <*>
+                     (x .@? "DelegationSets" .!@ mempty >>=
+                        parseXMLList "DelegationSet")
+                     <*> (x .@ "Marker")
+                     <*> (x .@ "IsTruncated")
+                     <*> (x .@ "MaxItems"))
 
-data ListReusableDelegationSetsResponse = ListReusableDelegationSetsResponse
-    { _lrdsrDelegationSets :: List "DelegationSet" DelegationSet
-    , _lrdsrIsTruncated    :: Bool
-    , _lrdsrMarker         :: Text
-    , _lrdsrMaxItems       :: Text
-    , _lrdsrNextMarker     :: Maybe Text
-    } deriving (Eq, Read, Show)
+instance ToHeaders ListReusableDelegationSets where
+        toHeaders = const mempty
 
--- | 'ListReusableDelegationSetsResponse' constructor.
+instance ToPath ListReusableDelegationSets where
+        toPath = const "/2013-04-01/delegationset"
+
+instance ToQuery ListReusableDelegationSets where
+        toQuery ListReusableDelegationSets'{..}
+          = mconcat
+              ["maxitems" =: _lrdsMaxItems,
+               "marker" =: _lrdsMarker]
+
+-- | A complex type that contains the response for the request.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listReusableDelegationSetsResponse' smart constructor.
+data ListReusableDelegationSetsResponse = ListReusableDelegationSetsResponse'
+    { _lrdsrsNextMarker     :: !(Maybe Text)
+    , _lrdsrsStatus         :: !Int
+    , _lrdsrsDelegationSets :: ![DelegationSet]
+    , _lrdsrsMarker         :: !Text
+    , _lrdsrsIsTruncated    :: !Bool
+    , _lrdsrsMaxItems       :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListReusableDelegationSetsResponse' with the minimum fields required to make a request.
 --
--- * 'lrdsrDelegationSets' @::@ ['DelegationSet']
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lrdsrIsTruncated' @::@ 'Bool'
+-- * 'lrdsrsNextMarker'
 --
--- * 'lrdsrMarker' @::@ 'Text'
+-- * 'lrdsrsStatus'
 --
--- * 'lrdsrMaxItems' @::@ 'Text'
+-- * 'lrdsrsDelegationSets'
 --
--- * 'lrdsrNextMarker' @::@ 'Maybe' 'Text'
+-- * 'lrdsrsMarker'
 --
-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.
+-- * 'lrdsrsIsTruncated'
 --
--- 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 })
+-- * 'lrdsrsMaxItems'
+listReusableDelegationSetsResponse
+    :: Int -- ^ 'lrdsrsStatus'
+    -> Text -- ^ 'lrdsrsMarker'
+    -> Bool -- ^ 'lrdsrsIsTruncated'
+    -> Text -- ^ 'lrdsrsMaxItems'
+    -> ListReusableDelegationSetsResponse
+listReusableDelegationSetsResponse pStatus_ pMarker_ pIsTruncated_ pMaxItems_ =
+    ListReusableDelegationSetsResponse'
+    { _lrdsrsNextMarker = Nothing
+    , _lrdsrsStatus = pStatus_
+    , _lrdsrsDelegationSets = mempty
+    , _lrdsrsMarker = pMarker_
+    , _lrdsrsIsTruncated = pIsTruncated_
+    , _lrdsrsMaxItems = pMaxItems_
+    }
 
--- | 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
+-- | 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
+lrdsrsNextMarker :: Lens' ListReusableDelegationSetsResponse (Maybe Text)
+lrdsrsNextMarker = lens _lrdsrsNextMarker (\ s a -> s{_lrdsrsNextMarker = a});
 
-instance ToXMLRoot ListReusableDelegationSets where
-    toXMLRoot = const (namespaced ns "ListReusableDelegationSets" [])
+-- | The response status code.
+lrdsrsStatus :: Lens' ListReusableDelegationSetsResponse Int
+lrdsrsStatus = lens _lrdsrsStatus (\ s a -> s{_lrdsrsStatus = a});
 
-instance ToXML ListReusableDelegationSets
+-- | A complex type that contains information about the reusable delegation
+-- sets associated with the current AWS account.
+lrdsrsDelegationSets :: Lens' ListReusableDelegationSetsResponse [DelegationSet]
+lrdsrsDelegationSets = lens _lrdsrsDelegationSets (\ s a -> s{_lrdsrsDelegationSets = a}) . _Coerce;
 
-instance AWSRequest ListReusableDelegationSets where
-    type Sv ListReusableDelegationSets = Route53
-    type Rs ListReusableDelegationSets = ListReusableDelegationSetsResponse
+-- | 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.
+lrdsrsMarker :: Lens' ListReusableDelegationSetsResponse Text
+lrdsrsMarker = lens _lrdsrsMarker (\ s a -> s{_lrdsrsMarker = a});
 
-    request  = get
-    response = xmlResponse
+-- | 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'
+lrdsrsIsTruncated :: Lens' ListReusableDelegationSetsResponse Bool
+lrdsrsIsTruncated = lens _lrdsrsIsTruncated (\ s a -> s{_lrdsrsIsTruncated = a});
 
-instance FromXML ListReusableDelegationSetsResponse where
-    parseXML x = ListReusableDelegationSetsResponse
-        <$> x .@? "DelegationSets" .!@ mempty
-        <*> x .@  "IsTruncated"
-        <*> x .@  "Marker"
-        <*> x .@  "MaxItems"
-        <*> x .@? "NextMarker"
+-- | 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.
+lrdsrsMaxItems :: Lens' ListReusableDelegationSetsResponse Text
+lrdsrsMaxItems = lens _lrdsrsMaxItems (\ s a -> s{_lrdsrsMaxItems = a});
diff --git a/gen/Network/AWS/Route53/ListTagsForResource.hs b/gen/Network/AWS/Route53/ListTagsForResource.hs
--- a/gen/Network/AWS/Route53/ListTagsForResource.hs
+++ b/gen/Network/AWS/Route53/ListTagsForResource.hs
@@ -1,130 +1,140 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListTagsForResource.html>
+-- Undocumented operation.
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListTagsForResource.html AWS API Reference> for ListTagsForResource.
 module Network.AWS.Route53.ListTagsForResource
     (
-    -- * Request
-      ListTagsForResource
-    -- ** Request constructor
-    , listTagsForResource
-    -- ** Request lenses
-    , ltfrResourceId
+    -- * Creating a Request
+      listTagsForResource
+    , ListTagsForResource
+    -- * Request Lenses
     , ltfrResourceType
+    , ltfrResourceId
 
-    -- * Response
-    , ListTagsForResourceResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listTagsForResourceResponse
-    -- ** Response lenses
-    , ltfrrResourceTagSet
+    , ListTagsForResourceResponse
+    -- * Response Lenses
+    , ltfrrsStatus
+    , ltfrrsResourceTagSet
     ) 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 :: TagResourceType
-    } deriving (Eq, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
--- | 'ListTagsForResource' constructor.
+-- | A complex type containing information about a request for a list of the
+-- tags that are associated with an individual resource.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+    { _ltfrResourceType :: !TagResourceType
+    , _ltfrResourceId   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTagsForResource' with the minimum fields required to make a request.
 --
--- * 'ltfrResourceId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ltfrResourceType' @::@ 'TagResourceType'
+-- * 'ltfrResourceType'
 --
-listTagsForResource :: TagResourceType -- ^ 'ltfrResourceType'
-                    -> Text -- ^ 'ltfrResourceId'
-                    -> ListTagsForResource
-listTagsForResource p1 p2 = ListTagsForResource
-    { _ltfrResourceType = p1
-    , _ltfrResourceId   = p2
+-- * 'ltfrResourceId'
+listTagsForResource
+    :: TagResourceType -- ^ 'ltfrResourceType'
+    -> Text -- ^ 'ltfrResourceId'
+    -> ListTagsForResource
+listTagsForResource pResourceType_ pResourceId_ =
+    ListTagsForResource'
+    { _ltfrResourceType = pResourceType_
+    , _ltfrResourceId = pResourceId_
     }
 
--- | 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'.
 --
 -- - The resource type for hosted zones is 'hostedzone'.
 ltfrResourceType :: Lens' ListTagsForResource TagResourceType
-ltfrResourceType = lens _ltfrResourceType (\s a -> s { _ltfrResourceType = a })
+ltfrResourceType = lens _ltfrResourceType (\ s a -> s{_ltfrResourceType = a});
 
-newtype ListTagsForResourceResponse = ListTagsForResourceResponse
-    { _ltfrrResourceTagSet :: ResourceTagSet
-    } deriving (Eq, Read, Show)
+-- | The ID of the resource for which you want to retrieve tags.
+ltfrResourceId :: Lens' ListTagsForResource Text
+ltfrResourceId = lens _ltfrResourceId (\ s a -> s{_ltfrResourceId = a});
 
--- | 'ListTagsForResourceResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ltfrrResourceTagSet' @::@ 'ResourceTagSet'
---
-listTagsForResourceResponse :: ResourceTagSet -- ^ 'ltfrrResourceTagSet'
-                            -> ListTagsForResourceResponse
-listTagsForResourceResponse p1 = ListTagsForResourceResponse
-    { _ltfrrResourceTagSet = p1
-    }
+instance AWSRequest ListTagsForResource where
+        type Sv ListTagsForResource = Route53
+        type Rs ListTagsForResource =
+             ListTagsForResourceResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListTagsForResourceResponse' <$>
+                   (pure (fromEnum s)) <*> (x .@ "ResourceTagSet"))
 
--- | A 'ResourceTagSet' containing tags associated with the specified resource.
-ltfrrResourceTagSet :: Lens' ListTagsForResourceResponse ResourceTagSet
-ltfrrResourceTagSet =
-    lens _ltfrrResourceTagSet (\s a -> s { _ltfrrResourceTagSet = a })
+instance ToHeaders ListTagsForResource where
+        toHeaders = const mempty
 
 instance ToPath ListTagsForResource where
-    toPath ListTagsForResource{..} = mconcat
-        [ "/2013-04-01/tags/"
-        , toText _ltfrResourceType
-        , "/"
-        , toText _ltfrResourceId
-        ]
+        toPath ListTagsForResource'{..}
+          = mconcat
+              ["/2013-04-01/tags/", toBS _ltfrResourceType, "/",
+               toBS _ltfrResourceId]
 
 instance ToQuery ListTagsForResource where
-    toQuery = const mempty
-
-instance ToHeaders ListTagsForResource
-
-instance ToXMLRoot ListTagsForResource where
-    toXMLRoot = const (namespaced ns "ListTagsForResource" [])
+        toQuery = const mempty
 
-instance ToXML ListTagsForResource
+-- | A complex type containing tags for the specified resource.
+--
+-- /See:/ 'listTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+    { _ltfrrsStatus         :: !Int
+    , _ltfrrsResourceTagSet :: !ResourceTagSet
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest ListTagsForResource where
-    type Sv ListTagsForResource = Route53
-    type Rs ListTagsForResource = ListTagsForResourceResponse
+-- | Creates a value of 'ListTagsForResourceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltfrrsStatus'
+--
+-- * 'ltfrrsResourceTagSet'
+listTagsForResourceResponse
+    :: Int -- ^ 'ltfrrsStatus'
+    -> ResourceTagSet -- ^ 'ltfrrsResourceTagSet'
+    -> ListTagsForResourceResponse
+listTagsForResourceResponse pStatus_ pResourceTagSet_ =
+    ListTagsForResourceResponse'
+    { _ltfrrsStatus = pStatus_
+    , _ltfrrsResourceTagSet = pResourceTagSet_
+    }
 
-    request  = get
-    response = xmlResponse
+-- | The response status code.
+ltfrrsStatus :: Lens' ListTagsForResourceResponse Int
+ltfrrsStatus = lens _ltfrrsStatus (\ s a -> s{_ltfrrsStatus = a});
 
-instance FromXML ListTagsForResourceResponse where
-    parseXML x = ListTagsForResourceResponse
-        <$> x .@  "ResourceTagSet"
+-- | A 'ResourceTagSet' containing tags associated with the specified
+-- resource.
+ltfrrsResourceTagSet :: Lens' ListTagsForResourceResponse ResourceTagSet
+ltfrrsResourceTagSet = lens _ltfrrsResourceTagSet (\ s a -> s{_ltfrrsResourceTagSet = a});
diff --git a/gen/Network/AWS/Route53/ListTagsForResources.hs b/gen/Network/AWS/Route53/ListTagsForResources.hs
--- a/gen/Network/AWS/Route53/ListTagsForResources.hs
+++ b/gen/Network/AWS/Route53/ListTagsForResources.hs
@@ -1,139 +1,151 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListTagsForResources.html>
+-- Undocumented operation.
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListTagsForResources.html AWS API Reference> for ListTagsForResources.
 module Network.AWS.Route53.ListTagsForResources
     (
-    -- * Request
-      ListTagsForResources
-    -- ** Request constructor
-    , listTagsForResources
-    -- ** Request lenses
-    , ltfr1ResourceIds
-    , ltfr1ResourceType
+    -- * Creating a Request
+      listTagsForResources
+    , ListTagsForResources
+    -- * Request Lenses
+    , lResourceType
+    , lResourceIds
 
-    -- * Response
-    , ListTagsForResourcesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listTagsForResourcesResponse
-    -- ** Response lenses
-    , ltfrrResourceTagSets
+    , ListTagsForResourcesResponse
+    -- * Response Lenses
+    , lrsStatus
+    , lrsResourceTagSets
     ) 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 :: TagResourceType
-    } deriving (Eq, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
--- | 'ListTagsForResources' constructor.
+-- | A complex type containing information about a request for a list of the
+-- tags that are associated with up to 10 specified resources.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listTagsForResources' smart constructor.
+data ListTagsForResources = ListTagsForResources'
+    { _lResourceType :: !TagResourceType
+    , _lResourceIds  :: !(List1 Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTagsForResources' with the minimum fields required to make a request.
 --
--- * 'ltfr1ResourceIds' @::@ 'NonEmpty' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ltfr1ResourceType' @::@ 'TagResourceType'
+-- * 'lResourceType'
 --
-listTagsForResources :: TagResourceType -- ^ 'ltfr1ResourceType'
-                     -> NonEmpty Text -- ^ 'ltfr1ResourceIds'
-                     -> ListTagsForResources
-listTagsForResources p1 p2 = ListTagsForResources
-    { _ltfr1ResourceType = p1
-    , _ltfr1ResourceIds  = withIso _List1 (const id) p2
+-- * 'lResourceIds'
+listTagsForResources
+    :: TagResourceType -- ^ 'lResourceType'
+    -> NonEmpty Text -- ^ 'lResourceIds'
+    -> ListTagsForResources
+listTagsForResources pResourceType_ pResourceIds_ =
+    ListTagsForResources'
+    { _lResourceType = pResourceType_
+    , _lResourceIds = _List1 # pResourceIds_
     }
 
--- | 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'.
 --
 -- - The resource type for hosted zones is 'hostedzone'.
-ltfr1ResourceType :: Lens' ListTagsForResources TagResourceType
-ltfr1ResourceType =
-    lens _ltfr1ResourceType (\s a -> s { _ltfr1ResourceType = a })
-
-newtype ListTagsForResourcesResponse = ListTagsForResourcesResponse
-    { _ltfrrResourceTagSets :: List "ResourceTagSet" ResourceTagSet
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
+lResourceType :: Lens' ListTagsForResources TagResourceType
+lResourceType = lens _lResourceType (\ s a -> s{_lResourceType = a});
 
-instance GHC.Exts.IsList ListTagsForResourcesResponse where
-    type Item ListTagsForResourcesResponse = ResourceTagSet
+-- | A complex type that contains the ResourceId element for each resource
+-- for which you want to get a list of tags.
+lResourceIds :: Lens' ListTagsForResources (NonEmpty Text)
+lResourceIds = lens _lResourceIds (\ s a -> s{_lResourceIds = a}) . _List1;
 
-    fromList = ListTagsForResourcesResponse . GHC.Exts.fromList
-    toList   = GHC.Exts.toList . _ltfrrResourceTagSets
+instance AWSRequest ListTagsForResources where
+        type Sv ListTagsForResources = Route53
+        type Rs ListTagsForResources =
+             ListTagsForResourcesResponse
+        request = postXML
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListTagsForResourcesResponse' <$>
+                   (pure (fromEnum s)) <*>
+                     (x .@? "ResourceTagSets" .!@ mempty >>=
+                        parseXMLList "ResourceTagSet"))
 
--- | 'ListTagsForResourcesResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ltfrrResourceTagSets' @::@ ['ResourceTagSet']
---
-listTagsForResourcesResponse :: ListTagsForResourcesResponse
-listTagsForResourcesResponse = ListTagsForResourcesResponse
-    { _ltfrrResourceTagSets = mempty
-    }
+instance ToElement ListTagsForResources where
+        toElement
+          = mkElement
+              "{https://route53.amazonaws.com/doc/2013-04-01/}ListTagsForResourcesRequest"
 
--- | A list of 'ResourceTagSet's containing tags associated with the specified
--- resources.
-ltfrrResourceTagSets :: Lens' ListTagsForResourcesResponse [ResourceTagSet]
-ltfrrResourceTagSets =
-    lens _ltfrrResourceTagSets (\s a -> s { _ltfrrResourceTagSets = a })
-        . _List
+instance ToHeaders ListTagsForResources where
+        toHeaders = const mempty
 
 instance ToPath ListTagsForResources where
-    toPath ListTagsForResources{..} = mconcat
-        [ "/2013-04-01/tags/"
-        , toText _ltfr1ResourceType
-        ]
+        toPath ListTagsForResources'{..}
+          = mconcat ["/2013-04-01/tags/", toBS _lResourceType]
 
 instance ToQuery ListTagsForResources where
-    toQuery = const mempty
-
-instance ToHeaders ListTagsForResources
+        toQuery = const mempty
 
-instance ToXMLRoot ListTagsForResources where
-    toXMLRoot ListTagsForResources{..} = namespaced ns "ListTagsForResources"
-        [ "ResourceIds" =@ _ltfr1ResourceIds
-        ]
+instance ToXML ListTagsForResources where
+        toXML ListTagsForResources'{..}
+          = mconcat
+              ["ResourceIds" @=
+                 toXMLList "ResourceId" _lResourceIds]
 
-instance ToXML ListTagsForResources
+-- | A complex type containing tags for the specified resources.
+--
+-- /See:/ 'listTagsForResourcesResponse' smart constructor.
+data ListTagsForResourcesResponse = ListTagsForResourcesResponse'
+    { _lrsStatus          :: !Int
+    , _lrsResourceTagSets :: ![ResourceTagSet]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest ListTagsForResources where
-    type Sv ListTagsForResources = Route53
-    type Rs ListTagsForResources = ListTagsForResourcesResponse
+-- | Creates a value of 'ListTagsForResourcesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lrsStatus'
+--
+-- * 'lrsResourceTagSets'
+listTagsForResourcesResponse
+    :: Int -- ^ 'lrsStatus'
+    -> ListTagsForResourcesResponse
+listTagsForResourcesResponse pStatus_ =
+    ListTagsForResourcesResponse'
+    { _lrsStatus = pStatus_
+    , _lrsResourceTagSets = mempty
+    }
 
-    request  = post
-    response = xmlResponse
+-- | The response status code.
+lrsStatus :: Lens' ListTagsForResourcesResponse Int
+lrsStatus = lens _lrsStatus (\ s a -> s{_lrsStatus = a});
 
-instance FromXML ListTagsForResourcesResponse where
-    parseXML x = ListTagsForResourcesResponse
-        <$> x .@? "ResourceTagSets" .!@ mempty
+-- | A list of 'ResourceTagSet's containing tags associated with the
+-- specified resources.
+lrsResourceTagSets :: Lens' ListTagsForResourcesResponse [ResourceTagSet]
+lrsResourceTagSets = lens _lrsResourceTagSets (\ s a -> s{_lrsResourceTagSets = a}) . _Coerce;
diff --git a/gen/Network/AWS/Route53/Types.hs b/gen/Network/AWS/Route53/Types.hs
--- a/gen/Network/AWS/Route53/Types.hs
+++ b/gen/Network/AWS/Route53/Types.hs
@@ -1,1661 +1,423 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-{-# LANGUAGE ViewPatterns                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.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)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
-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 (..)
-
-    -- * RecordType
-    , RecordType (..)
-
-    -- * ChangeAction
-    , ChangeAction (..)
-
-    -- * TagResourceType
-    , TagResourceType (..)
-
-    -- * HealthCheckConfig
-    , HealthCheckConfig
-    , healthCheckConfig
-    , hccFailureThreshold
-    , hccFullyQualifiedDomainName
-    , hccIPAddress
-    , hccPort
-    , hccRequestInterval
-    , hccResourcePath
-    , hccSearchString
-    , hccType
-
-    -- * Change
-    , Change
-    , change
-    , cAction
-    , cResourceRecordSet
-
-    -- * Failover
-    , Failover (..)
-
-    -- * 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
-
-    -- * Common
-    , module Network.AWS.Route53.Internal
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Signing
-import Network.AWS.Route53.Internal
-import qualified GHC.Exts
-
--- | Version @2013-04-01@ of the Amazon Route 53 service.
-data Route53
-
-instance AWSService Route53 where
-    type Sg Route53 = V4
-    type Er Route53 = RESTError
-
-    service = service'
-      where
-        service' :: Service Route53
-        service' = Service
-            { _svcAbbrev       = "Route53"
-            , _svcPrefix       = "route53"
-            , _svcVersion      = "2013-04-01"
-            , _svcTargetPrefix = Nothing
-            , _svcJSONVersion  = Nothing
-            , _svcHandle       = handle
-            , _svcRetry        = retry
-            }
-
-        handle :: Status
-               -> Maybe (LazyByteString -> ServiceError RESTError)
-        handle = restError statusSuccess service'
-
-        retry :: Retry Route53
-        retry = Exponential
-            { _retryBase     = 0.05
-            , _retryGrowth   = 2
-            , _retryAttempts = 5
-            , _retryCheck    = check
-            }
-
-        check :: Status
-              -> RESTError
-              -> Bool
-        check (statusCode -> s) (awsErrorCode -> e)
-            | s == 400 && (Just "Throttling") == e = True -- Throttling
-            | s == 400 && (Just "ThrottlingException") == e = True -- Throttling Exception
-            | s == 500  = True -- General Server Error
-            | s == 509  = True -- Limit Exceeded
-            | s == 503  = True -- Service Unavailable
-            | otherwise = False
-
-ns :: Text
-ns = "http://route53.amazonaws.com/doc/2013-04-01/"
-{-# INLINE ns #-}
-
-data AliasTarget = AliasTarget
-    { _atDNSName              :: Text
-    , _atEvaluateTargetHealth :: Bool
-    , _atHostedZoneId         :: Text
-    } deriving (Eq, Ord, Read, 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 <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html 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 <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html 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 <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html 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, Read, 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, Read, Show)
-
--- | 'Tag' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'tagKey' @::@ 'Maybe' 'Text'
---
--- * 'tagValue' @::@ 'Maybe' 'Text'
---
-tag :: Tag
-tag = Tag
-    { _tagKey   = Nothing
-    , _tagValue = Nothing
-    }
-
--- | The key 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, Read, 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 ToXMLRoot GeoLocationDetails where
-    toXMLRoot GeoLocationDetails{..} = namespaced ns "GeoLocationDetails"
-        [ "ContinentCode"   =@ _gldContinentCode
-        , "ContinentName"   =@ _gldContinentName
-        , "CountryCode"     =@ _gldCountryCode
-        , "CountryName"     =@ _gldCountryName
-        , "SubdivisionCode" =@ _gldSubdivisionCode
-        , "SubdivisionName" =@ _gldSubdivisionName
-        ]
-
-instance ToXML GeoLocationDetails
-
-data HealthCheck = HealthCheck
-    { _hcCallerReference    :: Text
-    , _hcHealthCheckConfig  :: HealthCheckConfig
-    , _hcHealthCheckVersion :: Nat
-    , _hcId                 :: Text
-    } deriving (Eq, Read, 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 ToXMLRoot HealthCheck where
-    toXMLRoot HealthCheck{..} = namespaced ns "HealthCheck"
-        [ "Id"                 =@ _hcId
-        , "CallerReference"    =@ _hcCallerReference
-        , "HealthCheckConfig"  =@ _hcHealthCheckConfig
-        , "HealthCheckVersion" =@ _hcHealthCheckVersion
-        ]
-
-instance ToXML HealthCheck
-
-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, Read, Show, Generic, Enum)
-
-instance Hashable VPCRegion
-
-instance FromText VPCRegion where
-    parser = takeLowerText >>= \case
-        "ap-northeast-1" -> pure ApNortheast1
-        "ap-southeast-1" -> pure ApSoutheast1
-        "ap-southeast-2" -> pure ApSoutheast2
-        "cn-north-1"     -> pure CnNorth1
-        "eu-central-1"   -> pure EuCentral1
-        "eu-west-1"      -> pure EuWest1
-        "sa-east-1"      -> pure SaEast1
-        "us-east-1"      -> pure UsEast1
-        "us-west-1"      -> pure UsWest1
-        "us-west-2"      -> pure UsWest2
-        e                -> fail $
-            "Failure parsing VPCRegion from " ++ show e
-
-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 ToByteString VPCRegion
-instance ToHeader     VPCRegion
-instance ToQuery      VPCRegion
-
-instance FromXML VPCRegion where
-    parseXML = parseXMLText "VPCRegion"
-
-instance ToXML VPCRegion where
-    toXML = toXMLText
-
-data RecordType
-    = A     -- ^ A
-    | AAAA  -- ^ AAAA
-    | CNAME -- ^ CNAME
-    | MX    -- ^ MX
-    | NS    -- ^ NS
-    | PTR   -- ^ PTR
-    | SOA   -- ^ SOA
-    | SPF   -- ^ SPF
-    | SRV   -- ^ SRV
-    | TXT   -- ^ TXT
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable RecordType
-
-instance FromText RecordType where
-    parser = takeLowerText >>= \case
-        "a"     -> pure A
-        "aaaa"  -> pure AAAA
-        "cname" -> pure CNAME
-        "mx"    -> pure MX
-        "ns"    -> pure NS
-        "ptr"   -> pure PTR
-        "soa"   -> pure SOA
-        "spf"   -> pure SPF
-        "srv"   -> pure SRV
-        "txt"   -> pure TXT
-        e       -> fail $
-            "Failure parsing RecordType from " ++ show e
-
-instance ToText RecordType where
-    toText = \case
-        A     -> "A"
-        AAAA  -> "AAAA"
-        CNAME -> "CNAME"
-        MX    -> "MX"
-        NS    -> "NS"
-        PTR   -> "PTR"
-        SOA   -> "SOA"
-        SPF   -> "SPF"
-        SRV   -> "SRV"
-        TXT   -> "TXT"
-
-instance ToByteString RecordType
-instance ToHeader     RecordType
-instance ToQuery      RecordType
-
-instance FromXML RecordType where
-    parseXML = parseXMLText "RecordType"
-
-instance ToXML RecordType where
-    toXML = toXMLText
-
-data ChangeAction
-    = Create  -- ^ CREATE
-    | Delete' -- ^ DELETE
-    | Upsert  -- ^ UPSERT
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable ChangeAction
-
-instance FromText ChangeAction where
-    parser = takeLowerText >>= \case
-        "create" -> pure Create
-        "delete" -> pure Delete'
-        "upsert" -> pure Upsert
-        e        -> fail $
-            "Failure parsing ChangeAction from " ++ show e
-
-instance ToText ChangeAction where
-    toText = \case
-        Create  -> "CREATE"
-        Delete' -> "DELETE"
-        Upsert  -> "UPSERT"
-
-instance ToByteString ChangeAction
-instance ToHeader     ChangeAction
-instance ToQuery      ChangeAction
-
-instance FromXML ChangeAction where
-    parseXML = parseXMLText "ChangeAction"
-
-instance ToXML ChangeAction where
-    toXML = toXMLText
-
-data TagResourceType
-    = Healthcheck -- ^ healthcheck
-    | Hostedzone  -- ^ hostedzone
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable TagResourceType
-
-instance FromText TagResourceType where
-    parser = takeLowerText >>= \case
-        "healthcheck" -> pure Healthcheck
-        "hostedzone"  -> pure Hostedzone
-        e             -> fail $
-            "Failure parsing TagResourceType from " ++ show e
-
-instance ToText TagResourceType where
-    toText = \case
-        Healthcheck -> "healthcheck"
-        Hostedzone  -> "hostedzone"
-
-instance ToByteString TagResourceType
-instance ToHeader     TagResourceType
-instance ToQuery      TagResourceType
-
-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                     :: HealthCheckType
-    } deriving (Eq, Read, 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' @::@ 'HealthCheckType'
---
-healthCheckConfig :: HealthCheckType -- ^ '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 HealthCheckType
-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            :: ChangeAction
-    , _cResourceRecordSet :: ResourceRecordSet
-    } deriving (Eq, Read, Show)
-
--- | 'Change' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cAction' @::@ 'ChangeAction'
---
--- * 'cResourceRecordSet' @::@ 'ResourceRecordSet'
---
-change :: ChangeAction -- ^ 'cAction'
-       -> ResourceRecordSet -- ^ 'cResourceRecordSet'
-       -> Change
-change p1 p2 = Change
-    { _cAction            = p1
-    , _cResourceRecordSet = p2
-    }
-
--- | The action to perform.
---
--- Valid values: 'CREATE' | 'DELETE' | 'UPSERT'
-cAction :: Lens' Change ChangeAction
-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 Failover
-    = Primary   -- ^ PRIMARY
-    | Secondary -- ^ SECONDARY
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable Failover
-
-instance FromText Failover where
-    parser = takeLowerText >>= \case
-        "primary"   -> pure Primary
-        "secondary" -> pure Secondary
-        e           -> fail $
-            "Failure parsing Failover from " ++ show e
-
-instance ToText Failover where
-    toText = \case
-        Primary   -> "PRIMARY"
-        Secondary -> "SECONDARY"
-
-instance ToByteString Failover
-instance ToHeader     Failover
-instance ToQuery      Failover
-
-instance FromXML Failover where
-    parseXML = parseXMLText "Failover"
-
-instance ToXML Failover where
-    toXML = toXMLText
-
-data HostedZone = HostedZone
-    { _hzCallerReference        :: Text
-    , _hzConfig                 :: Maybe HostedZoneConfig
-    , _hzId                     :: Text
-    , _hzName                   :: Text
-    , _hzResourceRecordSetCount :: Maybe Integer
-    } deriving (Eq, Read, 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 ToXMLRoot HostedZone where
-    toXMLRoot HostedZone{..} = namespaced ns "HostedZone"
-        [ "Id"                     =@ _hzId
-        , "Name"                   =@ _hzName
-        , "CallerReference"        =@ _hzCallerReference
-        , "Config"                 =@ _hzConfig
-        , "ResourceRecordSetCount" =@ _hzResourceRecordSetCount
-        ]
-
-instance ToXML HostedZone
-
-data ResourceTagSet = ResourceTagSet
-    { _rtsResourceId   :: Maybe Text
-    , _rtsResourceType :: Maybe TagResourceType
-    , _rtsTags         :: List1 "Tag" Tag
-    } deriving (Eq, Read, Show)
-
--- | 'ResourceTagSet' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'rtsResourceId' @::@ 'Maybe' 'Text'
---
--- * 'rtsResourceType' @::@ 'Maybe' 'TagResourceType'
---
--- * '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'.
---
--- - The resource type for hosted zones is 'hostedzone'.
-rtsResourceType :: Lens' ResourceTagSet (Maybe TagResourceType)
-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 ToXMLRoot ResourceTagSet where
-    toXMLRoot ResourceTagSet{..} = namespaced ns "ResourceTagSet"
-        [ "ResourceType" =@ _rtsResourceType
-        , "ResourceId"   =@ _rtsResourceId
-        , "Tags"         =@ _rtsTags
-        ]
-
-instance ToXML ResourceTagSet
-
-data ChangeStatus
-    = Insync  -- ^ INSYNC
-    | Pending -- ^ PENDING
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable ChangeStatus
-
-instance FromText ChangeStatus where
-    parser = takeLowerText >>= \case
-        "insync"  -> pure Insync
-        "pending" -> pure Pending
-        e         -> fail $
-            "Failure parsing ChangeStatus from " ++ show e
-
-instance ToText ChangeStatus where
-    toText = \case
-        Insync  -> "INSYNC"
-        Pending -> "PENDING"
-
-instance ToByteString ChangeStatus
-instance ToHeader     ChangeStatus
-instance ToQuery      ChangeStatus
-
-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, Read, 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 ISO8601
-    , _srStatus      :: Maybe Text
-    } deriving (Eq, Ord, Read, 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, Read, Show, Generic, Enum)
-
-instance Hashable HealthCheckType
-
-instance FromText HealthCheckType where
-    parser = takeLowerText >>= \case
-        "http"            -> pure Http
-        "http_str_match"  -> pure HttpStrMatch
-        "https"           -> pure Https
-        "https_str_match" -> pure HttpsStrMatch
-        "tcp"             -> pure Tcp
-        e                 -> fail $
-            "Failure parsing HealthCheckType from " ++ show e
-
-instance ToText HealthCheckType where
-    toText = \case
-        Http          -> "HTTP"
-        HttpStrMatch  -> "HTTP_STR_MATCH"
-        Https         -> "HTTPS"
-        HttpsStrMatch -> "HTTPS_STR_MATCH"
-        Tcp           -> "TCP"
-
-instance ToByteString HealthCheckType
-instance ToHeader     HealthCheckType
-instance ToQuery      HealthCheckType
-
-instance FromXML HealthCheckType where
-    parseXML = parseXMLText "HealthCheckType"
-
-instance ToXML HealthCheckType where
-    toXML = toXMLText
-
-data VPC = VPC
-    { _vpcVPCId     :: Maybe Text
-    , _vpcVPCRegion :: Maybe VPCRegion
-    } deriving (Eq, Read, Show)
-
--- | 'VPC' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'vpcVPCId' @::@ 'Maybe' 'Text'
---
--- * 'vpcVPCRegion' @::@ 'Maybe' 'VPCRegion'
---
-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 VPCRegion)
-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, Read, 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 Failover
-    , _rrsGeoLocation     :: Maybe GeoLocation
-    , _rrsHealthCheckId   :: Maybe Text
-    , _rrsName            :: Text
-    , _rrsRegion          :: Maybe Region
-    , _rrsResourceRecords :: Maybe (List1 "ResourceRecord" ResourceRecord)
-    , _rrsSetIdentifier   :: Maybe Text
-    , _rrsTTL             :: Maybe Nat
-    , _rrsType            :: RecordType
-    , _rrsWeight          :: Maybe Nat
-    } deriving (Eq, Read, Show)
-
--- | 'ResourceRecordSet' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'rrsAliasTarget' @::@ 'Maybe' 'AliasTarget'
---
--- * 'rrsFailover' @::@ 'Maybe' 'Failover'
---
--- * 'rrsGeoLocation' @::@ 'Maybe' 'GeoLocation'
---
--- * 'rrsHealthCheckId' @::@ 'Maybe' 'Text'
---
--- * 'rrsName' @::@ 'Text'
---
--- * 'rrsRegion' @::@ 'Maybe' 'Region'
---
--- * 'rrsResourceRecords' @::@ 'Maybe' ('NonEmpty' 'ResourceRecord')
---
--- * 'rrsSetIdentifier' @::@ 'Maybe' 'Text'
---
--- * 'rrsTTL' @::@ 'Maybe' 'Natural'
---
--- * 'rrsType' @::@ 'RecordType'
---
--- * 'rrsWeight' @::@ 'Maybe' 'Natural'
---
-resourceRecordSet :: Text -- ^ 'rrsName'
-                  -> RecordType -- ^ 'rrsType'
-                  -> ResourceRecordSet
-resourceRecordSet p1 p2 = ResourceRecordSet
-    { _rrsName            = p1
-    , _rrsType            = p2
-    , _rrsSetIdentifier   = Nothing
-    , _rrsWeight          = Nothing
-    , _rrsRegion          = Nothing
-    , _rrsGeoLocation     = Nothing
-    , _rrsFailover        = Nothing
-    , _rrsTTL             = Nothing
-    , _rrsResourceRecords = 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 Failover)
-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 resourcerecord 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 Region)
-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 (Maybe (NonEmpty ResourceRecord))
-rrsResourceRecords =
-    lens _rrsResourceRecords (\s a -> s { _rrsResourceRecords = a })
-        . mapping _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 RecordType
-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, Read, 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      :: ChangeStatus
-    , _ciSubmittedAt :: ISO8601
-    } deriving (Eq, Read, Show)
-
--- | 'ChangeInfo' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ciComment' @::@ 'Maybe' 'Text'
---
--- * 'ciId' @::@ 'Text'
---
--- * 'ciStatus' @::@ 'ChangeStatus'
---
--- * 'ciSubmittedAt' @::@ 'UTCTime'
---
-changeInfo :: Text -- ^ 'ciId'
-           -> ChangeStatus -- ^ '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 ChangeStatus
-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 ToXMLRoot ChangeInfo where
-    toXMLRoot ChangeInfo{..} = namespaced ns "ChangeInfo"
-        [ "Id"          =@ _ciId
-        , "Status"      =@ _ciStatus
-        , "SubmittedAt" =@ _ciSubmittedAt
-        , "Comment"     =@ _ciComment
-        ]
-
-instance ToXML ChangeInfo
-
-data GeoLocation = GeoLocation
-    { _glContinentCode   :: Maybe Text
-    , _glCountryCode     :: Maybe Text
-    , _glSubdivisionCode :: Maybe Text
-    } deriving (Eq, Ord, Read, 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, Read, 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
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Route53.Types
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.Route53.Types
+    (
+    -- * Service
+      Route53
+
+    -- * Errors
+    , _HealthCheckVersionMismatch
+    , _InvalidInput
+    , _HostedZoneNotEmpty
+    , _InvalidArgument
+    , _DelegationSetAlreadyReusable
+    , _PriorRequestNotComplete
+    , _InvalidChangeBatch
+    , _InvalidDomainName
+    , _DelegationSetNotReusable
+    , _HealthCheckAlreadyExists
+    , _HostedZoneNotFound
+    , _DelegationSetInUse
+    , _NoSuchDelegationSet
+    , _NoSuchGeoLocation
+    , _DelegationSetNotAvailable
+    , _VPCAssociationNotFound
+    , _ThrottlingException
+    , _NoSuchChange
+    , _LimitsExceeded
+    , _IncompatibleVersion
+    , _NoSuchHostedZone
+    , _TooManyHostedZones
+    , _PublicZoneVPCAssociation
+    , _ConflictingDomainExists
+    , _LastVPCAssociation
+    , _HealthCheckInUse
+    , _DelegationSetAlreadyCreated
+    , _TooManyHealthChecks
+    , _NoSuchHealthCheck
+    , _HostedZoneAlreadyExists
+    , _InvalidVPCId
+
+    -- * Re-exported Types
+    , module Network.AWS.Route53.Internal
+
+    -- * ChangeAction
+    , ChangeAction (..)
+
+    -- * ChangeStatus
+    , ChangeStatus (..)
+
+    -- * Failover
+    , Failover (..)
+
+    -- * HealthCheckType
+    , HealthCheckType (..)
+
+    -- * RecordType
+    , RecordType (..)
+
+    -- * TagResourceType
+    , TagResourceType (..)
+
+    -- * VPCRegion
+    , VPCRegion (..)
+
+    -- * AliasTarget
+    , AliasTarget
+    , aliasTarget
+    , atHostedZoneId
+    , atDNSName
+    , atEvaluateTargetHealth
+
+    -- * Change
+    , Change
+    , change
+    , cAction
+    , cResourceRecordSet
+
+    -- * ChangeBatch
+    , ChangeBatch
+    , changeBatch
+    , cbComment
+    , cbChanges
+
+    -- * ChangeInfo
+    , ChangeInfo
+    , changeInfo
+    , ciComment
+    , ciId
+    , ciStatus
+    , ciSubmittedAt
+
+    -- * DelegationSet
+    , DelegationSet
+    , delegationSet
+    , dsId
+    , dsCallerReference
+    , dsNameServers
+
+    -- * GeoLocation
+    , GeoLocation
+    , geoLocation
+    , glSubdivisionCode
+    , glCountryCode
+    , glContinentCode
+
+    -- * GeoLocationDetails
+    , GeoLocationDetails
+    , geoLocationDetails
+    , gldSubdivisionName
+    , gldSubdivisionCode
+    , gldCountryName
+    , gldCountryCode
+    , gldContinentCode
+    , gldContinentName
+
+    -- * HealthCheck
+    , HealthCheck
+    , healthCheck
+    , hcId
+    , hcCallerReference
+    , hcHealthCheckConfig
+    , hcHealthCheckVersion
+
+    -- * HealthCheckConfig
+    , HealthCheckConfig
+    , healthCheckConfig
+    , hccIPAddress
+    , hccFailureThreshold
+    , hccSearchString
+    , hccResourcePath
+    , hccFullyQualifiedDomainName
+    , hccRequestInterval
+    , hccPort
+    , hccType
+
+    -- * HealthCheckObservation
+    , HealthCheckObservation
+    , healthCheckObservation
+    , hcoIPAddress
+    , hcoStatusReport
+
+    -- * HostedZone
+    , HostedZone
+    , hostedZone
+    , hzConfig
+    , hzResourceRecordSetCount
+    , hzId
+    , hzName
+    , hzCallerReference
+
+    -- * HostedZoneConfig
+    , HostedZoneConfig
+    , hostedZoneConfig
+    , hzcPrivateZone
+    , hzcComment
+
+    -- * ResourceRecord
+    , ResourceRecord
+    , resourceRecord
+    , rrValue
+
+    -- * ResourceRecordSet
+    , ResourceRecordSet
+    , resourceRecordSet
+    , rrsResourceRecords
+    , rrsTTL
+    , rrsAliasTarget
+    , rrsWeight
+    , rrsSetIdentifier
+    , rrsFailover
+    , rrsHealthCheckId
+    , rrsRegion
+    , rrsGeoLocation
+    , rrsName
+    , rrsType
+
+    -- * ResourceTagSet
+    , ResourceTagSet
+    , resourceTagSet
+    , rtsResourceId
+    , rtsResourceType
+    , rtsTags
+
+    -- * StatusReport
+    , StatusReport
+    , statusReport
+    , srStatus
+    , srCheckedTime
+
+    -- * Tag
+    , Tag
+    , tag
+    , tagValue
+    , tagKey
+
+    -- * VPC
+    , VPC
+    , vpc
+    , vpcVPCRegion
+    , vpcVPCId
+    ) where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Route53.Internal
+import           Network.AWS.Route53.Types.Product
+import           Network.AWS.Route53.Types.Sum
+import           Network.AWS.Sign.V4
+
+-- | Version @2013-04-01@ of the Amazon Route 53 SDK.
+data Route53
+
+instance AWSService Route53 where
+    type Sg Route53 = V4
+    service = const svc
+      where
+        svc =
+            Service
+            { _svcAbbrev = "Route53"
+            , _svcPrefix = "route53"
+            , _svcVersion = "2013-04-01"
+            , _svcEndpoint = defaultEndpoint svc
+            , _svcTimeout = Just 70
+            , _svcStatus = statusSuccess
+            , _svcError = parseXMLError
+            , _svcRetry = retry
+            }
+        retry =
+            Exponential
+            { _retryBase = 5.0e-2
+            , _retryGrowth = 2
+            , _retryAttempts = 5
+            , _retryCheck = check
+            }
+        check e
+          | has (hasCode "ThrottlingException" . hasStatus 400) e =
+              Just "throttling_exception"
+          | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
+          | has (hasStatus 503) e = Just "service_unavailable"
+          | has (hasStatus 500) e = Just "general_server_error"
+          | has (hasStatus 509) e = Just "limit_exceeded"
+          | otherwise = Nothing
+
+-- | Prism for HealthCheckVersionMismatch' errors.
+_HealthCheckVersionMismatch :: AsError a => Getting (First ServiceError) a ServiceError
+_HealthCheckVersionMismatch =
+    _ServiceError . hasStatus 409 . hasCode "HealthCheckVersionMismatch"
+
+-- | Some value specified in the request is invalid or the XML document is
+-- malformed.
+_InvalidInput :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidInput = _ServiceError . hasStatus 400 . hasCode "InvalidInput"
+
+-- | The hosted zone contains resource record sets in addition to the default
+-- NS and SOA resource record sets. Before you can delete the hosted zone,
+-- you must delete the additional resource record sets.
+_HostedZoneNotEmpty :: AsError a => Getting (First ServiceError) a ServiceError
+_HostedZoneNotEmpty =
+    _ServiceError . hasStatus 400 . hasCode "HostedZoneNotEmpty"
+
+-- | At least one of the specified arguments is invalid.
+_InvalidArgument :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidArgument = _ServiceError . hasCode "InvalidArgument"
+
+-- | The specified delegation set has already been marked as reusable.
+_DelegationSetAlreadyReusable :: AsError a => Getting (First ServiceError) a ServiceError
+_DelegationSetAlreadyReusable =
+    _ServiceError . hasCode "DelegationSetAlreadyReusable"
+
+-- | The request was rejected because Route 53 was still processing a prior
+-- request.
+_PriorRequestNotComplete :: AsError a => Getting (First ServiceError) a ServiceError
+_PriorRequestNotComplete =
+    _ServiceError . hasStatus 400 . hasCode "PriorRequestNotComplete"
+
+-- | This error contains a list of one or more error messages. Each error
+-- message indicates one error in the change batch. For more information,
+-- see
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ChangeResourceRecordSets.html#example_Errors Example InvalidChangeBatch Errors>.
+_InvalidChangeBatch :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidChangeBatch = _ServiceError . hasCode "InvalidChangeBatch"
+
+-- | This error indicates that the specified domain name is not valid.
+_InvalidDomainName :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidDomainName =
+    _ServiceError . hasStatus 400 . hasCode "InvalidDomainName"
+
+-- | The specified delegation set has not been marked as reusable.
+_DelegationSetNotReusable :: AsError a => Getting (First ServiceError) a ServiceError
+_DelegationSetNotReusable = _ServiceError . hasCode "DelegationSetNotReusable"
+
+-- | The health check you are trying to create already exists. Route 53
+-- returns this error when a health check has already been created with the
+-- specified 'CallerReference'.
+_HealthCheckAlreadyExists :: AsError a => Getting (First ServiceError) a ServiceError
+_HealthCheckAlreadyExists =
+    _ServiceError . hasStatus 409 . hasCode "HealthCheckAlreadyExists"
+
+-- | The specified HostedZone cannot be found.
+_HostedZoneNotFound :: AsError a => Getting (First ServiceError) a ServiceError
+_HostedZoneNotFound = _ServiceError . hasCode "HostedZoneNotFound"
+
+-- | The specified delegation contains associated hosted zones which must be
+-- deleted before the reusable delegation set can be deleted.
+_DelegationSetInUse :: AsError a => Getting (First ServiceError) a ServiceError
+_DelegationSetInUse = _ServiceError . hasCode "DelegationSetInUse"
+
+-- | The specified delegation set does not exist.
+_NoSuchDelegationSet :: AsError a => Getting (First ServiceError) a ServiceError
+_NoSuchDelegationSet = _ServiceError . hasCode "NoSuchDelegationSet"
+
+-- | The geo location you are trying to get does not exist.
+_NoSuchGeoLocation :: AsError a => Getting (First ServiceError) a ServiceError
+_NoSuchGeoLocation =
+    _ServiceError . hasStatus 404 . hasCode "NoSuchGeoLocation"
+
+-- | Route 53 allows some duplicate domain names, but there is a maximum
+-- number of duplicate names. This error indicates that you have reached
+-- that maximum. If you want to create another hosted zone with the same
+-- name and Route 53 generates this error, you can request an increase to
+-- the limit on the <http://aws.amazon.com/route53-request/ Contact Us>
+-- page.
+_DelegationSetNotAvailable :: AsError a => Getting (First ServiceError) a ServiceError
+_DelegationSetNotAvailable =
+    _ServiceError . hasCode "DelegationSetNotAvailable"
+
+-- | The VPC you specified is not currently associated with the hosted zone.
+_VPCAssociationNotFound :: AsError a => Getting (First ServiceError) a ServiceError
+_VPCAssociationNotFound =
+    _ServiceError . hasStatus 404 . hasCode "VPCAssociationNotFound"
+
+-- | Prism for ThrottlingException' errors.
+_ThrottlingException :: AsError a => Getting (First ServiceError) a ServiceError
+_ThrottlingException =
+    _ServiceError . hasStatus 400 . hasCode "ThrottlingException"
+
+-- | Prism for NoSuchChange' errors.
+_NoSuchChange :: AsError a => Getting (First ServiceError) a ServiceError
+_NoSuchChange = _ServiceError . hasStatus 404 . hasCode "NoSuchChange"
+
+-- | The limits specified for a resource have been exceeded.
+_LimitsExceeded :: AsError a => Getting (First ServiceError) a ServiceError
+_LimitsExceeded = _ServiceError . hasCode "LimitsExceeded"
+
+-- | The resource you are trying to access is unsupported on this Route 53
+-- endpoint. Please consider using a newer endpoint or a tool that does so.
+_IncompatibleVersion :: AsError a => Getting (First ServiceError) a ServiceError
+_IncompatibleVersion =
+    _ServiceError . hasStatus 400 . hasCode "IncompatibleVersion"
+
+-- | Prism for NoSuchHostedZone' errors.
+_NoSuchHostedZone :: AsError a => Getting (First ServiceError) a ServiceError
+_NoSuchHostedZone = _ServiceError . hasStatus 404 . hasCode "NoSuchHostedZone"
+
+-- | This error indicates that you\'ve reached the maximum number of hosted
+-- zones that can be created for the current AWS account. You can request
+-- an increase to the limit on the
+-- <http://aws.amazon.com/route53-request/ Contact Us> page.
+_TooManyHostedZones :: AsError a => Getting (First ServiceError) a ServiceError
+_TooManyHostedZones =
+    _ServiceError . hasStatus 400 . hasCode "TooManyHostedZones"
+
+-- | The hosted zone you are trying to associate VPC with doesn\'t have any
+-- VPC association. Route 53 currently doesn\'t support associate a VPC
+-- with a public hosted zone.
+_PublicZoneVPCAssociation :: AsError a => Getting (First ServiceError) a ServiceError
+_PublicZoneVPCAssociation =
+    _ServiceError . hasStatus 400 . hasCode "PublicZoneVPCAssociation"
+
+-- | Prism for ConflictingDomainExists' errors.
+_ConflictingDomainExists :: AsError a => Getting (First ServiceError) a ServiceError
+_ConflictingDomainExists = _ServiceError . hasCode "ConflictingDomainExists"
+
+-- | The VPC you are trying to disassociate from the hosted zone is the last
+-- the VPC that is associated with the hosted zone. Route 53 currently
+-- doesn\'t support disassociate the last VPC from the hosted zone.
+_LastVPCAssociation :: AsError a => Getting (First ServiceError) a ServiceError
+_LastVPCAssociation =
+    _ServiceError . hasStatus 400 . hasCode "LastVPCAssociation"
+
+-- | There are resource records associated with this health check. Before you
+-- can delete the health check, you must disassociate it from the resource
+-- record sets.
+_HealthCheckInUse :: AsError a => Getting (First ServiceError) a ServiceError
+_HealthCheckInUse = _ServiceError . hasStatus 400 . hasCode "HealthCheckInUse"
+
+-- | A delegation set with the same owner and caller reference combination
+-- has already been created.
+_DelegationSetAlreadyCreated :: AsError a => Getting (First ServiceError) a ServiceError
+_DelegationSetAlreadyCreated =
+    _ServiceError . hasCode "DelegationSetAlreadyCreated"
+
+-- | Prism for TooManyHealthChecks' errors.
+_TooManyHealthChecks :: AsError a => Getting (First ServiceError) a ServiceError
+_TooManyHealthChecks = _ServiceError . hasCode "TooManyHealthChecks"
+
+-- | The health check you are trying to get or delete does not exist.
+_NoSuchHealthCheck :: AsError a => Getting (First ServiceError) a ServiceError
+_NoSuchHealthCheck =
+    _ServiceError . hasStatus 404 . hasCode "NoSuchHealthCheck"
+
+-- | The hosted zone you are trying to create already exists. Route 53
+-- returns this error when a hosted zone has already been created with the
+-- specified 'CallerReference'.
+_HostedZoneAlreadyExists :: AsError a => Getting (First ServiceError) a ServiceError
+_HostedZoneAlreadyExists =
+    _ServiceError . hasStatus 409 . hasCode "HostedZoneAlreadyExists"
+
+-- | The hosted zone you are trying to create for your VPC_ID does not belong
+-- to you. Route 53 returns this error when the VPC specified by 'VPCId'
+-- does not belong to you.
+_InvalidVPCId :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidVPCId = _ServiceError . hasStatus 400 . hasCode "InvalidVPCId"
diff --git a/gen/Network/AWS/Route53/Types/Product.hs b/gen/Network/AWS/Route53/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/Types/Product.hs
@@ -0,0 +1,1171 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Route53.Types.Product
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.Route53.Types.Product where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Route53.Internal
+import           Network.AWS.Route53.Types.Sum
+
+-- | /Alias resource record sets only:/ Information about the domain to which
+-- you are redirecting traffic.
+--
+-- For more information and an example, see
+-- <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html Creating Alias Resource Record Sets>
+-- in the /Amazon Route 53 Developer Guide/
+--
+-- .
+--
+-- /See:/ 'aliasTarget' smart constructor.
+data AliasTarget = AliasTarget'
+    { _atHostedZoneId         :: !Text
+    , _atDNSName              :: !Text
+    , _atEvaluateTargetHealth :: !Bool
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AliasTarget' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'atHostedZoneId'
+--
+-- * 'atDNSName'
+--
+-- * 'atEvaluateTargetHealth'
+aliasTarget
+    :: Text -- ^ 'atHostedZoneId'
+    -> Text -- ^ 'atDNSName'
+    -> Bool -- ^ 'atEvaluateTargetHealth'
+    -> AliasTarget
+aliasTarget pHostedZoneId_ pDNSName_ pEvaluateTargetHealth_ =
+    AliasTarget'
+    { _atHostedZoneId = pHostedZoneId_
+    , _atDNSName = pDNSName_
+    , _atEvaluateTargetHealth = pEvaluateTargetHealth_
+    }
+
+-- | /Alias resource record sets only:/ The value of the hosted zone ID for
+-- the AWS resource.
+--
+-- For more information and an example, see
+-- <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html Creating Alias Resource Record Sets>
+-- in the /Amazon Route 53 Developer Guide/
+--
+-- .
+atHostedZoneId :: Lens' AliasTarget Text
+atHostedZoneId = lens _atHostedZoneId (\ s a -> s{_atHostedZoneId = a});
+
+-- | /Alias resource record sets only:/ The external DNS name associated with
+-- the AWS Resource.
+--
+-- For more information and an example, see
+-- <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html 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
+-- <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html Creating Alias Resource Record Sets>
+-- in the /Amazon Route 53 Developer Guide/
+--
+-- .
+atEvaluateTargetHealth :: Lens' AliasTarget Bool
+atEvaluateTargetHealth = lens _atEvaluateTargetHealth (\ s a -> s{_atEvaluateTargetHealth = a});
+
+instance FromXML AliasTarget where
+        parseXML x
+          = AliasTarget' <$>
+              (x .@ "HostedZoneId") <*> (x .@ "DNSName") <*>
+                (x .@ "EvaluateTargetHealth")
+
+instance ToXML AliasTarget where
+        toXML AliasTarget'{..}
+          = mconcat
+              ["HostedZoneId" @= _atHostedZoneId,
+               "DNSName" @= _atDNSName,
+               "EvaluateTargetHealth" @= _atEvaluateTargetHealth]
+
+-- | A complex type that contains the information for each change in a change
+-- batch request.
+--
+-- /See:/ 'change' smart constructor.
+data Change = Change'
+    { _cAction            :: !ChangeAction
+    , _cResourceRecordSet :: !ResourceRecordSet
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Change' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cAction'
+--
+-- * 'cResourceRecordSet'
+change
+    :: ChangeAction -- ^ 'cAction'
+    -> ResourceRecordSet -- ^ 'cResourceRecordSet'
+    -> Change
+change pAction_ pResourceRecordSet_ =
+    Change'
+    { _cAction = pAction_
+    , _cResourceRecordSet = pResourceRecordSet_
+    }
+
+-- | The action to perform.
+--
+-- Valid values: 'CREATE' | 'DELETE' | 'UPSERT'
+cAction :: Lens' Change ChangeAction
+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 ToXML Change where
+        toXML Change'{..}
+          = mconcat
+              ["Action" @= _cAction,
+               "ResourceRecordSet" @= _cResourceRecordSet]
+
+-- | A complex type that contains an optional comment and the changes that
+-- you want to make with a change batch request.
+--
+-- /See:/ 'changeBatch' smart constructor.
+data ChangeBatch = ChangeBatch'
+    { _cbComment :: !(Maybe Text)
+    , _cbChanges :: !(List1 Change)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChangeBatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cbComment'
+--
+-- * 'cbChanges'
+changeBatch
+    :: NonEmpty Change -- ^ 'cbChanges'
+    -> ChangeBatch
+changeBatch pChanges_ =
+    ChangeBatch'
+    { _cbComment = Nothing
+    , _cbChanges = _List1 # pChanges_
+    }
+
+-- | /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});
+
+-- | 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;
+
+instance ToXML ChangeBatch where
+        toXML ChangeBatch'{..}
+          = mconcat
+              ["Comment" @= _cbComment,
+               "Changes" @= toXMLList "Change" _cbChanges]
+
+-- | 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.
+--
+-- /See:/ 'changeInfo' smart constructor.
+data ChangeInfo = ChangeInfo'
+    { _ciComment     :: !(Maybe Text)
+    , _ciId          :: !Text
+    , _ciStatus      :: !ChangeStatus
+    , _ciSubmittedAt :: !ISO8601
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChangeInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ciComment'
+--
+-- * 'ciId'
+--
+-- * 'ciStatus'
+--
+-- * 'ciSubmittedAt'
+changeInfo
+    :: Text -- ^ 'ciId'
+    -> ChangeStatus -- ^ 'ciStatus'
+    -> UTCTime -- ^ 'ciSubmittedAt'
+    -> ChangeInfo
+changeInfo pId_ pStatus_ pSubmittedAt_ =
+    ChangeInfo'
+    { _ciComment = Nothing
+    , _ciId = pId_
+    , _ciStatus = pStatus_
+    , _ciSubmittedAt = _Time # pSubmittedAt_
+    }
+
+-- | 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 ChangeStatus
+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")
+
+-- | A complex type that contains name server information.
+--
+-- /See:/ 'delegationSet' smart constructor.
+data DelegationSet = DelegationSet'
+    { _dsId              :: !(Maybe Text)
+    , _dsCallerReference :: !(Maybe Text)
+    , _dsNameServers     :: !(List1 Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DelegationSet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsId'
+--
+-- * 'dsCallerReference'
+--
+-- * 'dsNameServers'
+delegationSet
+    :: NonEmpty Text -- ^ 'dsNameServers'
+    -> DelegationSet
+delegationSet pNameServers_ =
+    DelegationSet'
+    { _dsId = Nothing
+    , _dsCallerReference = Nothing
+    , _dsNameServers = _List1 # pNameServers_
+    }
+
+-- | Undocumented member.
+dsId :: Lens' DelegationSet (Maybe Text)
+dsId = lens _dsId (\ s a -> s{_dsId = a});
+
+-- | Undocumented member.
+dsCallerReference :: Lens' DelegationSet (Maybe Text)
+dsCallerReference = lens _dsCallerReference (\ s a -> s{_dsCallerReference = 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 .@? "Id") <*> (x .@? "CallerReference") <*>
+                (x .@? "NameServers" .!@ mempty >>=
+                   parseXMLList1 "NameServer")
+
+-- | A complex type that contains information about a geo location.
+--
+-- /See:/ 'geoLocation' smart constructor.
+data GeoLocation = GeoLocation'
+    { _glSubdivisionCode :: !(Maybe Text)
+    , _glCountryCode     :: !(Maybe Text)
+    , _glContinentCode   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GeoLocation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'glSubdivisionCode'
+--
+-- * 'glCountryCode'
+--
+-- * 'glContinentCode'
+geoLocation
+    :: GeoLocation
+geoLocation =
+    GeoLocation'
+    { _glSubdivisionCode = Nothing
+    , _glCountryCode = Nothing
+    , _glContinentCode = Nothing
+    }
+
+-- | 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});
+
+-- | 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 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});
+
+instance FromXML GeoLocation where
+        parseXML x
+          = GeoLocation' <$>
+              (x .@? "SubdivisionCode") <*> (x .@? "CountryCode")
+                <*> (x .@? "ContinentCode")
+
+instance ToXML GeoLocation where
+        toXML GeoLocation'{..}
+          = mconcat
+              ["SubdivisionCode" @= _glSubdivisionCode,
+               "CountryCode" @= _glCountryCode,
+               "ContinentCode" @= _glContinentCode]
+
+-- | A complex type that contains information about a 'GeoLocation'.
+--
+-- /See:/ 'geoLocationDetails' smart constructor.
+data GeoLocationDetails = GeoLocationDetails'
+    { _gldSubdivisionName :: !(Maybe Text)
+    , _gldSubdivisionCode :: !(Maybe Text)
+    , _gldCountryName     :: !(Maybe Text)
+    , _gldCountryCode     :: !(Maybe Text)
+    , _gldContinentCode   :: !(Maybe Text)
+    , _gldContinentName   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GeoLocationDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gldSubdivisionName'
+--
+-- * 'gldSubdivisionCode'
+--
+-- * 'gldCountryName'
+--
+-- * 'gldCountryCode'
+--
+-- * 'gldContinentCode'
+--
+-- * 'gldContinentName'
+geoLocationDetails
+    :: GeoLocationDetails
+geoLocationDetails =
+    GeoLocationDetails'
+    { _gldSubdivisionName = Nothing
+    , _gldSubdivisionCode = Nothing
+    , _gldCountryName = Nothing
+    , _gldCountryCode = Nothing
+    , _gldContinentCode = Nothing
+    , _gldContinentName = Nothing
+    }
+
+-- | 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});
+
+-- | 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 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 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 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});
+
+instance FromXML GeoLocationDetails where
+        parseXML x
+          = GeoLocationDetails' <$>
+              (x .@? "SubdivisionName") <*>
+                (x .@? "SubdivisionCode")
+                <*> (x .@? "CountryName")
+                <*> (x .@? "CountryCode")
+                <*> (x .@? "ContinentCode")
+                <*> (x .@? "ContinentName")
+
+-- | A complex type that contains identifying information about the health
+-- check.
+--
+-- /See:/ 'healthCheck' smart constructor.
+data HealthCheck = HealthCheck'
+    { _hcId                 :: !Text
+    , _hcCallerReference    :: !Text
+    , _hcHealthCheckConfig  :: !HealthCheckConfig
+    , _hcHealthCheckVersion :: !Nat
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HealthCheck' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hcId'
+--
+-- * 'hcCallerReference'
+--
+-- * 'hcHealthCheckConfig'
+--
+-- * 'hcHealthCheckVersion'
+healthCheck
+    :: Text -- ^ 'hcId'
+    -> Text -- ^ 'hcCallerReference'
+    -> HealthCheckConfig -- ^ 'hcHealthCheckConfig'
+    -> Natural -- ^ 'hcHealthCheckVersion'
+    -> HealthCheck
+healthCheck pId_ pCallerReference_ pHealthCheckConfig_ pHealthCheckVersion_ =
+    HealthCheck'
+    { _hcId = pId_
+    , _hcCallerReference = pCallerReference_
+    , _hcHealthCheckConfig = pHealthCheckConfig_
+    , _hcHealthCheckVersion = _Nat # pHealthCheckVersion_
+    }
+
+-- | The ID of the specified health check.
+hcId :: Lens' HealthCheck Text
+hcId = lens _hcId (\ s a -> s{_hcId = a});
+
+-- | 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;
+
+instance FromXML HealthCheck where
+        parseXML x
+          = HealthCheck' <$>
+              (x .@ "Id") <*> (x .@ "CallerReference") <*>
+                (x .@ "HealthCheckConfig")
+                <*> (x .@ "HealthCheckVersion")
+
+-- | A complex type that contains the health check configuration.
+--
+-- /See:/ 'healthCheckConfig' smart constructor.
+data HealthCheckConfig = HealthCheckConfig'
+    { _hccIPAddress                :: !(Maybe Text)
+    , _hccFailureThreshold         :: !(Maybe Nat)
+    , _hccSearchString             :: !(Maybe Text)
+    , _hccResourcePath             :: !(Maybe Text)
+    , _hccFullyQualifiedDomainName :: !(Maybe Text)
+    , _hccRequestInterval          :: !(Maybe Nat)
+    , _hccPort                     :: !(Maybe Nat)
+    , _hccType                     :: !HealthCheckType
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HealthCheckConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hccIPAddress'
+--
+-- * 'hccFailureThreshold'
+--
+-- * 'hccSearchString'
+--
+-- * 'hccResourcePath'
+--
+-- * 'hccFullyQualifiedDomainName'
+--
+-- * 'hccRequestInterval'
+--
+-- * 'hccPort'
+--
+-- * 'hccType'
+healthCheckConfig
+    :: HealthCheckType -- ^ 'hccType'
+    -> HealthCheckConfig
+healthCheckConfig pType_ =
+    HealthCheckConfig'
+    { _hccIPAddress = Nothing
+    , _hccFailureThreshold = Nothing
+    , _hccSearchString = Nothing
+    , _hccResourcePath = Nothing
+    , _hccFullyQualifiedDomainName = Nothing
+    , _hccRequestInterval = Nothing
+    , _hccPort = Nothing
+    , _hccType = pType_
+    }
+
+-- | IP Address of the instance being checked.
+hccIPAddress :: Lens' HealthCheckConfig (Maybe Text)
+hccIPAddress = lens _hccIPAddress (\ s a -> s{_hccIPAddress = a});
+
+-- | 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;
+
+-- | 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});
+
+-- | 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});
+
+-- | Fully qualified domain name of the instance to be health checked.
+hccFullyQualifiedDomainName :: Lens' HealthCheckConfig (Maybe Text)
+hccFullyQualifiedDomainName = lens _hccFullyQualifiedDomainName (\ s a -> s{_hccFullyQualifiedDomainName = a});
+
+-- | 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;
+
+-- | 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 type of health check to be performed. Currently supported types are
+-- TCP, HTTP, HTTPS, HTTP_STR_MATCH, and HTTPS_STR_MATCH.
+hccType :: Lens' HealthCheckConfig HealthCheckType
+hccType = lens _hccType (\ s a -> s{_hccType = a});
+
+instance FromXML HealthCheckConfig where
+        parseXML x
+          = HealthCheckConfig' <$>
+              (x .@? "IPAddress") <*> (x .@? "FailureThreshold")
+                <*> (x .@? "SearchString")
+                <*> (x .@? "ResourcePath")
+                <*> (x .@? "FullyQualifiedDomainName")
+                <*> (x .@? "RequestInterval")
+                <*> (x .@? "Port")
+                <*> (x .@ "Type")
+
+instance ToXML HealthCheckConfig where
+        toXML HealthCheckConfig'{..}
+          = mconcat
+              ["IPAddress" @= _hccIPAddress,
+               "FailureThreshold" @= _hccFailureThreshold,
+               "SearchString" @= _hccSearchString,
+               "ResourcePath" @= _hccResourcePath,
+               "FullyQualifiedDomainName" @=
+                 _hccFullyQualifiedDomainName,
+               "RequestInterval" @= _hccRequestInterval,
+               "Port" @= _hccPort, "Type" @= _hccType]
+
+-- | A complex type that contains the IP address of a Route 53 health checker
+-- and the reason for the health check status.
+--
+-- /See:/ 'healthCheckObservation' smart constructor.
+data HealthCheckObservation = HealthCheckObservation'
+    { _hcoIPAddress    :: !(Maybe Text)
+    , _hcoStatusReport :: !(Maybe StatusReport)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HealthCheckObservation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hcoIPAddress'
+--
+-- * 'hcoStatusReport'
+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")
+
+-- | A complex type that contain information about the specified hosted zone.
+--
+-- /See:/ 'hostedZone' smart constructor.
+data HostedZone = HostedZone'
+    { _hzConfig                 :: !(Maybe HostedZoneConfig)
+    , _hzResourceRecordSetCount :: !(Maybe Integer)
+    , _hzId                     :: !Text
+    , _hzName                   :: !Text
+    , _hzCallerReference        :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HostedZone' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hzConfig'
+--
+-- * 'hzResourceRecordSetCount'
+--
+-- * 'hzId'
+--
+-- * 'hzName'
+--
+-- * 'hzCallerReference'
+hostedZone
+    :: Text -- ^ 'hzId'
+    -> Text -- ^ 'hzName'
+    -> Text -- ^ 'hzCallerReference'
+    -> HostedZone
+hostedZone pId_ pName_ pCallerReference_ =
+    HostedZone'
+    { _hzConfig = Nothing
+    , _hzResourceRecordSetCount = Nothing
+    , _hzId = pId_
+    , _hzName = pName_
+    , _hzCallerReference = pCallerReference_
+    }
+
+-- | A complex type that contains the 'Comment' element.
+hzConfig :: Lens' HostedZone (Maybe HostedZoneConfig)
+hzConfig = lens _hzConfig (\ s a -> s{_hzConfig = a});
+
+-- | Total number of resource record sets in the hosted zone.
+hzResourceRecordSetCount :: Lens' HostedZone (Maybe Integer)
+hzResourceRecordSetCount = lens _hzResourceRecordSetCount (\ s a -> s{_hzResourceRecordSetCount = 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});
+
+-- | A unique string that identifies the request to create the hosted zone.
+hzCallerReference :: Lens' HostedZone Text
+hzCallerReference = lens _hzCallerReference (\ s a -> s{_hzCallerReference = a});
+
+instance FromXML HostedZone where
+        parseXML x
+          = HostedZone' <$>
+              (x .@? "Config") <*> (x .@? "ResourceRecordSetCount")
+                <*> (x .@ "Id")
+                <*> (x .@ "Name")
+                <*> (x .@ "CallerReference")
+
+-- | A complex type that contains 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.
+--
+-- /See:/ 'hostedZoneConfig' smart constructor.
+data HostedZoneConfig = HostedZoneConfig'
+    { _hzcPrivateZone :: !(Maybe Bool)
+    , _hzcComment     :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HostedZoneConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hzcPrivateZone'
+--
+-- * 'hzcComment'
+hostedZoneConfig
+    :: HostedZoneConfig
+hostedZoneConfig =
+    HostedZoneConfig'
+    { _hzcPrivateZone = Nothing
+    , _hzcComment = Nothing
+    }
+
+-- | 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});
+
+-- | 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});
+
+instance FromXML HostedZoneConfig where
+        parseXML x
+          = HostedZoneConfig' <$>
+              (x .@? "PrivateZone") <*> (x .@? "Comment")
+
+instance ToXML HostedZoneConfig where
+        toXML HostedZoneConfig'{..}
+          = mconcat
+              ["PrivateZone" @= _hzcPrivateZone,
+               "Comment" @= _hzcComment]
+
+-- | A complex type that contains the value of the 'Value' element for the
+-- current resource record set.
+--
+-- /See:/ 'resourceRecord' smart constructor.
+newtype ResourceRecord = ResourceRecord'
+    { _rrValue :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourceRecord' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrValue'
+resourceRecord
+    :: Text -- ^ 'rrValue'
+    -> ResourceRecord
+resourceRecord pValue_ =
+    ResourceRecord'
+    { _rrValue = pValue_
+    }
+
+-- | 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'{..}
+          = mconcat ["Value" @= _rrValue]
+
+-- | A complex type that contains information about the current resource
+-- record set.
+--
+-- /See:/ 'resourceRecordSet' smart constructor.
+data ResourceRecordSet = ResourceRecordSet'
+    { _rrsResourceRecords :: !(Maybe (List1 ResourceRecord))
+    , _rrsTTL             :: !(Maybe Nat)
+    , _rrsAliasTarget     :: !(Maybe AliasTarget)
+    , _rrsWeight          :: !(Maybe Nat)
+    , _rrsSetIdentifier   :: !(Maybe Text)
+    , _rrsFailover        :: !(Maybe Failover)
+    , _rrsHealthCheckId   :: !(Maybe Text)
+    , _rrsRegion          :: !(Maybe Region)
+    , _rrsGeoLocation     :: !(Maybe GeoLocation)
+    , _rrsName            :: !Text
+    , _rrsType            :: !RecordType
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourceRecordSet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrsResourceRecords'
+--
+-- * 'rrsTTL'
+--
+-- * 'rrsAliasTarget'
+--
+-- * 'rrsWeight'
+--
+-- * 'rrsSetIdentifier'
+--
+-- * 'rrsFailover'
+--
+-- * 'rrsHealthCheckId'
+--
+-- * 'rrsRegion'
+--
+-- * 'rrsGeoLocation'
+--
+-- * 'rrsName'
+--
+-- * 'rrsType'
+resourceRecordSet
+    :: Text -- ^ 'rrsName'
+    -> RecordType -- ^ 'rrsType'
+    -> ResourceRecordSet
+resourceRecordSet pName_ pType_ =
+    ResourceRecordSet'
+    { _rrsResourceRecords = Nothing
+    , _rrsTTL = Nothing
+    , _rrsAliasTarget = Nothing
+    , _rrsWeight = Nothing
+    , _rrsSetIdentifier = Nothing
+    , _rrsFailover = Nothing
+    , _rrsHealthCheckId = Nothing
+    , _rrsRegion = Nothing
+    , _rrsGeoLocation = Nothing
+    , _rrsName = pName_
+    , _rrsType = pType_
+    }
+
+-- | A complex type that contains the resource records for the current
+-- resource record set.
+rrsResourceRecords :: Lens' ResourceRecordSet (Maybe (NonEmpty ResourceRecord))
+rrsResourceRecords = lens _rrsResourceRecords (\ s a -> s{_rrsResourceRecords = a}) . mapping _List1;
+
+-- | 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;
+
+-- | /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});
+
+-- | /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;
+
+-- | /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});
+
+-- | /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 Failover)
+rrsFailover = lens _rrsFailover (\ s a -> s{_rrsFailover = 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});
+
+-- | /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 Region)
+rrsRegion = lens _rrsRegion (\ s a -> s{_rrsRegion = 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});
+
+-- | The domain name of the current resource record set.
+rrsName :: Lens' ResourceRecordSet Text
+rrsName = lens _rrsName (\ s a -> s{_rrsName = a});
+
+-- | The type of the current resource record set.
+rrsType :: Lens' ResourceRecordSet RecordType
+rrsType = lens _rrsType (\ s a -> s{_rrsType = a});
+
+instance FromXML ResourceRecordSet where
+        parseXML x
+          = ResourceRecordSet' <$>
+              (x .@? "ResourceRecords" .!@ mempty >>=
+                 may (parseXMLList1 "ResourceRecord"))
+                <*> (x .@? "TTL")
+                <*> (x .@? "AliasTarget")
+                <*> (x .@? "Weight")
+                <*> (x .@? "SetIdentifier")
+                <*> (x .@? "Failover")
+                <*> (x .@? "HealthCheckId")
+                <*> (x .@? "Region")
+                <*> (x .@? "GeoLocation")
+                <*> (x .@ "Name")
+                <*> (x .@ "Type")
+
+instance ToXML ResourceRecordSet where
+        toXML ResourceRecordSet'{..}
+          = mconcat
+              ["ResourceRecords" @=
+                 toXML
+                   (toXMLList "ResourceRecord" <$> _rrsResourceRecords),
+               "TTL" @= _rrsTTL, "AliasTarget" @= _rrsAliasTarget,
+               "Weight" @= _rrsWeight,
+               "SetIdentifier" @= _rrsSetIdentifier,
+               "Failover" @= _rrsFailover,
+               "HealthCheckId" @= _rrsHealthCheckId,
+               "Region" @= _rrsRegion,
+               "GeoLocation" @= _rrsGeoLocation, "Name" @= _rrsName,
+               "Type" @= _rrsType]
+
+-- | A complex type containing a resource and its associated tags.
+--
+-- /See:/ 'resourceTagSet' smart constructor.
+data ResourceTagSet = ResourceTagSet'
+    { _rtsResourceId   :: !(Maybe Text)
+    , _rtsResourceType :: !(Maybe TagResourceType)
+    , _rtsTags         :: !(Maybe (List1 Tag))
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourceTagSet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rtsResourceId'
+--
+-- * 'rtsResourceType'
+--
+-- * 'rtsTags'
+resourceTagSet
+    :: ResourceTagSet
+resourceTagSet =
+    ResourceTagSet'
+    { _rtsResourceId = Nothing
+    , _rtsResourceType = Nothing
+    , _rtsTags = 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'.
+--
+-- - The resource type for hosted zones is 'hostedzone'.
+rtsResourceType :: Lens' ResourceTagSet (Maybe TagResourceType)
+rtsResourceType = lens _rtsResourceType (\ s a -> s{_rtsResourceType = a});
+
+-- | The tags associated with the specified resource.
+rtsTags :: Lens' ResourceTagSet (Maybe (NonEmpty Tag))
+rtsTags = lens _rtsTags (\ s a -> s{_rtsTags = a}) . mapping _List1;
+
+instance FromXML ResourceTagSet where
+        parseXML x
+          = ResourceTagSet' <$>
+              (x .@? "ResourceId") <*> (x .@? "ResourceType") <*>
+                (x .@? "Tags" .!@ mempty >>=
+                   may (parseXMLList1 "Tag"))
+
+-- | A complex type that contains information about the health check status
+-- for the current observation.
+--
+-- /See:/ 'statusReport' smart constructor.
+data StatusReport = StatusReport'
+    { _srStatus      :: !(Maybe Text)
+    , _srCheckedTime :: !(Maybe ISO8601)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StatusReport' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srStatus'
+--
+-- * 'srCheckedTime'
+statusReport
+    :: StatusReport
+statusReport =
+    StatusReport'
+    { _srStatus = Nothing
+    , _srCheckedTime = Nothing
+    }
+
+-- | The observed health check status.
+srStatus :: Lens' StatusReport (Maybe Text)
+srStatus = lens _srStatus (\ s a -> s{_srStatus = a});
+
+-- | 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;
+
+instance FromXML StatusReport where
+        parseXML x
+          = StatusReport' <$>
+              (x .@? "Status") <*> (x .@? "CheckedTime")
+
+-- | A single tag containing a key and value.
+--
+-- /See:/ 'tag' smart constructor.
+data Tag = Tag'
+    { _tagValue :: !(Maybe Text)
+    , _tagKey   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Tag' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tagValue'
+--
+-- * 'tagKey'
+tag
+    :: Tag
+tag =
+    Tag'
+    { _tagValue = Nothing
+    , _tagKey = Nothing
+    }
+
+-- | The value for a 'Tag'.
+tagValue :: Lens' Tag (Maybe Text)
+tagValue = lens _tagValue (\ s a -> s{_tagValue = a});
+
+-- | The key for a 'Tag'.
+tagKey :: Lens' Tag (Maybe Text)
+tagKey = lens _tagKey (\ s a -> s{_tagKey = a});
+
+instance FromXML Tag where
+        parseXML x
+          = Tag' <$> (x .@? "Value") <*> (x .@? "Key")
+
+instance ToXML Tag where
+        toXML Tag'{..}
+          = mconcat ["Value" @= _tagValue, "Key" @= _tagKey]
+
+-- | /See:/ 'vpc' smart constructor.
+data VPC = VPC'
+    { _vpcVPCRegion :: !(Maybe VPCRegion)
+    , _vpcVPCId     :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VPC' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vpcVPCRegion'
+--
+-- * 'vpcVPCId'
+vpc
+    :: VPC
+vpc =
+    VPC'
+    { _vpcVPCRegion = Nothing
+    , _vpcVPCId = Nothing
+    }
+
+-- | Undocumented member.
+vpcVPCRegion :: Lens' VPC (Maybe VPCRegion)
+vpcVPCRegion = lens _vpcVPCRegion (\ s a -> s{_vpcVPCRegion = a});
+
+-- | Undocumented member.
+vpcVPCId :: Lens' VPC (Maybe Text)
+vpcVPCId = lens _vpcVPCId (\ s a -> s{_vpcVPCId = a});
+
+instance FromXML VPC where
+        parseXML x
+          = VPC' <$> (x .@? "VPCRegion") <*> (x .@? "VPCId")
+
+instance ToXML VPC where
+        toXML VPC'{..}
+          = mconcat
+              ["VPCRegion" @= _vpcVPCRegion, "VPCId" @= _vpcVPCId]
diff --git a/gen/Network/AWS/Route53/Types/Sum.hs b/gen/Network/AWS/Route53/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/Types/Sum.hs
@@ -0,0 +1,271 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Route53.Types.Sum
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.Route53.Types.Sum where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Route53.Internal
+
+data ChangeAction
+    = Create
+    | Delete
+    | Upsert
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ChangeAction where
+    parser = takeLowerText >>= \case
+        "create" -> pure Create
+        "delete" -> pure Delete
+        "upsert" -> pure Upsert
+        e -> fromTextError $ "Failure parsing ChangeAction from value: '" <> e
+           <> "'. Accepted values: create, delete, upsert"
+
+instance ToText ChangeAction where
+    toText = \case
+        Create -> "create"
+        Delete -> "delete"
+        Upsert -> "upsert"
+
+instance Hashable     ChangeAction
+instance ToByteString ChangeAction
+instance ToQuery      ChangeAction
+instance ToHeader     ChangeAction
+
+instance ToXML ChangeAction where
+    toXML = toXMLText
+
+data ChangeStatus
+    = Insync
+    | Pending
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ChangeStatus where
+    parser = takeLowerText >>= \case
+        "insync" -> pure Insync
+        "pending" -> pure Pending
+        e -> fromTextError $ "Failure parsing ChangeStatus from value: '" <> e
+           <> "'. Accepted values: insync, pending"
+
+instance ToText ChangeStatus where
+    toText = \case
+        Insync -> "insync"
+        Pending -> "pending"
+
+instance Hashable     ChangeStatus
+instance ToByteString ChangeStatus
+instance ToQuery      ChangeStatus
+instance ToHeader     ChangeStatus
+
+instance FromXML ChangeStatus where
+    parseXML = parseXMLText "ChangeStatus"
+
+data Failover
+    = Primary
+    | Secondary
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText Failover where
+    parser = takeLowerText >>= \case
+        "primary" -> pure Primary
+        "secondary" -> pure Secondary
+        e -> fromTextError $ "Failure parsing Failover from value: '" <> e
+           <> "'. Accepted values: primary, secondary"
+
+instance ToText Failover where
+    toText = \case
+        Primary -> "primary"
+        Secondary -> "secondary"
+
+instance Hashable     Failover
+instance ToByteString Failover
+instance ToQuery      Failover
+instance ToHeader     Failover
+
+instance FromXML Failover where
+    parseXML = parseXMLText "Failover"
+
+instance ToXML Failover where
+    toXML = toXMLText
+
+data HealthCheckType
+    = HTTP
+    | HTTPS
+    | HTTPSStrMatch
+    | HTTPStrMatch
+    | TCP
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText HealthCheckType where
+    parser = takeLowerText >>= \case
+        "http" -> pure HTTP
+        "https" -> pure HTTPS
+        "https_str_match" -> pure HTTPSStrMatch
+        "http_str_match" -> pure HTTPStrMatch
+        "tcp" -> pure TCP
+        e -> fromTextError $ "Failure parsing HealthCheckType from value: '" <> e
+           <> "'. Accepted values: http, https, https_str_match, http_str_match, tcp"
+
+instance ToText HealthCheckType where
+    toText = \case
+        HTTP -> "http"
+        HTTPS -> "https"
+        HTTPSStrMatch -> "https_str_match"
+        HTTPStrMatch -> "http_str_match"
+        TCP -> "tcp"
+
+instance Hashable     HealthCheckType
+instance ToByteString HealthCheckType
+instance ToQuery      HealthCheckType
+instance ToHeader     HealthCheckType
+
+instance FromXML HealthCheckType where
+    parseXML = parseXMLText "HealthCheckType"
+
+instance ToXML HealthCheckType where
+    toXML = toXMLText
+
+data RecordType
+    = A
+    | Aaaa
+    | Cname
+    | MX
+    | NS
+    | Ptr
+    | Soa
+    | Spf
+    | Srv
+    | Txt
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText RecordType where
+    parser = takeLowerText >>= \case
+        "a" -> pure A
+        "aaaa" -> pure Aaaa
+        "cname" -> pure Cname
+        "mx" -> pure MX
+        "ns" -> pure NS
+        "ptr" -> pure Ptr
+        "soa" -> pure Soa
+        "spf" -> pure Spf
+        "srv" -> pure Srv
+        "txt" -> pure Txt
+        e -> fromTextError $ "Failure parsing RecordType from value: '" <> e
+           <> "'. Accepted values: a, aaaa, cname, mx, ns, ptr, soa, spf, srv, txt"
+
+instance ToText RecordType where
+    toText = \case
+        A -> "a"
+        Aaaa -> "aaaa"
+        Cname -> "cname"
+        MX -> "mx"
+        NS -> "ns"
+        Ptr -> "ptr"
+        Soa -> "soa"
+        Spf -> "spf"
+        Srv -> "srv"
+        Txt -> "txt"
+
+instance Hashable     RecordType
+instance ToByteString RecordType
+instance ToQuery      RecordType
+instance ToHeader     RecordType
+
+instance FromXML RecordType where
+    parseXML = parseXMLText "RecordType"
+
+instance ToXML RecordType where
+    toXML = toXMLText
+
+data TagResourceType
+    = Healthcheck
+    | Hostedzone
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText TagResourceType where
+    parser = takeLowerText >>= \case
+        "healthcheck" -> pure Healthcheck
+        "hostedzone" -> pure Hostedzone
+        e -> fromTextError $ "Failure parsing TagResourceType from value: '" <> e
+           <> "'. Accepted values: healthcheck, hostedzone"
+
+instance ToText TagResourceType where
+    toText = \case
+        Healthcheck -> "healthcheck"
+        Hostedzone -> "hostedzone"
+
+instance Hashable     TagResourceType
+instance ToByteString TagResourceType
+instance ToQuery      TagResourceType
+instance ToHeader     TagResourceType
+
+instance FromXML TagResourceType where
+    parseXML = parseXMLText "TagResourceType"
+
+instance ToXML TagResourceType where
+    toXML = toXMLText
+
+data VPCRegion
+    = ApNortheast1
+    | ApSoutheast1
+    | ApSoutheast2
+    | CnNorth1
+    | EuCentral1
+    | EuWest1
+    | SaEast1
+    | UsEast1
+    | UsWest1
+    | UsWest2
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText VPCRegion where
+    parser = takeLowerText >>= \case
+        "ap-northeast-1" -> pure ApNortheast1
+        "ap-southeast-1" -> pure ApSoutheast1
+        "ap-southeast-2" -> pure ApSoutheast2
+        "cn-north-1" -> pure CnNorth1
+        "eu-central-1" -> pure EuCentral1
+        "eu-west-1" -> pure EuWest1
+        "sa-east-1" -> pure SaEast1
+        "us-east-1" -> pure UsEast1
+        "us-west-1" -> pure UsWest1
+        "us-west-2" -> pure UsWest2
+        e -> fromTextError $ "Failure parsing VPCRegion from value: '" <> e
+           <> "'. Accepted values: ap-northeast-1, ap-southeast-1, ap-southeast-2, cn-north-1, eu-central-1, eu-west-1, sa-east-1, us-east-1, us-west-1, us-west-2"
+
+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 Hashable     VPCRegion
+instance ToByteString VPCRegion
+instance ToQuery      VPCRegion
+instance ToHeader     VPCRegion
+
+instance FromXML VPCRegion where
+    parseXML = parseXMLText "VPCRegion"
+
+instance ToXML VPCRegion where
+    toXML = toXMLText
diff --git a/gen/Network/AWS/Route53/UpdateHealthCheck.hs b/gen/Network/AWS/Route53/UpdateHealthCheck.hs
--- a/gen/Network/AWS/Route53/UpdateHealthCheck.hs
+++ b/gen/Network/AWS/Route53/UpdateHealthCheck.hs
@@ -1,221 +1,236 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | This action updates an existing health check.
+-- 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.
+-- 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>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_UpdateHealthCheck.html AWS API Reference> for UpdateHealthCheck.
 module Network.AWS.Route53.UpdateHealthCheck
     (
-    -- * Request
-      UpdateHealthCheck
-    -- ** Request constructor
-    , updateHealthCheck
-    -- ** Request lenses
+    -- * Creating a Request
+      updateHealthCheck
+    , UpdateHealthCheck
+    -- * Request Lenses
+    , uhcIPAddress
     , uhcFailureThreshold
-    , uhcFullyQualifiedDomainName
-    , uhcHealthCheckId
+    , uhcSearchString
+    , uhcResourcePath
     , uhcHealthCheckVersion
-    , uhcIPAddress
+    , uhcFullyQualifiedDomainName
     , uhcPort
-    , uhcResourcePath
-    , uhcSearchString
+    , uhcHealthCheckId
 
-    -- * Response
-    , UpdateHealthCheckResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , updateHealthCheckResponse
-    -- ** Response lenses
-    , uhcrHealthCheck
+    , UpdateHealthCheckResponse
+    -- * Response Lenses
+    , uhcrsStatus
+    , uhcrsHealthCheck
     ) 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, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
--- | 'UpdateHealthCheck' constructor.
+-- | >A complex type that contains information about the request to update a
+-- health check.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'updateHealthCheck' smart constructor.
+data UpdateHealthCheck = UpdateHealthCheck'
+    { _uhcIPAddress                :: !(Maybe Text)
+    , _uhcFailureThreshold         :: !(Maybe Nat)
+    , _uhcSearchString             :: !(Maybe Text)
+    , _uhcResourcePath             :: !(Maybe Text)
+    , _uhcHealthCheckVersion       :: !(Maybe Nat)
+    , _uhcFullyQualifiedDomainName :: !(Maybe Text)
+    , _uhcPort                     :: !(Maybe Nat)
+    , _uhcHealthCheckId            :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateHealthCheck' with the minimum fields required to make a request.
 --
--- * 'uhcFailureThreshold' @::@ 'Maybe' 'Natural'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'uhcFullyQualifiedDomainName' @::@ 'Maybe' 'Text'
+-- * 'uhcIPAddress'
 --
--- * 'uhcHealthCheckId' @::@ 'Text'
+-- * 'uhcFailureThreshold'
 --
--- * 'uhcHealthCheckVersion' @::@ 'Maybe' 'Natural'
+-- * 'uhcSearchString'
 --
--- * 'uhcIPAddress' @::@ 'Maybe' 'Text'
+-- * 'uhcResourcePath'
 --
--- * 'uhcPort' @::@ 'Maybe' 'Natural'
+-- * 'uhcHealthCheckVersion'
 --
--- * 'uhcResourcePath' @::@ 'Maybe' 'Text'
+-- * 'uhcFullyQualifiedDomainName'
 --
--- * 'uhcSearchString' @::@ 'Maybe' 'Text'
+-- * 'uhcPort'
 --
-updateHealthCheck :: Text -- ^ 'uhcHealthCheckId'
-                  -> UpdateHealthCheck
-updateHealthCheck p1 = UpdateHealthCheck
-    { _uhcHealthCheckId            = p1
-    , _uhcHealthCheckVersion       = Nothing
-    , _uhcIPAddress                = Nothing
-    , _uhcPort                     = Nothing
-    , _uhcResourcePath             = Nothing
+-- * 'uhcHealthCheckId'
+updateHealthCheck
+    :: Text -- ^ 'uhcHealthCheckId'
+    -> UpdateHealthCheck
+updateHealthCheck pHealthCheckId_ =
+    UpdateHealthCheck'
+    { _uhcIPAddress = Nothing
+    , _uhcFailureThreshold = Nothing
+    , _uhcSearchString = Nothing
+    , _uhcResourcePath = Nothing
+    , _uhcHealthCheckVersion = Nothing
     , _uhcFullyQualifiedDomainName = Nothing
-    , _uhcSearchString             = Nothing
-    , _uhcFailureThreshold         = Nothing
+    , _uhcPort = Nothing
+    , _uhcHealthCheckId = pHealthCheckId_
     }
 
--- | 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.
+-- | The IP address of the resource that you want to check.
 --
--- 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.
+uhcIPAddress :: Lens' UpdateHealthCheck (Maybe Text)
+uhcIPAddress = lens _uhcIPAddress (\ s a -> s{_uhcIPAddress = a});
+
+-- | 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
+uhcFailureThreshold = lens _uhcFailureThreshold (\ s a -> s{_uhcFailureThreshold = a}) . mapping _Nat;
 
--- | Fully qualified domain name of the instance to be health checked.
+-- | 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.
-uhcFullyQualifiedDomainName :: Lens' UpdateHealthCheck (Maybe Text)
-uhcFullyQualifiedDomainName =
-    lens _uhcFullyQualifiedDomainName
-        (\s a -> s { _uhcFullyQualifiedDomainName = a })
+uhcSearchString :: Lens' UpdateHealthCheck (Maybe Text)
+uhcSearchString = lens _uhcSearchString (\ s a -> s{_uhcSearchString = a});
 
--- | The ID of the health check to update.
-uhcHealthCheckId :: Lens' UpdateHealthCheck Text
-uhcHealthCheckId = lens _uhcHealthCheckId (\s a -> s { _uhcHealthCheckId = a })
+-- | 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});
 
--- | 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.
+-- | 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
+uhcHealthCheckVersion = lens _uhcHealthCheckVersion (\ s a -> s{_uhcHealthCheckVersion = a}) . mapping _Nat;
 
--- | The IP address of the resource that you want to check.
+-- | Fully qualified domain name of the instance to be health checked.
 --
 -- Specify this value only if you want to change it.
-uhcIPAddress :: Lens' UpdateHealthCheck (Maybe Text)
-uhcIPAddress = lens _uhcIPAddress (\s a -> s { _uhcIPAddress = a })
+uhcFullyQualifiedDomainName :: Lens' UpdateHealthCheck (Maybe Text)
+uhcFullyQualifiedDomainName = lens _uhcFullyQualifiedDomainName (\ s a -> s{_uhcFullyQualifiedDomainName = a});
 
--- | The port on which you want Route 53 to open a connection to perform health
--- checks.
+-- | 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 })
+uhcPort = lens _uhcPort (\ s a -> s{_uhcPort = a}) . mapping _Nat;
 
--- | 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 })
+-- | The ID of the health check to update.
+uhcHealthCheckId :: Lens' UpdateHealthCheck Text
+uhcHealthCheckId = lens _uhcHealthCheckId (\ s a -> s{_uhcHealthCheckId = a});
 
-newtype UpdateHealthCheckResponse = UpdateHealthCheckResponse
-    { _uhcrHealthCheck :: HealthCheck
-    } deriving (Eq, Read, Show)
+instance AWSRequest UpdateHealthCheck where
+        type Sv UpdateHealthCheck = Route53
+        type Rs UpdateHealthCheck = UpdateHealthCheckResponse
+        request = postXML
+        response
+          = receiveXML
+              (\ s h x ->
+                 UpdateHealthCheckResponse' <$>
+                   (pure (fromEnum s)) <*> (x .@ "HealthCheck"))
 
--- | 'UpdateHealthCheckResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'uhcrHealthCheck' @::@ 'HealthCheck'
---
-updateHealthCheckResponse :: HealthCheck -- ^ 'uhcrHealthCheck'
-                          -> UpdateHealthCheckResponse
-updateHealthCheckResponse p1 = UpdateHealthCheckResponse
-    { _uhcrHealthCheck = p1
-    }
+instance ToElement UpdateHealthCheck where
+        toElement
+          = mkElement
+              "{https://route53.amazonaws.com/doc/2013-04-01/}UpdateHealthCheckRequest"
 
-uhcrHealthCheck :: Lens' UpdateHealthCheckResponse HealthCheck
-uhcrHealthCheck = lens _uhcrHealthCheck (\s a -> s { _uhcrHealthCheck = a })
+instance ToHeaders UpdateHealthCheck where
+        toHeaders = const mempty
 
 instance ToPath UpdateHealthCheck where
-    toPath UpdateHealthCheck{..} = mconcat
-        [ "/2013-04-01/healthcheck/"
-        , toText _uhcHealthCheckId
-        ]
+        toPath UpdateHealthCheck'{..}
+          = mconcat
+              ["/2013-04-01/healthcheck/", toBS _uhcHealthCheckId]
 
 instance ToQuery UpdateHealthCheck where
-    toQuery = const mempty
-
-instance ToHeaders UpdateHealthCheck
+        toQuery = const mempty
 
-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 where
+        toXML UpdateHealthCheck'{..}
+          = mconcat
+              ["IPAddress" @= _uhcIPAddress,
+               "FailureThreshold" @= _uhcFailureThreshold,
+               "SearchString" @= _uhcSearchString,
+               "ResourcePath" @= _uhcResourcePath,
+               "HealthCheckVersion" @= _uhcHealthCheckVersion,
+               "FullyQualifiedDomainName" @=
+                 _uhcFullyQualifiedDomainName,
+               "Port" @= _uhcPort]
 
-instance ToXML UpdateHealthCheck
+-- | /See:/ 'updateHealthCheckResponse' smart constructor.
+data UpdateHealthCheckResponse = UpdateHealthCheckResponse'
+    { _uhcrsStatus      :: !Int
+    , _uhcrsHealthCheck :: !HealthCheck
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest UpdateHealthCheck where
-    type Sv UpdateHealthCheck = Route53
-    type Rs UpdateHealthCheck = UpdateHealthCheckResponse
+-- | Creates a value of 'UpdateHealthCheckResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uhcrsStatus'
+--
+-- * 'uhcrsHealthCheck'
+updateHealthCheckResponse
+    :: Int -- ^ 'uhcrsStatus'
+    -> HealthCheck -- ^ 'uhcrsHealthCheck'
+    -> UpdateHealthCheckResponse
+updateHealthCheckResponse pStatus_ pHealthCheck_ =
+    UpdateHealthCheckResponse'
+    { _uhcrsStatus = pStatus_
+    , _uhcrsHealthCheck = pHealthCheck_
+    }
 
-    request  = post
-    response = xmlResponse
+-- | The response status code.
+uhcrsStatus :: Lens' UpdateHealthCheckResponse Int
+uhcrsStatus = lens _uhcrsStatus (\ s a -> s{_uhcrsStatus = a});
 
-instance FromXML UpdateHealthCheckResponse where
-    parseXML x = UpdateHealthCheckResponse
-        <$> x .@  "HealthCheck"
+-- | Undocumented member.
+uhcrsHealthCheck :: Lens' UpdateHealthCheckResponse HealthCheck
+uhcrsHealthCheck = lens _uhcrsHealthCheck (\ s a -> s{_uhcrsHealthCheck = a});
diff --git a/gen/Network/AWS/Route53/UpdateHostedZoneComment.hs b/gen/Network/AWS/Route53/UpdateHostedZoneComment.hs
--- a/gen/Network/AWS/Route53/UpdateHostedZoneComment.hs
+++ b/gen/Network/AWS/Route53/UpdateHostedZoneComment.hs
@@ -1,128 +1,147 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.Route53.UpdateHostedZoneComment
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | To update the hosted zone comment, send a 'POST' request to the '2013-04-01/hostedzone//hosted zone ID/ resource. The request body must include an XML document with a 'UpdateHostedZoneCommentRequest' element. The response to this request includes
--- the modified 'HostedZone' element.
+-- To update the hosted zone comment, send a 'POST' request to the
+-- '2013-04-01\/hostedzone\/hosted zone ID' resource. The request body must
+-- include an XML document with a 'UpdateHostedZoneCommentRequest' element.
+-- The response to this request includes the modified 'HostedZone' element.
 --
 -- The comment can have a maximum length of 256 characters.
 --
--- <http://docs.aws.amazon.com/Route53/latest/APIReference/API_UpdateHostedZoneComment.html>
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_UpdateHostedZoneComment.html AWS API Reference> for UpdateHostedZoneComment.
 module Network.AWS.Route53.UpdateHostedZoneComment
     (
-    -- * Request
-      UpdateHostedZoneComment
-    -- ** Request constructor
-    , updateHostedZoneComment
-    -- ** Request lenses
+    -- * Creating a Request
+      updateHostedZoneComment
+    , UpdateHostedZoneComment
+    -- * Request Lenses
     , uhzcComment
     , uhzcId
 
-    -- * Response
-    , UpdateHostedZoneCommentResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , updateHostedZoneCommentResponse
-    -- ** Response lenses
-    , uhzcrHostedZone
+    , UpdateHostedZoneCommentResponse
+    -- * Response Lenses
+    , uhzcrsStatus
+    , uhzcrsHostedZone
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.Route53.Types
-import qualified GHC.Exts
-
-data UpdateHostedZoneComment = UpdateHostedZoneComment
-    { _uhzcComment :: Maybe Text
-    , _uhzcId      :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
 
--- | 'UpdateHostedZoneComment' constructor.
+-- | A complex type that contains information about the request to update a
+-- hosted zone comment.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'updateHostedZoneComment' smart constructor.
+data UpdateHostedZoneComment = UpdateHostedZoneComment'
+    { _uhzcComment :: !(Maybe Text)
+    , _uhzcId      :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateHostedZoneComment' with the minimum fields required to make a request.
 --
--- * 'uhzcComment' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'uhzcId' @::@ 'Text'
+-- * 'uhzcComment'
 --
-updateHostedZoneComment :: Text -- ^ 'uhzcId'
-                        -> UpdateHostedZoneComment
-updateHostedZoneComment p1 = UpdateHostedZoneComment
-    { _uhzcId      = p1
-    , _uhzcComment = Nothing
+-- * 'uhzcId'
+updateHostedZoneComment
+    :: Text -- ^ 'uhzcId'
+    -> UpdateHostedZoneComment
+updateHostedZoneComment pId_ =
+    UpdateHostedZoneComment'
+    { _uhzcComment = Nothing
+    , _uhzcId = pId_
     }
 
 -- | A comment about your hosted zone.
 uhzcComment :: Lens' UpdateHostedZoneComment (Maybe Text)
-uhzcComment = lens _uhzcComment (\s a -> s { _uhzcComment = a })
+uhzcComment = lens _uhzcComment (\ s a -> s{_uhzcComment = a});
 
 -- | The ID of the hosted zone you want to update.
 uhzcId :: Lens' UpdateHostedZoneComment Text
-uhzcId = lens _uhzcId (\s a -> s { _uhzcId = a })
+uhzcId = lens _uhzcId (\ s a -> s{_uhzcId = a});
 
-newtype UpdateHostedZoneCommentResponse = UpdateHostedZoneCommentResponse
-    { _uhzcrHostedZone :: HostedZone
-    } deriving (Eq, Read, Show)
+instance AWSRequest UpdateHostedZoneComment where
+        type Sv UpdateHostedZoneComment = Route53
+        type Rs UpdateHostedZoneComment =
+             UpdateHostedZoneCommentResponse
+        request = postXML
+        response
+          = receiveXML
+              (\ s h x ->
+                 UpdateHostedZoneCommentResponse' <$>
+                   (pure (fromEnum s)) <*> (x .@ "HostedZone"))
 
--- | 'UpdateHostedZoneCommentResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'uhzcrHostedZone' @::@ 'HostedZone'
---
-updateHostedZoneCommentResponse :: HostedZone -- ^ 'uhzcrHostedZone'
-                                -> UpdateHostedZoneCommentResponse
-updateHostedZoneCommentResponse p1 = UpdateHostedZoneCommentResponse
-    { _uhzcrHostedZone = p1
-    }
+instance ToElement UpdateHostedZoneComment where
+        toElement
+          = mkElement
+              "{https://route53.amazonaws.com/doc/2013-04-01/}UpdateHostedZoneCommentRequest"
 
-uhzcrHostedZone :: Lens' UpdateHostedZoneCommentResponse HostedZone
-uhzcrHostedZone = lens _uhzcrHostedZone (\s a -> s { _uhzcrHostedZone = a })
+instance ToHeaders UpdateHostedZoneComment where
+        toHeaders = const mempty
 
 instance ToPath UpdateHostedZoneComment where
-    toPath UpdateHostedZoneComment{..} = mconcat
-        [ "/2013-04-01/hostedzone/"
-        , toText _uhzcId
-        ]
+        toPath UpdateHostedZoneComment'{..}
+          = mconcat ["/2013-04-01/hostedzone/", toBS _uhzcId]
 
 instance ToQuery UpdateHostedZoneComment where
-    toQuery = const mempty
-
-instance ToHeaders UpdateHostedZoneComment
+        toQuery = const mempty
 
-instance ToXMLRoot UpdateHostedZoneComment where
-    toXMLRoot UpdateHostedZoneComment{..} = namespaced ns "UpdateHostedZoneComment"
-        [ "Comment" =@ _uhzcComment
-        ]
+instance ToXML UpdateHostedZoneComment where
+        toXML UpdateHostedZoneComment'{..}
+          = mconcat ["Comment" @= _uhzcComment]
 
-instance ToXML UpdateHostedZoneComment
+-- | A complex type containing information about the specified hosted zone
+-- after the update.
+--
+-- /See:/ 'updateHostedZoneCommentResponse' smart constructor.
+data UpdateHostedZoneCommentResponse = UpdateHostedZoneCommentResponse'
+    { _uhzcrsStatus     :: !Int
+    , _uhzcrsHostedZone :: !HostedZone
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest UpdateHostedZoneComment where
-    type Sv UpdateHostedZoneComment = Route53
-    type Rs UpdateHostedZoneComment = UpdateHostedZoneCommentResponse
+-- | Creates a value of 'UpdateHostedZoneCommentResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uhzcrsStatus'
+--
+-- * 'uhzcrsHostedZone'
+updateHostedZoneCommentResponse
+    :: Int -- ^ 'uhzcrsStatus'
+    -> HostedZone -- ^ 'uhzcrsHostedZone'
+    -> UpdateHostedZoneCommentResponse
+updateHostedZoneCommentResponse pStatus_ pHostedZone_ =
+    UpdateHostedZoneCommentResponse'
+    { _uhzcrsStatus = pStatus_
+    , _uhzcrsHostedZone = pHostedZone_
+    }
 
-    request  = post
-    response = xmlResponse
+-- | The response status code.
+uhzcrsStatus :: Lens' UpdateHostedZoneCommentResponse Int
+uhzcrsStatus = lens _uhzcrsStatus (\ s a -> s{_uhzcrsStatus = a});
 
-instance FromXML UpdateHostedZoneCommentResponse where
-    parseXML x = UpdateHostedZoneCommentResponse
-        <$> x .@  "HostedZone"
+-- | Undocumented member.
+uhzcrsHostedZone :: Lens' UpdateHostedZoneCommentResponse HostedZone
+uhzcrsHostedZone = lens _uhzcrsHostedZone (\ s a -> s{_uhzcrsHostedZone = a});
diff --git a/gen/Network/AWS/Route53/Waiters.hs b/gen/Network/AWS/Route53/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/Waiters.hs
@@ -0,0 +1,35 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Route53.Waiters
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.Route53.Waiters where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Route53.GetChange
+import           Network.AWS.Route53.Types
+import           Network.AWS.Waiter
+
+-- | Polls 'Network.AWS.Route53.GetChange' every 30 seconds until a
+-- successful state is reached. An error is returned after 60 failed checks.
+resourceRecordSetsChanged :: Wait GetChange
+resourceRecordSetsChanged =
+    Wait
+    { _waitName = "ResourceRecordSetsChanged"
+    , _waitAttempts = 60
+    , _waitDelay = 30
+    , _waitAcceptors = [ matchAll
+                             "INSYNC"
+                             AcceptSuccess
+                             (gcrsChangeInfo . ciStatus . to toTextCI)]
+    }
diff --git a/src/Network/AWS/Route53/Internal.hs b/src/Network/AWS/Route53/Internal.hs
--- a/src/Network/AWS/Route53/Internal.hs
+++ b/src/Network/AWS/Route53/Internal.hs
@@ -1,15 +1,13 @@
+-- |
 -- Module      : Network.AWS.Route53.Internal
--- Copyright   : (c) 2013-2015 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : experimental
 -- Portability : non-portable (GHC extensions)
-
+--
 module Network.AWS.Route53.Internal
     ( Region (..)
     ) where
 
-import Network.AWS.Types (Region(..))
+import           Network.AWS.Types (Region (..))
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,21 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Main (main) where
+
+import Test.Tasty
+import Test.AWS.Route53
+import Test.AWS.Route53.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "Route53"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/Gen/Route53.hs b/test/Test/AWS/Gen/Route53.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/Route53.hs
@@ -0,0 +1,549 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-orphans        #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.AWS.Gen.Route53
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.Gen.Route53 where
+
+import Data.Proxy
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+import Network.AWS.Route53
+import Test.AWS.Route53.Internal
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ testAssociateVPCWithHostedZone $
+--             associateVPCWithHostedZone
+--
+--         , testGetHealthCheckLastFailureReason $
+--             getHealthCheckLastFailureReason
+--
+--         , testListHostedZonesByName $
+--             listHostedZonesByName
+--
+--         , testDeleteReusableDelegationSet $
+--             deleteReusableDelegationSet
+--
+--         , testListReusableDelegationSets $
+--             listReusableDelegationSets
+--
+--         , testGetCheckerIPRanges $
+--             getCheckerIPRanges
+--
+--         , testListTagsForResource $
+--             listTagsForResource
+--
+--         , testChangeResourceRecordSets $
+--             changeResourceRecordSets
+--
+--         , testGetChange $
+--             getChange
+--
+--         , testCreateHostedZone $
+--             createHostedZone
+--
+--         , testDeleteHealthCheck $
+--             deleteHealthCheck
+--
+--         , testUpdateHealthCheck $
+--             updateHealthCheck
+--
+--         , testChangeTagsForResource $
+--             changeTagsForResource
+--
+--         , testCreateHealthCheck $
+--             createHealthCheck
+--
+--         , testListHostedZones $
+--             listHostedZones
+--
+--         , testDisassociateVPCFromHostedZone $
+--             disassociateVPCFromHostedZone
+--
+--         , testGetHostedZone $
+--             getHostedZone
+--
+--         , testListGeoLocations $
+--             listGeoLocations
+--
+--         , testGetHealthCheck $
+--             getHealthCheck
+--
+--         , testListResourceRecordSets $
+--             listResourceRecordSets
+--
+--         , testGetHealthCheckCount $
+--             getHealthCheckCount
+--
+--         , testCreateReusableDelegationSet $
+--             createReusableDelegationSet
+--
+--         , testGetHostedZoneCount $
+--             getHostedZoneCount
+--
+--         , testGetReusableDelegationSet $
+--             getReusableDelegationSet
+--
+--         , testUpdateHostedZoneComment $
+--             updateHostedZoneComment
+--
+--         , testGetHealthCheckStatus $
+--             getHealthCheckStatus
+--
+--         , testListHealthChecks $
+--             listHealthChecks
+--
+--         , testDeleteHostedZone $
+--             deleteHostedZone
+--
+--         , testGetGeoLocation $
+--             getGeoLocation
+--
+--         , testListTagsForResources $
+--             listTagsForResources
+--
+--           ]
+
+--     , testGroup "response"
+--         [ testAssociateVPCWithHostedZoneResponse $
+--             associateVPCWithHostedZoneResponse
+--
+--         , testGetHealthCheckLastFailureReasonResponse $
+--             getHealthCheckLastFailureReasonResponse
+--
+--         , testListHostedZonesByNameResponse $
+--             listHostedZonesByNameResponse
+--
+--         , testDeleteReusableDelegationSetResponse $
+--             deleteReusableDelegationSetResponse
+--
+--         , testListReusableDelegationSetsResponse $
+--             listReusableDelegationSetsResponse
+--
+--         , testGetCheckerIPRangesResponse $
+--             getCheckerIPRangesResponse
+--
+--         , testListTagsForResourceResponse $
+--             listTagsForResourceResponse
+--
+--         , testChangeResourceRecordSetsResponse $
+--             changeResourceRecordSetsResponse
+--
+--         , testGetChangeResponse $
+--             getChangeResponse
+--
+--         , testCreateHostedZoneResponse $
+--             createHostedZoneResponse
+--
+--         , testDeleteHealthCheckResponse $
+--             deleteHealthCheckResponse
+--
+--         , testUpdateHealthCheckResponse $
+--             updateHealthCheckResponse
+--
+--         , testChangeTagsForResourceResponse $
+--             changeTagsForResourceResponse
+--
+--         , testCreateHealthCheckResponse $
+--             createHealthCheckResponse
+--
+--         , testListHostedZonesResponse $
+--             listHostedZonesResponse
+--
+--         , testDisassociateVPCFromHostedZoneResponse $
+--             disassociateVPCFromHostedZoneResponse
+--
+--         , testGetHostedZoneResponse $
+--             getHostedZoneResponse
+--
+--         , testListGeoLocationsResponse $
+--             listGeoLocationsResponse
+--
+--         , testGetHealthCheckResponse $
+--             getHealthCheckResponse
+--
+--         , testListResourceRecordSetsResponse $
+--             listResourceRecordSetsResponse
+--
+--         , testGetHealthCheckCountResponse $
+--             getHealthCheckCountResponse
+--
+--         , testCreateReusableDelegationSetResponse $
+--             createReusableDelegationSetResponse
+--
+--         , testGetHostedZoneCountResponse $
+--             getHostedZoneCountResponse
+--
+--         , testGetReusableDelegationSetResponse $
+--             getReusableDelegationSetResponse
+--
+--         , testUpdateHostedZoneCommentResponse $
+--             updateHostedZoneCommentResponse
+--
+--         , testGetHealthCheckStatusResponse $
+--             getHealthCheckStatusResponse
+--
+--         , testListHealthChecksResponse $
+--             listHealthChecksResponse
+--
+--         , testDeleteHostedZoneResponse $
+--             deleteHostedZoneResponse
+--
+--         , testGetGeoLocationResponse $
+--             getGeoLocationResponse
+--
+--         , testListTagsForResourcesResponse $
+--             listTagsForResourcesResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+testAssociateVPCWithHostedZone :: AssociateVPCWithHostedZone -> TestTree
+testAssociateVPCWithHostedZone = req
+    "AssociateVPCWithHostedZone"
+    "fixture/AssociateVPCWithHostedZone"
+
+testGetHealthCheckLastFailureReason :: GetHealthCheckLastFailureReason -> TestTree
+testGetHealthCheckLastFailureReason = req
+    "GetHealthCheckLastFailureReason"
+    "fixture/GetHealthCheckLastFailureReason"
+
+testListHostedZonesByName :: ListHostedZonesByName -> TestTree
+testListHostedZonesByName = req
+    "ListHostedZonesByName"
+    "fixture/ListHostedZonesByName"
+
+testDeleteReusableDelegationSet :: DeleteReusableDelegationSet -> TestTree
+testDeleteReusableDelegationSet = req
+    "DeleteReusableDelegationSet"
+    "fixture/DeleteReusableDelegationSet"
+
+testListReusableDelegationSets :: ListReusableDelegationSets -> TestTree
+testListReusableDelegationSets = req
+    "ListReusableDelegationSets"
+    "fixture/ListReusableDelegationSets"
+
+testGetCheckerIPRanges :: GetCheckerIPRanges -> TestTree
+testGetCheckerIPRanges = req
+    "GetCheckerIPRanges"
+    "fixture/GetCheckerIPRanges"
+
+testListTagsForResource :: ListTagsForResource -> TestTree
+testListTagsForResource = req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource"
+
+testChangeResourceRecordSets :: ChangeResourceRecordSets -> TestTree
+testChangeResourceRecordSets = req
+    "ChangeResourceRecordSets"
+    "fixture/ChangeResourceRecordSets"
+
+testGetChange :: GetChange -> TestTree
+testGetChange = req
+    "GetChange"
+    "fixture/GetChange"
+
+testCreateHostedZone :: CreateHostedZone -> TestTree
+testCreateHostedZone = req
+    "CreateHostedZone"
+    "fixture/CreateHostedZone"
+
+testDeleteHealthCheck :: DeleteHealthCheck -> TestTree
+testDeleteHealthCheck = req
+    "DeleteHealthCheck"
+    "fixture/DeleteHealthCheck"
+
+testUpdateHealthCheck :: UpdateHealthCheck -> TestTree
+testUpdateHealthCheck = req
+    "UpdateHealthCheck"
+    "fixture/UpdateHealthCheck"
+
+testChangeTagsForResource :: ChangeTagsForResource -> TestTree
+testChangeTagsForResource = req
+    "ChangeTagsForResource"
+    "fixture/ChangeTagsForResource"
+
+testCreateHealthCheck :: CreateHealthCheck -> TestTree
+testCreateHealthCheck = req
+    "CreateHealthCheck"
+    "fixture/CreateHealthCheck"
+
+testListHostedZones :: ListHostedZones -> TestTree
+testListHostedZones = req
+    "ListHostedZones"
+    "fixture/ListHostedZones"
+
+testDisassociateVPCFromHostedZone :: DisassociateVPCFromHostedZone -> TestTree
+testDisassociateVPCFromHostedZone = req
+    "DisassociateVPCFromHostedZone"
+    "fixture/DisassociateVPCFromHostedZone"
+
+testGetHostedZone :: GetHostedZone -> TestTree
+testGetHostedZone = req
+    "GetHostedZone"
+    "fixture/GetHostedZone"
+
+testListGeoLocations :: ListGeoLocations -> TestTree
+testListGeoLocations = req
+    "ListGeoLocations"
+    "fixture/ListGeoLocations"
+
+testGetHealthCheck :: GetHealthCheck -> TestTree
+testGetHealthCheck = req
+    "GetHealthCheck"
+    "fixture/GetHealthCheck"
+
+testListResourceRecordSets :: ListResourceRecordSets -> TestTree
+testListResourceRecordSets = req
+    "ListResourceRecordSets"
+    "fixture/ListResourceRecordSets"
+
+testGetHealthCheckCount :: GetHealthCheckCount -> TestTree
+testGetHealthCheckCount = req
+    "GetHealthCheckCount"
+    "fixture/GetHealthCheckCount"
+
+testCreateReusableDelegationSet :: CreateReusableDelegationSet -> TestTree
+testCreateReusableDelegationSet = req
+    "CreateReusableDelegationSet"
+    "fixture/CreateReusableDelegationSet"
+
+testGetHostedZoneCount :: GetHostedZoneCount -> TestTree
+testGetHostedZoneCount = req
+    "GetHostedZoneCount"
+    "fixture/GetHostedZoneCount"
+
+testGetReusableDelegationSet :: GetReusableDelegationSet -> TestTree
+testGetReusableDelegationSet = req
+    "GetReusableDelegationSet"
+    "fixture/GetReusableDelegationSet"
+
+testUpdateHostedZoneComment :: UpdateHostedZoneComment -> TestTree
+testUpdateHostedZoneComment = req
+    "UpdateHostedZoneComment"
+    "fixture/UpdateHostedZoneComment"
+
+testGetHealthCheckStatus :: GetHealthCheckStatus -> TestTree
+testGetHealthCheckStatus = req
+    "GetHealthCheckStatus"
+    "fixture/GetHealthCheckStatus"
+
+testListHealthChecks :: ListHealthChecks -> TestTree
+testListHealthChecks = req
+    "ListHealthChecks"
+    "fixture/ListHealthChecks"
+
+testDeleteHostedZone :: DeleteHostedZone -> TestTree
+testDeleteHostedZone = req
+    "DeleteHostedZone"
+    "fixture/DeleteHostedZone"
+
+testGetGeoLocation :: GetGeoLocation -> TestTree
+testGetGeoLocation = req
+    "GetGeoLocation"
+    "fixture/GetGeoLocation"
+
+testListTagsForResources :: ListTagsForResources -> TestTree
+testListTagsForResources = req
+    "ListTagsForResources"
+    "fixture/ListTagsForResources"
+
+-- Responses
+
+testAssociateVPCWithHostedZoneResponse :: AssociateVPCWithHostedZoneResponse -> TestTree
+testAssociateVPCWithHostedZoneResponse = res
+    "AssociateVPCWithHostedZoneResponse"
+    "fixture/AssociateVPCWithHostedZoneResponse"
+    (Proxy :: Proxy AssociateVPCWithHostedZone)
+
+testGetHealthCheckLastFailureReasonResponse :: GetHealthCheckLastFailureReasonResponse -> TestTree
+testGetHealthCheckLastFailureReasonResponse = res
+    "GetHealthCheckLastFailureReasonResponse"
+    "fixture/GetHealthCheckLastFailureReasonResponse"
+    (Proxy :: Proxy GetHealthCheckLastFailureReason)
+
+testListHostedZonesByNameResponse :: ListHostedZonesByNameResponse -> TestTree
+testListHostedZonesByNameResponse = res
+    "ListHostedZonesByNameResponse"
+    "fixture/ListHostedZonesByNameResponse"
+    (Proxy :: Proxy ListHostedZonesByName)
+
+testDeleteReusableDelegationSetResponse :: DeleteReusableDelegationSetResponse -> TestTree
+testDeleteReusableDelegationSetResponse = res
+    "DeleteReusableDelegationSetResponse"
+    "fixture/DeleteReusableDelegationSetResponse"
+    (Proxy :: Proxy DeleteReusableDelegationSet)
+
+testListReusableDelegationSetsResponse :: ListReusableDelegationSetsResponse -> TestTree
+testListReusableDelegationSetsResponse = res
+    "ListReusableDelegationSetsResponse"
+    "fixture/ListReusableDelegationSetsResponse"
+    (Proxy :: Proxy ListReusableDelegationSets)
+
+testGetCheckerIPRangesResponse :: GetCheckerIPRangesResponse -> TestTree
+testGetCheckerIPRangesResponse = res
+    "GetCheckerIPRangesResponse"
+    "fixture/GetCheckerIPRangesResponse"
+    (Proxy :: Proxy GetCheckerIPRanges)
+
+testListTagsForResourceResponse :: ListTagsForResourceResponse -> TestTree
+testListTagsForResourceResponse = res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse"
+    (Proxy :: Proxy ListTagsForResource)
+
+testChangeResourceRecordSetsResponse :: ChangeResourceRecordSetsResponse -> TestTree
+testChangeResourceRecordSetsResponse = res
+    "ChangeResourceRecordSetsResponse"
+    "fixture/ChangeResourceRecordSetsResponse"
+    (Proxy :: Proxy ChangeResourceRecordSets)
+
+testGetChangeResponse :: GetChangeResponse -> TestTree
+testGetChangeResponse = res
+    "GetChangeResponse"
+    "fixture/GetChangeResponse"
+    (Proxy :: Proxy GetChange)
+
+testCreateHostedZoneResponse :: CreateHostedZoneResponse -> TestTree
+testCreateHostedZoneResponse = res
+    "CreateHostedZoneResponse"
+    "fixture/CreateHostedZoneResponse"
+    (Proxy :: Proxy CreateHostedZone)
+
+testDeleteHealthCheckResponse :: DeleteHealthCheckResponse -> TestTree
+testDeleteHealthCheckResponse = res
+    "DeleteHealthCheckResponse"
+    "fixture/DeleteHealthCheckResponse"
+    (Proxy :: Proxy DeleteHealthCheck)
+
+testUpdateHealthCheckResponse :: UpdateHealthCheckResponse -> TestTree
+testUpdateHealthCheckResponse = res
+    "UpdateHealthCheckResponse"
+    "fixture/UpdateHealthCheckResponse"
+    (Proxy :: Proxy UpdateHealthCheck)
+
+testChangeTagsForResourceResponse :: ChangeTagsForResourceResponse -> TestTree
+testChangeTagsForResourceResponse = res
+    "ChangeTagsForResourceResponse"
+    "fixture/ChangeTagsForResourceResponse"
+    (Proxy :: Proxy ChangeTagsForResource)
+
+testCreateHealthCheckResponse :: CreateHealthCheckResponse -> TestTree
+testCreateHealthCheckResponse = res
+    "CreateHealthCheckResponse"
+    "fixture/CreateHealthCheckResponse"
+    (Proxy :: Proxy CreateHealthCheck)
+
+testListHostedZonesResponse :: ListHostedZonesResponse -> TestTree
+testListHostedZonesResponse = res
+    "ListHostedZonesResponse"
+    "fixture/ListHostedZonesResponse"
+    (Proxy :: Proxy ListHostedZones)
+
+testDisassociateVPCFromHostedZoneResponse :: DisassociateVPCFromHostedZoneResponse -> TestTree
+testDisassociateVPCFromHostedZoneResponse = res
+    "DisassociateVPCFromHostedZoneResponse"
+    "fixture/DisassociateVPCFromHostedZoneResponse"
+    (Proxy :: Proxy DisassociateVPCFromHostedZone)
+
+testGetHostedZoneResponse :: GetHostedZoneResponse -> TestTree
+testGetHostedZoneResponse = res
+    "GetHostedZoneResponse"
+    "fixture/GetHostedZoneResponse"
+    (Proxy :: Proxy GetHostedZone)
+
+testListGeoLocationsResponse :: ListGeoLocationsResponse -> TestTree
+testListGeoLocationsResponse = res
+    "ListGeoLocationsResponse"
+    "fixture/ListGeoLocationsResponse"
+    (Proxy :: Proxy ListGeoLocations)
+
+testGetHealthCheckResponse :: GetHealthCheckResponse -> TestTree
+testGetHealthCheckResponse = res
+    "GetHealthCheckResponse"
+    "fixture/GetHealthCheckResponse"
+    (Proxy :: Proxy GetHealthCheck)
+
+testListResourceRecordSetsResponse :: ListResourceRecordSetsResponse -> TestTree
+testListResourceRecordSetsResponse = res
+    "ListResourceRecordSetsResponse"
+    "fixture/ListResourceRecordSetsResponse"
+    (Proxy :: Proxy ListResourceRecordSets)
+
+testGetHealthCheckCountResponse :: GetHealthCheckCountResponse -> TestTree
+testGetHealthCheckCountResponse = res
+    "GetHealthCheckCountResponse"
+    "fixture/GetHealthCheckCountResponse"
+    (Proxy :: Proxy GetHealthCheckCount)
+
+testCreateReusableDelegationSetResponse :: CreateReusableDelegationSetResponse -> TestTree
+testCreateReusableDelegationSetResponse = res
+    "CreateReusableDelegationSetResponse"
+    "fixture/CreateReusableDelegationSetResponse"
+    (Proxy :: Proxy CreateReusableDelegationSet)
+
+testGetHostedZoneCountResponse :: GetHostedZoneCountResponse -> TestTree
+testGetHostedZoneCountResponse = res
+    "GetHostedZoneCountResponse"
+    "fixture/GetHostedZoneCountResponse"
+    (Proxy :: Proxy GetHostedZoneCount)
+
+testGetReusableDelegationSetResponse :: GetReusableDelegationSetResponse -> TestTree
+testGetReusableDelegationSetResponse = res
+    "GetReusableDelegationSetResponse"
+    "fixture/GetReusableDelegationSetResponse"
+    (Proxy :: Proxy GetReusableDelegationSet)
+
+testUpdateHostedZoneCommentResponse :: UpdateHostedZoneCommentResponse -> TestTree
+testUpdateHostedZoneCommentResponse = res
+    "UpdateHostedZoneCommentResponse"
+    "fixture/UpdateHostedZoneCommentResponse"
+    (Proxy :: Proxy UpdateHostedZoneComment)
+
+testGetHealthCheckStatusResponse :: GetHealthCheckStatusResponse -> TestTree
+testGetHealthCheckStatusResponse = res
+    "GetHealthCheckStatusResponse"
+    "fixture/GetHealthCheckStatusResponse"
+    (Proxy :: Proxy GetHealthCheckStatus)
+
+testListHealthChecksResponse :: ListHealthChecksResponse -> TestTree
+testListHealthChecksResponse = res
+    "ListHealthChecksResponse"
+    "fixture/ListHealthChecksResponse"
+    (Proxy :: Proxy ListHealthChecks)
+
+testDeleteHostedZoneResponse :: DeleteHostedZoneResponse -> TestTree
+testDeleteHostedZoneResponse = res
+    "DeleteHostedZoneResponse"
+    "fixture/DeleteHostedZoneResponse"
+    (Proxy :: Proxy DeleteHostedZone)
+
+testGetGeoLocationResponse :: GetGeoLocationResponse -> TestTree
+testGetGeoLocationResponse = res
+    "GetGeoLocationResponse"
+    "fixture/GetGeoLocationResponse"
+    (Proxy :: Proxy GetGeoLocation)
+
+testListTagsForResourcesResponse :: ListTagsForResourcesResponse -> TestTree
+testListTagsForResourcesResponse = res
+    "ListTagsForResourcesResponse"
+    "fixture/ListTagsForResourcesResponse"
+    (Proxy :: Proxy ListTagsForResources)
diff --git a/test/Test/AWS/Route53.hs b/test/Test/AWS/Route53.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Route53.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Module      : Test.AWS.Route53
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+module Test.AWS.Route53
+    ( tests
+    , fixtures
+    ) where
+
+import           Network.AWS.Route53
+import           Test.AWS.Gen.Route53
+import           Test.Tasty
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/Route53/Internal.hs b/test/Test/AWS/Route53/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Route53/Internal.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Test.AWS.Route53.Internal
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+module Test.AWS.Route53.Internal where
+
+import Test.AWS.Prelude
