diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.3.6`
+`1.3.7`
 
 
 ## Description
diff --git a/amazonka-route53.cabal b/amazonka-route53.cabal
--- a/amazonka-route53.cabal
+++ b/amazonka-route53.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-route53
-version:               1.3.6
+version:               1.3.7
 synopsis:              Amazon Route 53 SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -52,11 +52,17 @@
         , Network.AWS.Route53.CreateHealthCheck
         , Network.AWS.Route53.CreateHostedZone
         , Network.AWS.Route53.CreateReusableDelegationSet
+        , Network.AWS.Route53.CreateTrafficPolicy
+        , Network.AWS.Route53.CreateTrafficPolicyInstance
+        , Network.AWS.Route53.CreateTrafficPolicyVersion
         , Network.AWS.Route53.DeleteHealthCheck
         , Network.AWS.Route53.DeleteHostedZone
         , Network.AWS.Route53.DeleteReusableDelegationSet
+        , Network.AWS.Route53.DeleteTrafficPolicy
+        , Network.AWS.Route53.DeleteTrafficPolicyInstance
         , Network.AWS.Route53.DisassociateVPCFromHostedZone
         , Network.AWS.Route53.GetChange
+        , Network.AWS.Route53.GetChangeDetails
         , Network.AWS.Route53.GetCheckerIPRanges
         , Network.AWS.Route53.GetGeoLocation
         , Network.AWS.Route53.GetHealthCheck
@@ -66,6 +72,11 @@
         , Network.AWS.Route53.GetHostedZone
         , Network.AWS.Route53.GetHostedZoneCount
         , Network.AWS.Route53.GetReusableDelegationSet
+        , Network.AWS.Route53.GetTrafficPolicy
+        , Network.AWS.Route53.GetTrafficPolicyInstance
+        , Network.AWS.Route53.GetTrafficPolicyInstanceCount
+        , Network.AWS.Route53.ListChangeBatchesByHostedZone
+        , Network.AWS.Route53.ListChangeBatchesByRRSet
         , Network.AWS.Route53.ListGeoLocations
         , Network.AWS.Route53.ListHealthChecks
         , Network.AWS.Route53.ListHostedZones
@@ -74,9 +85,16 @@
         , Network.AWS.Route53.ListReusableDelegationSets
         , Network.AWS.Route53.ListTagsForResource
         , Network.AWS.Route53.ListTagsForResources
+        , Network.AWS.Route53.ListTrafficPolicies
+        , Network.AWS.Route53.ListTrafficPolicyInstances
+        , Network.AWS.Route53.ListTrafficPolicyInstancesByHostedZone
+        , Network.AWS.Route53.ListTrafficPolicyInstancesByPolicy
+        , Network.AWS.Route53.ListTrafficPolicyVersions
         , Network.AWS.Route53.Types
         , Network.AWS.Route53.UpdateHealthCheck
         , Network.AWS.Route53.UpdateHostedZoneComment
+        , Network.AWS.Route53.UpdateTrafficPolicyComment
+        , Network.AWS.Route53.UpdateTrafficPolicyInstance
         , Network.AWS.Route53.Waiters
 
     other-modules:
@@ -85,7 +103,7 @@
         , Network.AWS.Route53.Types.Sum
 
     build-depends:
-          amazonka-core == 1.3.6.*
+          amazonka-core == 1.3.7.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-route53-test
@@ -105,12 +123,11 @@
         , Test.AWS.Route53.Internal
 
     build-depends:
-          amazonka-core == 1.3.6.*
-        , amazonka-test == 1.3.6.*
-        , amazonka-route53 == 1.3.6.*
+          amazonka-core == 1.3.7.*
+        , amazonka-test == 1.3.7.*
+        , amazonka-route53 == 1.3.7.*
         , base
         , bytestring
-        , lens
         , tasty
         , tasty-hunit
         , text
diff --git a/fixture/CreateTrafficPolicy.yaml b/fixture/CreateTrafficPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTrafficPolicy.yaml
diff --git a/fixture/CreateTrafficPolicyInstance.yaml b/fixture/CreateTrafficPolicyInstance.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTrafficPolicyInstance.yaml
diff --git a/fixture/CreateTrafficPolicyInstanceResponse.proto b/fixture/CreateTrafficPolicyInstanceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTrafficPolicyInstanceResponse.proto
diff --git a/fixture/CreateTrafficPolicyResponse.proto b/fixture/CreateTrafficPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTrafficPolicyResponse.proto
diff --git a/fixture/CreateTrafficPolicyVersion.yaml b/fixture/CreateTrafficPolicyVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTrafficPolicyVersion.yaml
diff --git a/fixture/CreateTrafficPolicyVersionResponse.proto b/fixture/CreateTrafficPolicyVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTrafficPolicyVersionResponse.proto
diff --git a/fixture/DeleteTrafficPolicy.yaml b/fixture/DeleteTrafficPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTrafficPolicy.yaml
diff --git a/fixture/DeleteTrafficPolicyInstance.yaml b/fixture/DeleteTrafficPolicyInstance.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTrafficPolicyInstance.yaml
diff --git a/fixture/DeleteTrafficPolicyInstanceResponse.proto b/fixture/DeleteTrafficPolicyInstanceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTrafficPolicyInstanceResponse.proto
diff --git a/fixture/DeleteTrafficPolicyResponse.proto b/fixture/DeleteTrafficPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTrafficPolicyResponse.proto
diff --git a/fixture/GetChangeDetails.yaml b/fixture/GetChangeDetails.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetChangeDetails.yaml
diff --git a/fixture/GetChangeDetailsResponse.proto b/fixture/GetChangeDetailsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetChangeDetailsResponse.proto
diff --git a/fixture/GetTrafficPolicy.yaml b/fixture/GetTrafficPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetTrafficPolicy.yaml
diff --git a/fixture/GetTrafficPolicyInstance.yaml b/fixture/GetTrafficPolicyInstance.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetTrafficPolicyInstance.yaml
diff --git a/fixture/GetTrafficPolicyInstanceCount.yaml b/fixture/GetTrafficPolicyInstanceCount.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetTrafficPolicyInstanceCount.yaml
diff --git a/fixture/GetTrafficPolicyInstanceCountResponse.proto b/fixture/GetTrafficPolicyInstanceCountResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetTrafficPolicyInstanceCountResponse.proto
diff --git a/fixture/GetTrafficPolicyInstanceResponse.proto b/fixture/GetTrafficPolicyInstanceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetTrafficPolicyInstanceResponse.proto
diff --git a/fixture/GetTrafficPolicyResponse.proto b/fixture/GetTrafficPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetTrafficPolicyResponse.proto
diff --git a/fixture/ListChangeBatchesByHostedZone.yaml b/fixture/ListChangeBatchesByHostedZone.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListChangeBatchesByHostedZone.yaml
diff --git a/fixture/ListChangeBatchesByHostedZoneResponse.proto b/fixture/ListChangeBatchesByHostedZoneResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListChangeBatchesByHostedZoneResponse.proto
diff --git a/fixture/ListChangeBatchesByRRSet.yaml b/fixture/ListChangeBatchesByRRSet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListChangeBatchesByRRSet.yaml
diff --git a/fixture/ListChangeBatchesByRRSetResponse.proto b/fixture/ListChangeBatchesByRRSetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListChangeBatchesByRRSetResponse.proto
diff --git a/fixture/ListTrafficPolicies.yaml b/fixture/ListTrafficPolicies.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTrafficPolicies.yaml
diff --git a/fixture/ListTrafficPoliciesResponse.proto b/fixture/ListTrafficPoliciesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTrafficPoliciesResponse.proto
diff --git a/fixture/ListTrafficPolicyInstances.yaml b/fixture/ListTrafficPolicyInstances.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTrafficPolicyInstances.yaml
diff --git a/fixture/ListTrafficPolicyInstancesByHostedZone.yaml b/fixture/ListTrafficPolicyInstancesByHostedZone.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTrafficPolicyInstancesByHostedZone.yaml
diff --git a/fixture/ListTrafficPolicyInstancesByHostedZoneResponse.proto b/fixture/ListTrafficPolicyInstancesByHostedZoneResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTrafficPolicyInstancesByHostedZoneResponse.proto
diff --git a/fixture/ListTrafficPolicyInstancesByPolicy.yaml b/fixture/ListTrafficPolicyInstancesByPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTrafficPolicyInstancesByPolicy.yaml
diff --git a/fixture/ListTrafficPolicyInstancesByPolicyResponse.proto b/fixture/ListTrafficPolicyInstancesByPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTrafficPolicyInstancesByPolicyResponse.proto
diff --git a/fixture/ListTrafficPolicyInstancesResponse.proto b/fixture/ListTrafficPolicyInstancesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTrafficPolicyInstancesResponse.proto
diff --git a/fixture/ListTrafficPolicyVersions.yaml b/fixture/ListTrafficPolicyVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTrafficPolicyVersions.yaml
diff --git a/fixture/ListTrafficPolicyVersionsResponse.proto b/fixture/ListTrafficPolicyVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTrafficPolicyVersionsResponse.proto
diff --git a/fixture/UpdateTrafficPolicyComment.yaml b/fixture/UpdateTrafficPolicyComment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateTrafficPolicyComment.yaml
diff --git a/fixture/UpdateTrafficPolicyCommentResponse.proto b/fixture/UpdateTrafficPolicyCommentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateTrafficPolicyCommentResponse.proto
diff --git a/fixture/UpdateTrafficPolicyInstance.yaml b/fixture/UpdateTrafficPolicyInstance.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateTrafficPolicyInstance.yaml
diff --git a/fixture/UpdateTrafficPolicyInstanceResponse.proto b/fixture/UpdateTrafficPolicyInstanceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateTrafficPolicyInstanceResponse.proto
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
@@ -39,6 +39,15 @@
     -- ** InvalidArgument
     , _InvalidArgument
 
+    -- ** TrafficPolicyInstanceAlreadyExists
+    , _TrafficPolicyInstanceAlreadyExists
+
+    -- ** ConflictingTypes
+    , _ConflictingTypes
+
+    -- ** ConcurrentModification
+    , _ConcurrentModification
+
     -- ** DelegationSetAlreadyReusable
     , _DelegationSetAlreadyReusable
 
@@ -48,12 +57,21 @@
     -- ** InvalidChangeBatch
     , _InvalidChangeBatch
 
+    -- ** TrafficPolicyAlreadyExists
+    , _TrafficPolicyAlreadyExists
+
+    -- ** InvalidTrafficPolicyDocument
+    , _InvalidTrafficPolicyDocument
+
     -- ** DelegationSetNotReusable
     , _DelegationSetNotReusable
 
     -- ** InvalidDomainName
     , _InvalidDomainName
 
+    -- ** NoSuchTrafficPolicy
+    , _NoSuchTrafficPolicy
+
     -- ** HostedZoneNotFound
     , _HostedZoneNotFound
 
@@ -66,6 +84,9 @@
     -- ** HealthCheckAlreadyExists
     , _HealthCheckAlreadyExists
 
+    -- ** TooManyTrafficPolicies
+    , _TooManyTrafficPolicies
+
     -- ** NoSuchGeoLocation
     , _NoSuchGeoLocation
 
@@ -84,6 +105,12 @@
     -- ** LimitsExceeded
     , _LimitsExceeded
 
+    -- ** TooManyTrafficPolicyInstances
+    , _TooManyTrafficPolicyInstances
+
+    -- ** NoSuchTrafficPolicyInstance
+    , _NoSuchTrafficPolicyInstance
+
     -- ** IncompatibleVersion
     , _IncompatibleVersion
 
@@ -114,6 +141,9 @@
     -- ** NoSuchHealthCheck
     , _NoSuchHealthCheck
 
+    -- ** TrafficPolicyInUse
+    , _TrafficPolicyInUse
+
     -- ** InvalidVPCId
     , _InvalidVPCId
 
@@ -132,9 +162,15 @@
     -- ** AssociateVPCWithHostedZone
     , module Network.AWS.Route53.AssociateVPCWithHostedZone
 
+    -- ** DeleteTrafficPolicy
+    , module Network.AWS.Route53.DeleteTrafficPolicy
+
     -- ** GetCheckerIPRanges
     , module Network.AWS.Route53.GetCheckerIPRanges
 
+    -- ** GetTrafficPolicyInstance
+    , module Network.AWS.Route53.GetTrafficPolicyInstance
+
     -- ** GetHealthCheckLastFailureReason
     , module Network.AWS.Route53.GetHealthCheckLastFailureReason
 
@@ -150,6 +186,12 @@
     -- ** ListTagsForResource
     , module Network.AWS.Route53.ListTagsForResource
 
+    -- ** ListTrafficPolicyInstances
+    , module Network.AWS.Route53.ListTrafficPolicyInstances
+
+    -- ** CreateTrafficPolicyInstance
+    , module Network.AWS.Route53.CreateTrafficPolicyInstance
+
     -- ** GetChange
     , module Network.AWS.Route53.GetChange
 
@@ -165,6 +207,9 @@
     -- ** CreateHostedZone
     , module Network.AWS.Route53.CreateHostedZone
 
+    -- ** ListTrafficPolicyInstancesByPolicy
+    , module Network.AWS.Route53.ListTrafficPolicyInstancesByPolicy
+
     -- ** DisassociateVPCFromHostedZone
     , module Network.AWS.Route53.DisassociateVPCFromHostedZone
 
@@ -177,6 +222,9 @@
     -- ** ListHostedZones (Paginated)
     , module Network.AWS.Route53.ListHostedZones
 
+    -- ** GetTrafficPolicyInstanceCount
+    , module Network.AWS.Route53.GetTrafficPolicyInstanceCount
+
     -- ** ListGeoLocations
     , module Network.AWS.Route53.ListGeoLocations
 
@@ -192,24 +240,51 @@
     -- ** CreateReusableDelegationSet
     , module Network.AWS.Route53.CreateReusableDelegationSet
 
+    -- ** ListChangeBatchesByRRSet
+    , module Network.AWS.Route53.ListChangeBatchesByRRSet
+
     -- ** GetHealthCheckCount
     , module Network.AWS.Route53.GetHealthCheckCount
 
+    -- ** UpdateTrafficPolicyComment
+    , module Network.AWS.Route53.UpdateTrafficPolicyComment
+
     -- ** GetHostedZoneCount
     , module Network.AWS.Route53.GetHostedZoneCount
 
+    -- ** ListChangeBatchesByHostedZone
+    , module Network.AWS.Route53.ListChangeBatchesByHostedZone
+
+    -- ** GetChangeDetails
+    , module Network.AWS.Route53.GetChangeDetails
+
     -- ** GetReusableDelegationSet
     , module Network.AWS.Route53.GetReusableDelegationSet
 
+    -- ** DeleteTrafficPolicyInstance
+    , module Network.AWS.Route53.DeleteTrafficPolicyInstance
+
+    -- ** UpdateTrafficPolicyInstance
+    , module Network.AWS.Route53.UpdateTrafficPolicyInstance
+
     -- ** UpdateHostedZoneComment
     , module Network.AWS.Route53.UpdateHostedZoneComment
 
     -- ** GetHealthCheckStatus
     , module Network.AWS.Route53.GetHealthCheckStatus
 
+    -- ** CreateTrafficPolicyVersion
+    , module Network.AWS.Route53.CreateTrafficPolicyVersion
+
     -- ** ListHealthChecks (Paginated)
     , module Network.AWS.Route53.ListHealthChecks
 
+    -- ** GetTrafficPolicy
+    , module Network.AWS.Route53.GetTrafficPolicy
+
+    -- ** ListTrafficPolicyVersions
+    , module Network.AWS.Route53.ListTrafficPolicyVersions
+
     -- ** DeleteHostedZone
     , module Network.AWS.Route53.DeleteHostedZone
 
@@ -219,6 +294,15 @@
     -- ** ListTagsForResources
     , module Network.AWS.Route53.ListTagsForResources
 
+    -- ** CreateTrafficPolicy
+    , module Network.AWS.Route53.CreateTrafficPolicy
+
+    -- ** ListTrafficPolicyInstancesByHostedZone
+    , module Network.AWS.Route53.ListTrafficPolicyInstancesByHostedZone
+
+    -- ** ListTrafficPolicies
+    , module Network.AWS.Route53.ListTrafficPolicies
+
     -- * Types
 
     -- ** Re-exported Types
@@ -264,6 +348,16 @@
     , cbComment
     , cbChanges
 
+    -- ** ChangeBatchRecord
+    , ChangeBatchRecord
+    , changeBatchRecord
+    , cbrChanges
+    , cbrSubmittedAt
+    , cbrSubmitter
+    , cbrComment
+    , cbrId
+    , cbrStatus
+
     -- ** ChangeInfo
     , ChangeInfo
     , changeInfo
@@ -353,6 +447,7 @@
     , rrsResourceRecords
     , rrsAliasTarget
     , rrsWeight
+    , rrsTrafficPolicyInstanceId
     , rrsSetIdentifier
     , rrsFailover
     , rrsHealthCheckId
@@ -380,6 +475,38 @@
     , tagValue
     , tagKey
 
+    -- ** TrafficPolicy
+    , TrafficPolicy
+    , trafficPolicy
+    , tpComment
+    , tpId
+    , tpVersion
+    , tpName
+    , tpType
+    , tpDocument
+
+    -- ** TrafficPolicyInstance
+    , TrafficPolicyInstance
+    , trafficPolicyInstance
+    , tpiId
+    , tpiHostedZoneId
+    , tpiName
+    , tpiTTL
+    , tpiState
+    , tpiMessage
+    , tpiTrafficPolicyId
+    , tpiTrafficPolicyVersion
+    , tpiTrafficPolicyType
+
+    -- ** TrafficPolicySummary
+    , TrafficPolicySummary
+    , trafficPolicySummary
+    , tpsId
+    , tpsName
+    , tpsType
+    , tpsLatestVersion
+    , tpsTrafficPolicyCount
+
     -- ** VPC
     , VPC
     , vpc
@@ -393,11 +520,17 @@
 import           Network.AWS.Route53.CreateHealthCheck
 import           Network.AWS.Route53.CreateHostedZone
 import           Network.AWS.Route53.CreateReusableDelegationSet
+import           Network.AWS.Route53.CreateTrafficPolicy
+import           Network.AWS.Route53.CreateTrafficPolicyInstance
+import           Network.AWS.Route53.CreateTrafficPolicyVersion
 import           Network.AWS.Route53.DeleteHealthCheck
 import           Network.AWS.Route53.DeleteHostedZone
 import           Network.AWS.Route53.DeleteReusableDelegationSet
+import           Network.AWS.Route53.DeleteTrafficPolicy
+import           Network.AWS.Route53.DeleteTrafficPolicyInstance
 import           Network.AWS.Route53.DisassociateVPCFromHostedZone
 import           Network.AWS.Route53.GetChange
+import           Network.AWS.Route53.GetChangeDetails
 import           Network.AWS.Route53.GetCheckerIPRanges
 import           Network.AWS.Route53.GetGeoLocation
 import           Network.AWS.Route53.GetHealthCheck
@@ -407,7 +540,12 @@
 import           Network.AWS.Route53.GetHostedZone
 import           Network.AWS.Route53.GetHostedZoneCount
 import           Network.AWS.Route53.GetReusableDelegationSet
+import           Network.AWS.Route53.GetTrafficPolicy
+import           Network.AWS.Route53.GetTrafficPolicyInstance
+import           Network.AWS.Route53.GetTrafficPolicyInstanceCount
 import           Network.AWS.Route53.Internal
+import           Network.AWS.Route53.ListChangeBatchesByHostedZone
+import           Network.AWS.Route53.ListChangeBatchesByRRSet
 import           Network.AWS.Route53.ListGeoLocations
 import           Network.AWS.Route53.ListHealthChecks
 import           Network.AWS.Route53.ListHostedZones
@@ -416,9 +554,16 @@
 import           Network.AWS.Route53.ListReusableDelegationSets
 import           Network.AWS.Route53.ListTagsForResource
 import           Network.AWS.Route53.ListTagsForResources
+import           Network.AWS.Route53.ListTrafficPolicies
+import           Network.AWS.Route53.ListTrafficPolicyInstances
+import           Network.AWS.Route53.ListTrafficPolicyInstancesByHostedZone
+import           Network.AWS.Route53.ListTrafficPolicyInstancesByPolicy
+import           Network.AWS.Route53.ListTrafficPolicyVersions
 import           Network.AWS.Route53.Types
 import           Network.AWS.Route53.UpdateHealthCheck
 import           Network.AWS.Route53.UpdateHostedZoneComment
+import           Network.AWS.Route53.UpdateTrafficPolicyComment
+import           Network.AWS.Route53.UpdateTrafficPolicyInstance
 import           Network.AWS.Route53.Waiters
 
 {- $errors
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
@@ -48,6 +48,7 @@
     , avwhzrsChangeInfo
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
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
@@ -27,28 +27,26 @@
 -- 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/.
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/ POST ChangeResourceRecordSets>
+-- in the /Amazon Route 53 API Reference/.
 --
 -- 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.
+-- attempt to delete the same change batch more than once, Amazon 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'.
+-- changed on all Amazon Route 53 DNS servers. Initially, the status of a
+-- change is 'PENDING'. This means the change has not yet propagated to all
+-- the authoritative Amazon 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.
+-- -   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.
 --
 -- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ChangeResourceRecordSets.html AWS API Reference> for ChangeResourceRecordSets.
 module Network.AWS.Route53.ChangeResourceRecordSets
@@ -68,6 +66,7 @@
     , crrsrsChangeInfo
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
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
@@ -39,6 +39,7 @@
     , ctfrrsResponseStatus
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
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
@@ -45,6 +45,7 @@
     , chcrsLocation
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
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
@@ -26,17 +26,17 @@
 -- 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>
+-- Amazon 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 Amazon 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.
+-- Amazon 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
@@ -67,6 +67,7 @@
     , chzrsLocation
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -127,10 +128,10 @@
 chzHostedZoneConfig = lens _chzHostedZoneConfig (\ s a -> s{_chzHostedZoneConfig = a});
 
 -- | The name of the domain. This must be a fully-specified domain, for
--- example, www.example.com. The trailing dot is optional; Route 53 assumes
--- that the domain name is fully qualified. This means that Route 53 treats
--- www.example.com (without a trailing dot) and www.example.com. (with a
--- trailing dot) as identical.
+-- example, www.example.com. The trailing dot is optional; Amazon Route 53
+-- assumes that the domain name is fully qualified. This means that Amazon
+-- 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
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
@@ -48,6 +48,7 @@
     , crdsrsLocation
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
diff --git a/gen/Network/AWS/Route53/CreateTrafficPolicy.hs b/gen/Network/AWS/Route53/CreateTrafficPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/CreateTrafficPolicy.hs
@@ -0,0 +1,172 @@
+{-# 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.CreateTrafficPolicy
+-- 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)
+--
+-- Creates a traffic policy, which you use to create multiple DNS resource
+-- record sets for one domain name (such as example.com) or one subdomain
+-- name (such as www.example.com).
+--
+-- To create a traffic policy, send a 'POST' request to the
+-- '2013-04-01\/trafficpolicy' resource. The request body must include an
+-- XML document with a 'CreateTrafficPolicyRequest' element. The response
+-- includes the 'CreateTrafficPolicyResponse' element, which contains
+-- information about the new traffic policy.
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_CreateTrafficPolicy.html AWS API Reference> for CreateTrafficPolicy.
+module Network.AWS.Route53.CreateTrafficPolicy
+    (
+    -- * Creating a Request
+      createTrafficPolicy
+    , CreateTrafficPolicy
+    -- * Request Lenses
+    , ctpComment
+    , ctpName
+    , ctpDocument
+
+    -- * Destructuring the Response
+    , createTrafficPolicyResponse
+    , CreateTrafficPolicyResponse
+    -- * Response Lenses
+    , ctprsResponseStatus
+    , ctprsTrafficPolicy
+    , ctprsLocation
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
+
+-- | A complex type that contains information about the traffic policy that
+-- you want to create.
+--
+-- /See:/ 'createTrafficPolicy' smart constructor.
+data CreateTrafficPolicy = CreateTrafficPolicy'
+    { _ctpComment  :: !(Maybe Text)
+    , _ctpName     :: !Text
+    , _ctpDocument :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateTrafficPolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ctpComment'
+--
+-- * 'ctpName'
+--
+-- * 'ctpDocument'
+createTrafficPolicy
+    :: Text -- ^ 'ctpName'
+    -> Text -- ^ 'ctpDocument'
+    -> CreateTrafficPolicy
+createTrafficPolicy pName_ pDocument_ =
+    CreateTrafficPolicy'
+    { _ctpComment = Nothing
+    , _ctpName = pName_
+    , _ctpDocument = pDocument_
+    }
+
+-- | Any comments that you want to include about the traffic policy.
+ctpComment :: Lens' CreateTrafficPolicy (Maybe Text)
+ctpComment = lens _ctpComment (\ s a -> s{_ctpComment = a});
+
+-- | The name of the traffic policy.
+ctpName :: Lens' CreateTrafficPolicy Text
+ctpName = lens _ctpName (\ s a -> s{_ctpName = a});
+
+-- | The definition of this traffic policy in JSON format.
+ctpDocument :: Lens' CreateTrafficPolicy Text
+ctpDocument = lens _ctpDocument (\ s a -> s{_ctpDocument = a});
+
+instance AWSRequest CreateTrafficPolicy where
+        type Rs CreateTrafficPolicy =
+             CreateTrafficPolicyResponse
+        request = postXML route53
+        response
+          = receiveXML
+              (\ s h x ->
+                 CreateTrafficPolicyResponse' <$>
+                   (pure (fromEnum s)) <*> (x .@ "TrafficPolicy") <*>
+                     (h .# "Location"))
+
+instance ToElement CreateTrafficPolicy where
+        toElement
+          = mkElement
+              "{https://route53.amazonaws.com/doc/2013-04-01/}CreateTrafficPolicyRequest"
+
+instance ToHeaders CreateTrafficPolicy where
+        toHeaders = const mempty
+
+instance ToPath CreateTrafficPolicy where
+        toPath = const "/2013-04-01/trafficpolicy"
+
+instance ToQuery CreateTrafficPolicy where
+        toQuery = const mempty
+
+instance ToXML CreateTrafficPolicy where
+        toXML CreateTrafficPolicy'{..}
+          = mconcat
+              ["Comment" @= _ctpComment, "Name" @= _ctpName,
+               "Document" @= _ctpDocument]
+
+-- | A complex type that contains the response information for the
+-- 'CreateTrafficPolicy' request.
+--
+-- /See:/ 'createTrafficPolicyResponse' smart constructor.
+data CreateTrafficPolicyResponse = CreateTrafficPolicyResponse'
+    { _ctprsResponseStatus :: !Int
+    , _ctprsTrafficPolicy  :: !TrafficPolicy
+    , _ctprsLocation       :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateTrafficPolicyResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ctprsResponseStatus'
+--
+-- * 'ctprsTrafficPolicy'
+--
+-- * 'ctprsLocation'
+createTrafficPolicyResponse
+    :: Int -- ^ 'ctprsResponseStatus'
+    -> TrafficPolicy -- ^ 'ctprsTrafficPolicy'
+    -> Text -- ^ 'ctprsLocation'
+    -> CreateTrafficPolicyResponse
+createTrafficPolicyResponse pResponseStatus_ pTrafficPolicy_ pLocation_ =
+    CreateTrafficPolicyResponse'
+    { _ctprsResponseStatus = pResponseStatus_
+    , _ctprsTrafficPolicy = pTrafficPolicy_
+    , _ctprsLocation = pLocation_
+    }
+
+-- | The response status code.
+ctprsResponseStatus :: Lens' CreateTrafficPolicyResponse Int
+ctprsResponseStatus = lens _ctprsResponseStatus (\ s a -> s{_ctprsResponseStatus = a});
+
+-- | A complex type that contains settings for the new traffic policy.
+ctprsTrafficPolicy :: Lens' CreateTrafficPolicyResponse TrafficPolicy
+ctprsTrafficPolicy = lens _ctprsTrafficPolicy (\ s a -> s{_ctprsTrafficPolicy = a});
+
+-- | Undocumented member.
+ctprsLocation :: Lens' CreateTrafficPolicyResponse Text
+ctprsLocation = lens _ctprsLocation (\ s a -> s{_ctprsLocation = a});
diff --git a/gen/Network/AWS/Route53/CreateTrafficPolicyInstance.hs b/gen/Network/AWS/Route53/CreateTrafficPolicyInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/CreateTrafficPolicyInstance.hs
@@ -0,0 +1,208 @@
+{-# 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.CreateTrafficPolicyInstance
+-- 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)
+--
+-- Creates resource record sets in a specified hosted zone based on the
+-- settings in a specified traffic policy version. In addition,
+-- 'CreateTrafficPolicyInstance' associates the resource record sets with a
+-- specified domain name (such as example.com) or subdomain name (such as
+-- www.example.com). Amazon Route 53 responds to DNS queries for the domain
+-- or subdomain name by using the resource record sets that
+-- 'CreateTrafficPolicyInstance' created.
+--
+-- To create a traffic policy instance, send a 'POST' request to the
+-- '2013-04-01\/trafficpolicyinstance' resource. The request body must
+-- include an XML document with a 'CreateTrafficPolicyRequest' element. The
+-- response returns the 'CreateTrafficPolicyInstanceResponse' element,
+-- which contains information about the traffic policy instance.
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_CreateTrafficPolicyInstance.html AWS API Reference> for CreateTrafficPolicyInstance.
+module Network.AWS.Route53.CreateTrafficPolicyInstance
+    (
+    -- * Creating a Request
+      createTrafficPolicyInstance
+    , CreateTrafficPolicyInstance
+    -- * Request Lenses
+    , ctpiHostedZoneId
+    , ctpiName
+    , ctpiTTL
+    , ctpiTrafficPolicyId
+    , ctpiTrafficPolicyVersion
+
+    -- * Destructuring the Response
+    , createTrafficPolicyInstanceResponse
+    , CreateTrafficPolicyInstanceResponse
+    -- * Response Lenses
+    , ctpirsResponseStatus
+    , ctpirsTrafficPolicyInstance
+    , ctpirsLocation
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
+
+-- | A complex type that contains information about the resource record sets
+-- that you want to create based on a specified traffic policy.
+--
+-- /See:/ 'createTrafficPolicyInstance' smart constructor.
+data CreateTrafficPolicyInstance = CreateTrafficPolicyInstance'
+    { _ctpiHostedZoneId         :: !Text
+    , _ctpiName                 :: !Text
+    , _ctpiTTL                  :: !Nat
+    , _ctpiTrafficPolicyId      :: !Text
+    , _ctpiTrafficPolicyVersion :: !Nat
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateTrafficPolicyInstance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ctpiHostedZoneId'
+--
+-- * 'ctpiName'
+--
+-- * 'ctpiTTL'
+--
+-- * 'ctpiTrafficPolicyId'
+--
+-- * 'ctpiTrafficPolicyVersion'
+createTrafficPolicyInstance
+    :: Text -- ^ 'ctpiHostedZoneId'
+    -> Text -- ^ 'ctpiName'
+    -> Natural -- ^ 'ctpiTTL'
+    -> Text -- ^ 'ctpiTrafficPolicyId'
+    -> Natural -- ^ 'ctpiTrafficPolicyVersion'
+    -> CreateTrafficPolicyInstance
+createTrafficPolicyInstance pHostedZoneId_ pName_ pTTL_ pTrafficPolicyId_ pTrafficPolicyVersion_ =
+    CreateTrafficPolicyInstance'
+    { _ctpiHostedZoneId = pHostedZoneId_
+    , _ctpiName = pName_
+    , _ctpiTTL = _Nat # pTTL_
+    , _ctpiTrafficPolicyId = pTrafficPolicyId_
+    , _ctpiTrafficPolicyVersion = _Nat # pTrafficPolicyVersion_
+    }
+
+-- | The ID of the hosted zone in which you want Amazon Route 53 to create
+-- resource record sets by using the configuration in a traffic policy.
+ctpiHostedZoneId :: Lens' CreateTrafficPolicyInstance Text
+ctpiHostedZoneId = lens _ctpiHostedZoneId (\ s a -> s{_ctpiHostedZoneId = a});
+
+-- | The domain name (such as example.com) or subdomain name (such as
+-- www.example.com) for which Amazon Route 53 responds to DNS queries by
+-- using the resource record sets that Amazon Route 53 creates for this
+-- traffic policy instance.
+ctpiName :: Lens' CreateTrafficPolicyInstance Text
+ctpiName = lens _ctpiName (\ s a -> s{_ctpiName = a});
+
+-- | The TTL that you want Amazon Route 53 to assign to all of the resource
+-- record sets that it creates in the specified hosted zone.
+ctpiTTL :: Lens' CreateTrafficPolicyInstance Natural
+ctpiTTL = lens _ctpiTTL (\ s a -> s{_ctpiTTL = a}) . _Nat;
+
+-- | The ID of the traffic policy that you want to use to create resource
+-- record sets in the specified hosted zone.
+ctpiTrafficPolicyId :: Lens' CreateTrafficPolicyInstance Text
+ctpiTrafficPolicyId = lens _ctpiTrafficPolicyId (\ s a -> s{_ctpiTrafficPolicyId = a});
+
+-- | The version of the traffic policy that you want to use to create
+-- resource record sets in the specified hosted zone.
+ctpiTrafficPolicyVersion :: Lens' CreateTrafficPolicyInstance Natural
+ctpiTrafficPolicyVersion = lens _ctpiTrafficPolicyVersion (\ s a -> s{_ctpiTrafficPolicyVersion = a}) . _Nat;
+
+instance AWSRequest CreateTrafficPolicyInstance where
+        type Rs CreateTrafficPolicyInstance =
+             CreateTrafficPolicyInstanceResponse
+        request = postXML route53
+        response
+          = receiveXML
+              (\ s h x ->
+                 CreateTrafficPolicyInstanceResponse' <$>
+                   (pure (fromEnum s)) <*>
+                     (x .@ "TrafficPolicyInstance")
+                     <*> (h .# "Location"))
+
+instance ToElement CreateTrafficPolicyInstance where
+        toElement
+          = mkElement
+              "{https://route53.amazonaws.com/doc/2013-04-01/}CreateTrafficPolicyInstanceRequest"
+
+instance ToHeaders CreateTrafficPolicyInstance where
+        toHeaders = const mempty
+
+instance ToPath CreateTrafficPolicyInstance where
+        toPath = const "/2013-04-01/trafficpolicyinstance"
+
+instance ToQuery CreateTrafficPolicyInstance where
+        toQuery = const mempty
+
+instance ToXML CreateTrafficPolicyInstance where
+        toXML CreateTrafficPolicyInstance'{..}
+          = mconcat
+              ["HostedZoneId" @= _ctpiHostedZoneId,
+               "Name" @= _ctpiName, "TTL" @= _ctpiTTL,
+               "TrafficPolicyId" @= _ctpiTrafficPolicyId,
+               "TrafficPolicyVersion" @= _ctpiTrafficPolicyVersion]
+
+-- | A complex type that contains the response information for the
+-- 'CreateTrafficPolicyInstance' request.
+--
+-- /See:/ 'createTrafficPolicyInstanceResponse' smart constructor.
+data CreateTrafficPolicyInstanceResponse = CreateTrafficPolicyInstanceResponse'
+    { _ctpirsResponseStatus        :: !Int
+    , _ctpirsTrafficPolicyInstance :: !TrafficPolicyInstance
+    , _ctpirsLocation              :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateTrafficPolicyInstanceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ctpirsResponseStatus'
+--
+-- * 'ctpirsTrafficPolicyInstance'
+--
+-- * 'ctpirsLocation'
+createTrafficPolicyInstanceResponse
+    :: Int -- ^ 'ctpirsResponseStatus'
+    -> TrafficPolicyInstance -- ^ 'ctpirsTrafficPolicyInstance'
+    -> Text -- ^ 'ctpirsLocation'
+    -> CreateTrafficPolicyInstanceResponse
+createTrafficPolicyInstanceResponse pResponseStatus_ pTrafficPolicyInstance_ pLocation_ =
+    CreateTrafficPolicyInstanceResponse'
+    { _ctpirsResponseStatus = pResponseStatus_
+    , _ctpirsTrafficPolicyInstance = pTrafficPolicyInstance_
+    , _ctpirsLocation = pLocation_
+    }
+
+-- | The response status code.
+ctpirsResponseStatus :: Lens' CreateTrafficPolicyInstanceResponse Int
+ctpirsResponseStatus = lens _ctpirsResponseStatus (\ s a -> s{_ctpirsResponseStatus = a});
+
+-- | A complex type that contains settings for the new traffic policy
+-- instance.
+ctpirsTrafficPolicyInstance :: Lens' CreateTrafficPolicyInstanceResponse TrafficPolicyInstance
+ctpirsTrafficPolicyInstance = lens _ctpirsTrafficPolicyInstance (\ s a -> s{_ctpirsTrafficPolicyInstance = a});
+
+-- | A unique URL that represents a new traffic policy instance.
+ctpirsLocation :: Lens' CreateTrafficPolicyInstanceResponse Text
+ctpirsLocation = lens _ctpirsLocation (\ s a -> s{_ctpirsLocation = a});
diff --git a/gen/Network/AWS/Route53/CreateTrafficPolicyVersion.hs b/gen/Network/AWS/Route53/CreateTrafficPolicyVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/CreateTrafficPolicyVersion.hs
@@ -0,0 +1,184 @@
+{-# 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.CreateTrafficPolicyVersion
+-- 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)
+--
+-- Creates a new version of an existing traffic policy. When you create a
+-- new version of a traffic policy, you specify the ID of the traffic
+-- policy that you want to update and a JSON-formatted document that
+-- describes the new version.
+--
+-- You use traffic policies to create multiple DNS resource record sets for
+-- one domain name (such as example.com) or one subdomain name (such as
+-- www.example.com).
+--
+-- To create a new version, send a 'POST' request to the
+-- '2013-04-01\/trafficpolicy\/' resource. The request body includes an XML
+-- document with a 'CreateTrafficPolicyVersionRequest' element. The
+-- response returns the 'CreateTrafficPolicyVersionResponse' element, which
+-- contains information about the new version of the traffic policy.
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_CreateTrafficPolicyVersion.html AWS API Reference> for CreateTrafficPolicyVersion.
+module Network.AWS.Route53.CreateTrafficPolicyVersion
+    (
+    -- * Creating a Request
+      createTrafficPolicyVersion
+    , CreateTrafficPolicyVersion
+    -- * Request Lenses
+    , ctpvComment
+    , ctpvId
+    , ctpvDocument
+
+    -- * Destructuring the Response
+    , createTrafficPolicyVersionResponse
+    , CreateTrafficPolicyVersionResponse
+    -- * Response Lenses
+    , ctpvrsResponseStatus
+    , ctpvrsTrafficPolicy
+    , ctpvrsLocation
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
+
+-- | A complex type that contains information about the traffic policy for
+-- which you want to create a new version.
+--
+-- /See:/ 'createTrafficPolicyVersion' smart constructor.
+data CreateTrafficPolicyVersion = CreateTrafficPolicyVersion'
+    { _ctpvComment  :: !(Maybe Text)
+    , _ctpvId       :: !Text
+    , _ctpvDocument :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateTrafficPolicyVersion' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ctpvComment'
+--
+-- * 'ctpvId'
+--
+-- * 'ctpvDocument'
+createTrafficPolicyVersion
+    :: Text -- ^ 'ctpvId'
+    -> Text -- ^ 'ctpvDocument'
+    -> CreateTrafficPolicyVersion
+createTrafficPolicyVersion pId_ pDocument_ =
+    CreateTrafficPolicyVersion'
+    { _ctpvComment = Nothing
+    , _ctpvId = pId_
+    , _ctpvDocument = pDocument_
+    }
+
+-- | Any comments that you want to include about the new traffic policy
+-- version.
+ctpvComment :: Lens' CreateTrafficPolicyVersion (Maybe Text)
+ctpvComment = lens _ctpvComment (\ s a -> s{_ctpvComment = a});
+
+-- | The ID of the traffic policy for which you want to create a new version.
+ctpvId :: Lens' CreateTrafficPolicyVersion Text
+ctpvId = lens _ctpvId (\ s a -> s{_ctpvId = a});
+
+-- | The definition of a new traffic policy version, in JSON format. You must
+-- specify the full definition of the new traffic policy. You cannot
+-- specify just the differences between the new version and a previous
+-- version.
+ctpvDocument :: Lens' CreateTrafficPolicyVersion Text
+ctpvDocument = lens _ctpvDocument (\ s a -> s{_ctpvDocument = a});
+
+instance AWSRequest CreateTrafficPolicyVersion where
+        type Rs CreateTrafficPolicyVersion =
+             CreateTrafficPolicyVersionResponse
+        request = postXML route53
+        response
+          = receiveXML
+              (\ s h x ->
+                 CreateTrafficPolicyVersionResponse' <$>
+                   (pure (fromEnum s)) <*> (x .@ "TrafficPolicy") <*>
+                     (h .# "Location"))
+
+instance ToElement CreateTrafficPolicyVersion where
+        toElement
+          = mkElement
+              "{https://route53.amazonaws.com/doc/2013-04-01/}CreateTrafficPolicyVersionRequest"
+
+instance ToHeaders CreateTrafficPolicyVersion where
+        toHeaders = const mempty
+
+instance ToPath CreateTrafficPolicyVersion where
+        toPath CreateTrafficPolicyVersion'{..}
+          = mconcat
+              ["/2013-04-01/trafficpolicy/", toBS _ctpvId]
+
+instance ToQuery CreateTrafficPolicyVersion where
+        toQuery = const mempty
+
+instance ToXML CreateTrafficPolicyVersion where
+        toXML CreateTrafficPolicyVersion'{..}
+          = mconcat
+              ["Comment" @= _ctpvComment,
+               "Document" @= _ctpvDocument]
+
+-- | A complex type that contains the response information for the
+-- 'CreateTrafficPolicyVersion' request.
+--
+-- /See:/ 'createTrafficPolicyVersionResponse' smart constructor.
+data CreateTrafficPolicyVersionResponse = CreateTrafficPolicyVersionResponse'
+    { _ctpvrsResponseStatus :: !Int
+    , _ctpvrsTrafficPolicy  :: !TrafficPolicy
+    , _ctpvrsLocation       :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateTrafficPolicyVersionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ctpvrsResponseStatus'
+--
+-- * 'ctpvrsTrafficPolicy'
+--
+-- * 'ctpvrsLocation'
+createTrafficPolicyVersionResponse
+    :: Int -- ^ 'ctpvrsResponseStatus'
+    -> TrafficPolicy -- ^ 'ctpvrsTrafficPolicy'
+    -> Text -- ^ 'ctpvrsLocation'
+    -> CreateTrafficPolicyVersionResponse
+createTrafficPolicyVersionResponse pResponseStatus_ pTrafficPolicy_ pLocation_ =
+    CreateTrafficPolicyVersionResponse'
+    { _ctpvrsResponseStatus = pResponseStatus_
+    , _ctpvrsTrafficPolicy = pTrafficPolicy_
+    , _ctpvrsLocation = pLocation_
+    }
+
+-- | The response status code.
+ctpvrsResponseStatus :: Lens' CreateTrafficPolicyVersionResponse Int
+ctpvrsResponseStatus = lens _ctpvrsResponseStatus (\ s a -> s{_ctpvrsResponseStatus = a});
+
+-- | A complex type that contains settings for the new version of the traffic
+-- policy.
+ctpvrsTrafficPolicy :: Lens' CreateTrafficPolicyVersionResponse TrafficPolicy
+ctpvrsTrafficPolicy = lens _ctpvrsTrafficPolicy (\ s a -> s{_ctpvrsTrafficPolicy = a});
+
+-- | Undocumented member.
+ctpvrsLocation :: Lens' CreateTrafficPolicyVersionResponse Text
+ctpvrsLocation = lens _ctpvrsLocation (\ s a -> s{_ctpvrsLocation = 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
@@ -26,9 +26,10 @@
 -- 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.
+-- is associated with resource record sets, Amazon Route 53 will deny your
+-- request with a 'HealthCheckInUse' error. For information about
+-- disassociating the records from your health check, see
+-- ChangeResourceRecordSets.
 --
 -- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_DeleteHealthCheck.html AWS API Reference> for DeleteHealthCheck.
 module Network.AWS.Route53.DeleteHealthCheck
@@ -46,6 +47,7 @@
     , dhcrsResponseStatus
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
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
@@ -30,8 +30,8 @@
 -- 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
+-- zone that contains other resource record sets, Amazon Route 53 will deny
+-- your request with a 'HostedZoneNotEmpty' error. For information about
 -- deleting records from your hosted zone, see ChangeResourceRecordSets.
 --
 -- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_DeleteHostedZone.html AWS API Reference> for DeleteHostedZone.
@@ -51,6 +51,7 @@
     , dhzrsChangeInfo
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
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
@@ -26,8 +26,8 @@
 -- 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.
+-- contains associated hosted zones, Amazon Route 53 will deny your request
+-- with a 'DelegationSetInUse' error.
 --
 -- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_DeleteReusableDelegationSet.html AWS API Reference> for DeleteReusableDelegationSet.
 module Network.AWS.Route53.DeleteReusableDelegationSet
@@ -45,6 +45,7 @@
     , drdsrsResponseStatus
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
diff --git a/gen/Network/AWS/Route53/DeleteTrafficPolicy.hs b/gen/Network/AWS/Route53/DeleteTrafficPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/DeleteTrafficPolicy.hs
@@ -0,0 +1,124 @@
+{-# 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.DeleteTrafficPolicy
+-- 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)
+--
+-- Deletes a traffic policy. To delete a traffic policy, send a 'DELETE'
+-- request to the '2013-04-01\/trafficpolicy' resource.
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_DeleteTrafficPolicy.html AWS API Reference> for DeleteTrafficPolicy.
+module Network.AWS.Route53.DeleteTrafficPolicy
+    (
+    -- * Creating a Request
+      deleteTrafficPolicy
+    , DeleteTrafficPolicy
+    -- * Request Lenses
+    , dtpId
+    , dtpVersion
+
+    -- * Destructuring the Response
+    , deleteTrafficPolicyResponse
+    , DeleteTrafficPolicyResponse
+    -- * Response Lenses
+    , dtprsResponseStatus
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
+
+-- | A request to delete a specified traffic policy version.
+--
+-- /See:/ 'deleteTrafficPolicy' smart constructor.
+data DeleteTrafficPolicy = DeleteTrafficPolicy'
+    { _dtpId      :: !Text
+    , _dtpVersion :: !Nat
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteTrafficPolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtpId'
+--
+-- * 'dtpVersion'
+deleteTrafficPolicy
+    :: Text -- ^ 'dtpId'
+    -> Natural -- ^ 'dtpVersion'
+    -> DeleteTrafficPolicy
+deleteTrafficPolicy pId_ pVersion_ =
+    DeleteTrafficPolicy'
+    { _dtpId = pId_
+    , _dtpVersion = _Nat # pVersion_
+    }
+
+-- | The ID of the traffic policy that you want to delete.
+dtpId :: Lens' DeleteTrafficPolicy Text
+dtpId = lens _dtpId (\ s a -> s{_dtpId = a});
+
+-- | The version number of the traffic policy that you want to delete.
+dtpVersion :: Lens' DeleteTrafficPolicy Natural
+dtpVersion = lens _dtpVersion (\ s a -> s{_dtpVersion = a}) . _Nat;
+
+instance AWSRequest DeleteTrafficPolicy where
+        type Rs DeleteTrafficPolicy =
+             DeleteTrafficPolicyResponse
+        request = delete route53
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteTrafficPolicyResponse' <$> (pure (fromEnum s)))
+
+instance ToHeaders DeleteTrafficPolicy where
+        toHeaders = const mempty
+
+instance ToPath DeleteTrafficPolicy where
+        toPath DeleteTrafficPolicy'{..}
+          = mconcat
+              ["/2013-04-01/trafficpolicy/", toBS _dtpId, "/",
+               toBS _dtpVersion]
+
+instance ToQuery DeleteTrafficPolicy where
+        toQuery = const mempty
+
+-- | An empty element.
+--
+-- /See:/ 'deleteTrafficPolicyResponse' smart constructor.
+newtype DeleteTrafficPolicyResponse = DeleteTrafficPolicyResponse'
+    { _dtprsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteTrafficPolicyResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtprsResponseStatus'
+deleteTrafficPolicyResponse
+    :: Int -- ^ 'dtprsResponseStatus'
+    -> DeleteTrafficPolicyResponse
+deleteTrafficPolicyResponse pResponseStatus_ =
+    DeleteTrafficPolicyResponse'
+    { _dtprsResponseStatus = pResponseStatus_
+    }
+
+-- | The response status code.
+dtprsResponseStatus :: Lens' DeleteTrafficPolicyResponse Int
+dtprsResponseStatus = lens _dtprsResponseStatus (\ s a -> s{_dtprsResponseStatus = a});
diff --git a/gen/Network/AWS/Route53/DeleteTrafficPolicyInstance.hs b/gen/Network/AWS/Route53/DeleteTrafficPolicyInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/DeleteTrafficPolicyInstance.hs
@@ -0,0 +1,126 @@
+{-# 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.DeleteTrafficPolicyInstance
+-- 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)
+--
+-- Deletes a traffic policy instance and all of the resource record sets
+-- that Amazon Route 53 created when you created the instance.
+--
+-- To delete a traffic policy instance, send a 'DELETE' request to the
+-- '2013-04-01\/trafficpolicy\/traffic policy instance ID' resource.
+--
+-- When you delete a traffic policy instance, Amazon Route 53 also deletes
+-- all of the resource record sets that were created when you created the
+-- traffic policy instance.
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_DeleteTrafficPolicyInstance.html AWS API Reference> for DeleteTrafficPolicyInstance.
+module Network.AWS.Route53.DeleteTrafficPolicyInstance
+    (
+    -- * Creating a Request
+      deleteTrafficPolicyInstance
+    , DeleteTrafficPolicyInstance
+    -- * Request Lenses
+    , dtpiId
+
+    -- * Destructuring the Response
+    , deleteTrafficPolicyInstanceResponse
+    , DeleteTrafficPolicyInstanceResponse
+    -- * Response Lenses
+    , dtpirsResponseStatus
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
+
+-- | A complex type that contains information about the traffic policy
+-- instance that you want to delete.
+--
+-- /See:/ 'deleteTrafficPolicyInstance' smart constructor.
+newtype DeleteTrafficPolicyInstance = DeleteTrafficPolicyInstance'
+    { _dtpiId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteTrafficPolicyInstance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtpiId'
+deleteTrafficPolicyInstance
+    :: Text -- ^ 'dtpiId'
+    -> DeleteTrafficPolicyInstance
+deleteTrafficPolicyInstance pId_ =
+    DeleteTrafficPolicyInstance'
+    { _dtpiId = pId_
+    }
+
+-- | The ID of the traffic policy instance that you want to delete.
+--
+-- When you delete a traffic policy instance, Amazon Route 53 also deletes
+-- all of the resource record sets that were created when you created the
+-- traffic policy instance.
+dtpiId :: Lens' DeleteTrafficPolicyInstance Text
+dtpiId = lens _dtpiId (\ s a -> s{_dtpiId = a});
+
+instance AWSRequest DeleteTrafficPolicyInstance where
+        type Rs DeleteTrafficPolicyInstance =
+             DeleteTrafficPolicyInstanceResponse
+        request = delete route53
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteTrafficPolicyInstanceResponse' <$>
+                   (pure (fromEnum s)))
+
+instance ToHeaders DeleteTrafficPolicyInstance where
+        toHeaders = const mempty
+
+instance ToPath DeleteTrafficPolicyInstance where
+        toPath DeleteTrafficPolicyInstance'{..}
+          = mconcat
+              ["/2013-04-01/trafficpolicyinstance/", toBS _dtpiId]
+
+instance ToQuery DeleteTrafficPolicyInstance where
+        toQuery = const mempty
+
+-- | An empty element.
+--
+-- /See:/ 'deleteTrafficPolicyInstanceResponse' smart constructor.
+newtype DeleteTrafficPolicyInstanceResponse = DeleteTrafficPolicyInstanceResponse'
+    { _dtpirsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteTrafficPolicyInstanceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtpirsResponseStatus'
+deleteTrafficPolicyInstanceResponse
+    :: Int -- ^ 'dtpirsResponseStatus'
+    -> DeleteTrafficPolicyInstanceResponse
+deleteTrafficPolicyInstanceResponse pResponseStatus_ =
+    DeleteTrafficPolicyInstanceResponse'
+    { _dtpirsResponseStatus = pResponseStatus_
+    }
+
+-- | The response status code.
+dtpirsResponseStatus :: Lens' DeleteTrafficPolicyInstanceResponse Int
+dtpirsResponseStatus = lens _dtpirsResponseStatus (\ s a -> s{_dtpirsResponseStatus = 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
@@ -48,6 +48,7 @@
     , dvfhzrsChangeInfo
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
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
@@ -22,8 +22,8 @@
 -- 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.
+-- replicated to all Amazon 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.
@@ -45,6 +45,7 @@
     , gcrsChangeInfo
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
diff --git a/gen/Network/AWS/Route53/GetChangeDetails.hs b/gen/Network/AWS/Route53/GetChangeDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/GetChangeDetails.hs
@@ -0,0 +1,125 @@
+{-# 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.GetChangeDetails
+-- 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)
+--
+-- This action returns the status and changes of a change batch request.
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetChangeDetails.html AWS API Reference> for GetChangeDetails.
+module Network.AWS.Route53.GetChangeDetails
+    (
+    -- * Creating a Request
+      getChangeDetails
+    , GetChangeDetails
+    -- * Request Lenses
+    , gcdId
+
+    -- * Destructuring the Response
+    , getChangeDetailsResponse
+    , GetChangeDetailsResponse
+    -- * Response Lenses
+    , gcdrsResponseStatus
+    , gcdrsChangeBatchRecord
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
+
+-- | The input for a GetChangeDetails request.
+--
+-- /See:/ 'getChangeDetails' smart constructor.
+newtype GetChangeDetails = GetChangeDetails'
+    { _gcdId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetChangeDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcdId'
+getChangeDetails
+    :: Text -- ^ 'gcdId'
+    -> GetChangeDetails
+getChangeDetails pId_ =
+    GetChangeDetails'
+    { _gcdId = 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.
+gcdId :: Lens' GetChangeDetails Text
+gcdId = lens _gcdId (\ s a -> s{_gcdId = a});
+
+instance AWSRequest GetChangeDetails where
+        type Rs GetChangeDetails = GetChangeDetailsResponse
+        request = get route53
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetChangeDetailsResponse' <$>
+                   (pure (fromEnum s)) <*> (x .@ "ChangeBatchRecord"))
+
+instance ToHeaders GetChangeDetails where
+        toHeaders = const mempty
+
+instance ToPath GetChangeDetails where
+        toPath GetChangeDetails'{..}
+          = mconcat ["/2013-04-01/changedetails/", toBS _gcdId]
+
+instance ToQuery GetChangeDetails where
+        toQuery = const mempty
+
+-- | A complex type that contains the 'ChangeBatchRecord' element.
+--
+-- /See:/ 'getChangeDetailsResponse' smart constructor.
+data GetChangeDetailsResponse = GetChangeDetailsResponse'
+    { _gcdrsResponseStatus    :: !Int
+    , _gcdrsChangeBatchRecord :: !ChangeBatchRecord
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetChangeDetailsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcdrsResponseStatus'
+--
+-- * 'gcdrsChangeBatchRecord'
+getChangeDetailsResponse
+    :: Int -- ^ 'gcdrsResponseStatus'
+    -> ChangeBatchRecord -- ^ 'gcdrsChangeBatchRecord'
+    -> GetChangeDetailsResponse
+getChangeDetailsResponse pResponseStatus_ pChangeBatchRecord_ =
+    GetChangeDetailsResponse'
+    { _gcdrsResponseStatus = pResponseStatus_
+    , _gcdrsChangeBatchRecord = pChangeBatchRecord_
+    }
+
+-- | The response status code.
+gcdrsResponseStatus :: Lens' GetChangeDetailsResponse Int
+gcdrsResponseStatus = lens _gcdrsResponseStatus (\ s a -> s{_gcdrsResponseStatus = a});
+
+-- | A complex type that contains information about the specified change
+-- batch, including the change batch ID, the status of the change, and the
+-- contained changes.
+gcdrsChangeBatchRecord :: Lens' GetChangeDetailsResponse ChangeBatchRecord
+gcdrsChangeBatchRecord = lens _gcdrsChangeBatchRecord (\ s a -> s{_gcdrsChangeBatchRecord = a});
diff --git a/gen/Network/AWS/Route53/GetCheckerIPRanges.hs b/gen/Network/AWS/Route53/GetCheckerIPRanges.hs
--- a/gen/Network/AWS/Route53/GetCheckerIPRanges.hs
+++ b/gen/Network/AWS/Route53/GetCheckerIPRanges.hs
@@ -39,6 +39,7 @@
     , gcirrsCheckerIPRanges
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
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
@@ -41,6 +41,7 @@
     , gglrsGeoLocationDetails
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
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
@@ -38,6 +38,7 @@
     , ghcrsHealthCheck
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
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
@@ -36,6 +36,7 @@
     , ghccrsHealthCheckCount
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
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
@@ -40,6 +40,7 @@
     , ghclfrrsHealthCheckObservations
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -128,7 +129,7 @@
 ghclfrrsResponseStatus :: Lens' GetHealthCheckLastFailureReasonResponse Int
 ghclfrrsResponseStatus = lens _ghclfrrsResponseStatus (\ s a -> s{_ghclfrrsResponseStatus = a});
 
--- | A list that contains one 'HealthCheckObservation' element for each Route
--- 53 health checker.
+-- | A list that contains one 'HealthCheckObservation' element for each
+-- Amazon 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
@@ -39,6 +39,7 @@
     , ghcsrsHealthCheckObservations
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -66,8 +67,68 @@
     { _ghcsHealthCheckId = pHealthCheckId_
     }
 
--- | The ID of the health check for which you want to retrieve the most
--- recent status.
+-- | If you want Amazon Route 53 to return this resource record set in
+-- response to a DNS query only when a health check is passing, include the
+-- 'HealthCheckId' element and specify the ID of the applicable health
+-- check.
+--
+-- Amazon Route 53 determines whether a resource record set is healthy by
+-- periodically sending a request to the endpoint that is specified in the
+-- health check. If that endpoint returns an HTTP status code of 2xx or
+-- 3xx, the endpoint is healthy. If the endpoint returns an HTTP status
+-- code of 400 or greater, or if the endpoint doesn\'t respond for a
+-- certain amount of time, Amazon Route 53 considers the endpoint unhealthy
+-- and also considers the resource record set unhealthy.
+--
+-- The 'HealthCheckId' element is only useful when Amazon Route 53 is
+-- choosing between two or more resource record sets to respond to a DNS
+-- query, and you want Amazon Route 53 to base the choice in part on the
+-- status of a health check. Configuring health checks only makes sense in
+-- the following configurations:
+--
+-- -   You\'re checking the health of the resource record sets in a
+--     weighted, latency, geolocation, or failover resource record set, and
+--     you specify health check IDs for all of the resource record sets. If
+--     the health check for one resource record set specifies an endpoint
+--     that is not healthy, Amazon Route 53 stops responding to queries
+--     using the value for that resource record set.
+-- -   You set 'EvaluateTargetHealth' to 'true' for the resource record
+--     sets in an alias, weighted alias, latency alias, geolocation alias,
+--     or failover alias resource record set, and you specify health check
+--     IDs for all of the resource record sets that are referenced by the
+--     alias resource record sets. For more information about this
+--     configuration, see EvaluateTargetHealth.
+--
+--     Amazon Route 53 doesn\'t check the health of the endpoint specified
+--     in the resource record set, for example, the endpoint specified by
+--     the IP address in the 'Value' element. When you add a
+--     'HealthCheckId' element to a resource record set, Amazon Route 53
+--     checks the health of the endpoint that you specified in the health
+--     check.
+--
+-- For geolocation resource record sets, if an endpoint is unhealthy,
+-- Amazon Route 53 looks for a resource record set for the larger,
+-- associated geographic region. For example, suppose you have resource
+-- record sets for a state in the United States, for the United States, for
+-- North America, and for all locations. If the endpoint for the state
+-- resource record set is unhealthy, Amazon Route 53 checks the resource
+-- record sets for the United States, for North America, and for all
+-- locations (a resource record set for which the value of CountryCode is
+-- '*'), in that order, until it finds a resource record set for which the
+-- endpoint is healthy.
+--
+-- If your health checks specify the endpoint only by domain name, we
+-- recommend that you create a separate health check for each endpoint. For
+-- example, create a health check for each HTTP server that is serving
+-- content for www.example.com. For the value of
+-- 'FullyQualifiedDomainName', specify the domain name of the server (such
+-- as 'us-east-1-www.example.com'), not the name of the resource record
+-- sets (example.com).
+--
+-- In this configuration, if you create a health check for which the value
+-- of 'FullyQualifiedDomainName' matches the name of the resource record
+-- sets and then associate the health check with those resource record
+-- sets, health check results will be unpredictable.
 ghcsHealthCheckId :: Lens' GetHealthCheckStatus Text
 ghcsHealthCheckId = lens _ghcsHealthCheckId (\ s a -> s{_ghcsHealthCheckId = a});
 
@@ -124,7 +185,7 @@
 ghcsrsResponseStatus :: Lens' GetHealthCheckStatusResponse Int
 ghcsrsResponseStatus = lens _ghcsrsResponseStatus (\ s a -> s{_ghcsrsResponseStatus = a});
 
--- | A list that contains one 'HealthCheckObservation' element for each Route
--- 53 health checker.
+-- | A list that contains one 'HealthCheckObservation' element for each
+-- Amazon 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
@@ -20,8 +20,8 @@
 --
 -- 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.
+-- set is the four Amazon Route 53 name servers that were assigned to the
+-- hosted zone when you created it.
 --
 -- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetHostedZone.html AWS API Reference> for GetHostedZone.
 module Network.AWS.Route53.GetHostedZone
@@ -42,6 +42,7 @@
     , ghzrsHostedZone
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
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
@@ -36,6 +36,7 @@
     , ghzcrsHostedZoneCount
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
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
@@ -38,6 +38,7 @@
     , grdsrsDelegationSet
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
diff --git a/gen/Network/AWS/Route53/GetTrafficPolicy.hs b/gen/Network/AWS/Route53/GetTrafficPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/GetTrafficPolicy.hs
@@ -0,0 +1,138 @@
+{-# 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.GetTrafficPolicy
+-- 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)
+--
+-- Gets information about a specific traffic policy version. To get the
+-- information, send a 'GET' request to the '2013-04-01\/trafficpolicy'
+-- resource.
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetTrafficPolicy.html AWS API Reference> for GetTrafficPolicy.
+module Network.AWS.Route53.GetTrafficPolicy
+    (
+    -- * Creating a Request
+      getTrafficPolicy
+    , GetTrafficPolicy
+    -- * Request Lenses
+    , gtpId
+    , gtpVersion
+
+    -- * Destructuring the Response
+    , getTrafficPolicyResponse
+    , GetTrafficPolicyResponse
+    -- * Response Lenses
+    , gtprsResponseStatus
+    , gtprsTrafficPolicy
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
+
+-- | Gets information about a specific traffic policy version. To get the
+-- information, send a GET request to the 2013-04-01\/trafficpolicy
+-- resource, and specify the ID and the version of the traffic policy.
+--
+-- /See:/ 'getTrafficPolicy' smart constructor.
+data GetTrafficPolicy = GetTrafficPolicy'
+    { _gtpId      :: !Text
+    , _gtpVersion :: !Nat
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetTrafficPolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gtpId'
+--
+-- * 'gtpVersion'
+getTrafficPolicy
+    :: Text -- ^ 'gtpId'
+    -> Natural -- ^ 'gtpVersion'
+    -> GetTrafficPolicy
+getTrafficPolicy pId_ pVersion_ =
+    GetTrafficPolicy'
+    { _gtpId = pId_
+    , _gtpVersion = _Nat # pVersion_
+    }
+
+-- | The ID of the traffic policy that you want to get information about.
+gtpId :: Lens' GetTrafficPolicy Text
+gtpId = lens _gtpId (\ s a -> s{_gtpId = a});
+
+-- | The version number of the traffic policy that you want to get
+-- information about.
+gtpVersion :: Lens' GetTrafficPolicy Natural
+gtpVersion = lens _gtpVersion (\ s a -> s{_gtpVersion = a}) . _Nat;
+
+instance AWSRequest GetTrafficPolicy where
+        type Rs GetTrafficPolicy = GetTrafficPolicyResponse
+        request = get route53
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetTrafficPolicyResponse' <$>
+                   (pure (fromEnum s)) <*> (x .@ "TrafficPolicy"))
+
+instance ToHeaders GetTrafficPolicy where
+        toHeaders = const mempty
+
+instance ToPath GetTrafficPolicy where
+        toPath GetTrafficPolicy'{..}
+          = mconcat
+              ["/2013-04-01/trafficpolicy/", toBS _gtpId, "/",
+               toBS _gtpVersion]
+
+instance ToQuery GetTrafficPolicy where
+        toQuery = const mempty
+
+-- | A complex type that contains the response information for the request.
+--
+-- /See:/ 'getTrafficPolicyResponse' smart constructor.
+data GetTrafficPolicyResponse = GetTrafficPolicyResponse'
+    { _gtprsResponseStatus :: !Int
+    , _gtprsTrafficPolicy  :: !TrafficPolicy
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetTrafficPolicyResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gtprsResponseStatus'
+--
+-- * 'gtprsTrafficPolicy'
+getTrafficPolicyResponse
+    :: Int -- ^ 'gtprsResponseStatus'
+    -> TrafficPolicy -- ^ 'gtprsTrafficPolicy'
+    -> GetTrafficPolicyResponse
+getTrafficPolicyResponse pResponseStatus_ pTrafficPolicy_ =
+    GetTrafficPolicyResponse'
+    { _gtprsResponseStatus = pResponseStatus_
+    , _gtprsTrafficPolicy = pTrafficPolicy_
+    }
+
+-- | The response status code.
+gtprsResponseStatus :: Lens' GetTrafficPolicyResponse Int
+gtprsResponseStatus = lens _gtprsResponseStatus (\ s a -> s{_gtprsResponseStatus = a});
+
+-- | A complex type that contains settings for the specified traffic policy.
+gtprsTrafficPolicy :: Lens' GetTrafficPolicyResponse TrafficPolicy
+gtprsTrafficPolicy = lens _gtprsTrafficPolicy (\ s a -> s{_gtprsTrafficPolicy = a});
diff --git a/gen/Network/AWS/Route53/GetTrafficPolicyInstance.hs b/gen/Network/AWS/Route53/GetTrafficPolicyInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/GetTrafficPolicyInstance.hs
@@ -0,0 +1,138 @@
+{-# 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.GetTrafficPolicyInstance
+-- 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)
+--
+-- Gets information about a specified traffic policy instance.
+--
+-- To get information about the traffic policy instance, send a 'GET'
+-- request to the '2013-04-01\/trafficpolicyinstance' resource.
+--
+-- After you submit a 'CreateTrafficPolicyInstance' or an
+-- 'UpdateTrafficPolicyInstance' request, there\'s a brief delay while
+-- Amazon Route 53 creates the resource record sets that are specified in
+-- the traffic policy definition. For more information, see the State
+-- response element.
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetTrafficPolicyInstance.html AWS API Reference> for GetTrafficPolicyInstance.
+module Network.AWS.Route53.GetTrafficPolicyInstance
+    (
+    -- * Creating a Request
+      getTrafficPolicyInstance
+    , GetTrafficPolicyInstance
+    -- * Request Lenses
+    , gtpiId
+
+    -- * Destructuring the Response
+    , getTrafficPolicyInstanceResponse
+    , GetTrafficPolicyInstanceResponse
+    -- * Response Lenses
+    , gtpirsResponseStatus
+    , gtpirsTrafficPolicyInstance
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
+
+-- | Gets information about a specified traffic policy instance.
+--
+-- To get information about a traffic policy instance, send a 'GET' request
+-- to the '2013-04-01\/trafficpolicyinstance\/Id' resource.
+--
+-- /See:/ 'getTrafficPolicyInstance' smart constructor.
+newtype GetTrafficPolicyInstance = GetTrafficPolicyInstance'
+    { _gtpiId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetTrafficPolicyInstance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gtpiId'
+getTrafficPolicyInstance
+    :: Text -- ^ 'gtpiId'
+    -> GetTrafficPolicyInstance
+getTrafficPolicyInstance pId_ =
+    GetTrafficPolicyInstance'
+    { _gtpiId = pId_
+    }
+
+-- | The ID of the traffic policy instance that you want to get information
+-- about.
+gtpiId :: Lens' GetTrafficPolicyInstance Text
+gtpiId = lens _gtpiId (\ s a -> s{_gtpiId = a});
+
+instance AWSRequest GetTrafficPolicyInstance where
+        type Rs GetTrafficPolicyInstance =
+             GetTrafficPolicyInstanceResponse
+        request = get route53
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetTrafficPolicyInstanceResponse' <$>
+                   (pure (fromEnum s)) <*>
+                     (x .@ "TrafficPolicyInstance"))
+
+instance ToHeaders GetTrafficPolicyInstance where
+        toHeaders = const mempty
+
+instance ToPath GetTrafficPolicyInstance where
+        toPath GetTrafficPolicyInstance'{..}
+          = mconcat
+              ["/2013-04-01/trafficpolicyinstance/", toBS _gtpiId]
+
+instance ToQuery GetTrafficPolicyInstance where
+        toQuery = const mempty
+
+-- | A complex type that contains information about the resource record sets
+-- that Amazon Route 53 created based on a specified traffic policy.
+--
+-- /See:/ 'getTrafficPolicyInstanceResponse' smart constructor.
+data GetTrafficPolicyInstanceResponse = GetTrafficPolicyInstanceResponse'
+    { _gtpirsResponseStatus        :: !Int
+    , _gtpirsTrafficPolicyInstance :: !TrafficPolicyInstance
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetTrafficPolicyInstanceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gtpirsResponseStatus'
+--
+-- * 'gtpirsTrafficPolicyInstance'
+getTrafficPolicyInstanceResponse
+    :: Int -- ^ 'gtpirsResponseStatus'
+    -> TrafficPolicyInstance -- ^ 'gtpirsTrafficPolicyInstance'
+    -> GetTrafficPolicyInstanceResponse
+getTrafficPolicyInstanceResponse pResponseStatus_ pTrafficPolicyInstance_ =
+    GetTrafficPolicyInstanceResponse'
+    { _gtpirsResponseStatus = pResponseStatus_
+    , _gtpirsTrafficPolicyInstance = pTrafficPolicyInstance_
+    }
+
+-- | The response status code.
+gtpirsResponseStatus :: Lens' GetTrafficPolicyInstanceResponse Int
+gtpirsResponseStatus = lens _gtpirsResponseStatus (\ s a -> s{_gtpirsResponseStatus = a});
+
+-- | A complex type that contains settings for the traffic policy instance.
+gtpirsTrafficPolicyInstance :: Lens' GetTrafficPolicyInstanceResponse TrafficPolicyInstance
+gtpirsTrafficPolicyInstance = lens _gtpirsTrafficPolicyInstance (\ s a -> s{_gtpirsTrafficPolicyInstance = a});
diff --git a/gen/Network/AWS/Route53/GetTrafficPolicyInstanceCount.hs b/gen/Network/AWS/Route53/GetTrafficPolicyInstanceCount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/GetTrafficPolicyInstanceCount.hs
@@ -0,0 +1,119 @@
+{-# 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.GetTrafficPolicyInstanceCount
+-- 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)
+--
+-- Gets the number of traffic policy instances that are associated with the
+-- current AWS account.
+--
+-- To get the number of traffic policy instances, send a 'GET' request to
+-- the '2013-04-01\/trafficpolicyinstancecount' resource.
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetTrafficPolicyInstanceCount.html AWS API Reference> for GetTrafficPolicyInstanceCount.
+module Network.AWS.Route53.GetTrafficPolicyInstanceCount
+    (
+    -- * Creating a Request
+      getTrafficPolicyInstanceCount
+    , GetTrafficPolicyInstanceCount
+
+    -- * Destructuring the Response
+    , getTrafficPolicyInstanceCountResponse
+    , GetTrafficPolicyInstanceCountResponse
+    -- * Response Lenses
+    , gtpicrsResponseStatus
+    , gtpicrsTrafficPolicyInstanceCount
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
+
+-- | To retrieve a count of all your traffic policy instances, send a 'GET'
+-- request to the '2013-04-01\/trafficpolicyinstancecount' resource.
+--
+-- /See:/ 'getTrafficPolicyInstanceCount' smart constructor.
+data GetTrafficPolicyInstanceCount =
+    GetTrafficPolicyInstanceCount'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetTrafficPolicyInstanceCount' with the minimum fields required to make a request.
+--
+getTrafficPolicyInstanceCount
+    :: GetTrafficPolicyInstanceCount
+getTrafficPolicyInstanceCount = GetTrafficPolicyInstanceCount'
+
+instance AWSRequest GetTrafficPolicyInstanceCount
+         where
+        type Rs GetTrafficPolicyInstanceCount =
+             GetTrafficPolicyInstanceCountResponse
+        request = get route53
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetTrafficPolicyInstanceCountResponse' <$>
+                   (pure (fromEnum s)) <*>
+                     (x .@ "TrafficPolicyInstanceCount"))
+
+instance ToHeaders GetTrafficPolicyInstanceCount
+         where
+        toHeaders = const mempty
+
+instance ToPath GetTrafficPolicyInstanceCount where
+        toPath
+          = const "/2013-04-01/trafficpolicyinstancecount"
+
+instance ToQuery GetTrafficPolicyInstanceCount where
+        toQuery = const mempty
+
+-- | A complex type that contains information about the number of traffic
+-- policy instances that are associated with the current AWS account.
+--
+-- /See:/ 'getTrafficPolicyInstanceCountResponse' smart constructor.
+data GetTrafficPolicyInstanceCountResponse = GetTrafficPolicyInstanceCountResponse'
+    { _gtpicrsResponseStatus             :: !Int
+    , _gtpicrsTrafficPolicyInstanceCount :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetTrafficPolicyInstanceCountResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gtpicrsResponseStatus'
+--
+-- * 'gtpicrsTrafficPolicyInstanceCount'
+getTrafficPolicyInstanceCountResponse
+    :: Int -- ^ 'gtpicrsResponseStatus'
+    -> Int -- ^ 'gtpicrsTrafficPolicyInstanceCount'
+    -> GetTrafficPolicyInstanceCountResponse
+getTrafficPolicyInstanceCountResponse pResponseStatus_ pTrafficPolicyInstanceCount_ =
+    GetTrafficPolicyInstanceCountResponse'
+    { _gtpicrsResponseStatus = pResponseStatus_
+    , _gtpicrsTrafficPolicyInstanceCount = pTrafficPolicyInstanceCount_
+    }
+
+-- | The response status code.
+gtpicrsResponseStatus :: Lens' GetTrafficPolicyInstanceCountResponse Int
+gtpicrsResponseStatus = lens _gtpicrsResponseStatus (\ s a -> s{_gtpicrsResponseStatus = a});
+
+-- | The number of traffic policy instances that are associated with the
+-- current AWS account.
+gtpicrsTrafficPolicyInstanceCount :: Lens' GetTrafficPolicyInstanceCountResponse Int
+gtpicrsTrafficPolicyInstanceCount = lens _gtpicrsTrafficPolicyInstanceCount (\ s a -> s{_gtpicrsTrafficPolicyInstanceCount = a});
diff --git a/gen/Network/AWS/Route53/ListChangeBatchesByHostedZone.hs b/gen/Network/AWS/Route53/ListChangeBatchesByHostedZone.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/ListChangeBatchesByHostedZone.hs
@@ -0,0 +1,214 @@
+{-# 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.ListChangeBatchesByHostedZone
+-- 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)
+--
+-- This action gets the list of ChangeBatches in a given time period for a
+-- given hosted zone.
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListChangeBatchesByHostedZone.html AWS API Reference> for ListChangeBatchesByHostedZone.
+module Network.AWS.Route53.ListChangeBatchesByHostedZone
+    (
+    -- * Creating a Request
+      listChangeBatchesByHostedZone
+    , ListChangeBatchesByHostedZone
+    -- * Request Lenses
+    , lcbbhzMarker
+    , lcbbhzMaxItems
+    , lcbbhzHostedZoneId
+    , lcbbhzStartDate
+    , lcbbhzEndDate
+
+    -- * Destructuring the Response
+    , listChangeBatchesByHostedZoneResponse
+    , ListChangeBatchesByHostedZoneResponse
+    -- * Response Lenses
+    , lcbbhzrsNextMarker
+    , lcbbhzrsIsTruncated
+    , lcbbhzrsResponseStatus
+    , lcbbhzrsMaxItems
+    , lcbbhzrsMarker
+    , lcbbhzrsChangeBatchRecords
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
+
+-- | The input for a ListChangeBatchesByHostedZone request.
+--
+-- /See:/ 'listChangeBatchesByHostedZone' smart constructor.
+data ListChangeBatchesByHostedZone = ListChangeBatchesByHostedZone'
+    { _lcbbhzMarker       :: !(Maybe Text)
+    , _lcbbhzMaxItems     :: !(Maybe Text)
+    , _lcbbhzHostedZoneId :: !Text
+    , _lcbbhzStartDate    :: !Text
+    , _lcbbhzEndDate      :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListChangeBatchesByHostedZone' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcbbhzMarker'
+--
+-- * 'lcbbhzMaxItems'
+--
+-- * 'lcbbhzHostedZoneId'
+--
+-- * 'lcbbhzStartDate'
+--
+-- * 'lcbbhzEndDate'
+listChangeBatchesByHostedZone
+    :: Text -- ^ 'lcbbhzHostedZoneId'
+    -> Text -- ^ 'lcbbhzStartDate'
+    -> Text -- ^ 'lcbbhzEndDate'
+    -> ListChangeBatchesByHostedZone
+listChangeBatchesByHostedZone pHostedZoneId_ pStartDate_ pEndDate_ =
+    ListChangeBatchesByHostedZone'
+    { _lcbbhzMarker = Nothing
+    , _lcbbhzMaxItems = Nothing
+    , _lcbbhzHostedZoneId = pHostedZoneId_
+    , _lcbbhzStartDate = pStartDate_
+    , _lcbbhzEndDate = pEndDate_
+    }
+
+-- | The page marker.
+lcbbhzMarker :: Lens' ListChangeBatchesByHostedZone (Maybe Text)
+lcbbhzMarker = lens _lcbbhzMarker (\ s a -> s{_lcbbhzMarker = a});
+
+-- | The maximum number of items on a page.
+lcbbhzMaxItems :: Lens' ListChangeBatchesByHostedZone (Maybe Text)
+lcbbhzMaxItems = lens _lcbbhzMaxItems (\ s a -> s{_lcbbhzMaxItems = a});
+
+-- | The ID of the hosted zone that you want to see changes for.
+lcbbhzHostedZoneId :: Lens' ListChangeBatchesByHostedZone Text
+lcbbhzHostedZoneId = lens _lcbbhzHostedZoneId (\ s a -> s{_lcbbhzHostedZoneId = a});
+
+-- | The start of the time period you want to see changes for.
+lcbbhzStartDate :: Lens' ListChangeBatchesByHostedZone Text
+lcbbhzStartDate = lens _lcbbhzStartDate (\ s a -> s{_lcbbhzStartDate = a});
+
+-- | The end of the time period you want to see changes for.
+lcbbhzEndDate :: Lens' ListChangeBatchesByHostedZone Text
+lcbbhzEndDate = lens _lcbbhzEndDate (\ s a -> s{_lcbbhzEndDate = a});
+
+instance AWSRequest ListChangeBatchesByHostedZone
+         where
+        type Rs ListChangeBatchesByHostedZone =
+             ListChangeBatchesByHostedZoneResponse
+        request = get route53
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListChangeBatchesByHostedZoneResponse' <$>
+                   (x .@? "NextMarker") <*> (x .@? "IsTruncated") <*>
+                     (pure (fromEnum s))
+                     <*> (x .@ "MaxItems")
+                     <*> (x .@ "Marker")
+                     <*>
+                     (x .@? "ChangeBatchRecords" .!@ mempty >>=
+                        parseXMLList1 "ChangeBatchRecord"))
+
+instance ToHeaders ListChangeBatchesByHostedZone
+         where
+        toHeaders = const mempty
+
+instance ToPath ListChangeBatchesByHostedZone where
+        toPath ListChangeBatchesByHostedZone'{..}
+          = mconcat
+              ["/2013-04-01/hostedzone/", toBS _lcbbhzHostedZoneId,
+               "/changes"]
+
+instance ToQuery ListChangeBatchesByHostedZone where
+        toQuery ListChangeBatchesByHostedZone'{..}
+          = mconcat
+              ["marker" =: _lcbbhzMarker,
+               "maxItems" =: _lcbbhzMaxItems,
+               "startDate" =: _lcbbhzStartDate,
+               "endDate" =: _lcbbhzEndDate]
+
+-- | The input for a ListChangeBatchesByHostedZone request.
+--
+-- /See:/ 'listChangeBatchesByHostedZoneResponse' smart constructor.
+data ListChangeBatchesByHostedZoneResponse = ListChangeBatchesByHostedZoneResponse'
+    { _lcbbhzrsNextMarker         :: !(Maybe Text)
+    , _lcbbhzrsIsTruncated        :: !(Maybe Bool)
+    , _lcbbhzrsResponseStatus     :: !Int
+    , _lcbbhzrsMaxItems           :: !Text
+    , _lcbbhzrsMarker             :: !Text
+    , _lcbbhzrsChangeBatchRecords :: !(List1 ChangeBatchRecord)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListChangeBatchesByHostedZoneResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcbbhzrsNextMarker'
+--
+-- * 'lcbbhzrsIsTruncated'
+--
+-- * 'lcbbhzrsResponseStatus'
+--
+-- * 'lcbbhzrsMaxItems'
+--
+-- * 'lcbbhzrsMarker'
+--
+-- * 'lcbbhzrsChangeBatchRecords'
+listChangeBatchesByHostedZoneResponse
+    :: Int -- ^ 'lcbbhzrsResponseStatus'
+    -> Text -- ^ 'lcbbhzrsMaxItems'
+    -> Text -- ^ 'lcbbhzrsMarker'
+    -> NonEmpty ChangeBatchRecord -- ^ 'lcbbhzrsChangeBatchRecords'
+    -> ListChangeBatchesByHostedZoneResponse
+listChangeBatchesByHostedZoneResponse pResponseStatus_ pMaxItems_ pMarker_ pChangeBatchRecords_ =
+    ListChangeBatchesByHostedZoneResponse'
+    { _lcbbhzrsNextMarker = Nothing
+    , _lcbbhzrsIsTruncated = Nothing
+    , _lcbbhzrsResponseStatus = pResponseStatus_
+    , _lcbbhzrsMaxItems = pMaxItems_
+    , _lcbbhzrsMarker = pMarker_
+    , _lcbbhzrsChangeBatchRecords = _List1 # pChangeBatchRecords_
+    }
+
+-- | The next page marker.
+lcbbhzrsNextMarker :: Lens' ListChangeBatchesByHostedZoneResponse (Maybe Text)
+lcbbhzrsNextMarker = lens _lcbbhzrsNextMarker (\ s a -> s{_lcbbhzrsNextMarker = a});
+
+-- | A flag that indicates if there are more change batches to list.
+lcbbhzrsIsTruncated :: Lens' ListChangeBatchesByHostedZoneResponse (Maybe Bool)
+lcbbhzrsIsTruncated = lens _lcbbhzrsIsTruncated (\ s a -> s{_lcbbhzrsIsTruncated = a});
+
+-- | The response status code.
+lcbbhzrsResponseStatus :: Lens' ListChangeBatchesByHostedZoneResponse Int
+lcbbhzrsResponseStatus = lens _lcbbhzrsResponseStatus (\ s a -> s{_lcbbhzrsResponseStatus = a});
+
+-- | The maximum number of items on a page.
+lcbbhzrsMaxItems :: Lens' ListChangeBatchesByHostedZoneResponse Text
+lcbbhzrsMaxItems = lens _lcbbhzrsMaxItems (\ s a -> s{_lcbbhzrsMaxItems = a});
+
+-- | The page marker.
+lcbbhzrsMarker :: Lens' ListChangeBatchesByHostedZoneResponse Text
+lcbbhzrsMarker = lens _lcbbhzrsMarker (\ s a -> s{_lcbbhzrsMarker = a});
+
+-- | The change batches within the given hosted zone and time period.
+lcbbhzrsChangeBatchRecords :: Lens' ListChangeBatchesByHostedZoneResponse (NonEmpty ChangeBatchRecord)
+lcbbhzrsChangeBatchRecords = lens _lcbbhzrsChangeBatchRecords (\ s a -> s{_lcbbhzrsChangeBatchRecords = a}) . _List1;
diff --git a/gen/Network/AWS/Route53/ListChangeBatchesByRRSet.hs b/gen/Network/AWS/Route53/ListChangeBatchesByRRSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/ListChangeBatchesByRRSet.hs
@@ -0,0 +1,243 @@
+{-# 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.ListChangeBatchesByRRSet
+-- 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)
+--
+-- This action gets the list of ChangeBatches in a given time period for a
+-- given hosted zone and RRSet.
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListChangeBatchesByRRSet.html AWS API Reference> for ListChangeBatchesByRRSet.
+module Network.AWS.Route53.ListChangeBatchesByRRSet
+    (
+    -- * Creating a Request
+      listChangeBatchesByRRSet
+    , ListChangeBatchesByRRSet
+    -- * Request Lenses
+    , lcbbrrsSetIdentifier
+    , lcbbrrsMarker
+    , lcbbrrsMaxItems
+    , lcbbrrsHostedZoneId
+    , lcbbrrsName
+    , lcbbrrsType
+    , lcbbrrsStartDate
+    , lcbbrrsEndDate
+
+    -- * Destructuring the Response
+    , listChangeBatchesByRRSetResponse
+    , ListChangeBatchesByRRSetResponse
+    -- * Response Lenses
+    , lcbbrrsrsNextMarker
+    , lcbbrrsrsIsTruncated
+    , lcbbrrsrsResponseStatus
+    , lcbbrrsrsMaxItems
+    , lcbbrrsrsMarker
+    , lcbbrrsrsChangeBatchRecords
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
+
+-- | The input for a ListChangeBatchesByRRSet request.
+--
+-- /See:/ 'listChangeBatchesByRRSet' smart constructor.
+data ListChangeBatchesByRRSet = ListChangeBatchesByRRSet'
+    { _lcbbrrsSetIdentifier :: !(Maybe Text)
+    , _lcbbrrsMarker        :: !(Maybe Text)
+    , _lcbbrrsMaxItems      :: !(Maybe Text)
+    , _lcbbrrsHostedZoneId  :: !Text
+    , _lcbbrrsName          :: !Text
+    , _lcbbrrsType          :: !RecordType
+    , _lcbbrrsStartDate     :: !Text
+    , _lcbbrrsEndDate       :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListChangeBatchesByRRSet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcbbrrsSetIdentifier'
+--
+-- * 'lcbbrrsMarker'
+--
+-- * 'lcbbrrsMaxItems'
+--
+-- * 'lcbbrrsHostedZoneId'
+--
+-- * 'lcbbrrsName'
+--
+-- * 'lcbbrrsType'
+--
+-- * 'lcbbrrsStartDate'
+--
+-- * 'lcbbrrsEndDate'
+listChangeBatchesByRRSet
+    :: Text -- ^ 'lcbbrrsHostedZoneId'
+    -> Text -- ^ 'lcbbrrsName'
+    -> RecordType -- ^ 'lcbbrrsType'
+    -> Text -- ^ 'lcbbrrsStartDate'
+    -> Text -- ^ 'lcbbrrsEndDate'
+    -> ListChangeBatchesByRRSet
+listChangeBatchesByRRSet pHostedZoneId_ pName_ pType_ pStartDate_ pEndDate_ =
+    ListChangeBatchesByRRSet'
+    { _lcbbrrsSetIdentifier = Nothing
+    , _lcbbrrsMarker = Nothing
+    , _lcbbrrsMaxItems = Nothing
+    , _lcbbrrsHostedZoneId = pHostedZoneId_
+    , _lcbbrrsName = pName_
+    , _lcbbrrsType = pType_
+    , _lcbbrrsStartDate = pStartDate_
+    , _lcbbrrsEndDate = pEndDate_
+    }
+
+-- | The identifier of the RRSet that you want to see changes for.
+lcbbrrsSetIdentifier :: Lens' ListChangeBatchesByRRSet (Maybe Text)
+lcbbrrsSetIdentifier = lens _lcbbrrsSetIdentifier (\ s a -> s{_lcbbrrsSetIdentifier = a});
+
+-- | The page marker.
+lcbbrrsMarker :: Lens' ListChangeBatchesByRRSet (Maybe Text)
+lcbbrrsMarker = lens _lcbbrrsMarker (\ s a -> s{_lcbbrrsMarker = a});
+
+-- | The maximum number of items on a page.
+lcbbrrsMaxItems :: Lens' ListChangeBatchesByRRSet (Maybe Text)
+lcbbrrsMaxItems = lens _lcbbrrsMaxItems (\ s a -> s{_lcbbrrsMaxItems = a});
+
+-- | The ID of the hosted zone that you want to see changes for.
+lcbbrrsHostedZoneId :: Lens' ListChangeBatchesByRRSet Text
+lcbbrrsHostedZoneId = lens _lcbbrrsHostedZoneId (\ s a -> s{_lcbbrrsHostedZoneId = a});
+
+-- | The name of the RRSet that you want to see changes for.
+lcbbrrsName :: Lens' ListChangeBatchesByRRSet Text
+lcbbrrsName = lens _lcbbrrsName (\ s a -> s{_lcbbrrsName = a});
+
+-- | The type of the RRSet that you want to see changes for.
+lcbbrrsType :: Lens' ListChangeBatchesByRRSet RecordType
+lcbbrrsType = lens _lcbbrrsType (\ s a -> s{_lcbbrrsType = a});
+
+-- | The start of the time period you want to see changes for.
+lcbbrrsStartDate :: Lens' ListChangeBatchesByRRSet Text
+lcbbrrsStartDate = lens _lcbbrrsStartDate (\ s a -> s{_lcbbrrsStartDate = a});
+
+-- | The end of the time period you want to see changes for.
+lcbbrrsEndDate :: Lens' ListChangeBatchesByRRSet Text
+lcbbrrsEndDate = lens _lcbbrrsEndDate (\ s a -> s{_lcbbrrsEndDate = a});
+
+instance AWSRequest ListChangeBatchesByRRSet where
+        type Rs ListChangeBatchesByRRSet =
+             ListChangeBatchesByRRSetResponse
+        request = get route53
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListChangeBatchesByRRSetResponse' <$>
+                   (x .@? "NextMarker") <*> (x .@? "IsTruncated") <*>
+                     (pure (fromEnum s))
+                     <*> (x .@ "MaxItems")
+                     <*> (x .@ "Marker")
+                     <*>
+                     (x .@? "ChangeBatchRecords" .!@ mempty >>=
+                        parseXMLList1 "ChangeBatchRecord"))
+
+instance ToHeaders ListChangeBatchesByRRSet where
+        toHeaders = const mempty
+
+instance ToPath ListChangeBatchesByRRSet where
+        toPath ListChangeBatchesByRRSet'{..}
+          = mconcat
+              ["/2013-04-01/hostedzone/",
+               toBS _lcbbrrsHostedZoneId, "/rrsChanges"]
+
+instance ToQuery ListChangeBatchesByRRSet where
+        toQuery ListChangeBatchesByRRSet'{..}
+          = mconcat
+              ["identifier" =: _lcbbrrsSetIdentifier,
+               "marker" =: _lcbbrrsMarker,
+               "maxItems" =: _lcbbrrsMaxItems,
+               "rrSet_name" =: _lcbbrrsName, "type" =: _lcbbrrsType,
+               "startDate" =: _lcbbrrsStartDate,
+               "endDate" =: _lcbbrrsEndDate]
+
+-- | The input for a ListChangeBatchesByRRSet request.
+--
+-- /See:/ 'listChangeBatchesByRRSetResponse' smart constructor.
+data ListChangeBatchesByRRSetResponse = ListChangeBatchesByRRSetResponse'
+    { _lcbbrrsrsNextMarker         :: !(Maybe Text)
+    , _lcbbrrsrsIsTruncated        :: !(Maybe Bool)
+    , _lcbbrrsrsResponseStatus     :: !Int
+    , _lcbbrrsrsMaxItems           :: !Text
+    , _lcbbrrsrsMarker             :: !Text
+    , _lcbbrrsrsChangeBatchRecords :: !(List1 ChangeBatchRecord)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListChangeBatchesByRRSetResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcbbrrsrsNextMarker'
+--
+-- * 'lcbbrrsrsIsTruncated'
+--
+-- * 'lcbbrrsrsResponseStatus'
+--
+-- * 'lcbbrrsrsMaxItems'
+--
+-- * 'lcbbrrsrsMarker'
+--
+-- * 'lcbbrrsrsChangeBatchRecords'
+listChangeBatchesByRRSetResponse
+    :: Int -- ^ 'lcbbrrsrsResponseStatus'
+    -> Text -- ^ 'lcbbrrsrsMaxItems'
+    -> Text -- ^ 'lcbbrrsrsMarker'
+    -> NonEmpty ChangeBatchRecord -- ^ 'lcbbrrsrsChangeBatchRecords'
+    -> ListChangeBatchesByRRSetResponse
+listChangeBatchesByRRSetResponse pResponseStatus_ pMaxItems_ pMarker_ pChangeBatchRecords_ =
+    ListChangeBatchesByRRSetResponse'
+    { _lcbbrrsrsNextMarker = Nothing
+    , _lcbbrrsrsIsTruncated = Nothing
+    , _lcbbrrsrsResponseStatus = pResponseStatus_
+    , _lcbbrrsrsMaxItems = pMaxItems_
+    , _lcbbrrsrsMarker = pMarker_
+    , _lcbbrrsrsChangeBatchRecords = _List1 # pChangeBatchRecords_
+    }
+
+-- | The next page marker.
+lcbbrrsrsNextMarker :: Lens' ListChangeBatchesByRRSetResponse (Maybe Text)
+lcbbrrsrsNextMarker = lens _lcbbrrsrsNextMarker (\ s a -> s{_lcbbrrsrsNextMarker = a});
+
+-- | A flag that indicates if there are more change batches to list.
+lcbbrrsrsIsTruncated :: Lens' ListChangeBatchesByRRSetResponse (Maybe Bool)
+lcbbrrsrsIsTruncated = lens _lcbbrrsrsIsTruncated (\ s a -> s{_lcbbrrsrsIsTruncated = a});
+
+-- | The response status code.
+lcbbrrsrsResponseStatus :: Lens' ListChangeBatchesByRRSetResponse Int
+lcbbrrsrsResponseStatus = lens _lcbbrrsrsResponseStatus (\ s a -> s{_lcbbrrsrsResponseStatus = a});
+
+-- | The maximum number of items on a page.
+lcbbrrsrsMaxItems :: Lens' ListChangeBatchesByRRSetResponse Text
+lcbbrrsrsMaxItems = lens _lcbbrrsrsMaxItems (\ s a -> s{_lcbbrrsrsMaxItems = a});
+
+-- | The page marker.
+lcbbrrsrsMarker :: Lens' ListChangeBatchesByRRSetResponse Text
+lcbbrrsrsMarker = lens _lcbbrrsrsMarker (\ s a -> s{_lcbbrrsrsMarker = a});
+
+-- | The change batches within the given hosted zone and time period.
+lcbbrrsrsChangeBatchRecords :: Lens' ListChangeBatchesByRRSetResponse (NonEmpty ChangeBatchRecord)
+lcbbrrsrsChangeBatchRecords = lens _lcbbrrsrsChangeBatchRecords (\ s a -> s{_lcbbrrsrsChangeBatchRecords = a}) . _List1;
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
@@ -59,6 +59,7 @@
     , lglrsMaxItems
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
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
@@ -53,6 +53,7 @@
     , lhcrsMaxItems
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Pager
 import           Network.AWS.Prelude
 import           Network.AWS.Request
@@ -68,8 +69,8 @@
 -- the 'MaxItems' parameter. You can use the 'Marker' parameter to control
 -- the health check that the list begins with.
 --
--- 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.
+-- 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.
 --
 -- /See:/ 'listHealthChecks' smart constructor.
 data ListHealthChecks = ListHealthChecks'
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
@@ -54,6 +54,7 @@
     , lhzrsMaxItems
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Pager
 import           Network.AWS.Prelude
 import           Network.AWS.Request
@@ -69,11 +70,11 @@
 -- '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>
+-- <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ListInfoOnHostedZone.html Listing the Hosted Zones for an AWS Account>
 -- in the /Amazon Route 53 Developer Guide/.
 --
--- 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.
+-- 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.
 --
 -- /See:/ 'listHostedZones' smart constructor.
 data ListHostedZones = ListHostedZones'
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
@@ -55,6 +55,7 @@
     , lhzbnrsMaxItems
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -71,7 +72,7 @@
 -- parameters 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>
+-- <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ListInfoOnHostedZone.html Listing the Hosted Zones for an AWS Account>
 -- in the /Amazon Route 53 Developer Guide/.
 --
 -- /See:/ 'listHostedZonesByName' smart constructor.
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
@@ -89,6 +89,7 @@
     , lrrsrsMaxItems
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Pager
 import           Network.AWS.Prelude
 import           Network.AWS.Request
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
@@ -52,6 +52,7 @@
     , lrdsrsMaxItems
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -67,8 +68,8 @@
 -- You can use the 'Marker' parameter to control the delegation set that
 -- the list begins with.
 --
--- 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.
+-- 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.
 --
 -- /See:/ 'listReusableDelegationSets' smart constructor.
 data ListReusableDelegationSets = ListReusableDelegationSets'
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
@@ -38,6 +38,7 @@
     , ltfrrsResourceTagSet
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
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
@@ -38,6 +38,7 @@
     , lrsResourceTagSets
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
diff --git a/gen/Network/AWS/Route53/ListTrafficPolicies.hs b/gen/Network/AWS/Route53/ListTrafficPolicies.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/ListTrafficPolicies.hs
@@ -0,0 +1,206 @@
+{-# 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.ListTrafficPolicies
+-- 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)
+--
+-- Gets information about the latest version for every traffic policy that
+-- is associated with the current AWS account. To get the information, send
+-- a 'GET' request to the '2013-04-01\/trafficpolicy' resource.
+--
+-- Amazon Route 53 returns a maximum of 100 items in each response. If you
+-- have a lot of traffic policies, you can use the 'maxitems' parameter to
+-- list them in groups of up to 100.
+--
+-- The response includes three values that help you navigate from one group
+-- of 'maxitems' traffic policies to the next:
+--
+-- -   __IsTruncated__
+-- -   __TrafficPolicyIdMarker__
+-- -   __MaxItems__
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListTrafficPolicies.html AWS API Reference> for ListTrafficPolicies.
+module Network.AWS.Route53.ListTrafficPolicies
+    (
+    -- * Creating a Request
+      listTrafficPolicies
+    , ListTrafficPolicies
+    -- * Request Lenses
+    , ltpTrafficPolicyIdMarker
+    , ltpMaxItems
+
+    -- * Destructuring the Response
+    , listTrafficPoliciesResponse
+    , ListTrafficPoliciesResponse
+    -- * Response Lenses
+    , ltprsResponseStatus
+    , ltprsTrafficPolicySummaries
+    , ltprsIsTruncated
+    , ltprsTrafficPolicyIdMarker
+    , ltprsMaxItems
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
+
+-- | A complex type that contains the information about the request to list
+-- the traffic policies that are associated with the current AWS account.
+--
+-- /See:/ 'listTrafficPolicies' smart constructor.
+data ListTrafficPolicies = ListTrafficPolicies'
+    { _ltpTrafficPolicyIdMarker :: !(Maybe Text)
+    , _ltpMaxItems              :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTrafficPolicies' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltpTrafficPolicyIdMarker'
+--
+-- * 'ltpMaxItems'
+listTrafficPolicies
+    :: ListTrafficPolicies
+listTrafficPolicies =
+    ListTrafficPolicies'
+    { _ltpTrafficPolicyIdMarker = Nothing
+    , _ltpMaxItems = Nothing
+    }
+
+-- | For your first request to 'ListTrafficPolicies', do not include the
+-- 'TrafficPolicyIdMarker' parameter.
+--
+-- If you have more traffic policies than the value of 'MaxItems',
+-- 'ListTrafficPolicies' returns only the first 'MaxItems' traffic
+-- policies. To get the next group of 'MaxItems' policies, submit another
+-- request to 'ListTrafficPolicies'. For the value of
+-- 'TrafficPolicyIdMarker', specify the value of the
+-- 'TrafficPolicyIdMarker' element that was returned in the previous
+-- response.
+--
+-- Policies are listed in the order in which they were created.
+ltpTrafficPolicyIdMarker :: Lens' ListTrafficPolicies (Maybe Text)
+ltpTrafficPolicyIdMarker = lens _ltpTrafficPolicyIdMarker (\ s a -> s{_ltpTrafficPolicyIdMarker = a});
+
+-- | The maximum number of traffic policies to be included in the response
+-- body for this request. If you have more than 'MaxItems' traffic
+-- policies, the value of the 'IsTruncated' element in the response is
+-- 'true', and the value of the 'TrafficPolicyIdMarker' element is the ID
+-- of the first traffic policy in the next group of 'MaxItems' traffic
+-- policies.
+ltpMaxItems :: Lens' ListTrafficPolicies (Maybe Text)
+ltpMaxItems = lens _ltpMaxItems (\ s a -> s{_ltpMaxItems = a});
+
+instance AWSRequest ListTrafficPolicies where
+        type Rs ListTrafficPolicies =
+             ListTrafficPoliciesResponse
+        request = get route53
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListTrafficPoliciesResponse' <$>
+                   (pure (fromEnum s)) <*>
+                     (x .@? "TrafficPolicySummaries" .!@ mempty >>=
+                        parseXMLList "TrafficPolicySummary")
+                     <*> (x .@ "IsTruncated")
+                     <*> (x .@ "TrafficPolicyIdMarker")
+                     <*> (x .@ "MaxItems"))
+
+instance ToHeaders ListTrafficPolicies where
+        toHeaders = const mempty
+
+instance ToPath ListTrafficPolicies where
+        toPath = const "/2013-04-01/trafficpolicies"
+
+instance ToQuery ListTrafficPolicies where
+        toQuery ListTrafficPolicies'{..}
+          = mconcat
+              ["trafficpolicyid" =: _ltpTrafficPolicyIdMarker,
+               "maxitems" =: _ltpMaxItems]
+
+-- | A complex type that contains the response information for the request.
+--
+-- /See:/ 'listTrafficPoliciesResponse' smart constructor.
+data ListTrafficPoliciesResponse = ListTrafficPoliciesResponse'
+    { _ltprsResponseStatus         :: !Int
+    , _ltprsTrafficPolicySummaries :: ![TrafficPolicySummary]
+    , _ltprsIsTruncated            :: !Bool
+    , _ltprsTrafficPolicyIdMarker  :: !Text
+    , _ltprsMaxItems               :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTrafficPoliciesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltprsResponseStatus'
+--
+-- * 'ltprsTrafficPolicySummaries'
+--
+-- * 'ltprsIsTruncated'
+--
+-- * 'ltprsTrafficPolicyIdMarker'
+--
+-- * 'ltprsMaxItems'
+listTrafficPoliciesResponse
+    :: Int -- ^ 'ltprsResponseStatus'
+    -> Bool -- ^ 'ltprsIsTruncated'
+    -> Text -- ^ 'ltprsTrafficPolicyIdMarker'
+    -> Text -- ^ 'ltprsMaxItems'
+    -> ListTrafficPoliciesResponse
+listTrafficPoliciesResponse pResponseStatus_ pIsTruncated_ pTrafficPolicyIdMarker_ pMaxItems_ =
+    ListTrafficPoliciesResponse'
+    { _ltprsResponseStatus = pResponseStatus_
+    , _ltprsTrafficPolicySummaries = mempty
+    , _ltprsIsTruncated = pIsTruncated_
+    , _ltprsTrafficPolicyIdMarker = pTrafficPolicyIdMarker_
+    , _ltprsMaxItems = pMaxItems_
+    }
+
+-- | The response status code.
+ltprsResponseStatus :: Lens' ListTrafficPoliciesResponse Int
+ltprsResponseStatus = lens _ltprsResponseStatus (\ s a -> s{_ltprsResponseStatus = a});
+
+-- | A list that contains one 'TrafficPolicySummary' element for each traffic
+-- policy that was created by the current AWS account.
+ltprsTrafficPolicySummaries :: Lens' ListTrafficPoliciesResponse [TrafficPolicySummary]
+ltprsTrafficPolicySummaries = lens _ltprsTrafficPolicySummaries (\ s a -> s{_ltprsTrafficPolicySummaries = a}) . _Coerce;
+
+-- | A flag that indicates whether there are more traffic policies to be
+-- listed. If the response was truncated, you can get the next group of
+-- 'MaxItems' traffic policies by calling 'ListTrafficPolicies' again and
+-- specifying the value of the 'TrafficPolicyIdMarker' element in the
+-- 'TrafficPolicyIdMarker' request parameter.
+--
+-- Valid Values: 'true' | 'false'
+ltprsIsTruncated :: Lens' ListTrafficPoliciesResponse Bool
+ltprsIsTruncated = lens _ltprsIsTruncated (\ s a -> s{_ltprsIsTruncated = a});
+
+-- | If the value of 'IsTruncated' is 'true', 'TrafficPolicyIdMarker' is the
+-- ID of the first traffic policy in the next group of 'MaxItems' traffic
+-- policies.
+ltprsTrafficPolicyIdMarker :: Lens' ListTrafficPoliciesResponse Text
+ltprsTrafficPolicyIdMarker = lens _ltprsTrafficPolicyIdMarker (\ s a -> s{_ltprsTrafficPolicyIdMarker = a});
+
+-- | The value that you specified for the 'MaxItems' parameter in the call to
+-- 'ListTrafficPolicies' that produced the current response.
+ltprsMaxItems :: Lens' ListTrafficPoliciesResponse Text
+ltprsMaxItems = lens _ltprsMaxItems (\ s a -> s{_ltprsMaxItems = a});
diff --git a/gen/Network/AWS/Route53/ListTrafficPolicyInstances.hs b/gen/Network/AWS/Route53/ListTrafficPolicyInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/ListTrafficPolicyInstances.hs
@@ -0,0 +1,281 @@
+{-# 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.ListTrafficPolicyInstances
+-- 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)
+--
+-- Gets information about the traffic policy instances that you created by
+-- using the current AWS account.
+--
+-- After you submit an 'UpdateTrafficPolicyInstance' request, there\'s a
+-- brief delay while Amazon Route 53 creates the resource record sets that
+-- are specified in the traffic policy definition. For more information,
+-- see the State response element.
+--
+-- To get information about the traffic policy instances that are
+-- associated with the current AWS account, send a 'GET' request to the
+-- '2013-04-01\/trafficpolicyinstance' resource.
+--
+-- Amazon Route 53 returns a maximum of 100 items in each response. If you
+-- have a lot of traffic policy instances, you can use the 'MaxItems'
+-- parameter to list them in groups of up to 100.
+--
+-- The response includes five values that help you navigate from one group
+-- of 'MaxItems' traffic policy instances to the next:
+--
+-- -   __IsTruncated__
+-- -   __MaxItems__
+-- -   __HostedZoneIdMarker__, __TrafficPolicyInstanceNameMarker__, and
+--     __TrafficPolicyInstanceTypeMarker__
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListTrafficPolicyInstances.html AWS API Reference> for ListTrafficPolicyInstances.
+module Network.AWS.Route53.ListTrafficPolicyInstances
+    (
+    -- * Creating a Request
+      listTrafficPolicyInstances
+    , ListTrafficPolicyInstances
+    -- * Request Lenses
+    , ltpiTrafficPolicyInstanceTypeMarker
+    , ltpiMaxItems
+    , ltpiHostedZoneIdMarker
+    , ltpiTrafficPolicyInstanceNameMarker
+
+    -- * Destructuring the Response
+    , listTrafficPolicyInstancesResponse
+    , ListTrafficPolicyInstancesResponse
+    -- * Response Lenses
+    , ltpirsTrafficPolicyInstanceTypeMarker
+    , ltpirsHostedZoneIdMarker
+    , ltpirsTrafficPolicyInstanceNameMarker
+    , ltpirsResponseStatus
+    , ltpirsTrafficPolicyInstances
+    , ltpirsIsTruncated
+    , ltpirsMaxItems
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
+
+-- | A complex type that contains the information about the request to list
+-- your traffic policy instances.
+--
+-- /See:/ 'listTrafficPolicyInstances' smart constructor.
+data ListTrafficPolicyInstances = ListTrafficPolicyInstances'
+    { _ltpiTrafficPolicyInstanceTypeMarker :: !(Maybe RecordType)
+    , _ltpiMaxItems                        :: !(Maybe Text)
+    , _ltpiHostedZoneIdMarker              :: !(Maybe Text)
+    , _ltpiTrafficPolicyInstanceNameMarker :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTrafficPolicyInstances' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltpiTrafficPolicyInstanceTypeMarker'
+--
+-- * 'ltpiMaxItems'
+--
+-- * 'ltpiHostedZoneIdMarker'
+--
+-- * 'ltpiTrafficPolicyInstanceNameMarker'
+listTrafficPolicyInstances
+    :: ListTrafficPolicyInstances
+listTrafficPolicyInstances =
+    ListTrafficPolicyInstances'
+    { _ltpiTrafficPolicyInstanceTypeMarker = Nothing
+    , _ltpiMaxItems = Nothing
+    , _ltpiHostedZoneIdMarker = Nothing
+    , _ltpiTrafficPolicyInstanceNameMarker = Nothing
+    }
+
+-- | For the first request to 'ListTrafficPolicyInstances', omit this value.
+--
+-- If the value of 'IsTruncated' in the previous response was 'true',
+-- 'TrafficPolicyInstanceTypeMarker' is the DNS type of the first traffic
+-- policy instance in the next group of 'MaxItems' traffic policy
+-- instances.
+--
+-- If the value of 'IsTruncated' in the previous response was 'false',
+-- there are no more traffic policy instances to get.
+ltpiTrafficPolicyInstanceTypeMarker :: Lens' ListTrafficPolicyInstances (Maybe RecordType)
+ltpiTrafficPolicyInstanceTypeMarker = lens _ltpiTrafficPolicyInstanceTypeMarker (\ s a -> s{_ltpiTrafficPolicyInstanceTypeMarker = a});
+
+-- | The maximum number of traffic policy instances to be included in the
+-- response body for this request. If you have more than 'MaxItems' traffic
+-- policy instances, the value of the 'IsTruncated' element in the response
+-- is 'true', and the values of 'HostedZoneIdMarker',
+-- 'TrafficPolicyInstanceNameMarker', and 'TrafficPolicyInstanceTypeMarker'
+-- represent the first traffic policy instance in the next group of
+-- 'MaxItems' traffic policy instances.
+ltpiMaxItems :: Lens' ListTrafficPolicyInstances (Maybe Text)
+ltpiMaxItems = lens _ltpiMaxItems (\ s a -> s{_ltpiMaxItems = a});
+
+-- | For the first request to 'ListTrafficPolicyInstances', omit this value.
+--
+-- If the value of 'IsTruncated' in the previous response was 'true', you
+-- have more traffic policy instances. To get the next group of 'MaxItems'
+-- traffic policy instances, submit another 'ListTrafficPolicyInstances'
+-- request. For the value of 'HostedZoneIdMarker', specify the value of
+-- 'HostedZoneIdMarker' from the previous response, which is the hosted
+-- zone ID of the first traffic policy instance in the next group of
+-- 'MaxItems' traffic policy instances.
+--
+-- If the value of 'IsTruncated' in the previous response was 'false',
+-- there are no more traffic policy instances to get.
+ltpiHostedZoneIdMarker :: Lens' ListTrafficPolicyInstances (Maybe Text)
+ltpiHostedZoneIdMarker = lens _ltpiHostedZoneIdMarker (\ s a -> s{_ltpiHostedZoneIdMarker = a});
+
+-- | For the first request to 'ListTrafficPolicyInstances', omit this value.
+--
+-- If the value of 'IsTruncated' in the previous response was 'true',
+-- 'TrafficPolicyInstanceNameMarker' is the name of the first traffic
+-- policy instance in the next group of 'MaxItems' traffic policy
+-- instances.
+--
+-- If the value of 'IsTruncated' in the previous response was 'false',
+-- there are no more traffic policy instances to get.
+ltpiTrafficPolicyInstanceNameMarker :: Lens' ListTrafficPolicyInstances (Maybe Text)
+ltpiTrafficPolicyInstanceNameMarker = lens _ltpiTrafficPolicyInstanceNameMarker (\ s a -> s{_ltpiTrafficPolicyInstanceNameMarker = a});
+
+instance AWSRequest ListTrafficPolicyInstances where
+        type Rs ListTrafficPolicyInstances =
+             ListTrafficPolicyInstancesResponse
+        request = get route53
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListTrafficPolicyInstancesResponse' <$>
+                   (x .@? "TrafficPolicyInstanceTypeMarker") <*>
+                     (x .@? "HostedZoneIdMarker")
+                     <*> (x .@? "TrafficPolicyInstanceNameMarker")
+                     <*> (pure (fromEnum s))
+                     <*>
+                     (x .@? "TrafficPolicyInstances" .!@ mempty >>=
+                        parseXMLList "TrafficPolicyInstance")
+                     <*> (x .@ "IsTruncated")
+                     <*> (x .@ "MaxItems"))
+
+instance ToHeaders ListTrafficPolicyInstances where
+        toHeaders = const mempty
+
+instance ToPath ListTrafficPolicyInstances where
+        toPath = const "/2013-04-01/trafficpolicyinstances"
+
+instance ToQuery ListTrafficPolicyInstances where
+        toQuery ListTrafficPolicyInstances'{..}
+          = mconcat
+              ["trafficpolicyinstancetype" =:
+                 _ltpiTrafficPolicyInstanceTypeMarker,
+               "maxitems" =: _ltpiMaxItems,
+               "hostedzoneid" =: _ltpiHostedZoneIdMarker,
+               "trafficpolicyinstancename" =:
+                 _ltpiTrafficPolicyInstanceNameMarker]
+
+-- | A complex type that contains the response information for the request.
+--
+-- /See:/ 'listTrafficPolicyInstancesResponse' smart constructor.
+data ListTrafficPolicyInstancesResponse = ListTrafficPolicyInstancesResponse'
+    { _ltpirsTrafficPolicyInstanceTypeMarker :: !(Maybe RecordType)
+    , _ltpirsHostedZoneIdMarker              :: !(Maybe Text)
+    , _ltpirsTrafficPolicyInstanceNameMarker :: !(Maybe Text)
+    , _ltpirsResponseStatus                  :: !Int
+    , _ltpirsTrafficPolicyInstances          :: ![TrafficPolicyInstance]
+    , _ltpirsIsTruncated                     :: !Bool
+    , _ltpirsMaxItems                        :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTrafficPolicyInstancesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltpirsTrafficPolicyInstanceTypeMarker'
+--
+-- * 'ltpirsHostedZoneIdMarker'
+--
+-- * 'ltpirsTrafficPolicyInstanceNameMarker'
+--
+-- * 'ltpirsResponseStatus'
+--
+-- * 'ltpirsTrafficPolicyInstances'
+--
+-- * 'ltpirsIsTruncated'
+--
+-- * 'ltpirsMaxItems'
+listTrafficPolicyInstancesResponse
+    :: Int -- ^ 'ltpirsResponseStatus'
+    -> Bool -- ^ 'ltpirsIsTruncated'
+    -> Text -- ^ 'ltpirsMaxItems'
+    -> ListTrafficPolicyInstancesResponse
+listTrafficPolicyInstancesResponse pResponseStatus_ pIsTruncated_ pMaxItems_ =
+    ListTrafficPolicyInstancesResponse'
+    { _ltpirsTrafficPolicyInstanceTypeMarker = Nothing
+    , _ltpirsHostedZoneIdMarker = Nothing
+    , _ltpirsTrafficPolicyInstanceNameMarker = Nothing
+    , _ltpirsResponseStatus = pResponseStatus_
+    , _ltpirsTrafficPolicyInstances = mempty
+    , _ltpirsIsTruncated = pIsTruncated_
+    , _ltpirsMaxItems = pMaxItems_
+    }
+
+-- | If 'IsTruncated' is 'true', 'TrafficPolicyInstanceTypeMarker' is the DNS
+-- type of the resource record sets that are associated with the first
+-- traffic policy instance in the next group of 'MaxItems' traffic policy
+-- instances.
+ltpirsTrafficPolicyInstanceTypeMarker :: Lens' ListTrafficPolicyInstancesResponse (Maybe RecordType)
+ltpirsTrafficPolicyInstanceTypeMarker = lens _ltpirsTrafficPolicyInstanceTypeMarker (\ s a -> s{_ltpirsTrafficPolicyInstanceTypeMarker = a});
+
+-- | If 'IsTruncated' is 'true', 'HostedZoneIdMarker' is the ID of the hosted
+-- zone of the first traffic policy instance in the next group of
+-- 'MaxItems' traffic policy instances.
+ltpirsHostedZoneIdMarker :: Lens' ListTrafficPolicyInstancesResponse (Maybe Text)
+ltpirsHostedZoneIdMarker = lens _ltpirsHostedZoneIdMarker (\ s a -> s{_ltpirsHostedZoneIdMarker = a});
+
+-- | If 'IsTruncated' is 'true', 'TrafficPolicyInstanceNameMarker' is the
+-- name of the first traffic policy instance in the next group of
+-- 'MaxItems' traffic policy instances.
+ltpirsTrafficPolicyInstanceNameMarker :: Lens' ListTrafficPolicyInstancesResponse (Maybe Text)
+ltpirsTrafficPolicyInstanceNameMarker = lens _ltpirsTrafficPolicyInstanceNameMarker (\ s a -> s{_ltpirsTrafficPolicyInstanceNameMarker = a});
+
+-- | The response status code.
+ltpirsResponseStatus :: Lens' ListTrafficPolicyInstancesResponse Int
+ltpirsResponseStatus = lens _ltpirsResponseStatus (\ s a -> s{_ltpirsResponseStatus = a});
+
+-- | A list that contains one 'TrafficPolicyInstance' element for each
+-- traffic policy instance that matches the elements in the request.
+ltpirsTrafficPolicyInstances :: Lens' ListTrafficPolicyInstancesResponse [TrafficPolicyInstance]
+ltpirsTrafficPolicyInstances = lens _ltpirsTrafficPolicyInstances (\ s a -> s{_ltpirsTrafficPolicyInstances = a}) . _Coerce;
+
+-- | A flag that indicates whether there are more traffic policy instances to
+-- be listed. If the response was truncated, you can get the next group of
+-- 'MaxItems' traffic policy instances by calling
+-- 'ListTrafficPolicyInstances' again and specifying the values of the
+-- 'HostedZoneIdMarker', 'TrafficPolicyInstanceNameMarker', and
+-- 'TrafficPolicyInstanceTypeMarker' elements in the corresponding request
+-- parameters.
+--
+-- Valid Values: 'true' | 'false'
+ltpirsIsTruncated :: Lens' ListTrafficPolicyInstancesResponse Bool
+ltpirsIsTruncated = lens _ltpirsIsTruncated (\ s a -> s{_ltpirsIsTruncated = a});
+
+-- | The value that you specified for the 'MaxItems' parameter in the call to
+-- 'ListTrafficPolicyInstances' that produced the current response.
+ltpirsMaxItems :: Lens' ListTrafficPolicyInstancesResponse Text
+ltpirsMaxItems = lens _ltpirsMaxItems (\ s a -> s{_ltpirsMaxItems = a});
diff --git a/gen/Network/AWS/Route53/ListTrafficPolicyInstancesByHostedZone.hs b/gen/Network/AWS/Route53/ListTrafficPolicyInstancesByHostedZone.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/ListTrafficPolicyInstancesByHostedZone.hs
@@ -0,0 +1,273 @@
+{-# 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.ListTrafficPolicyInstancesByHostedZone
+-- 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)
+--
+-- Gets information about the traffic policy instances that you created in
+-- a specified hosted zone.
+--
+-- After you submit an 'UpdateTrafficPolicyInstance' request, there\'s a
+-- brief delay while Amazon Route 53 creates the resource record sets that
+-- are specified in the traffic policy definition. For more information,
+-- see the State response element.
+--
+-- To get information about the traffic policy instances that you created
+-- in a specified hosted zone, send a 'GET' request to the
+-- '2013-04-01\/trafficpolicyinstance' resource and include the ID of the
+-- hosted zone.
+--
+-- Amazon Route 53 returns a maximum of 100 items in each response. If you
+-- have a lot of traffic policy instances, you can use the 'MaxItems'
+-- parameter to list them in groups of up to 100.
+--
+-- The response includes four values that help you navigate from one group
+-- of 'MaxItems' traffic policy instances to the next:
+--
+-- -   __IsTruncated__
+-- -   __MaxItems__
+-- -   __TrafficPolicyInstanceNameMarker__ and
+--     __TrafficPolicyInstanceTypeMarker__
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListTrafficPolicyInstancesByHostedZone.html AWS API Reference> for ListTrafficPolicyInstancesByHostedZone.
+module Network.AWS.Route53.ListTrafficPolicyInstancesByHostedZone
+    (
+    -- * Creating a Request
+      listTrafficPolicyInstancesByHostedZone
+    , ListTrafficPolicyInstancesByHostedZone
+    -- * Request Lenses
+    , ltpibhzTrafficPolicyInstanceTypeMarker
+    , ltpibhzMaxItems
+    , ltpibhzTrafficPolicyInstanceNameMarker
+    , ltpibhzHostedZoneId
+
+    -- * Destructuring the Response
+    , listTrafficPolicyInstancesByHostedZoneResponse
+    , ListTrafficPolicyInstancesByHostedZoneResponse
+    -- * Response Lenses
+    , ltpibhzrsTrafficPolicyInstanceTypeMarker
+    , ltpibhzrsTrafficPolicyInstanceNameMarker
+    , ltpibhzrsResponseStatus
+    , ltpibhzrsTrafficPolicyInstances
+    , ltpibhzrsIsTruncated
+    , ltpibhzrsMaxItems
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
+
+-- | A request for the traffic policy instances that you created in a
+-- specified hosted zone.
+--
+-- /See:/ 'listTrafficPolicyInstancesByHostedZone' smart constructor.
+data ListTrafficPolicyInstancesByHostedZone = ListTrafficPolicyInstancesByHostedZone'
+    { _ltpibhzTrafficPolicyInstanceTypeMarker :: !(Maybe RecordType)
+    , _ltpibhzMaxItems                        :: !(Maybe Text)
+    , _ltpibhzTrafficPolicyInstanceNameMarker :: !(Maybe Text)
+    , _ltpibhzHostedZoneId                    :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTrafficPolicyInstancesByHostedZone' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltpibhzTrafficPolicyInstanceTypeMarker'
+--
+-- * 'ltpibhzMaxItems'
+--
+-- * 'ltpibhzTrafficPolicyInstanceNameMarker'
+--
+-- * 'ltpibhzHostedZoneId'
+listTrafficPolicyInstancesByHostedZone
+    :: Text -- ^ 'ltpibhzHostedZoneId'
+    -> ListTrafficPolicyInstancesByHostedZone
+listTrafficPolicyInstancesByHostedZone pHostedZoneId_ =
+    ListTrafficPolicyInstancesByHostedZone'
+    { _ltpibhzTrafficPolicyInstanceTypeMarker = Nothing
+    , _ltpibhzMaxItems = Nothing
+    , _ltpibhzTrafficPolicyInstanceNameMarker = Nothing
+    , _ltpibhzHostedZoneId = pHostedZoneId_
+    }
+
+-- | For the first request to 'ListTrafficPolicyInstancesByHostedZone', omit
+-- this value.
+--
+-- If the value of 'IsTruncated' in the previous response was 'true',
+-- 'TrafficPolicyInstanceTypeMarker' is the DNS type of the first traffic
+-- policy instance in the next group of 'MaxItems' traffic policy
+-- instances.
+--
+-- If the value of 'IsTruncated' in the previous response was 'false',
+-- there are no more traffic policy instances to get for this hosted zone.
+ltpibhzTrafficPolicyInstanceTypeMarker :: Lens' ListTrafficPolicyInstancesByHostedZone (Maybe RecordType)
+ltpibhzTrafficPolicyInstanceTypeMarker = lens _ltpibhzTrafficPolicyInstanceTypeMarker (\ s a -> s{_ltpibhzTrafficPolicyInstanceTypeMarker = a});
+
+-- | The maximum number of traffic policy instances to be included in the
+-- response body for this request. If you have more than 'MaxItems' traffic
+-- policy instances, the value of the 'IsTruncated' element in the response
+-- is 'true', and the values of 'HostedZoneIdMarker',
+-- 'TrafficPolicyInstanceNameMarker', and 'TrafficPolicyInstanceTypeMarker'
+-- represent the first traffic policy instance in the next group of
+-- 'MaxItems' traffic policy instances.
+ltpibhzMaxItems :: Lens' ListTrafficPolicyInstancesByHostedZone (Maybe Text)
+ltpibhzMaxItems = lens _ltpibhzMaxItems (\ s a -> s{_ltpibhzMaxItems = a});
+
+-- | For the first request to 'ListTrafficPolicyInstancesByHostedZone', omit
+-- this value.
+--
+-- If the value of 'IsTruncated' in the previous response was 'true',
+-- 'TrafficPolicyInstanceNameMarker' is the name of the first traffic
+-- policy instance in the next group of 'MaxItems' traffic policy
+-- instances.
+--
+-- If the value of 'IsTruncated' in the previous response was 'false',
+-- there are no more traffic policy instances to get for this hosted zone.
+--
+-- If the value of 'IsTruncated' in the previous response was 'false', omit
+-- this value.
+ltpibhzTrafficPolicyInstanceNameMarker :: Lens' ListTrafficPolicyInstancesByHostedZone (Maybe Text)
+ltpibhzTrafficPolicyInstanceNameMarker = lens _ltpibhzTrafficPolicyInstanceNameMarker (\ s a -> s{_ltpibhzTrafficPolicyInstanceNameMarker = a});
+
+-- | The ID of the hosted zone for which you want to list traffic policy
+-- instances.
+ltpibhzHostedZoneId :: Lens' ListTrafficPolicyInstancesByHostedZone Text
+ltpibhzHostedZoneId = lens _ltpibhzHostedZoneId (\ s a -> s{_ltpibhzHostedZoneId = a});
+
+instance AWSRequest
+         ListTrafficPolicyInstancesByHostedZone where
+        type Rs ListTrafficPolicyInstancesByHostedZone =
+             ListTrafficPolicyInstancesByHostedZoneResponse
+        request = get route53
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListTrafficPolicyInstancesByHostedZoneResponse' <$>
+                   (x .@? "TrafficPolicyInstanceTypeMarker") <*>
+                     (x .@? "TrafficPolicyInstanceNameMarker")
+                     <*> (pure (fromEnum s))
+                     <*>
+                     (x .@? "TrafficPolicyInstances" .!@ mempty >>=
+                        parseXMLList "TrafficPolicyInstance")
+                     <*> (x .@ "IsTruncated")
+                     <*> (x .@ "MaxItems"))
+
+instance ToHeaders
+         ListTrafficPolicyInstancesByHostedZone where
+        toHeaders = const mempty
+
+instance ToPath
+         ListTrafficPolicyInstancesByHostedZone where
+        toPath
+          = const
+              "/2013-04-01/trafficpolicyinstances/hostedzone"
+
+instance ToQuery
+         ListTrafficPolicyInstancesByHostedZone where
+        toQuery ListTrafficPolicyInstancesByHostedZone'{..}
+          = mconcat
+              ["trafficpolicyinstancetype" =:
+                 _ltpibhzTrafficPolicyInstanceTypeMarker,
+               "maxitems" =: _ltpibhzMaxItems,
+               "trafficpolicyinstancename" =:
+                 _ltpibhzTrafficPolicyInstanceNameMarker,
+               "id" =: _ltpibhzHostedZoneId]
+
+-- | A complex type that contains the response information for the request.
+--
+-- /See:/ 'listTrafficPolicyInstancesByHostedZoneResponse' smart constructor.
+data ListTrafficPolicyInstancesByHostedZoneResponse = ListTrafficPolicyInstancesByHostedZoneResponse'
+    { _ltpibhzrsTrafficPolicyInstanceTypeMarker :: !(Maybe RecordType)
+    , _ltpibhzrsTrafficPolicyInstanceNameMarker :: !(Maybe Text)
+    , _ltpibhzrsResponseStatus                  :: !Int
+    , _ltpibhzrsTrafficPolicyInstances          :: ![TrafficPolicyInstance]
+    , _ltpibhzrsIsTruncated                     :: !Bool
+    , _ltpibhzrsMaxItems                        :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTrafficPolicyInstancesByHostedZoneResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltpibhzrsTrafficPolicyInstanceTypeMarker'
+--
+-- * 'ltpibhzrsTrafficPolicyInstanceNameMarker'
+--
+-- * 'ltpibhzrsResponseStatus'
+--
+-- * 'ltpibhzrsTrafficPolicyInstances'
+--
+-- * 'ltpibhzrsIsTruncated'
+--
+-- * 'ltpibhzrsMaxItems'
+listTrafficPolicyInstancesByHostedZoneResponse
+    :: Int -- ^ 'ltpibhzrsResponseStatus'
+    -> Bool -- ^ 'ltpibhzrsIsTruncated'
+    -> Text -- ^ 'ltpibhzrsMaxItems'
+    -> ListTrafficPolicyInstancesByHostedZoneResponse
+listTrafficPolicyInstancesByHostedZoneResponse pResponseStatus_ pIsTruncated_ pMaxItems_ =
+    ListTrafficPolicyInstancesByHostedZoneResponse'
+    { _ltpibhzrsTrafficPolicyInstanceTypeMarker = Nothing
+    , _ltpibhzrsTrafficPolicyInstanceNameMarker = Nothing
+    , _ltpibhzrsResponseStatus = pResponseStatus_
+    , _ltpibhzrsTrafficPolicyInstances = mempty
+    , _ltpibhzrsIsTruncated = pIsTruncated_
+    , _ltpibhzrsMaxItems = pMaxItems_
+    }
+
+-- | If 'IsTruncated' is true, 'TrafficPolicyInstanceTypeMarker' is the DNS
+-- type of the resource record sets that are associated with the first
+-- traffic policy instance in the next group of 'MaxItems' traffic policy
+-- instances.
+ltpibhzrsTrafficPolicyInstanceTypeMarker :: Lens' ListTrafficPolicyInstancesByHostedZoneResponse (Maybe RecordType)
+ltpibhzrsTrafficPolicyInstanceTypeMarker = lens _ltpibhzrsTrafficPolicyInstanceTypeMarker (\ s a -> s{_ltpibhzrsTrafficPolicyInstanceTypeMarker = a});
+
+-- | If 'IsTruncated' is 'true', 'TrafficPolicyInstanceNameMarker' is the
+-- name of the first traffic policy instance in the next group of
+-- 'MaxItems' traffic policy instances.
+ltpibhzrsTrafficPolicyInstanceNameMarker :: Lens' ListTrafficPolicyInstancesByHostedZoneResponse (Maybe Text)
+ltpibhzrsTrafficPolicyInstanceNameMarker = lens _ltpibhzrsTrafficPolicyInstanceNameMarker (\ s a -> s{_ltpibhzrsTrafficPolicyInstanceNameMarker = a});
+
+-- | The response status code.
+ltpibhzrsResponseStatus :: Lens' ListTrafficPolicyInstancesByHostedZoneResponse Int
+ltpibhzrsResponseStatus = lens _ltpibhzrsResponseStatus (\ s a -> s{_ltpibhzrsResponseStatus = a});
+
+-- | A list that contains one 'TrafficPolicyInstance' element for each
+-- traffic policy instance that matches the elements in the request.
+ltpibhzrsTrafficPolicyInstances :: Lens' ListTrafficPolicyInstancesByHostedZoneResponse [TrafficPolicyInstance]
+ltpibhzrsTrafficPolicyInstances = lens _ltpibhzrsTrafficPolicyInstances (\ s a -> s{_ltpibhzrsTrafficPolicyInstances = a}) . _Coerce;
+
+-- | A flag that indicates whether there are more traffic policy instances to
+-- be listed. If the response was truncated, you can get the next group of
+-- 'MaxItems' traffic policy instances by calling
+-- 'ListTrafficPolicyInstancesByHostedZone' again and specifying the values
+-- of the 'HostedZoneIdMarker', 'TrafficPolicyInstanceNameMarker', and
+-- 'TrafficPolicyInstanceTypeMarker' elements in the corresponding request
+-- parameters.
+--
+-- Valid Values: 'true' | 'false'
+ltpibhzrsIsTruncated :: Lens' ListTrafficPolicyInstancesByHostedZoneResponse Bool
+ltpibhzrsIsTruncated = lens _ltpibhzrsIsTruncated (\ s a -> s{_ltpibhzrsIsTruncated = a});
+
+-- | The value that you specified for the 'MaxItems' parameter in the call to
+-- 'ListTrafficPolicyInstancesByHostedZone' that produced the current
+-- response.
+ltpibhzrsMaxItems :: Lens' ListTrafficPolicyInstancesByHostedZoneResponse Text
+ltpibhzrsMaxItems = lens _ltpibhzrsMaxItems (\ s a -> s{_ltpibhzrsMaxItems = a});
diff --git a/gen/Network/AWS/Route53/ListTrafficPolicyInstancesByPolicy.hs b/gen/Network/AWS/Route53/ListTrafficPolicyInstancesByPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/ListTrafficPolicyInstancesByPolicy.hs
@@ -0,0 +1,343 @@
+{-# 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.ListTrafficPolicyInstancesByPolicy
+-- 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)
+--
+-- Gets information about the traffic policy instances that you created by
+-- using a specify traffic policy version.
+--
+-- After you submit a 'CreateTrafficPolicyInstance' or an
+-- 'UpdateTrafficPolicyInstance' request, there\'s a brief delay while
+-- Amazon Route 53 creates the resource record sets that are specified in
+-- the traffic policy definition. For more information, see the State
+-- response element.
+--
+-- To get information about the traffic policy instances that you created
+-- by using a specify traffic policy version, send a 'GET' request to the
+-- '2013-04-01\/trafficpolicyinstance' resource and include the ID and
+-- version of the traffic policy.
+--
+-- Amazon Route 53 returns a maximum of 100 items in each response. If you
+-- have a lot of traffic policy instances, you can use the 'MaxItems'
+-- parameter to list them in groups of up to 100.
+--
+-- The response includes five values that help you navigate from one group
+-- of 'MaxItems' traffic policy instances to the next:
+--
+-- -   __IsTruncated__
+--
+--     If the value of 'IsTruncated' in the response is 'true', there are
+--     more traffic policy instances associated with the specified traffic
+--     policy.
+--
+--     If 'IsTruncated' is 'false', this response includes the last traffic
+--     policy instance that is associated with the specified traffic
+--     policy.
+--
+-- -   __MaxItems__
+--
+--     The value that you specified for the 'MaxItems' parameter in the
+--     request that produced the current response.
+--
+-- -   __HostedZoneIdMarker__, __TrafficPolicyInstanceNameMarker__, and
+--     __TrafficPolicyInstanceTypeMarker__
+--
+--     If 'IsTruncated' is 'true', these values in the response represent
+--     the first traffic policy instance in the next group of 'MaxItems'
+--     traffic policy instances. To list more traffic policy instances,
+--     make another call to 'ListTrafficPolicyInstancesByPolicy', and
+--     specify these values in the corresponding request parameters.
+--
+--     If 'IsTruncated' is 'false', all three elements are omitted from the
+--     response.
+--
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListTrafficPolicyInstancesByPolicy.html AWS API Reference> for ListTrafficPolicyInstancesByPolicy.
+module Network.AWS.Route53.ListTrafficPolicyInstancesByPolicy
+    (
+    -- * Creating a Request
+      listTrafficPolicyInstancesByPolicy
+    , ListTrafficPolicyInstancesByPolicy
+    -- * Request Lenses
+    , ltpibpTrafficPolicyInstanceTypeMarker
+    , ltpibpMaxItems
+    , ltpibpHostedZoneIdMarker
+    , ltpibpTrafficPolicyInstanceNameMarker
+    , ltpibpTrafficPolicyId
+    , ltpibpTrafficPolicyVersion
+
+    -- * Destructuring the Response
+    , listTrafficPolicyInstancesByPolicyResponse
+    , ListTrafficPolicyInstancesByPolicyResponse
+    -- * Response Lenses
+    , ltpibprsTrafficPolicyInstanceTypeMarker
+    , ltpibprsHostedZoneIdMarker
+    , ltpibprsTrafficPolicyInstanceNameMarker
+    , ltpibprsResponseStatus
+    , ltpibprsTrafficPolicyInstances
+    , ltpibprsIsTruncated
+    , ltpibprsMaxItems
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
+
+-- | A complex type that contains the information about the request to list
+-- your traffic policy instances.
+--
+-- /See:/ 'listTrafficPolicyInstancesByPolicy' smart constructor.
+data ListTrafficPolicyInstancesByPolicy = ListTrafficPolicyInstancesByPolicy'
+    { _ltpibpTrafficPolicyInstanceTypeMarker :: !(Maybe RecordType)
+    , _ltpibpMaxItems                        :: !(Maybe Text)
+    , _ltpibpHostedZoneIdMarker              :: !(Maybe Text)
+    , _ltpibpTrafficPolicyInstanceNameMarker :: !(Maybe Text)
+    , _ltpibpTrafficPolicyId                 :: !Text
+    , _ltpibpTrafficPolicyVersion            :: !Nat
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTrafficPolicyInstancesByPolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltpibpTrafficPolicyInstanceTypeMarker'
+--
+-- * 'ltpibpMaxItems'
+--
+-- * 'ltpibpHostedZoneIdMarker'
+--
+-- * 'ltpibpTrafficPolicyInstanceNameMarker'
+--
+-- * 'ltpibpTrafficPolicyId'
+--
+-- * 'ltpibpTrafficPolicyVersion'
+listTrafficPolicyInstancesByPolicy
+    :: Text -- ^ 'ltpibpTrafficPolicyId'
+    -> Natural -- ^ 'ltpibpTrafficPolicyVersion'
+    -> ListTrafficPolicyInstancesByPolicy
+listTrafficPolicyInstancesByPolicy pTrafficPolicyId_ pTrafficPolicyVersion_ =
+    ListTrafficPolicyInstancesByPolicy'
+    { _ltpibpTrafficPolicyInstanceTypeMarker = Nothing
+    , _ltpibpMaxItems = Nothing
+    , _ltpibpHostedZoneIdMarker = Nothing
+    , _ltpibpTrafficPolicyInstanceNameMarker = Nothing
+    , _ltpibpTrafficPolicyId = pTrafficPolicyId_
+    , _ltpibpTrafficPolicyVersion = _Nat # pTrafficPolicyVersion_
+    }
+
+-- | For the first request to 'ListTrafficPolicyInstancesByPolicy', omit this
+-- value.
+--
+-- If the value of 'IsTruncated' in the previous response was 'true',
+-- 'TrafficPolicyInstanceTypeMarker' is the DNS type of the first traffic
+-- policy instance in the next group of 'MaxItems' traffic policy
+-- instances.
+--
+-- If the value of 'IsTruncated' in the previous response was 'false',
+-- there are no more traffic policy instances to get for this hosted zone.
+ltpibpTrafficPolicyInstanceTypeMarker :: Lens' ListTrafficPolicyInstancesByPolicy (Maybe RecordType)
+ltpibpTrafficPolicyInstanceTypeMarker = lens _ltpibpTrafficPolicyInstanceTypeMarker (\ s a -> s{_ltpibpTrafficPolicyInstanceTypeMarker = a});
+
+-- | The maximum number of traffic policy instances to be included in the
+-- response body for this request. If you have more than 'MaxItems' traffic
+-- policy instances, the value of the 'IsTruncated' element in the response
+-- is 'true', and the values of 'HostedZoneIdMarker',
+-- 'TrafficPolicyInstanceNameMarker', and 'TrafficPolicyInstanceTypeMarker'
+-- represent the first traffic policy instance in the next group of
+-- 'MaxItems' traffic policy instances.
+ltpibpMaxItems :: Lens' ListTrafficPolicyInstancesByPolicy (Maybe Text)
+ltpibpMaxItems = lens _ltpibpMaxItems (\ s a -> s{_ltpibpMaxItems = a});
+
+-- | For the first request to 'ListTrafficPolicyInstancesByPolicy', omit this
+-- value.
+--
+-- If the value of 'IsTruncated' in the previous response was 'true',
+-- 'HostedZoneIdMarker' is the ID of the hosted zone for the first traffic
+-- policy instance in the next group of 'MaxItems' traffic policy
+-- instances.
+--
+-- If the value of 'IsTruncated' in the previous response was 'false',
+-- there are no more traffic policy instances to get for this hosted zone.
+--
+-- If the value of 'IsTruncated' in the previous response was 'false', omit
+-- this value.
+ltpibpHostedZoneIdMarker :: Lens' ListTrafficPolicyInstancesByPolicy (Maybe Text)
+ltpibpHostedZoneIdMarker = lens _ltpibpHostedZoneIdMarker (\ s a -> s{_ltpibpHostedZoneIdMarker = a});
+
+-- | For the first request to 'ListTrafficPolicyInstancesByPolicy', omit this
+-- value.
+--
+-- If the value of 'IsTruncated' in the previous response was 'true',
+-- 'TrafficPolicyInstanceNameMarker' is the name of the first traffic
+-- policy instance in the next group of 'MaxItems' traffic policy
+-- instances.
+--
+-- If the value of 'IsTruncated' in the previous response was 'false',
+-- there are no more traffic policy instances to get for this hosted zone.
+--
+-- If the value of 'IsTruncated' in the previous response was 'false', omit
+-- this value.
+ltpibpTrafficPolicyInstanceNameMarker :: Lens' ListTrafficPolicyInstancesByPolicy (Maybe Text)
+ltpibpTrafficPolicyInstanceNameMarker = lens _ltpibpTrafficPolicyInstanceNameMarker (\ s a -> s{_ltpibpTrafficPolicyInstanceNameMarker = a});
+
+-- | The ID of the traffic policy for which you want to list traffic policy
+-- instances.
+ltpibpTrafficPolicyId :: Lens' ListTrafficPolicyInstancesByPolicy Text
+ltpibpTrafficPolicyId = lens _ltpibpTrafficPolicyId (\ s a -> s{_ltpibpTrafficPolicyId = a});
+
+-- | The version of the traffic policy for which you want to list traffic
+-- policy instances. The version must be associated with the traffic policy
+-- that is specified by 'TrafficPolicyId'.
+ltpibpTrafficPolicyVersion :: Lens' ListTrafficPolicyInstancesByPolicy Natural
+ltpibpTrafficPolicyVersion = lens _ltpibpTrafficPolicyVersion (\ s a -> s{_ltpibpTrafficPolicyVersion = a}) . _Nat;
+
+instance AWSRequest
+         ListTrafficPolicyInstancesByPolicy where
+        type Rs ListTrafficPolicyInstancesByPolicy =
+             ListTrafficPolicyInstancesByPolicyResponse
+        request = get route53
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListTrafficPolicyInstancesByPolicyResponse' <$>
+                   (x .@? "TrafficPolicyInstanceTypeMarker") <*>
+                     (x .@? "HostedZoneIdMarker")
+                     <*> (x .@? "TrafficPolicyInstanceNameMarker")
+                     <*> (pure (fromEnum s))
+                     <*>
+                     (x .@? "TrafficPolicyInstances" .!@ mempty >>=
+                        parseXMLList "TrafficPolicyInstance")
+                     <*> (x .@ "IsTruncated")
+                     <*> (x .@ "MaxItems"))
+
+instance ToHeaders ListTrafficPolicyInstancesByPolicy
+         where
+        toHeaders = const mempty
+
+instance ToPath ListTrafficPolicyInstancesByPolicy
+         where
+        toPath
+          = const
+              "/2013-04-01/trafficpolicyinstances/trafficpolicy"
+
+instance ToQuery ListTrafficPolicyInstancesByPolicy
+         where
+        toQuery ListTrafficPolicyInstancesByPolicy'{..}
+          = mconcat
+              ["trafficpolicyinstancetype" =:
+                 _ltpibpTrafficPolicyInstanceTypeMarker,
+               "maxitems" =: _ltpibpMaxItems,
+               "hostedzoneid" =: _ltpibpHostedZoneIdMarker,
+               "trafficpolicyinstancename" =:
+                 _ltpibpTrafficPolicyInstanceNameMarker,
+               "id" =: _ltpibpTrafficPolicyId,
+               "version" =: _ltpibpTrafficPolicyVersion]
+
+-- | A complex type that contains the response information for the request.
+--
+-- /See:/ 'listTrafficPolicyInstancesByPolicyResponse' smart constructor.
+data ListTrafficPolicyInstancesByPolicyResponse = ListTrafficPolicyInstancesByPolicyResponse'
+    { _ltpibprsTrafficPolicyInstanceTypeMarker :: !(Maybe RecordType)
+    , _ltpibprsHostedZoneIdMarker              :: !(Maybe Text)
+    , _ltpibprsTrafficPolicyInstanceNameMarker :: !(Maybe Text)
+    , _ltpibprsResponseStatus                  :: !Int
+    , _ltpibprsTrafficPolicyInstances          :: ![TrafficPolicyInstance]
+    , _ltpibprsIsTruncated                     :: !Bool
+    , _ltpibprsMaxItems                        :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTrafficPolicyInstancesByPolicyResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltpibprsTrafficPolicyInstanceTypeMarker'
+--
+-- * 'ltpibprsHostedZoneIdMarker'
+--
+-- * 'ltpibprsTrafficPolicyInstanceNameMarker'
+--
+-- * 'ltpibprsResponseStatus'
+--
+-- * 'ltpibprsTrafficPolicyInstances'
+--
+-- * 'ltpibprsIsTruncated'
+--
+-- * 'ltpibprsMaxItems'
+listTrafficPolicyInstancesByPolicyResponse
+    :: Int -- ^ 'ltpibprsResponseStatus'
+    -> Bool -- ^ 'ltpibprsIsTruncated'
+    -> Text -- ^ 'ltpibprsMaxItems'
+    -> ListTrafficPolicyInstancesByPolicyResponse
+listTrafficPolicyInstancesByPolicyResponse pResponseStatus_ pIsTruncated_ pMaxItems_ =
+    ListTrafficPolicyInstancesByPolicyResponse'
+    { _ltpibprsTrafficPolicyInstanceTypeMarker = Nothing
+    , _ltpibprsHostedZoneIdMarker = Nothing
+    , _ltpibprsTrafficPolicyInstanceNameMarker = Nothing
+    , _ltpibprsResponseStatus = pResponseStatus_
+    , _ltpibprsTrafficPolicyInstances = mempty
+    , _ltpibprsIsTruncated = pIsTruncated_
+    , _ltpibprsMaxItems = pMaxItems_
+    }
+
+-- | If 'IsTruncated' is 'true', 'TrafficPolicyInstanceTypeMarker' is the DNS
+-- type of the resource record sets that are associated with the first
+-- traffic policy instance in the next group of 'MaxItems' traffic policy
+-- instances.
+ltpibprsTrafficPolicyInstanceTypeMarker :: Lens' ListTrafficPolicyInstancesByPolicyResponse (Maybe RecordType)
+ltpibprsTrafficPolicyInstanceTypeMarker = lens _ltpibprsTrafficPolicyInstanceTypeMarker (\ s a -> s{_ltpibprsTrafficPolicyInstanceTypeMarker = a});
+
+-- | If 'IsTruncated' is 'true', 'HostedZoneIdMarker' is the ID of the hosted
+-- zone of the first traffic policy instance in the next group of
+-- 'MaxItems' traffic policy instances.
+ltpibprsHostedZoneIdMarker :: Lens' ListTrafficPolicyInstancesByPolicyResponse (Maybe Text)
+ltpibprsHostedZoneIdMarker = lens _ltpibprsHostedZoneIdMarker (\ s a -> s{_ltpibprsHostedZoneIdMarker = a});
+
+-- | If 'IsTruncated' is 'true', 'TrafficPolicyInstanceNameMarker' is the
+-- name of the first traffic policy instance in the next group of
+-- 'MaxItems' traffic policy instances.
+ltpibprsTrafficPolicyInstanceNameMarker :: Lens' ListTrafficPolicyInstancesByPolicyResponse (Maybe Text)
+ltpibprsTrafficPolicyInstanceNameMarker = lens _ltpibprsTrafficPolicyInstanceNameMarker (\ s a -> s{_ltpibprsTrafficPolicyInstanceNameMarker = a});
+
+-- | The response status code.
+ltpibprsResponseStatus :: Lens' ListTrafficPolicyInstancesByPolicyResponse Int
+ltpibprsResponseStatus = lens _ltpibprsResponseStatus (\ s a -> s{_ltpibprsResponseStatus = a});
+
+-- | A list that contains one 'TrafficPolicyInstance' element for each
+-- traffic policy instance that matches the elements in the request.
+ltpibprsTrafficPolicyInstances :: Lens' ListTrafficPolicyInstancesByPolicyResponse [TrafficPolicyInstance]
+ltpibprsTrafficPolicyInstances = lens _ltpibprsTrafficPolicyInstances (\ s a -> s{_ltpibprsTrafficPolicyInstances = a}) . _Coerce;
+
+-- | A flag that indicates whether there are more traffic policy instances to
+-- be listed. If the response was truncated, you can get the next group of
+-- 'MaxItems' traffic policy instances by calling
+-- 'ListTrafficPolicyInstancesByPolicy' again and specifying the values of
+-- the 'HostedZoneIdMarker', 'TrafficPolicyInstanceNameMarker', and
+-- 'TrafficPolicyInstanceTypeMarker' elements in the corresponding request
+-- parameters.
+--
+-- Valid Values: 'true' | 'false'
+ltpibprsIsTruncated :: Lens' ListTrafficPolicyInstancesByPolicyResponse Bool
+ltpibprsIsTruncated = lens _ltpibprsIsTruncated (\ s a -> s{_ltpibprsIsTruncated = a});
+
+-- | The value that you specified for the 'MaxItems' parameter in the call to
+-- 'ListTrafficPolicyInstancesByPolicy' that produced the current response.
+ltpibprsMaxItems :: Lens' ListTrafficPolicyInstancesByPolicyResponse Text
+ltpibprsMaxItems = lens _ltpibprsMaxItems (\ s a -> s{_ltpibprsMaxItems = a});
diff --git a/gen/Network/AWS/Route53/ListTrafficPolicyVersions.hs b/gen/Network/AWS/Route53/ListTrafficPolicyVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/ListTrafficPolicyVersions.hs
@@ -0,0 +1,225 @@
+{-# 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.ListTrafficPolicyVersions
+-- 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)
+--
+-- Gets information about all of the versions for a specified traffic
+-- policy. 'ListTrafficPolicyVersions' lists only versions that have not
+-- been deleted.
+--
+-- Amazon Route 53 returns a maximum of 100 items in each response. If you
+-- have a lot of traffic policies, you can use the 'maxitems' parameter to
+-- list them in groups of up to 100.
+--
+-- The response includes three values that help you navigate from one group
+-- of 'maxitems'maxitems traffic policies to the next:
+--
+-- -   __IsTruncated__
+-- -   __TrafficPolicyVersionMarker__
+-- -   __MaxItems__
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_ListTrafficPolicyVersions.html AWS API Reference> for ListTrafficPolicyVersions.
+module Network.AWS.Route53.ListTrafficPolicyVersions
+    (
+    -- * Creating a Request
+      listTrafficPolicyVersions
+    , ListTrafficPolicyVersions
+    -- * Request Lenses
+    , ltpvMaxItems
+    , ltpvTrafficPolicyVersionMarker
+    , ltpvId
+
+    -- * Destructuring the Response
+    , listTrafficPolicyVersionsResponse
+    , ListTrafficPolicyVersionsResponse
+    -- * Response Lenses
+    , ltpvrsResponseStatus
+    , ltpvrsTrafficPolicies
+    , ltpvrsIsTruncated
+    , ltpvrsTrafficPolicyVersionMarker
+    , ltpvrsMaxItems
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
+
+-- | A complex type that contains the information about the request to list
+-- your traffic policies.
+--
+-- /See:/ 'listTrafficPolicyVersions' smart constructor.
+data ListTrafficPolicyVersions = ListTrafficPolicyVersions'
+    { _ltpvMaxItems                   :: !(Maybe Text)
+    , _ltpvTrafficPolicyVersionMarker :: !(Maybe Text)
+    , _ltpvId                         :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTrafficPolicyVersions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltpvMaxItems'
+--
+-- * 'ltpvTrafficPolicyVersionMarker'
+--
+-- * 'ltpvId'
+listTrafficPolicyVersions
+    :: Text -- ^ 'ltpvId'
+    -> ListTrafficPolicyVersions
+listTrafficPolicyVersions pId_ =
+    ListTrafficPolicyVersions'
+    { _ltpvMaxItems = Nothing
+    , _ltpvTrafficPolicyVersionMarker = Nothing
+    , _ltpvId = pId_
+    }
+
+-- | The maximum number of traffic policy versions that you want Amazon Route
+-- 53 to include in the response body for this request. If the specified
+-- traffic policy has more than 'MaxItems' versions, the value of the
+-- 'IsTruncated' element in the response is 'true', and the value of the
+-- 'TrafficPolicyVersionMarker' element is the ID of the first version in
+-- the next group of 'MaxItems' traffic policy versions.
+ltpvMaxItems :: Lens' ListTrafficPolicyVersions (Maybe Text)
+ltpvMaxItems = lens _ltpvMaxItems (\ s a -> s{_ltpvMaxItems = a});
+
+-- | For your first request to 'ListTrafficPolicyVersions', do not include
+-- the 'TrafficPolicyVersionMarker' parameter.
+--
+-- If you have more traffic policy versions than the value of 'MaxItems',
+-- 'ListTrafficPolicyVersions' returns only the first group of 'MaxItems'
+-- versions. To get the next group of 'MaxItems' traffic policy versions,
+-- submit another request to 'ListTrafficPolicyVersions'. For the value of
+-- 'TrafficPolicyVersionMarker', specify the value of the
+-- 'TrafficPolicyVersionMarker' element that was returned in the previous
+-- response.
+--
+-- Traffic policy versions are listed in sequential order.
+ltpvTrafficPolicyVersionMarker :: Lens' ListTrafficPolicyVersions (Maybe Text)
+ltpvTrafficPolicyVersionMarker = lens _ltpvTrafficPolicyVersionMarker (\ s a -> s{_ltpvTrafficPolicyVersionMarker = a});
+
+-- | Specify the value of 'Id' of the traffic policy for which you want to
+-- list all versions.
+ltpvId :: Lens' ListTrafficPolicyVersions Text
+ltpvId = lens _ltpvId (\ s a -> s{_ltpvId = a});
+
+instance AWSRequest ListTrafficPolicyVersions where
+        type Rs ListTrafficPolicyVersions =
+             ListTrafficPolicyVersionsResponse
+        request = get route53
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListTrafficPolicyVersionsResponse' <$>
+                   (pure (fromEnum s)) <*>
+                     (x .@? "TrafficPolicies" .!@ mempty >>=
+                        parseXMLList "TrafficPolicy")
+                     <*> (x .@ "IsTruncated")
+                     <*> (x .@ "TrafficPolicyVersionMarker")
+                     <*> (x .@ "MaxItems"))
+
+instance ToHeaders ListTrafficPolicyVersions where
+        toHeaders = const mempty
+
+instance ToPath ListTrafficPolicyVersions where
+        toPath ListTrafficPolicyVersions'{..}
+          = mconcat
+              ["/2013-04-01/trafficpolicies/", toBS _ltpvId,
+               "/versions"]
+
+instance ToQuery ListTrafficPolicyVersions where
+        toQuery ListTrafficPolicyVersions'{..}
+          = mconcat
+              ["maxitems" =: _ltpvMaxItems,
+               "trafficpolicyversion" =:
+                 _ltpvTrafficPolicyVersionMarker]
+
+-- | A complex type that contains the response information for the request.
+--
+-- /See:/ 'listTrafficPolicyVersionsResponse' smart constructor.
+data ListTrafficPolicyVersionsResponse = ListTrafficPolicyVersionsResponse'
+    { _ltpvrsResponseStatus             :: !Int
+    , _ltpvrsTrafficPolicies            :: ![TrafficPolicy]
+    , _ltpvrsIsTruncated                :: !Bool
+    , _ltpvrsTrafficPolicyVersionMarker :: !Text
+    , _ltpvrsMaxItems                   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTrafficPolicyVersionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltpvrsResponseStatus'
+--
+-- * 'ltpvrsTrafficPolicies'
+--
+-- * 'ltpvrsIsTruncated'
+--
+-- * 'ltpvrsTrafficPolicyVersionMarker'
+--
+-- * 'ltpvrsMaxItems'
+listTrafficPolicyVersionsResponse
+    :: Int -- ^ 'ltpvrsResponseStatus'
+    -> Bool -- ^ 'ltpvrsIsTruncated'
+    -> Text -- ^ 'ltpvrsTrafficPolicyVersionMarker'
+    -> Text -- ^ 'ltpvrsMaxItems'
+    -> ListTrafficPolicyVersionsResponse
+listTrafficPolicyVersionsResponse pResponseStatus_ pIsTruncated_ pTrafficPolicyVersionMarker_ pMaxItems_ =
+    ListTrafficPolicyVersionsResponse'
+    { _ltpvrsResponseStatus = pResponseStatus_
+    , _ltpvrsTrafficPolicies = mempty
+    , _ltpvrsIsTruncated = pIsTruncated_
+    , _ltpvrsTrafficPolicyVersionMarker = pTrafficPolicyVersionMarker_
+    , _ltpvrsMaxItems = pMaxItems_
+    }
+
+-- | The response status code.
+ltpvrsResponseStatus :: Lens' ListTrafficPolicyVersionsResponse Int
+ltpvrsResponseStatus = lens _ltpvrsResponseStatus (\ s a -> s{_ltpvrsResponseStatus = a});
+
+-- | A list that contains one 'TrafficPolicy' element for each traffic policy
+-- version that is associated with the specified traffic policy.
+ltpvrsTrafficPolicies :: Lens' ListTrafficPolicyVersionsResponse [TrafficPolicy]
+ltpvrsTrafficPolicies = lens _ltpvrsTrafficPolicies (\ s a -> s{_ltpvrsTrafficPolicies = a}) . _Coerce;
+
+-- | A flag that indicates whether there are more traffic policies to be
+-- listed. If the response was truncated, you can get the next group of
+-- 'maxitems' traffic policies by calling 'ListTrafficPolicyVersions' again
+-- and specifying the value of the 'NextMarker' element in the marker
+-- parameter.
+--
+-- Valid Values: 'true' | 'false'
+ltpvrsIsTruncated :: Lens' ListTrafficPolicyVersionsResponse Bool
+ltpvrsIsTruncated = lens _ltpvrsIsTruncated (\ s a -> s{_ltpvrsIsTruncated = a});
+
+-- | If 'IsTruncated' is 'true', the value of 'TrafficPolicyVersionMarker'
+-- identifies the first traffic policy in the next group of 'MaxItems'
+-- traffic policies. Call 'ListTrafficPolicyVersions' again and specify the
+-- value of 'TrafficPolicyVersionMarker' in the
+-- 'TrafficPolicyVersionMarker' request parameter.
+--
+-- This element is present only if 'IsTruncated' is 'true'.
+ltpvrsTrafficPolicyVersionMarker :: Lens' ListTrafficPolicyVersionsResponse Text
+ltpvrsTrafficPolicyVersionMarker = lens _ltpvrsTrafficPolicyVersionMarker (\ s a -> s{_ltpvrsTrafficPolicyVersionMarker = a});
+
+-- | The value that you specified for the 'maxitems' parameter in the call to
+-- 'ListTrafficPolicyVersions' that produced the current response.
+ltpvrsMaxItems :: Lens' ListTrafficPolicyVersionsResponse Text
+ltpvrsMaxItems = lens _ltpvrsMaxItems (\ s a -> s{_ltpvrsMaxItems = a});
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
@@ -20,21 +20,30 @@
     , _InvalidInput
     , _HostedZoneNotEmpty
     , _InvalidArgument
+    , _TrafficPolicyInstanceAlreadyExists
+    , _ConflictingTypes
+    , _ConcurrentModification
     , _DelegationSetAlreadyReusable
     , _PriorRequestNotComplete
     , _InvalidChangeBatch
+    , _TrafficPolicyAlreadyExists
+    , _InvalidTrafficPolicyDocument
     , _DelegationSetNotReusable
     , _InvalidDomainName
+    , _NoSuchTrafficPolicy
     , _HostedZoneNotFound
     , _DelegationSetInUse
     , _NoSuchDelegationSet
     , _HealthCheckAlreadyExists
+    , _TooManyTrafficPolicies
     , _NoSuchGeoLocation
     , _DelegationSetNotAvailable
     , _VPCAssociationNotFound
     , _ThrottlingException
     , _NoSuchChange
     , _LimitsExceeded
+    , _TooManyTrafficPolicyInstances
+    , _NoSuchTrafficPolicyInstance
     , _IncompatibleVersion
     , _PublicZoneVPCAssociation
     , _NoSuchHostedZone
@@ -45,6 +54,7 @@
     , _LastVPCAssociation
     , _TooManyHealthChecks
     , _NoSuchHealthCheck
+    , _TrafficPolicyInUse
     , _InvalidVPCId
     , _HostedZoneAlreadyExists
 
@@ -91,6 +101,16 @@
     , cbComment
     , cbChanges
 
+    -- * ChangeBatchRecord
+    , ChangeBatchRecord
+    , changeBatchRecord
+    , cbrChanges
+    , cbrSubmittedAt
+    , cbrSubmitter
+    , cbrComment
+    , cbrId
+    , cbrStatus
+
     -- * ChangeInfo
     , ChangeInfo
     , changeInfo
@@ -180,6 +200,7 @@
     , rrsResourceRecords
     , rrsAliasTarget
     , rrsWeight
+    , rrsTrafficPolicyInstanceId
     , rrsSetIdentifier
     , rrsFailover
     , rrsHealthCheckId
@@ -207,6 +228,38 @@
     , tagValue
     , tagKey
 
+    -- * TrafficPolicy
+    , TrafficPolicy
+    , trafficPolicy
+    , tpComment
+    , tpId
+    , tpVersion
+    , tpName
+    , tpType
+    , tpDocument
+
+    -- * TrafficPolicyInstance
+    , TrafficPolicyInstance
+    , trafficPolicyInstance
+    , tpiId
+    , tpiHostedZoneId
+    , tpiName
+    , tpiTTL
+    , tpiState
+    , tpiMessage
+    , tpiTrafficPolicyId
+    , tpiTrafficPolicyVersion
+    , tpiTrafficPolicyType
+
+    -- * TrafficPolicySummary
+    , TrafficPolicySummary
+    , trafficPolicySummary
+    , tpsId
+    , tpsName
+    , tpsType
+    , tpsLatestVersion
+    , tpsTrafficPolicyCount
+
     -- * VPC
     , VPC
     , vpc
@@ -214,6 +267,7 @@
     , vpcVPCId
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Route53.Internal
 import           Network.AWS.Route53.Types.Product
@@ -276,13 +330,32 @@
 _InvalidArgument :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidArgument = _ServiceError . hasCode "InvalidArgument"
 
+-- | Traffic policy instance with given Id already exists.
+_TrafficPolicyInstanceAlreadyExists :: AsError a => Getting (First ServiceError) a ServiceError
+_TrafficPolicyInstanceAlreadyExists =
+    _ServiceError .
+    hasStatus 409 . hasCode "TrafficPolicyInstanceAlreadyExists"
+
+-- | You tried to update a traffic policy instance by using a traffic policy
+-- version that has a different DNS type than the current type for the
+-- instance. You specified the type in the JSON document in the
+-- 'CreateTrafficPolicy' or 'CreateTrafficPolicyVersion'request.
+_ConflictingTypes :: AsError a => Getting (First ServiceError) a ServiceError
+_ConflictingTypes = _ServiceError . hasStatus 400 . hasCode "ConflictingTypes"
+
+-- | Another user submitted a request to update the object at the same time
+-- that you did. Retry the request.
+_ConcurrentModification :: AsError a => Getting (First ServiceError) a ServiceError
+_ConcurrentModification =
+    _ServiceError . hasStatus 400 . hasCode "ConcurrentModification"
+
 -- | 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.
+-- | The request was rejected because Amazon Route 53 was still processing a
+-- prior request.
 _PriorRequestNotComplete :: AsError a => Getting (First ServiceError) a ServiceError
 _PriorRequestNotComplete =
     _ServiceError . hasStatus 400 . hasCode "PriorRequestNotComplete"
@@ -294,6 +367,17 @@
 _InvalidChangeBatch :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidChangeBatch = _ServiceError . hasCode "InvalidChangeBatch"
 
+-- | A traffic policy that has the same value for 'Name' already exists.
+_TrafficPolicyAlreadyExists :: AsError a => Getting (First ServiceError) a ServiceError
+_TrafficPolicyAlreadyExists =
+    _ServiceError . hasStatus 409 . hasCode "TrafficPolicyAlreadyExists"
+
+-- | The format of the traffic policy document that you specified in the
+-- 'Document' element is invalid.
+_InvalidTrafficPolicyDocument :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidTrafficPolicyDocument =
+    _ServiceError . hasStatus 400 . hasCode "InvalidTrafficPolicyDocument"
+
 -- | The specified delegation set has not been marked as reusable.
 _DelegationSetNotReusable :: AsError a => Getting (First ServiceError) a ServiceError
 _DelegationSetNotReusable = _ServiceError . hasCode "DelegationSetNotReusable"
@@ -303,6 +387,11 @@
 _InvalidDomainName =
     _ServiceError . hasStatus 400 . hasCode "InvalidDomainName"
 
+-- | No traffic policy exists with the specified ID.
+_NoSuchTrafficPolicy :: AsError a => Getting (First ServiceError) a ServiceError
+_NoSuchTrafficPolicy =
+    _ServiceError . hasStatus 404 . hasCode "NoSuchTrafficPolicy"
+
 -- | The specified HostedZone cannot be found.
 _HostedZoneNotFound :: AsError a => Getting (First ServiceError) a ServiceError
 _HostedZoneNotFound = _ServiceError . hasCode "HostedZoneNotFound"
@@ -316,24 +405,31 @@
 _NoSuchDelegationSet :: AsError a => Getting (First ServiceError) a ServiceError
 _NoSuchDelegationSet = _ServiceError . hasCode "NoSuchDelegationSet"
 
--- | 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'.
+-- | The health check you are trying to create already exists. Amazon 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"
 
+-- | You\'ve created the maximum number of traffic policies 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.
+_TooManyTrafficPolicies :: AsError a => Getting (First ServiceError) a ServiceError
+_TooManyTrafficPolicies =
+    _ServiceError . hasStatus 400 . hasCode "TooManyTrafficPolicies"
+
 -- | 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.
+-- | Amazon 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 Amazon 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"
@@ -356,15 +452,29 @@
 _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.
+-- | You\'ve created the maximum number of traffic policy instances 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.
+_TooManyTrafficPolicyInstances :: AsError a => Getting (First ServiceError) a ServiceError
+_TooManyTrafficPolicyInstances =
+    _ServiceError . hasStatus 400 . hasCode "TooManyTrafficPolicyInstances"
+
+-- | No traffic policy instance exists with the specified ID.
+_NoSuchTrafficPolicyInstance :: AsError a => Getting (First ServiceError) a ServiceError
+_NoSuchTrafficPolicyInstance =
+    _ServiceError . hasStatus 404 . hasCode "NoSuchTrafficPolicyInstance"
+
+-- | The resource you are trying to access is unsupported on this Amazon
+-- 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"
 
 -- | 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.
+-- VPC association. Amazon 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"
@@ -398,8 +508,9 @@
 _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.
+-- the VPC that is associated with the hosted zone. Amazon 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"
@@ -413,13 +524,19 @@
 _NoSuchHealthCheck =
     _ServiceError . hasStatus 404 . hasCode "NoSuchHealthCheck"
 
+-- | One or more traffic policy instances were created by using the specified
+-- traffic policy.
+_TrafficPolicyInUse :: AsError a => Getting (First ServiceError) a ServiceError
+_TrafficPolicyInUse =
+    _ServiceError . hasStatus 400 . hasCode "TrafficPolicyInUse"
+
 -- | 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.
+-- to you. Amazon 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"
 
--- | The hosted zone you are trying to create already exists. Route 53
+-- | The hosted zone you are trying to create already exists. Amazon 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
diff --git a/gen/Network/AWS/Route53/Types/Product.hs b/gen/Network/AWS/Route53/Types/Product.hs
--- a/gen/Network/AWS/Route53/Types/Product.hs
+++ b/gen/Network/AWS/Route53/Types/Product.hs
@@ -17,19 +17,30 @@
 --
 module Network.AWS.Route53.Types.Product where
 
+import           Network.AWS.Lens
 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.
+-- | /Alias resource record sets only:/ Information about the CloudFront
+-- distribution, ELB load balancer, Amazon S3 bucket, or Amazon Route 53
+-- resource record set to which you are routing 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/
+-- If you\'re creating resource record sets for a private hosted zone, note
+-- the following:
 --
--- .
+-- -   You can create alias resource record sets only for Amazon Route 53
+--     resource record sets in the same private hosted zone. Creating alias
+--     resource record sets for CloudFront distributions, ELB load
+--     balancers, and Amazon S3 buckets is not supported.
+-- -   You can\'t create alias resource record sets for failover,
+--     geolocation, or latency resource record sets in a private hosted
+--     zone.
 --
+-- For more information and an example, see
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/CreateAliasRRSAPI.html Example: Creating Alias Resource Record Sets>
+-- in the /Amazon Route 53 API Reference/.
+--
 -- /See:/ 'aliasTarget' smart constructor.
 data AliasTarget = AliasTarget'
     { _atHostedZoneId         :: !Text
@@ -58,38 +69,134 @@
     , _atEvaluateTargetHealth = pEvaluateTargetHealth_
     }
 
--- | /Alias resource record sets only:/ The value of the hosted zone ID for
--- the AWS resource.
+-- | /Alias resource record sets only:/ The value you use depends on where
+-- you want to route queries:
 --
--- 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/
+-- -   __A CloudFront distribution:__ Specify 'Z2FDTNDATAQYW2'.
+-- -   An ELB load balancer: Specify the value of the hosted zone ID for
+--     the load balancer. You can get the hosted zone ID by using the AWS
+--     Management Console, the ELB API, or the AWS CLI. Use the same method
+--     to get values for 'HostedZoneId' and 'DNSName'. If you get one value
+--     from the console and the other value from the API or the CLI,
+--     creating the resource record set will fail.
+-- -   __An Amazon S3 bucket that is configured as a static website:__
+--     Specify the hosted zone ID for the Amazon S3 website endpoint in
+--     which you created the bucket. For more information about valid
+--     values, see the table
+--     <http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region Amazon Simple Storage Service (S3) Website Endpoints>
+--     in the /Amazon Web Services General Reference/.
+-- -   __Another Amazon Route 53 resource record set in your hosted zone:__
+--     Specify the hosted zone ID of your hosted zone. (An alias resource
+--     record set cannot reference a resource record set in a different
+--     hosted zone.)
 --
--- .
+-- For more information and an example, see
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/CreateAliasRRSAPI.html Example: Creating Alias Resource Record Sets>
+-- in the /Amazon Route 53 API Reference/.
 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.
+-- the AWS Resource. The value that you specify depends on where you want
+-- to route queries:
 --
--- 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/
+-- -   __A CloudFront distribution:__ Specify the domain name that
+--     CloudFront assigned when you created your distribution. Your
+--     CloudFront distribution must include an alternate domain name that
+--     matches the name of the resource record set. For example, if the
+--     name of the resource record set is 'acme.example.com', your
+--     CloudFront distribution must include 'acme.example.com' as one of
+--     the alternate domain names. For more information, see
+--     <http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html Using Alternate Domain Names (CNAMEs)>
+--     in the /Amazon CloudFront Developer Guide/.
+-- -   __An ELB load balancer:__ Specify the DNS name associated with the
+--     load balancer. You can get the DNS name by using the AWS Management
+--     Console, the ELB API, or the AWS CLI. Use the same method to get
+--     values for 'HostedZoneId' and 'DNSName'. If you get one value from
+--     the console and the other value from the API or the CLI, creating
+--     the resource record set will fail.
+-- -   __An Amazon S3 bucket that is configured as a static website:__
+--     Specify the domain name of the Amazon S3 website endpoint in which
+--     you created the bucket; for example,
+--     's3-website-us-east-1.amazonaws.com'. For more information about
+--     valid values, see the table
+--     <http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region Amazon Simple Storage Service (S3) Website Endpoints>
+--     in the /Amazon Web Services General Reference/. For more information
+--     about using Amazon S3 buckets for websites, see
+--     <http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html Hosting a Static Website on Amazon S3>
+--     in the /Amazon Simple Storage Service Developer Guide/.
+-- -
 --
--- .
+-- For more information and an example, see
+-- <http://docs.aws.amazon.com/Route53/latest/APIReference/CreateAliasRRSAPI.html Example: Creating Alias Resource Record Sets>
+-- in the /Amazon Route 53 API Reference/.
 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.
+-- | /Alias resource record sets only:/ If you set the value of
+-- 'EvaluateTargetHealth' to 'true' for the resource record set or sets in
+-- an alias, weighted alias, latency alias, or failover alias resource
+-- record set, and if you specify a value for 'HealthCheckId' for every
+-- resource record set that is referenced by these alias resource record
+-- sets, the alias resource record sets inherit the health of the
+-- referenced resource record sets.
 --
--- 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/
+-- In this configuration, when Amazon Route 53 receives a DNS query for an
+-- alias resource record set:
 --
--- .
+-- 1.  Amazon Route 53 looks at the resource record sets that are
+--     referenced by the alias resource record sets to determine which
+--     health checks they\'re using.
+-- 2.  Amazon Route 53 checks the current status of each health check.
+--     (Amazon Route 53 periodically checks the health of the endpoint that
+--     is specified in a health check; it doesn\'t perform the health check
+--     when the DNS query arrives.)
+-- 3.  Based on the status of the health checks, Amazon Route 53 determines
+--     which resource record sets are healthy. Unhealthy resource record
+--     sets are immediately removed from consideration. In addition, if all
+--     of the resource record sets that are referenced by an alias resource
+--     record set are unhealthy, that alias resource record set also is
+--     immediately removed from consideration.
+-- 4.  Based on the configuration of the alias resource record sets
+--     (weighted alias or latency alias, for example) and the configuration
+--     of the resource record sets that they reference, Amazon Route 53
+--     chooses a resource record set from the healthy resource record sets,
+--     and responds to the query.
+--
+-- Note the following:
+--
+-- -   You cannot set EvaluateTargetHealth to true when the alias target is
+--     a CloudFront distribution.
+-- -   If the AWS resource that you specify in 'AliasTarget' is a resource
+--     record set or a group of resource record sets (for example, a group
+--     of weighted resource record sets), but it is not another alias
+--     resource record set, we recommend that you associate a health check
+--     with all of the resource record sets in the alias target. For more
+--     information, see
+--     <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-complex-configs.html#dns-failover-complex-configs-hc-omitting What Happens When You Omit Health Checks?>
+--     in the /Amazon Route 53 Developer Guide/.
+-- -   If you specify an ELB load balancer in 'AliasTarget', Elastic Load
+--     Balancing routes queries only to the healthy Amazon EC2 instances
+--     that are registered with the load balancer. If no Amazon EC2
+--     instances are healthy or if the load balancer itself is unhealthy,
+--     and if 'EvaluateTargetHealth' is 'true' for the corresponding alias
+--     resource record set, Amazon Route 53 routes queries to other
+--     resources.
+-- -   When you create a load balancer, you configure settings for Elastic
+--     Load Balancing health checks; they\'re not Amazon Route 53 health
+--     checks, but they perform a similar function. Do not create Amazon
+--     Route 53 health checks for the Amazon EC2 instances that you
+--     register with an ELB load balancer. For more information, see
+--     <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-complex-configs.html How Health Checks Work in More Complex Amazon Route 53 Configurations>
+--     in the /Amazon Route 53 Developer Guide/.
+--
+-- We recommend that you set 'EvaluateTargetHealth' to 'true' only when you
+-- have enough idle capacity to handle the failure of one or more
+-- endpoints.
+--
+-- For more information and examples, see
+-- <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover.html Amazon Route 53 Health Checks and DNS Failover>
+-- in the /Amazon Route 53 Developer Guide/.
 atEvaluateTargetHealth :: Lens' AliasTarget Bool
 atEvaluateTargetHealth = lens _atEvaluateTargetHealth (\ s a -> s{_atEvaluateTargetHealth = a});
 
@@ -132,9 +239,21 @@
     , _cResourceRecordSet = pResourceRecordSet_
     }
 
--- | The action to perform.
+-- | The action to perform:
 --
--- Valid values: 'CREATE' | 'DELETE' | 'UPSERT'
+-- -   'CREATE': Creates a resource record set that has the specified
+--     values.
+-- -   'DELETE': Deletes a existing resource record set that has the
+--     specified values for 'Name', 'Type', 'SetIdentifier' (for latency,
+--     weighted, geolocation, and failover resource record sets), and 'TTL'
+--     (except alias resource record sets, for which the TTL is determined
+--     by the AWS resource that you\'re routing DNS queries to).
+-- -   'UPSERT': If a resource record set does not already exist, Amazon
+--     Route 53 creates it. If a resource record set does exist, Amazon
+--     Route 53 updates it with the values in the request. Amazon Route 53
+--     can update an existing resource record set only when all of the
+--     following values match: 'Name', 'Type', and 'SetIdentifier' (for
+--     weighted, latency, geolocation, and failover resource record sets).
 cAction :: Lens' Change ChangeAction
 cAction = lens _cAction (\ s a -> s{_cAction = a});
 
@@ -142,6 +261,11 @@
 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'{..}
           = mconcat
@@ -189,12 +313,99 @@
               ["Comment" @= _cbComment,
                "Changes" @= toXMLList "Change" _cbChanges]
 
+-- | A complex type that lists the changes and information for a ChangeBatch.
+--
+-- /See:/ 'changeBatchRecord' smart constructor.
+data ChangeBatchRecord = ChangeBatchRecord'
+    { _cbrChanges     :: !(Maybe (List1 Change))
+    , _cbrSubmittedAt :: !(Maybe ISO8601)
+    , _cbrSubmitter   :: !(Maybe Text)
+    , _cbrComment     :: !(Maybe Text)
+    , _cbrId          :: !Text
+    , _cbrStatus      :: !ChangeStatus
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChangeBatchRecord' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cbrChanges'
+--
+-- * 'cbrSubmittedAt'
+--
+-- * 'cbrSubmitter'
+--
+-- * 'cbrComment'
+--
+-- * 'cbrId'
+--
+-- * 'cbrStatus'
+changeBatchRecord
+    :: Text -- ^ 'cbrId'
+    -> ChangeStatus -- ^ 'cbrStatus'
+    -> ChangeBatchRecord
+changeBatchRecord pId_ pStatus_ =
+    ChangeBatchRecord'
+    { _cbrChanges = Nothing
+    , _cbrSubmittedAt = Nothing
+    , _cbrSubmitter = Nothing
+    , _cbrComment = Nothing
+    , _cbrId = pId_
+    , _cbrStatus = pStatus_
+    }
+
+-- | A list of changes made in the ChangeBatch.
+cbrChanges :: Lens' ChangeBatchRecord (Maybe (NonEmpty Change))
+cbrChanges = lens _cbrChanges (\ s a -> s{_cbrChanges = a}) . mapping _List1;
+
+-- | 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).
+cbrSubmittedAt :: Lens' ChangeBatchRecord (Maybe UTCTime)
+cbrSubmittedAt = lens _cbrSubmittedAt (\ s a -> s{_cbrSubmittedAt = a}) . mapping _Time;
+
+-- | The AWS account ID attached to the changes.
+cbrSubmitter :: Lens' ChangeBatchRecord (Maybe Text)
+cbrSubmitter = lens _cbrSubmitter (\ s a -> s{_cbrSubmitter = a});
+
 -- | 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.
+cbrComment :: Lens' ChangeBatchRecord (Maybe Text)
+cbrComment = lens _cbrComment (\ s a -> s{_cbrComment = a});
+
+-- | The ID of the request. Use this ID to track when the change has
+-- completed across all Amazon Route 53 DNS servers.
+cbrId :: Lens' ChangeBatchRecord Text
+cbrId = lens _cbrId (\ s a -> s{_cbrId = 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'
+cbrStatus :: Lens' ChangeBatchRecord ChangeStatus
+cbrStatus = lens _cbrStatus (\ s a -> s{_cbrStatus = a});
+
+instance FromXML ChangeBatchRecord where
+        parseXML x
+          = ChangeBatchRecord' <$>
+              (x .@? "Changes" .!@ mempty >>=
+                 may (parseXMLList1 "Change"))
+                <*> (x .@? "SubmittedAt")
+                <*> (x .@? "Submitter")
+                <*> (x .@? "Comment")
+                <*> (x .@ "Id")
+                <*> (x .@ "Status")
+
+-- | 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)
@@ -250,8 +461,7 @@
 -- | 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.
+-- the time is listed in Coordinated Universal Time (UTC).
 ciSubmittedAt :: Lens' ChangeInfo UTCTime
 ciSubmittedAt = lens _ciSubmittedAt (\ s a -> s{_ciSubmittedAt = a}) . _Time;
 
@@ -587,8 +797,8 @@
     }
 
 -- | 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.
+-- fail for Amazon 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
@@ -605,28 +815,28 @@
 hccSearchString :: Lens' HealthCheckConfig (Maybe Text)
 hccSearchString = lens _hccSearchString (\ s a -> s{_hccSearchString = a});
 
--- | The minimum number of child health checks that must be healthy for Route
--- 53 to consider the parent health check to be healthy. Valid values are
--- integers between 0 and 256, inclusive.
+-- | The minimum number of child health checks that must be healthy for
+-- Amazon Route 53 to consider the parent health check to be healthy. Valid
+-- values are integers between 0 and 256, inclusive.
 hccHealthThreshold :: Lens' HealthCheckConfig (Maybe Natural)
 hccHealthThreshold = lens _hccHealthThreshold (\ s a -> s{_hccHealthThreshold = 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.
+-- HTTPS, HTTP_STR_MATCH, and HTTPS_STR_MATCH health checks. The 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 Boolean value that indicates whether you want Route 53 to measure the
--- latency between health checkers in multiple AWS regions and your
--- endpoint and to display CloudWatch latency graphs in the Route 53
--- console.
+-- | A Boolean value that indicates whether you want Amazon Route 53 to
+-- measure the latency between health checkers in multiple AWS regions and
+-- your endpoint and to display CloudWatch latency graphs in the Amazon
+-- Route 53 console.
 hccMeasureLatency :: Lens' HealthCheckConfig (Maybe Bool)
 hccMeasureLatency = lens _hccMeasureLatency (\ s a -> s{_hccMeasureLatency = a});
 
 -- | A boolean value that indicates whether the status of health check should
 -- be inverted. For example, if a health check is healthy but 'Inverted' is
--- 'True', then Route 53 considers the health check to be unhealthy.
+-- 'True', then Amazon Route 53 considers the health check to be unhealthy.
 hccInverted :: Lens' HealthCheckConfig (Maybe Bool)
 hccInverted = lens _hccInverted (\ s a -> s{_hccInverted = a});
 
@@ -639,12 +849,12 @@
 hccChildHealthChecks :: Lens' HealthCheckConfig [Text]
 hccChildHealthChecks = lens _hccChildHealthChecks (\ s a -> s{_hccChildHealthChecks = a}) . _Default . _Coerce;
 
--- | 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.
+-- | The number of seconds between the time that Amazon 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.
+-- Each Amazon 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;
 
@@ -696,8 +906,8 @@
                "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.
+-- | A complex type that contains the IP address of a Amazon Route 53 health
+-- checker and the reason for the health check status.
 --
 -- /See:/ 'healthCheckObservation' smart constructor.
 data HealthCheckObservation = HealthCheckObservation'
@@ -720,8 +930,8 @@
     , _hcoStatusReport = Nothing
     }
 
--- | The IP address of the Route 53 health checker that performed the health
--- check.
+-- | The IP address of the Amazon Route 53 health checker that performed the
+-- health check.
 hcoIPAddress :: Lens' HealthCheckObservation (Maybe Text)
 hcoIPAddress = lens _hcoIPAddress (\ s a -> s{_hcoIPAddress = a});
 
@@ -786,10 +996,10 @@
 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.
+-- example, www.example.com. The trailing dot is optional; Amazon Route 53
+-- assumes that the domain name is fully qualified. This means that Amazon
+-- 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
@@ -834,8 +1044,7 @@
     , _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.
+-- | Undocumented member.
 hzcPrivateZone :: Lens' HostedZoneConfig (Maybe Bool)
 hzcPrivateZone = lens _hzcPrivateZone (\ s a -> s{_hzcPrivateZone = a});
 
@@ -877,7 +1086,15 @@
     { _rrValue = pValue_
     }
 
--- | The value of the 'Value' element for the current resource record set.
+-- | The current or new DNS record value, not to exceed 4,000 characters. In
+-- the case of a 'DELETE' action, if the current value does not match the
+-- actual value, an error is returned. For descriptions about how to format
+-- 'Value' for different record types, see
+-- <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html Supported DNS Resource Record Types>
+-- in the /Amazon Route 53 Developer Guide/.
+--
+-- You can specify more than one value for all record types except 'CNAME'
+-- and 'SOA'.
 rrValue :: Lens' ResourceRecord Text
 rrValue = lens _rrValue (\ s a -> s{_rrValue = a});
 
@@ -893,17 +1110,18 @@
 --
 -- /See:/ 'resourceRecordSet' smart constructor.
 data ResourceRecordSet = ResourceRecordSet'
-    { _rrsTTL             :: !(Maybe Nat)
-    , _rrsResourceRecords :: !(Maybe (List1 ResourceRecord))
-    , _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
+    { _rrsTTL                     :: !(Maybe Nat)
+    , _rrsResourceRecords         :: !(Maybe (List1 ResourceRecord))
+    , _rrsAliasTarget             :: !(Maybe AliasTarget)
+    , _rrsWeight                  :: !(Maybe Nat)
+    , _rrsTrafficPolicyInstanceId :: !(Maybe Text)
+    , _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.
@@ -918,6 +1136,8 @@
 --
 -- * 'rrsWeight'
 --
+-- * 'rrsTrafficPolicyInstanceId'
+--
 -- * 'rrsSetIdentifier'
 --
 -- * 'rrsFailover'
@@ -941,6 +1161,7 @@
     , _rrsResourceRecords = Nothing
     , _rrsAliasTarget = Nothing
     , _rrsWeight = Nothing
+    , _rrsTrafficPolicyInstanceId = Nothing
     , _rrsSetIdentifier = Nothing
     , _rrsFailover = Nothing
     , _rrsHealthCheckId = Nothing
@@ -950,7 +1171,25 @@
     , _rrsType = pType_
     }
 
--- | The cache time to live for the current resource record set.
+-- | The cache time to live for the current resource record set. Note the
+-- following:
+--
+-- -   If you\'re creating an alias resource record set, omit 'TTL'. Amazon
+--     Route 53 uses the value of 'TTL' for the alias target.
+-- -   If you\'re associating this resource record set with a health check
+--     (if you\'re adding a 'HealthCheckId' element), we recommend that you
+--     specify a 'TTL' of 60 seconds or less so clients respond quickly to
+--     changes in health status.
+-- -   All of the resource record sets in a group of weighted, latency,
+--     geolocation, or failover resource record sets must have the same
+--     value for 'TTL'.
+-- -   If a group of weighted resource record sets includes one or more
+--     weighted alias resource record sets for which the alias target is an
+--     ELB load balancer, we recommend that you specify a 'TTL' of 60
+--     seconds for all of the non-alias weighted resource record sets that
+--     have the same name and type. Values other than 60 seconds (the TTL
+--     for load balancers) will change the effect of the values that you
+--     specify for 'Weight'.
 rrsTTL :: Lens' ResourceRecordSet (Maybe Natural)
 rrsTTL = lens _rrsTTL (\ s a -> s{_rrsTTL = a}) . mapping _Nat;
 
@@ -966,33 +1205,91 @@
 
 -- | /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.
+-- the proportion of DNS queries that Amazon Route 53 responds to using the
+-- current resource record set. Amazon Route 53 calculates the sum of the
+-- weights for the resource record sets that have the same combination of
+-- DNS name and type. Amazon Route 53 then responds to queries based on the
+-- ratio of a resource\'s weight to the total. Note the following:
+--
+-- -   You must specify a value for the 'Weight' element for every weighted
+--     resource record set.
+-- -   You can only specify one 'ResourceRecord' per weighted resource
+--     record set.
+-- -   You cannot create latency, failover, or geolocation resource record
+--     sets that have the same values for the 'Name' and 'Type' elements as
+--     weighted resource record sets.
+-- -   You can create a maximum of 100 weighted resource record sets that
+--     have the same values for the 'Name' and 'Type' elements.
+-- -   For weighted (but not weighted alias) resource record sets, if you
+--     set 'Weight' to '0' for a resource record set, Amazon Route 53 never
+--     responds to queries with the applicable value for that resource
+--     record set. However, if you set 'Weight' to '0' for all resource
+--     record sets that have the same combination of DNS name and type,
+--     traffic is routed to all resources with equal probability.
+--
+--     The effect of setting 'Weight' to '0' is different when you
+--     associate health checks with weighted resource record sets. For more
+--     information, see
+--     <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-configuring-options.html Options for Configuring Amazon Route 53 Active-Active and Active-Passive Failover>
+--     in the /Amazon Route 53 Developer Guide/.
+--
 rrsWeight :: Lens' ResourceRecordSet (Maybe Natural)
 rrsWeight = lens _rrsWeight (\ s a -> s{_rrsWeight = a}) . mapping _Nat;
 
+-- | Undocumented member.
+rrsTrafficPolicyInstanceId :: Lens' ResourceRecordSet (Maybe Text)
+rrsTrafficPolicyInstanceId = lens _rrsTrafficPolicyInstanceId (\ s a -> s{_rrsTrafficPolicyInstanceId = a});
+
 -- | /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.
+-- have the same combination of DNS name and type. The value of
+-- 'SetIdentifier' must be unique for each resource record set that has 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.
+-- | /Failover resource record sets only:/ To configure failover, you add the
+-- 'Failover' element to two resource record sets. For one resource record
+-- set, you specify 'PRIMARY' as the value for 'Failover'; for the other
+-- resource record set, you specify 'SECONDARY'. In addition, you include
+-- the 'HealthCheckId' element and specify the health check that you want
+-- Amazon Route 53 to perform for each resource record set.
 --
+-- You can create failover and failover alias resource record sets only in
+-- public hosted zones.
+--
+-- Except where noted, the following failover behaviors assume that you
+-- have included the 'HealthCheckId' element in both resource record sets:
+--
+-- -   When the primary resource record set is healthy, Amazon Route 53
+--     responds to DNS queries with the applicable value from the primary
+--     resource record set regardless of the health of the secondary
+--     resource record set.
+-- -   When the primary resource record set is unhealthy and the secondary
+--     resource record set is healthy, Amazon Route 53 responds to DNS
+--     queries with the applicable value from the secondary resource record
+--     set.
+-- -   When the secondary resource record set is unhealthy, Amazon Route 53
+--     responds to DNS queries with the applicable value from the primary
+--     resource record set regardless of the health of the primary resource
+--     record set.
+-- -   If you omit the 'HealthCheckId' element for the secondary resource
+--     record set, and if the primary resource record set is unhealthy,
+--     Amazon Route 53 always responds to DNS queries with the applicable
+--     value from the secondary resource record set. This is true
+--     regardless of the health of the associated endpoint.
+--
+-- You cannot create non-failover resource record sets that have the same
+-- values for the 'Name' and 'Type' elements as failover resource record
+-- sets.
+--
+-- For failover alias resource record sets, you must also include the
+-- 'EvaluateTargetHealth' element and set the value to true.
+--
+-- For more information about configuring failover for Amazon Route 53, see
+-- <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover.html Amazon Route 53 Health Checks and DNS Failover>
+-- in the /Amazon Route 53 Developer Guide/.
+--
 -- Valid values: 'PRIMARY' | 'SECONDARY'
 rrsFailover :: Lens' ResourceRecordSet (Maybe Failover)
 rrsFailover = lens _rrsFailover (\ s a -> s{_rrsFailover = a});
@@ -1003,23 +1300,136 @@
 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.
+-- | /Latency-based resource record sets only:/ The Amazon EC2 region where
+-- the resource that is specified in this resource record set resides. The
+-- resource typically is an AWS resource, such as an Amazon EC2 instance or
+-- an ELB load balancer, and is referred to by an IP address or a DNS
+-- domain name, depending on the record type.
+--
+-- You can create latency and latency alias resource record sets only in
+-- public hosted zones.
+--
+-- When Amazon Route 53 receives a DNS query for a domain name and type for
+-- which you have created latency resource record sets, Amazon Route 53
+-- selects the latency resource record set that has the lowest latency
+-- between the end user and the associated Amazon EC2 region. Amazon Route
+-- 53 then returns the value that is associated with the selected resource
+-- record set.
+--
+-- Note the following:
+--
+-- -   You can only specify one 'ResourceRecord' per latency resource
+--     record set.
+-- -   You can only create one latency resource record set for each Amazon
+--     EC2 region.
+-- -   You are not required to create latency resource record sets for all
+--     Amazon EC2 regions. Amazon Route 53 will choose the region with the
+--     best latency from among the regions for which you create latency
+--     resource record sets.
+-- -   You cannot create non-latency resource record sets that have the
+--     same values for the 'Name' and 'Type' elements as latency resource
+--     record sets.
 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.
+-- | /Geo location resource record sets only:/ A complex type that lets you
+-- control how Amazon Route 53 responds to DNS queries based on the
+-- geographic origin of the query. For example, if you want all queries
+-- from Africa to be routed to a web server with an IP address of
+-- '192.0.2.111', create a resource record set with a 'Type' of 'A' and a
+-- 'ContinentCode' of 'AF'.
+--
+-- You can create geolocation and geolocation alias resource record sets
+-- only in public hosted zones.
+--
+-- If you create separate resource record sets for overlapping geographic
+-- regions (for example, one resource record set for a continent and one
+-- for a country on the same continent), priority goes to the smallest
+-- geographic region. This allows you to route most queries for a continent
+-- to one resource and to route queries for a country on that continent to
+-- a different resource.
+--
+-- You cannot create two geolocation resource record sets that specify the
+-- same geographic location.
+--
+-- The value '*' in the 'CountryCode' element matches all geographic
+-- locations that aren\'t specified in other geolocation resource record
+-- sets that have the same values for the 'Name' and 'Type' elements.
+--
+-- Geolocation works by mapping IP addresses to locations. However, some IP
+-- addresses aren\'t mapped to geographic locations, so even if you create
+-- geolocation resource record sets that cover all seven continents, Amazon
+-- Route 53 will receive some DNS queries from locations that it can\'t
+-- identify. We recommend that you create a resource record set for which
+-- the value of 'CountryCode' is '*', which handles both queries that come
+-- from locations for which you haven\'t created geolocation resource
+-- record sets and queries from IP addresses that aren\'t mapped to a
+-- location. If you don\'t create a '*' resource record set, Amazon Route
+-- 53 returns a \"no answer\" response for queries from those locations.
+--
+-- You cannot create non-geolocation resource record sets that have the
+-- same values for the 'Name' and 'Type' elements as geolocation resource
+-- record sets.
 rrsGeoLocation :: Lens' ResourceRecordSet (Maybe GeoLocation)
 rrsGeoLocation = lens _rrsGeoLocation (\ s a -> s{_rrsGeoLocation = a});
 
--- | The domain name of the current resource record set.
+-- | The name of the domain you want to perform the action on.
+--
+-- Enter a fully qualified domain name, for example, 'www.example.com'. You
+-- can optionally include a trailing dot. If you omit the trailing dot,
+-- Amazon Route 53 still assumes that the domain name that you specify is
+-- fully qualified. This means that Amazon Route 53 treats
+-- 'www.example.com' (without a trailing dot) and 'www.example.com.' (with
+-- a trailing dot) as identical.
+--
+-- For information about how to specify characters other than a-z, 0-9, and
+-- - (hyphen) and how to specify internationalized domain names, see
+-- <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DomainNameFormat.html DNS Domain Name Format>
+-- in the /Amazon Route 53 Developer Guide/.
+--
+-- You can use an asterisk (*) character in the name. DNS treats the *
+-- character either as a wildcard or as the * character (ASCII 42),
+-- depending on where it appears in the name. For more information, see
+-- <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DomainNameFormat.html#domain-name-format-asterisk Using an Asterisk (*) in the Names of Hosted Zones and Resource Record Sets>
+-- in the /Amazon Route 53 Developer Guide/
+--
+-- You can\'t use the * wildcard for resource records sets that have a type
+-- of NS.
 rrsName :: Lens' ResourceRecordSet Text
 rrsName = lens _rrsName (\ s a -> s{_rrsName = a});
 
--- | The type of the current resource record set.
+-- | The DNS record type. For information about different record types and
+-- how data is encoded for them, see
+-- <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html Supported DNS Resource Record Types>
+-- in the /Amazon Route 53 Developer Guide/.
+--
+-- Valid values for basic resource record sets: 'A' | 'AAAA' | 'CNAME' |
+-- 'MX' | 'NS' | 'PTR' | 'SOA' | 'SPF' | 'SRV' | 'TXT'
+--
+-- Values for weighted, latency, geolocation, and failover resource record
+-- sets: 'A' | 'AAAA' | 'CNAME' | 'MX' | 'PTR' | 'SPF' | 'SRV' | 'TXT'.
+-- When creating a group of weighted, latency, geolocation, or failover
+-- resource record sets, specify the same value for all of the resource
+-- record sets in the group.
+--
+-- SPF records were formerly used to verify the identity of the sender of
+-- email messages. However, we no longer recommend that you create resource
+-- record sets for which the value of 'Type' is 'SPF'. RFC 7208, /Sender
+-- Policy Framework (SPF) for Authorizing Use of Domains in Email, Version
+-- 1/, has been updated to say, \"...[I]ts existence and mechanism defined
+-- in [RFC4408] have led to some interoperability issues. Accordingly, its
+-- use is no longer appropriate for SPF version 1; implementations are not
+-- to use it.\" In RFC 7208, see section 14.1,
+-- <http://tools.ietf.org/html/rfc7208#section-14.1 The SPF DNS Record Type>.
+--
+-- Values for alias resource record sets:
+--
+-- -   __CloudFront distributions:__ 'A'
+-- -   __ELB load balancers:__ 'A' | 'AAAA'
+-- -   __Amazon S3 buckets:__ A
+-- -   __Another resource record set in this hosted zone:__ Specify the
+--     type of the resource record set for which you\'re creating the
+--     alias. Specify any value except 'NS' or 'SOA'.
 rrsType :: Lens' ResourceRecordSet RecordType
 rrsType = lens _rrsType (\ s a -> s{_rrsType = a});
 
@@ -1031,6 +1441,7 @@
                    may (parseXMLList1 "ResourceRecord"))
                 <*> (x .@? "AliasTarget")
                 <*> (x .@? "Weight")
+                <*> (x .@? "TrafficPolicyInstanceId")
                 <*> (x .@? "SetIdentifier")
                 <*> (x .@? "Failover")
                 <*> (x .@? "HealthCheckId")
@@ -1048,6 +1459,8 @@
                    (toXMLList "ResourceRecord" <$> _rrsResourceRecords),
                "AliasTarget" @= _rrsAliasTarget,
                "Weight" @= _rrsWeight,
+               "TrafficPolicyInstanceId" @=
+                 _rrsTrafficPolicyInstanceId,
                "SetIdentifier" @= _rrsSetIdentifier,
                "Failover" @= _rrsFailover,
                "HealthCheckId" @= _rrsHealthCheckId,
@@ -1136,8 +1549,7 @@
 -- | 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.
+-- the time is listed in Coordinated Universal Time (UTC).
 srCheckedTime :: Lens' StatusReport (Maybe UTCTime)
 srCheckedTime = lens _srCheckedTime (\ s a -> s{_srCheckedTime = a}) . mapping _Time;
 
@@ -1184,6 +1596,252 @@
 instance ToXML Tag where
         toXML Tag'{..}
           = mconcat ["Value" @= _tagValue, "Key" @= _tagKey]
+
+-- | /See:/ 'trafficPolicy' smart constructor.
+data TrafficPolicy = TrafficPolicy'
+    { _tpComment  :: !(Maybe Text)
+    , _tpId       :: !Text
+    , _tpVersion  :: !Nat
+    , _tpName     :: !Text
+    , _tpType     :: !RecordType
+    , _tpDocument :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TrafficPolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpComment'
+--
+-- * 'tpId'
+--
+-- * 'tpVersion'
+--
+-- * 'tpName'
+--
+-- * 'tpType'
+--
+-- * 'tpDocument'
+trafficPolicy
+    :: Text -- ^ 'tpId'
+    -> Natural -- ^ 'tpVersion'
+    -> Text -- ^ 'tpName'
+    -> RecordType -- ^ 'tpType'
+    -> Text -- ^ 'tpDocument'
+    -> TrafficPolicy
+trafficPolicy pId_ pVersion_ pName_ pType_ pDocument_ =
+    TrafficPolicy'
+    { _tpComment = Nothing
+    , _tpId = pId_
+    , _tpVersion = _Nat # pVersion_
+    , _tpName = pName_
+    , _tpType = pType_
+    , _tpDocument = pDocument_
+    }
+
+-- | Undocumented member.
+tpComment :: Lens' TrafficPolicy (Maybe Text)
+tpComment = lens _tpComment (\ s a -> s{_tpComment = a});
+
+-- | Undocumented member.
+tpId :: Lens' TrafficPolicy Text
+tpId = lens _tpId (\ s a -> s{_tpId = a});
+
+-- | Undocumented member.
+tpVersion :: Lens' TrafficPolicy Natural
+tpVersion = lens _tpVersion (\ s a -> s{_tpVersion = a}) . _Nat;
+
+-- | Undocumented member.
+tpName :: Lens' TrafficPolicy Text
+tpName = lens _tpName (\ s a -> s{_tpName = a});
+
+-- | Undocumented member.
+tpType :: Lens' TrafficPolicy RecordType
+tpType = lens _tpType (\ s a -> s{_tpType = a});
+
+-- | Undocumented member.
+tpDocument :: Lens' TrafficPolicy Text
+tpDocument = lens _tpDocument (\ s a -> s{_tpDocument = a});
+
+instance FromXML TrafficPolicy where
+        parseXML x
+          = TrafficPolicy' <$>
+              (x .@? "Comment") <*> (x .@ "Id") <*>
+                (x .@ "Version")
+                <*> (x .@ "Name")
+                <*> (x .@ "Type")
+                <*> (x .@ "Document")
+
+-- | /See:/ 'trafficPolicyInstance' smart constructor.
+data TrafficPolicyInstance = TrafficPolicyInstance'
+    { _tpiId                   :: !Text
+    , _tpiHostedZoneId         :: !Text
+    , _tpiName                 :: !Text
+    , _tpiTTL                  :: !Nat
+    , _tpiState                :: !Text
+    , _tpiMessage              :: !Text
+    , _tpiTrafficPolicyId      :: !Text
+    , _tpiTrafficPolicyVersion :: !Nat
+    , _tpiTrafficPolicyType    :: !RecordType
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TrafficPolicyInstance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpiId'
+--
+-- * 'tpiHostedZoneId'
+--
+-- * 'tpiName'
+--
+-- * 'tpiTTL'
+--
+-- * 'tpiState'
+--
+-- * 'tpiMessage'
+--
+-- * 'tpiTrafficPolicyId'
+--
+-- * 'tpiTrafficPolicyVersion'
+--
+-- * 'tpiTrafficPolicyType'
+trafficPolicyInstance
+    :: Text -- ^ 'tpiId'
+    -> Text -- ^ 'tpiHostedZoneId'
+    -> Text -- ^ 'tpiName'
+    -> Natural -- ^ 'tpiTTL'
+    -> Text -- ^ 'tpiState'
+    -> Text -- ^ 'tpiMessage'
+    -> Text -- ^ 'tpiTrafficPolicyId'
+    -> Natural -- ^ 'tpiTrafficPolicyVersion'
+    -> RecordType -- ^ 'tpiTrafficPolicyType'
+    -> TrafficPolicyInstance
+trafficPolicyInstance pId_ pHostedZoneId_ pName_ pTTL_ pState_ pMessage_ pTrafficPolicyId_ pTrafficPolicyVersion_ pTrafficPolicyType_ =
+    TrafficPolicyInstance'
+    { _tpiId = pId_
+    , _tpiHostedZoneId = pHostedZoneId_
+    , _tpiName = pName_
+    , _tpiTTL = _Nat # pTTL_
+    , _tpiState = pState_
+    , _tpiMessage = pMessage_
+    , _tpiTrafficPolicyId = pTrafficPolicyId_
+    , _tpiTrafficPolicyVersion = _Nat # pTrafficPolicyVersion_
+    , _tpiTrafficPolicyType = pTrafficPolicyType_
+    }
+
+-- | Undocumented member.
+tpiId :: Lens' TrafficPolicyInstance Text
+tpiId = lens _tpiId (\ s a -> s{_tpiId = a});
+
+-- | Undocumented member.
+tpiHostedZoneId :: Lens' TrafficPolicyInstance Text
+tpiHostedZoneId = lens _tpiHostedZoneId (\ s a -> s{_tpiHostedZoneId = a});
+
+-- | Undocumented member.
+tpiName :: Lens' TrafficPolicyInstance Text
+tpiName = lens _tpiName (\ s a -> s{_tpiName = a});
+
+-- | Undocumented member.
+tpiTTL :: Lens' TrafficPolicyInstance Natural
+tpiTTL = lens _tpiTTL (\ s a -> s{_tpiTTL = a}) . _Nat;
+
+-- | Undocumented member.
+tpiState :: Lens' TrafficPolicyInstance Text
+tpiState = lens _tpiState (\ s a -> s{_tpiState = a});
+
+-- | Undocumented member.
+tpiMessage :: Lens' TrafficPolicyInstance Text
+tpiMessage = lens _tpiMessage (\ s a -> s{_tpiMessage = a});
+
+-- | Undocumented member.
+tpiTrafficPolicyId :: Lens' TrafficPolicyInstance Text
+tpiTrafficPolicyId = lens _tpiTrafficPolicyId (\ s a -> s{_tpiTrafficPolicyId = a});
+
+-- | Undocumented member.
+tpiTrafficPolicyVersion :: Lens' TrafficPolicyInstance Natural
+tpiTrafficPolicyVersion = lens _tpiTrafficPolicyVersion (\ s a -> s{_tpiTrafficPolicyVersion = a}) . _Nat;
+
+-- | Undocumented member.
+tpiTrafficPolicyType :: Lens' TrafficPolicyInstance RecordType
+tpiTrafficPolicyType = lens _tpiTrafficPolicyType (\ s a -> s{_tpiTrafficPolicyType = a});
+
+instance FromXML TrafficPolicyInstance where
+        parseXML x
+          = TrafficPolicyInstance' <$>
+              (x .@ "Id") <*> (x .@ "HostedZoneId") <*>
+                (x .@ "Name")
+                <*> (x .@ "TTL")
+                <*> (x .@ "State")
+                <*> (x .@ "Message")
+                <*> (x .@ "TrafficPolicyId")
+                <*> (x .@ "TrafficPolicyVersion")
+                <*> (x .@ "TrafficPolicyType")
+
+-- | /See:/ 'trafficPolicySummary' smart constructor.
+data TrafficPolicySummary = TrafficPolicySummary'
+    { _tpsId                 :: !Text
+    , _tpsName               :: !Text
+    , _tpsType               :: !RecordType
+    , _tpsLatestVersion      :: !Nat
+    , _tpsTrafficPolicyCount :: !Nat
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TrafficPolicySummary' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpsId'
+--
+-- * 'tpsName'
+--
+-- * 'tpsType'
+--
+-- * 'tpsLatestVersion'
+--
+-- * 'tpsTrafficPolicyCount'
+trafficPolicySummary
+    :: Text -- ^ 'tpsId'
+    -> Text -- ^ 'tpsName'
+    -> RecordType -- ^ 'tpsType'
+    -> Natural -- ^ 'tpsLatestVersion'
+    -> Natural -- ^ 'tpsTrafficPolicyCount'
+    -> TrafficPolicySummary
+trafficPolicySummary pId_ pName_ pType_ pLatestVersion_ pTrafficPolicyCount_ =
+    TrafficPolicySummary'
+    { _tpsId = pId_
+    , _tpsName = pName_
+    , _tpsType = pType_
+    , _tpsLatestVersion = _Nat # pLatestVersion_
+    , _tpsTrafficPolicyCount = _Nat # pTrafficPolicyCount_
+    }
+
+-- | Undocumented member.
+tpsId :: Lens' TrafficPolicySummary Text
+tpsId = lens _tpsId (\ s a -> s{_tpsId = a});
+
+-- | Undocumented member.
+tpsName :: Lens' TrafficPolicySummary Text
+tpsName = lens _tpsName (\ s a -> s{_tpsName = a});
+
+-- | Undocumented member.
+tpsType :: Lens' TrafficPolicySummary RecordType
+tpsType = lens _tpsType (\ s a -> s{_tpsType = a});
+
+-- | Undocumented member.
+tpsLatestVersion :: Lens' TrafficPolicySummary Natural
+tpsLatestVersion = lens _tpsLatestVersion (\ s a -> s{_tpsLatestVersion = a}) . _Nat;
+
+-- | Undocumented member.
+tpsTrafficPolicyCount :: Lens' TrafficPolicySummary Natural
+tpsTrafficPolicyCount = lens _tpsTrafficPolicyCount (\ s a -> s{_tpsTrafficPolicyCount = a}) . _Nat;
+
+instance FromXML TrafficPolicySummary where
+        parseXML x
+          = TrafficPolicySummary' <$>
+              (x .@ "Id") <*> (x .@ "Name") <*> (x .@ "Type") <*>
+                (x .@ "LatestVersion")
+                <*> (x .@ "TrafficPolicyCount")
 
 -- | /See:/ 'vpc' smart constructor.
 data VPC = VPC'
diff --git a/gen/Network/AWS/Route53/Types/Sum.hs b/gen/Network/AWS/Route53/Types/Sum.hs
--- a/gen/Network/AWS/Route53/Types/Sum.hs
+++ b/gen/Network/AWS/Route53/Types/Sum.hs
@@ -24,7 +24,7 @@
     = Create
     | Delete
     | Upsert
-    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
 
 instance FromText ChangeAction where
     parser = takeLowerText >>= \case
@@ -45,13 +45,16 @@
 instance ToQuery      ChangeAction
 instance ToHeader     ChangeAction
 
+instance FromXML ChangeAction where
+    parseXML = parseXMLText "ChangeAction"
+
 instance ToXML ChangeAction where
     toXML = toXMLText
 
 data ChangeStatus
     = Insync
     | Pending
-    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
 
 instance FromText ChangeStatus where
     parser = takeLowerText >>= \case
@@ -76,7 +79,7 @@
 data Failover
     = Primary
     | Secondary
-    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
 
 instance FromText Failover where
     parser = takeLowerText >>= \case
@@ -108,7 +111,7 @@
     | HTTPSStrMatch
     | HTTPStrMatch
     | TCP
-    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
 
 instance FromText HealthCheckType where
     parser = takeLowerText >>= \case
@@ -152,7 +155,7 @@
     | Spf
     | Srv
     | Txt
-    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
 
 instance FromText RecordType where
     parser = takeLowerText >>= \case
@@ -196,7 +199,7 @@
 data TagResourceType
     = Healthcheck
     | Hostedzone
-    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
 
 instance FromText TagResourceType where
     parser = takeLowerText >>= \case
@@ -232,7 +235,7 @@
     | UsEast1
     | UsWest1
     | UsWest2
-    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
 
 instance FromText VPCRegion where
     parser = takeLowerText >>= \case
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
@@ -53,6 +53,7 @@
     , uhcrsHealthCheck
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -121,8 +122,8 @@
     }
 
 -- | 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.
+-- fail for Amazon 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
@@ -139,17 +140,17 @@
 uhcIPAddress = lens _uhcIPAddress (\ s a -> s{_uhcIPAddress = a});
 
 -- | If the value of 'Type' is 'HTTP_STR_MATCH' or 'HTTP_STR_MATCH', the
--- string that you want Route 53 to search for in the response body from
--- the specified resource. If the string appears in the response body,
--- Route 53 considers the resource healthy.
+-- string that you want Amazon Route 53 to search for in the response body
+-- from the specified resource. If the string appears in the response body,
+-- Amazon 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 minimum number of child health checks that must be healthy for Route
--- 53 to consider the parent health check to be healthy. Valid values are
--- integers between 0 and 256, inclusive.
+-- | The minimum number of child health checks that must be healthy for
+-- Amazon Route 53 to consider the parent health check to be healthy. Valid
+-- values are integers between 0 and 256, inclusive.
 --
 -- Specify this value only if you want to change it.
 uhcHealthThreshold :: Lens' UpdateHealthCheck (Maybe Natural)
@@ -164,17 +165,17 @@
 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, Amazon 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;
 
 -- | A boolean value that indicates whether the status of health check should
 -- be inverted. For example, if a health check is healthy but 'Inverted' is
--- 'True', then Route 53 considers the health check to be unhealthy.
+-- 'True', then Amazon Route 53 considers the health check to be unhealthy.
 --
 -- Specify this value only if you want to change it.
 uhcInverted :: Lens' UpdateHealthCheck (Maybe Bool)
@@ -193,8 +194,8 @@
 uhcChildHealthChecks :: Lens' UpdateHealthCheck [Text]
 uhcChildHealthChecks = lens _uhcChildHealthChecks (\ s a -> s{_uhcChildHealthChecks = a}) . _Default . _Coerce;
 
--- | The port on which you want Route 53 to open a connection to perform
--- health checks.
+-- | The port on which you want Amazon 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)
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
@@ -43,6 +43,7 @@
     , uhzcrsHostedZone
     ) where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
diff --git a/gen/Network/AWS/Route53/UpdateTrafficPolicyComment.hs b/gen/Network/AWS/Route53/UpdateTrafficPolicyComment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/UpdateTrafficPolicyComment.hs
@@ -0,0 +1,163 @@
+{-# 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.UpdateTrafficPolicyComment
+-- 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)
+--
+-- Updates the comment for a specified traffic policy version.
+--
+-- To update the comment, send a 'POST' request to the
+-- '\/2013-04-01\/trafficpolicy\/' resource.
+--
+-- The request body must include an XML document with an
+-- 'UpdateTrafficPolicyCommentRequest' element.
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_UpdateTrafficPolicyComment.html AWS API Reference> for UpdateTrafficPolicyComment.
+module Network.AWS.Route53.UpdateTrafficPolicyComment
+    (
+    -- * Creating a Request
+      updateTrafficPolicyComment
+    , UpdateTrafficPolicyComment
+    -- * Request Lenses
+    , utpcId
+    , utpcVersion
+    , utpcComment
+
+    -- * Destructuring the Response
+    , updateTrafficPolicyCommentResponse
+    , UpdateTrafficPolicyCommentResponse
+    -- * Response Lenses
+    , utpcrsResponseStatus
+    , utpcrsTrafficPolicy
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
+
+-- | A complex type that contains information about the traffic policy for
+-- which you want to update the comment.
+--
+-- /See:/ 'updateTrafficPolicyComment' smart constructor.
+data UpdateTrafficPolicyComment = UpdateTrafficPolicyComment'
+    { _utpcId      :: !Text
+    , _utpcVersion :: !Nat
+    , _utpcComment :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateTrafficPolicyComment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'utpcId'
+--
+-- * 'utpcVersion'
+--
+-- * 'utpcComment'
+updateTrafficPolicyComment
+    :: Text -- ^ 'utpcId'
+    -> Natural -- ^ 'utpcVersion'
+    -> Text -- ^ 'utpcComment'
+    -> UpdateTrafficPolicyComment
+updateTrafficPolicyComment pId_ pVersion_ pComment_ =
+    UpdateTrafficPolicyComment'
+    { _utpcId = pId_
+    , _utpcVersion = _Nat # pVersion_
+    , _utpcComment = pComment_
+    }
+
+-- | The value of 'Id' for the traffic policy for which you want to update
+-- the comment.
+utpcId :: Lens' UpdateTrafficPolicyComment Text
+utpcId = lens _utpcId (\ s a -> s{_utpcId = a});
+
+-- | The value of 'Version' for the traffic policy for which you want to
+-- update the comment.
+utpcVersion :: Lens' UpdateTrafficPolicyComment Natural
+utpcVersion = lens _utpcVersion (\ s a -> s{_utpcVersion = a}) . _Nat;
+
+-- | The new comment for the specified traffic policy and version.
+utpcComment :: Lens' UpdateTrafficPolicyComment Text
+utpcComment = lens _utpcComment (\ s a -> s{_utpcComment = a});
+
+instance AWSRequest UpdateTrafficPolicyComment where
+        type Rs UpdateTrafficPolicyComment =
+             UpdateTrafficPolicyCommentResponse
+        request = postXML route53
+        response
+          = receiveXML
+              (\ s h x ->
+                 UpdateTrafficPolicyCommentResponse' <$>
+                   (pure (fromEnum s)) <*> (x .@ "TrafficPolicy"))
+
+instance ToElement UpdateTrafficPolicyComment where
+        toElement
+          = mkElement
+              "{https://route53.amazonaws.com/doc/2013-04-01/}UpdateTrafficPolicyCommentRequest"
+
+instance ToHeaders UpdateTrafficPolicyComment where
+        toHeaders = const mempty
+
+instance ToPath UpdateTrafficPolicyComment where
+        toPath UpdateTrafficPolicyComment'{..}
+          = mconcat
+              ["/2013-04-01/trafficpolicy/", toBS _utpcId, "/",
+               toBS _utpcVersion]
+
+instance ToQuery UpdateTrafficPolicyComment where
+        toQuery = const mempty
+
+instance ToXML UpdateTrafficPolicyComment where
+        toXML UpdateTrafficPolicyComment'{..}
+          = mconcat ["Comment" @= _utpcComment]
+
+-- | A complex type that contains the response information for the traffic
+-- policy.
+--
+-- /See:/ 'updateTrafficPolicyCommentResponse' smart constructor.
+data UpdateTrafficPolicyCommentResponse = UpdateTrafficPolicyCommentResponse'
+    { _utpcrsResponseStatus :: !Int
+    , _utpcrsTrafficPolicy  :: !TrafficPolicy
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateTrafficPolicyCommentResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'utpcrsResponseStatus'
+--
+-- * 'utpcrsTrafficPolicy'
+updateTrafficPolicyCommentResponse
+    :: Int -- ^ 'utpcrsResponseStatus'
+    -> TrafficPolicy -- ^ 'utpcrsTrafficPolicy'
+    -> UpdateTrafficPolicyCommentResponse
+updateTrafficPolicyCommentResponse pResponseStatus_ pTrafficPolicy_ =
+    UpdateTrafficPolicyCommentResponse'
+    { _utpcrsResponseStatus = pResponseStatus_
+    , _utpcrsTrafficPolicy = pTrafficPolicy_
+    }
+
+-- | The response status code.
+utpcrsResponseStatus :: Lens' UpdateTrafficPolicyCommentResponse Int
+utpcrsResponseStatus = lens _utpcrsResponseStatus (\ s a -> s{_utpcrsResponseStatus = a});
+
+-- | A complex type that contains settings for the specified traffic policy.
+utpcrsTrafficPolicy :: Lens' UpdateTrafficPolicyCommentResponse TrafficPolicy
+utpcrsTrafficPolicy = lens _utpcrsTrafficPolicy (\ s a -> s{_utpcrsTrafficPolicy = a});
diff --git a/gen/Network/AWS/Route53/UpdateTrafficPolicyInstance.hs b/gen/Network/AWS/Route53/UpdateTrafficPolicyInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Route53/UpdateTrafficPolicyInstance.hs
@@ -0,0 +1,200 @@
+{-# 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.UpdateTrafficPolicyInstance
+-- 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)
+--
+-- Updates the resource record sets in a specified hosted zone that were
+-- created based on the settings in a specified traffic policy version.
+--
+-- The DNS type of the resource record sets that you\'re updating must
+-- match the DNS type in the JSON document that is associated with the
+-- traffic policy version that you\'re using to update the traffic policy
+-- instance.
+--
+-- When you update a traffic policy instance, Amazon Route 53 continues to
+-- respond to DNS queries for the root resource record set name (such as
+-- example.com) while it replaces one group of resource record sets with
+-- another. Amazon Route 53 performs the following operations:
+--
+-- 1.  Amazon Route 53 creates a new group of resource record sets based on
+--     the specified traffic policy. This is true regardless of how
+--     substantial the differences are between the existing resource record
+--     sets and the new resource record sets.
+-- 2.  When all of the new resource record sets have been created, Amazon
+--     Route 53 starts to respond to DNS queries for the root resource
+--     record set name (such as example.com) by using the new resource
+--     record sets.
+-- 3.  Amazon Route 53 deletes the old group of resource record sets that
+--     are associated with the root resource record set name.
+--
+-- To update a traffic policy instance, send a 'POST' request to the
+-- '\/2013-04-01\/trafficpolicyinstance\/traffic policy ID' resource. The
+-- request body must include an XML document with an
+-- 'UpdateTrafficPolicyInstanceRequest' element.
+--
+-- /See:/ <http://docs.aws.amazon.com/Route53/latest/APIReference/API_UpdateTrafficPolicyInstance.html AWS API Reference> for UpdateTrafficPolicyInstance.
+module Network.AWS.Route53.UpdateTrafficPolicyInstance
+    (
+    -- * Creating a Request
+      updateTrafficPolicyInstance
+    , UpdateTrafficPolicyInstance
+    -- * Request Lenses
+    , utpiId
+    , utpiTTL
+    , utpiTrafficPolicyId
+    , utpiTrafficPolicyVersion
+
+    -- * Destructuring the Response
+    , updateTrafficPolicyInstanceResponse
+    , UpdateTrafficPolicyInstanceResponse
+    -- * Response Lenses
+    , utpirsResponseStatus
+    , utpirsTrafficPolicyInstance
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.Route53.Types
+import           Network.AWS.Route53.Types.Product
+
+-- | A complex type that contains information about the resource record sets
+-- that you want to update based on a specified traffic policy instance.
+--
+-- /See:/ 'updateTrafficPolicyInstance' smart constructor.
+data UpdateTrafficPolicyInstance = UpdateTrafficPolicyInstance'
+    { _utpiId                   :: !Text
+    , _utpiTTL                  :: !Nat
+    , _utpiTrafficPolicyId      :: !Text
+    , _utpiTrafficPolicyVersion :: !Nat
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateTrafficPolicyInstance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'utpiId'
+--
+-- * 'utpiTTL'
+--
+-- * 'utpiTrafficPolicyId'
+--
+-- * 'utpiTrafficPolicyVersion'
+updateTrafficPolicyInstance
+    :: Text -- ^ 'utpiId'
+    -> Natural -- ^ 'utpiTTL'
+    -> Text -- ^ 'utpiTrafficPolicyId'
+    -> Natural -- ^ 'utpiTrafficPolicyVersion'
+    -> UpdateTrafficPolicyInstance
+updateTrafficPolicyInstance pId_ pTTL_ pTrafficPolicyId_ pTrafficPolicyVersion_ =
+    UpdateTrafficPolicyInstance'
+    { _utpiId = pId_
+    , _utpiTTL = _Nat # pTTL_
+    , _utpiTrafficPolicyId = pTrafficPolicyId_
+    , _utpiTrafficPolicyVersion = _Nat # pTrafficPolicyVersion_
+    }
+
+-- | The ID of the traffic policy instance that you want to update.
+utpiId :: Lens' UpdateTrafficPolicyInstance Text
+utpiId = lens _utpiId (\ s a -> s{_utpiId = a});
+
+-- | The TTL that you want Amazon Route 53 to assign to all of the updated
+-- resource record sets.
+utpiTTL :: Lens' UpdateTrafficPolicyInstance Natural
+utpiTTL = lens _utpiTTL (\ s a -> s{_utpiTTL = a}) . _Nat;
+
+-- | The ID of the traffic policy that you want Amazon Route 53 to use to
+-- update resource record sets for the specified traffic policy instance.
+utpiTrafficPolicyId :: Lens' UpdateTrafficPolicyInstance Text
+utpiTrafficPolicyId = lens _utpiTrafficPolicyId (\ s a -> s{_utpiTrafficPolicyId = a});
+
+-- | The version of the traffic policy that you want Amazon Route 53 to use
+-- to update resource record sets for the specified traffic policy
+-- instance.
+utpiTrafficPolicyVersion :: Lens' UpdateTrafficPolicyInstance Natural
+utpiTrafficPolicyVersion = lens _utpiTrafficPolicyVersion (\ s a -> s{_utpiTrafficPolicyVersion = a}) . _Nat;
+
+instance AWSRequest UpdateTrafficPolicyInstance where
+        type Rs UpdateTrafficPolicyInstance =
+             UpdateTrafficPolicyInstanceResponse
+        request = postXML route53
+        response
+          = receiveXML
+              (\ s h x ->
+                 UpdateTrafficPolicyInstanceResponse' <$>
+                   (pure (fromEnum s)) <*>
+                     (x .@ "TrafficPolicyInstance"))
+
+instance ToElement UpdateTrafficPolicyInstance where
+        toElement
+          = mkElement
+              "{https://route53.amazonaws.com/doc/2013-04-01/}UpdateTrafficPolicyInstanceRequest"
+
+instance ToHeaders UpdateTrafficPolicyInstance where
+        toHeaders = const mempty
+
+instance ToPath UpdateTrafficPolicyInstance where
+        toPath UpdateTrafficPolicyInstance'{..}
+          = mconcat
+              ["/2013-04-01/trafficpolicyinstance/", toBS _utpiId]
+
+instance ToQuery UpdateTrafficPolicyInstance where
+        toQuery = const mempty
+
+instance ToXML UpdateTrafficPolicyInstance where
+        toXML UpdateTrafficPolicyInstance'{..}
+          = mconcat
+              ["TTL" @= _utpiTTL,
+               "TrafficPolicyId" @= _utpiTrafficPolicyId,
+               "TrafficPolicyVersion" @= _utpiTrafficPolicyVersion]
+
+-- | A complex type that contains information about the resource record sets
+-- that Amazon Route 53 created based on a specified traffic policy.
+--
+-- /See:/ 'updateTrafficPolicyInstanceResponse' smart constructor.
+data UpdateTrafficPolicyInstanceResponse = UpdateTrafficPolicyInstanceResponse'
+    { _utpirsResponseStatus        :: !Int
+    , _utpirsTrafficPolicyInstance :: !TrafficPolicyInstance
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateTrafficPolicyInstanceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'utpirsResponseStatus'
+--
+-- * 'utpirsTrafficPolicyInstance'
+updateTrafficPolicyInstanceResponse
+    :: Int -- ^ 'utpirsResponseStatus'
+    -> TrafficPolicyInstance -- ^ 'utpirsTrafficPolicyInstance'
+    -> UpdateTrafficPolicyInstanceResponse
+updateTrafficPolicyInstanceResponse pResponseStatus_ pTrafficPolicyInstance_ =
+    UpdateTrafficPolicyInstanceResponse'
+    { _utpirsResponseStatus = pResponseStatus_
+    , _utpirsTrafficPolicyInstance = pTrafficPolicyInstance_
+    }
+
+-- | The response status code.
+utpirsResponseStatus :: Lens' UpdateTrafficPolicyInstanceResponse Int
+utpirsResponseStatus = lens _utpirsResponseStatus (\ s a -> s{_utpirsResponseStatus = a});
+
+-- | A complex type that contains settings for the updated traffic policy
+-- instance.
+utpirsTrafficPolicyInstance :: Lens' UpdateTrafficPolicyInstanceResponse TrafficPolicyInstance
+utpirsTrafficPolicyInstance = lens _utpirsTrafficPolicyInstance (\ s a -> s{_utpirsTrafficPolicyInstance = a});
diff --git a/gen/Network/AWS/Route53/Waiters.hs b/gen/Network/AWS/Route53/Waiters.hs
--- a/gen/Network/AWS/Route53/Waiters.hs
+++ b/gen/Network/AWS/Route53/Waiters.hs
@@ -15,6 +15,7 @@
 --
 module Network.AWS.Route53.Waiters where
 
+import           Network.AWS.Lens
 import           Network.AWS.Prelude
 import           Network.AWS.Route53.GetChange
 import           Network.AWS.Route53.Types
diff --git a/test/Test/AWS/Gen/Route53.hs b/test/Test/AWS/Gen/Route53.hs
--- a/test/Test/AWS/Gen/Route53.hs
+++ b/test/Test/AWS/Gen/Route53.hs
@@ -31,9 +31,15 @@
 --         [ testAssociateVPCWithHostedZone $
 --             associateVPCWithHostedZone
 --
+--         , testDeleteTrafficPolicy $
+--             deleteTrafficPolicy
+--
 --         , testGetCheckerIPRanges $
 --             getCheckerIPRanges
 --
+--         , testGetTrafficPolicyInstance $
+--             getTrafficPolicyInstance
+--
 --         , testGetHealthCheckLastFailureReason $
 --             getHealthCheckLastFailureReason
 --
@@ -49,6 +55,12 @@
 --         , testListTagsForResource $
 --             listTagsForResource
 --
+--         , testListTrafficPolicyInstances $
+--             listTrafficPolicyInstances
+--
+--         , testCreateTrafficPolicyInstance $
+--             createTrafficPolicyInstance
+--
 --         , testGetChange $
 --             getChange
 --
@@ -64,6 +76,9 @@
 --         , testCreateHostedZone $
 --             createHostedZone
 --
+--         , testListTrafficPolicyInstancesByPolicy $
+--             listTrafficPolicyInstancesByPolicy
+--
 --         , testDisassociateVPCFromHostedZone $
 --             disassociateVPCFromHostedZone
 --
@@ -76,6 +91,9 @@
 --         , testListHostedZones $
 --             listHostedZones
 --
+--         , testGetTrafficPolicyInstanceCount $
+--             getTrafficPolicyInstanceCount
+--
 --         , testListGeoLocations $
 --             listGeoLocations
 --
@@ -91,24 +109,51 @@
 --         , testCreateReusableDelegationSet $
 --             createReusableDelegationSet
 --
+--         , testListChangeBatchesByRRSet $
+--             listChangeBatchesByRRSet
+--
 --         , testGetHealthCheckCount $
 --             getHealthCheckCount
 --
+--         , testUpdateTrafficPolicyComment $
+--             updateTrafficPolicyComment
+--
 --         , testGetHostedZoneCount $
 --             getHostedZoneCount
 --
+--         , testListChangeBatchesByHostedZone $
+--             listChangeBatchesByHostedZone
+--
+--         , testGetChangeDetails $
+--             getChangeDetails
+--
 --         , testGetReusableDelegationSet $
 --             getReusableDelegationSet
 --
+--         , testDeleteTrafficPolicyInstance $
+--             deleteTrafficPolicyInstance
+--
+--         , testUpdateTrafficPolicyInstance $
+--             updateTrafficPolicyInstance
+--
 --         , testUpdateHostedZoneComment $
 --             updateHostedZoneComment
 --
 --         , testGetHealthCheckStatus $
 --             getHealthCheckStatus
 --
+--         , testCreateTrafficPolicyVersion $
+--             createTrafficPolicyVersion
+--
 --         , testListHealthChecks $
 --             listHealthChecks
 --
+--         , testGetTrafficPolicy $
+--             getTrafficPolicy
+--
+--         , testListTrafficPolicyVersions $
+--             listTrafficPolicyVersions
+--
 --         , testDeleteHostedZone $
 --             deleteHostedZone
 --
@@ -118,15 +163,30 @@
 --         , testListTagsForResources $
 --             listTagsForResources
 --
+--         , testCreateTrafficPolicy $
+--             createTrafficPolicy
+--
+--         , testListTrafficPolicyInstancesByHostedZone $
+--             listTrafficPolicyInstancesByHostedZone
+--
+--         , testListTrafficPolicies $
+--             listTrafficPolicies
+--
 --           ]
 
 --     , testGroup "response"
 --         [ testAssociateVPCWithHostedZoneResponse $
 --             associateVPCWithHostedZoneResponse
 --
+--         , testDeleteTrafficPolicyResponse $
+--             deleteTrafficPolicyResponse
+--
 --         , testGetCheckerIPRangesResponse $
 --             getCheckerIPRangesResponse
 --
+--         , testGetTrafficPolicyInstanceResponse $
+--             getTrafficPolicyInstanceResponse
+--
 --         , testGetHealthCheckLastFailureReasonResponse $
 --             getHealthCheckLastFailureReasonResponse
 --
@@ -142,6 +202,12 @@
 --         , testListTagsForResourceResponse $
 --             listTagsForResourceResponse
 --
+--         , testListTrafficPolicyInstancesResponse $
+--             listTrafficPolicyInstancesResponse
+--
+--         , testCreateTrafficPolicyInstanceResponse $
+--             createTrafficPolicyInstanceResponse
+--
 --         , testGetChangeResponse $
 --             getChangeResponse
 --
@@ -157,6 +223,9 @@
 --         , testCreateHostedZoneResponse $
 --             createHostedZoneResponse
 --
+--         , testListTrafficPolicyInstancesByPolicyResponse $
+--             listTrafficPolicyInstancesByPolicyResponse
+--
 --         , testDisassociateVPCFromHostedZoneResponse $
 --             disassociateVPCFromHostedZoneResponse
 --
@@ -169,6 +238,9 @@
 --         , testListHostedZonesResponse $
 --             listHostedZonesResponse
 --
+--         , testGetTrafficPolicyInstanceCountResponse $
+--             getTrafficPolicyInstanceCountResponse
+--
 --         , testListGeoLocationsResponse $
 --             listGeoLocationsResponse
 --
@@ -184,24 +256,51 @@
 --         , testCreateReusableDelegationSetResponse $
 --             createReusableDelegationSetResponse
 --
+--         , testListChangeBatchesByRRSetResponse $
+--             listChangeBatchesByRRSetResponse
+--
 --         , testGetHealthCheckCountResponse $
 --             getHealthCheckCountResponse
 --
+--         , testUpdateTrafficPolicyCommentResponse $
+--             updateTrafficPolicyCommentResponse
+--
 --         , testGetHostedZoneCountResponse $
 --             getHostedZoneCountResponse
 --
+--         , testListChangeBatchesByHostedZoneResponse $
+--             listChangeBatchesByHostedZoneResponse
+--
+--         , testGetChangeDetailsResponse $
+--             getChangeDetailsResponse
+--
 --         , testGetReusableDelegationSetResponse $
 --             getReusableDelegationSetResponse
 --
+--         , testDeleteTrafficPolicyInstanceResponse $
+--             deleteTrafficPolicyInstanceResponse
+--
+--         , testUpdateTrafficPolicyInstanceResponse $
+--             updateTrafficPolicyInstanceResponse
+--
 --         , testUpdateHostedZoneCommentResponse $
 --             updateHostedZoneCommentResponse
 --
 --         , testGetHealthCheckStatusResponse $
 --             getHealthCheckStatusResponse
 --
+--         , testCreateTrafficPolicyVersionResponse $
+--             createTrafficPolicyVersionResponse
+--
 --         , testListHealthChecksResponse $
 --             listHealthChecksResponse
 --
+--         , testGetTrafficPolicyResponse $
+--             getTrafficPolicyResponse
+--
+--         , testListTrafficPolicyVersionsResponse $
+--             listTrafficPolicyVersionsResponse
+--
 --         , testDeleteHostedZoneResponse $
 --             deleteHostedZoneResponse
 --
@@ -211,6 +310,15 @@
 --         , testListTagsForResourcesResponse $
 --             listTagsForResourcesResponse
 --
+--         , testCreateTrafficPolicyResponse $
+--             createTrafficPolicyResponse
+--
+--         , testListTrafficPolicyInstancesByHostedZoneResponse $
+--             listTrafficPolicyInstancesByHostedZoneResponse
+--
+--         , testListTrafficPoliciesResponse $
+--             listTrafficPoliciesResponse
+--
 --           ]
 --     ]
 
@@ -221,11 +329,21 @@
     "AssociateVPCWithHostedZone"
     "fixture/AssociateVPCWithHostedZone.yaml"
 
+testDeleteTrafficPolicy :: DeleteTrafficPolicy -> TestTree
+testDeleteTrafficPolicy = req
+    "DeleteTrafficPolicy"
+    "fixture/DeleteTrafficPolicy.yaml"
+
 testGetCheckerIPRanges :: GetCheckerIPRanges -> TestTree
 testGetCheckerIPRanges = req
     "GetCheckerIPRanges"
     "fixture/GetCheckerIPRanges.yaml"
 
+testGetTrafficPolicyInstance :: GetTrafficPolicyInstance -> TestTree
+testGetTrafficPolicyInstance = req
+    "GetTrafficPolicyInstance"
+    "fixture/GetTrafficPolicyInstance.yaml"
+
 testGetHealthCheckLastFailureReason :: GetHealthCheckLastFailureReason -> TestTree
 testGetHealthCheckLastFailureReason = req
     "GetHealthCheckLastFailureReason"
@@ -251,6 +369,16 @@
     "ListTagsForResource"
     "fixture/ListTagsForResource.yaml"
 
+testListTrafficPolicyInstances :: ListTrafficPolicyInstances -> TestTree
+testListTrafficPolicyInstances = req
+    "ListTrafficPolicyInstances"
+    "fixture/ListTrafficPolicyInstances.yaml"
+
+testCreateTrafficPolicyInstance :: CreateTrafficPolicyInstance -> TestTree
+testCreateTrafficPolicyInstance = req
+    "CreateTrafficPolicyInstance"
+    "fixture/CreateTrafficPolicyInstance.yaml"
+
 testGetChange :: GetChange -> TestTree
 testGetChange = req
     "GetChange"
@@ -276,6 +404,11 @@
     "CreateHostedZone"
     "fixture/CreateHostedZone.yaml"
 
+testListTrafficPolicyInstancesByPolicy :: ListTrafficPolicyInstancesByPolicy -> TestTree
+testListTrafficPolicyInstancesByPolicy = req
+    "ListTrafficPolicyInstancesByPolicy"
+    "fixture/ListTrafficPolicyInstancesByPolicy.yaml"
+
 testDisassociateVPCFromHostedZone :: DisassociateVPCFromHostedZone -> TestTree
 testDisassociateVPCFromHostedZone = req
     "DisassociateVPCFromHostedZone"
@@ -296,6 +429,11 @@
     "ListHostedZones"
     "fixture/ListHostedZones.yaml"
 
+testGetTrafficPolicyInstanceCount :: GetTrafficPolicyInstanceCount -> TestTree
+testGetTrafficPolicyInstanceCount = req
+    "GetTrafficPolicyInstanceCount"
+    "fixture/GetTrafficPolicyInstanceCount.yaml"
+
 testListGeoLocations :: ListGeoLocations -> TestTree
 testListGeoLocations = req
     "ListGeoLocations"
@@ -321,21 +459,51 @@
     "CreateReusableDelegationSet"
     "fixture/CreateReusableDelegationSet.yaml"
 
+testListChangeBatchesByRRSet :: ListChangeBatchesByRRSet -> TestTree
+testListChangeBatchesByRRSet = req
+    "ListChangeBatchesByRRSet"
+    "fixture/ListChangeBatchesByRRSet.yaml"
+
 testGetHealthCheckCount :: GetHealthCheckCount -> TestTree
 testGetHealthCheckCount = req
     "GetHealthCheckCount"
     "fixture/GetHealthCheckCount.yaml"
 
+testUpdateTrafficPolicyComment :: UpdateTrafficPolicyComment -> TestTree
+testUpdateTrafficPolicyComment = req
+    "UpdateTrafficPolicyComment"
+    "fixture/UpdateTrafficPolicyComment.yaml"
+
 testGetHostedZoneCount :: GetHostedZoneCount -> TestTree
 testGetHostedZoneCount = req
     "GetHostedZoneCount"
     "fixture/GetHostedZoneCount.yaml"
 
+testListChangeBatchesByHostedZone :: ListChangeBatchesByHostedZone -> TestTree
+testListChangeBatchesByHostedZone = req
+    "ListChangeBatchesByHostedZone"
+    "fixture/ListChangeBatchesByHostedZone.yaml"
+
+testGetChangeDetails :: GetChangeDetails -> TestTree
+testGetChangeDetails = req
+    "GetChangeDetails"
+    "fixture/GetChangeDetails.yaml"
+
 testGetReusableDelegationSet :: GetReusableDelegationSet -> TestTree
 testGetReusableDelegationSet = req
     "GetReusableDelegationSet"
     "fixture/GetReusableDelegationSet.yaml"
 
+testDeleteTrafficPolicyInstance :: DeleteTrafficPolicyInstance -> TestTree
+testDeleteTrafficPolicyInstance = req
+    "DeleteTrafficPolicyInstance"
+    "fixture/DeleteTrafficPolicyInstance.yaml"
+
+testUpdateTrafficPolicyInstance :: UpdateTrafficPolicyInstance -> TestTree
+testUpdateTrafficPolicyInstance = req
+    "UpdateTrafficPolicyInstance"
+    "fixture/UpdateTrafficPolicyInstance.yaml"
+
 testUpdateHostedZoneComment :: UpdateHostedZoneComment -> TestTree
 testUpdateHostedZoneComment = req
     "UpdateHostedZoneComment"
@@ -346,11 +514,26 @@
     "GetHealthCheckStatus"
     "fixture/GetHealthCheckStatus.yaml"
 
+testCreateTrafficPolicyVersion :: CreateTrafficPolicyVersion -> TestTree
+testCreateTrafficPolicyVersion = req
+    "CreateTrafficPolicyVersion"
+    "fixture/CreateTrafficPolicyVersion.yaml"
+
 testListHealthChecks :: ListHealthChecks -> TestTree
 testListHealthChecks = req
     "ListHealthChecks"
     "fixture/ListHealthChecks.yaml"
 
+testGetTrafficPolicy :: GetTrafficPolicy -> TestTree
+testGetTrafficPolicy = req
+    "GetTrafficPolicy"
+    "fixture/GetTrafficPolicy.yaml"
+
+testListTrafficPolicyVersions :: ListTrafficPolicyVersions -> TestTree
+testListTrafficPolicyVersions = req
+    "ListTrafficPolicyVersions"
+    "fixture/ListTrafficPolicyVersions.yaml"
+
 testDeleteHostedZone :: DeleteHostedZone -> TestTree
 testDeleteHostedZone = req
     "DeleteHostedZone"
@@ -366,6 +549,21 @@
     "ListTagsForResources"
     "fixture/ListTagsForResources.yaml"
 
+testCreateTrafficPolicy :: CreateTrafficPolicy -> TestTree
+testCreateTrafficPolicy = req
+    "CreateTrafficPolicy"
+    "fixture/CreateTrafficPolicy.yaml"
+
+testListTrafficPolicyInstancesByHostedZone :: ListTrafficPolicyInstancesByHostedZone -> TestTree
+testListTrafficPolicyInstancesByHostedZone = req
+    "ListTrafficPolicyInstancesByHostedZone"
+    "fixture/ListTrafficPolicyInstancesByHostedZone.yaml"
+
+testListTrafficPolicies :: ListTrafficPolicies -> TestTree
+testListTrafficPolicies = req
+    "ListTrafficPolicies"
+    "fixture/ListTrafficPolicies.yaml"
+
 -- Responses
 
 testAssociateVPCWithHostedZoneResponse :: AssociateVPCWithHostedZoneResponse -> TestTree
@@ -375,6 +573,13 @@
     route53
     (Proxy :: Proxy AssociateVPCWithHostedZone)
 
+testDeleteTrafficPolicyResponse :: DeleteTrafficPolicyResponse -> TestTree
+testDeleteTrafficPolicyResponse = res
+    "DeleteTrafficPolicyResponse"
+    "fixture/DeleteTrafficPolicyResponse.proto"
+    route53
+    (Proxy :: Proxy DeleteTrafficPolicy)
+
 testGetCheckerIPRangesResponse :: GetCheckerIPRangesResponse -> TestTree
 testGetCheckerIPRangesResponse = res
     "GetCheckerIPRangesResponse"
@@ -382,6 +587,13 @@
     route53
     (Proxy :: Proxy GetCheckerIPRanges)
 
+testGetTrafficPolicyInstanceResponse :: GetTrafficPolicyInstanceResponse -> TestTree
+testGetTrafficPolicyInstanceResponse = res
+    "GetTrafficPolicyInstanceResponse"
+    "fixture/GetTrafficPolicyInstanceResponse.proto"
+    route53
+    (Proxy :: Proxy GetTrafficPolicyInstance)
+
 testGetHealthCheckLastFailureReasonResponse :: GetHealthCheckLastFailureReasonResponse -> TestTree
 testGetHealthCheckLastFailureReasonResponse = res
     "GetHealthCheckLastFailureReasonResponse"
@@ -417,6 +629,20 @@
     route53
     (Proxy :: Proxy ListTagsForResource)
 
+testListTrafficPolicyInstancesResponse :: ListTrafficPolicyInstancesResponse -> TestTree
+testListTrafficPolicyInstancesResponse = res
+    "ListTrafficPolicyInstancesResponse"
+    "fixture/ListTrafficPolicyInstancesResponse.proto"
+    route53
+    (Proxy :: Proxy ListTrafficPolicyInstances)
+
+testCreateTrafficPolicyInstanceResponse :: CreateTrafficPolicyInstanceResponse -> TestTree
+testCreateTrafficPolicyInstanceResponse = res
+    "CreateTrafficPolicyInstanceResponse"
+    "fixture/CreateTrafficPolicyInstanceResponse.proto"
+    route53
+    (Proxy :: Proxy CreateTrafficPolicyInstance)
+
 testGetChangeResponse :: GetChangeResponse -> TestTree
 testGetChangeResponse = res
     "GetChangeResponse"
@@ -452,6 +678,13 @@
     route53
     (Proxy :: Proxy CreateHostedZone)
 
+testListTrafficPolicyInstancesByPolicyResponse :: ListTrafficPolicyInstancesByPolicyResponse -> TestTree
+testListTrafficPolicyInstancesByPolicyResponse = res
+    "ListTrafficPolicyInstancesByPolicyResponse"
+    "fixture/ListTrafficPolicyInstancesByPolicyResponse.proto"
+    route53
+    (Proxy :: Proxy ListTrafficPolicyInstancesByPolicy)
+
 testDisassociateVPCFromHostedZoneResponse :: DisassociateVPCFromHostedZoneResponse -> TestTree
 testDisassociateVPCFromHostedZoneResponse = res
     "DisassociateVPCFromHostedZoneResponse"
@@ -480,6 +713,13 @@
     route53
     (Proxy :: Proxy ListHostedZones)
 
+testGetTrafficPolicyInstanceCountResponse :: GetTrafficPolicyInstanceCountResponse -> TestTree
+testGetTrafficPolicyInstanceCountResponse = res
+    "GetTrafficPolicyInstanceCountResponse"
+    "fixture/GetTrafficPolicyInstanceCountResponse.proto"
+    route53
+    (Proxy :: Proxy GetTrafficPolicyInstanceCount)
+
 testListGeoLocationsResponse :: ListGeoLocationsResponse -> TestTree
 testListGeoLocationsResponse = res
     "ListGeoLocationsResponse"
@@ -515,6 +755,13 @@
     route53
     (Proxy :: Proxy CreateReusableDelegationSet)
 
+testListChangeBatchesByRRSetResponse :: ListChangeBatchesByRRSetResponse -> TestTree
+testListChangeBatchesByRRSetResponse = res
+    "ListChangeBatchesByRRSetResponse"
+    "fixture/ListChangeBatchesByRRSetResponse.proto"
+    route53
+    (Proxy :: Proxy ListChangeBatchesByRRSet)
+
 testGetHealthCheckCountResponse :: GetHealthCheckCountResponse -> TestTree
 testGetHealthCheckCountResponse = res
     "GetHealthCheckCountResponse"
@@ -522,6 +769,13 @@
     route53
     (Proxy :: Proxy GetHealthCheckCount)
 
+testUpdateTrafficPolicyCommentResponse :: UpdateTrafficPolicyCommentResponse -> TestTree
+testUpdateTrafficPolicyCommentResponse = res
+    "UpdateTrafficPolicyCommentResponse"
+    "fixture/UpdateTrafficPolicyCommentResponse.proto"
+    route53
+    (Proxy :: Proxy UpdateTrafficPolicyComment)
+
 testGetHostedZoneCountResponse :: GetHostedZoneCountResponse -> TestTree
 testGetHostedZoneCountResponse = res
     "GetHostedZoneCountResponse"
@@ -529,6 +783,20 @@
     route53
     (Proxy :: Proxy GetHostedZoneCount)
 
+testListChangeBatchesByHostedZoneResponse :: ListChangeBatchesByHostedZoneResponse -> TestTree
+testListChangeBatchesByHostedZoneResponse = res
+    "ListChangeBatchesByHostedZoneResponse"
+    "fixture/ListChangeBatchesByHostedZoneResponse.proto"
+    route53
+    (Proxy :: Proxy ListChangeBatchesByHostedZone)
+
+testGetChangeDetailsResponse :: GetChangeDetailsResponse -> TestTree
+testGetChangeDetailsResponse = res
+    "GetChangeDetailsResponse"
+    "fixture/GetChangeDetailsResponse.proto"
+    route53
+    (Proxy :: Proxy GetChangeDetails)
+
 testGetReusableDelegationSetResponse :: GetReusableDelegationSetResponse -> TestTree
 testGetReusableDelegationSetResponse = res
     "GetReusableDelegationSetResponse"
@@ -536,6 +804,20 @@
     route53
     (Proxy :: Proxy GetReusableDelegationSet)
 
+testDeleteTrafficPolicyInstanceResponse :: DeleteTrafficPolicyInstanceResponse -> TestTree
+testDeleteTrafficPolicyInstanceResponse = res
+    "DeleteTrafficPolicyInstanceResponse"
+    "fixture/DeleteTrafficPolicyInstanceResponse.proto"
+    route53
+    (Proxy :: Proxy DeleteTrafficPolicyInstance)
+
+testUpdateTrafficPolicyInstanceResponse :: UpdateTrafficPolicyInstanceResponse -> TestTree
+testUpdateTrafficPolicyInstanceResponse = res
+    "UpdateTrafficPolicyInstanceResponse"
+    "fixture/UpdateTrafficPolicyInstanceResponse.proto"
+    route53
+    (Proxy :: Proxy UpdateTrafficPolicyInstance)
+
 testUpdateHostedZoneCommentResponse :: UpdateHostedZoneCommentResponse -> TestTree
 testUpdateHostedZoneCommentResponse = res
     "UpdateHostedZoneCommentResponse"
@@ -550,6 +832,13 @@
     route53
     (Proxy :: Proxy GetHealthCheckStatus)
 
+testCreateTrafficPolicyVersionResponse :: CreateTrafficPolicyVersionResponse -> TestTree
+testCreateTrafficPolicyVersionResponse = res
+    "CreateTrafficPolicyVersionResponse"
+    "fixture/CreateTrafficPolicyVersionResponse.proto"
+    route53
+    (Proxy :: Proxy CreateTrafficPolicyVersion)
+
 testListHealthChecksResponse :: ListHealthChecksResponse -> TestTree
 testListHealthChecksResponse = res
     "ListHealthChecksResponse"
@@ -557,6 +846,20 @@
     route53
     (Proxy :: Proxy ListHealthChecks)
 
+testGetTrafficPolicyResponse :: GetTrafficPolicyResponse -> TestTree
+testGetTrafficPolicyResponse = res
+    "GetTrafficPolicyResponse"
+    "fixture/GetTrafficPolicyResponse.proto"
+    route53
+    (Proxy :: Proxy GetTrafficPolicy)
+
+testListTrafficPolicyVersionsResponse :: ListTrafficPolicyVersionsResponse -> TestTree
+testListTrafficPolicyVersionsResponse = res
+    "ListTrafficPolicyVersionsResponse"
+    "fixture/ListTrafficPolicyVersionsResponse.proto"
+    route53
+    (Proxy :: Proxy ListTrafficPolicyVersions)
+
 testDeleteHostedZoneResponse :: DeleteHostedZoneResponse -> TestTree
 testDeleteHostedZoneResponse = res
     "DeleteHostedZoneResponse"
@@ -577,3 +880,24 @@
     "fixture/ListTagsForResourcesResponse.proto"
     route53
     (Proxy :: Proxy ListTagsForResources)
+
+testCreateTrafficPolicyResponse :: CreateTrafficPolicyResponse -> TestTree
+testCreateTrafficPolicyResponse = res
+    "CreateTrafficPolicyResponse"
+    "fixture/CreateTrafficPolicyResponse.proto"
+    route53
+    (Proxy :: Proxy CreateTrafficPolicy)
+
+testListTrafficPolicyInstancesByHostedZoneResponse :: ListTrafficPolicyInstancesByHostedZoneResponse -> TestTree
+testListTrafficPolicyInstancesByHostedZoneResponse = res
+    "ListTrafficPolicyInstancesByHostedZoneResponse"
+    "fixture/ListTrafficPolicyInstancesByHostedZoneResponse.proto"
+    route53
+    (Proxy :: Proxy ListTrafficPolicyInstancesByHostedZone)
+
+testListTrafficPoliciesResponse :: ListTrafficPoliciesResponse -> TestTree
+testListTrafficPoliciesResponse = res
+    "ListTrafficPoliciesResponse"
+    "fixture/ListTrafficPoliciesResponse.proto"
+    route53
+    (Proxy :: Proxy ListTrafficPolicies)
