diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.4.5`
+`1.5.0`
 
 
 ## Description
diff --git a/amazonka-elbv2.cabal b/amazonka-elbv2.cabal
--- a/amazonka-elbv2.cabal
+++ b/amazonka-elbv2.cabal
@@ -1,13 +1,13 @@
 name:                  amazonka-elbv2
-version:               1.4.5
+version:               1.5.0
 synopsis:              Amazon Elastic Load Balancing SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
-license:               OtherLicense
+license:               MPL-2.0
 license-file:          LICENSE
 author:                Brendan Hay
-maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2013-2016 Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+copyright:             Copyright (c) 2013-2017 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 cabal-version:         >= 1.10
@@ -29,17 +29,23 @@
     to get started.
 
 source-repository head
-    type:     git
-    location: git://github.com/brendanhay/amazonka.git
+    type:              git
+    location:          git://github.com/brendanhay/amazonka.git
+    subdir:            amazonka-elbv2
 
 library
     default-language:  Haskell2010
     hs-source-dirs:    src gen
 
-    ghc-options:       -Wall
+    ghc-options:
+        -Wall
+        -fwarn-incomplete-uni-patterns
+        -fwarn-incomplete-record-updates
+        -funbox-strict-fields
 
     exposed-modules:
           Network.AWS.ELBv2
+        , Network.AWS.ELBv2.AddListenerCertificates
         , Network.AWS.ELBv2.AddTags
         , Network.AWS.ELBv2.CreateListener
         , Network.AWS.ELBv2.CreateLoadBalancer
@@ -50,6 +56,8 @@
         , Network.AWS.ELBv2.DeleteRule
         , Network.AWS.ELBv2.DeleteTargetGroup
         , Network.AWS.ELBv2.DeregisterTargets
+        , Network.AWS.ELBv2.DescribeAccountLimits
+        , Network.AWS.ELBv2.DescribeListenerCertificates
         , Network.AWS.ELBv2.DescribeListeners
         , Network.AWS.ELBv2.DescribeLoadBalancerAttributes
         , Network.AWS.ELBv2.DescribeLoadBalancers
@@ -65,7 +73,9 @@
         , Network.AWS.ELBv2.ModifyTargetGroup
         , Network.AWS.ELBv2.ModifyTargetGroupAttributes
         , Network.AWS.ELBv2.RegisterTargets
+        , Network.AWS.ELBv2.RemoveListenerCertificates
         , Network.AWS.ELBv2.RemoveTags
+        , Network.AWS.ELBv2.SetIPAddressType
         , Network.AWS.ELBv2.SetRulePriorities
         , Network.AWS.ELBv2.SetSecurityGroups
         , Network.AWS.ELBv2.SetSubnets
@@ -77,7 +87,7 @@
         , Network.AWS.ELBv2.Types.Sum
 
     build-depends:
-          amazonka-core == 1.4.5.*
+          amazonka-core == 1.5.0.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-elbv2-test
@@ -97,9 +107,9 @@
         , Test.AWS.ELBv2.Internal
 
     build-depends:
-          amazonka-core == 1.4.5.*
-        , amazonka-test == 1.4.5.*
-        , amazonka-elbv2 == 1.4.5.*
+          amazonka-core == 1.5.0.*
+        , amazonka-test == 1.5.0.*
+        , amazonka-elbv2
         , base
         , bytestring
         , tasty
diff --git a/fixture/AddListenerCertificates.yaml b/fixture/AddListenerCertificates.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AddListenerCertificates.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/elasticloadbalancing/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  elasticloadbalancing.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AddListenerCertificatesResponse.proto b/fixture/AddListenerCertificatesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AddListenerCertificatesResponse.proto
diff --git a/fixture/DescribeAccountLimits.yaml b/fixture/DescribeAccountLimits.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAccountLimits.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/elasticloadbalancing/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  elasticloadbalancing.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeAccountLimitsResponse.proto b/fixture/DescribeAccountLimitsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAccountLimitsResponse.proto
diff --git a/fixture/DescribeListenerCertificates.yaml b/fixture/DescribeListenerCertificates.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeListenerCertificates.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/elasticloadbalancing/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  elasticloadbalancing.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeListenerCertificatesResponse.proto b/fixture/DescribeListenerCertificatesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeListenerCertificatesResponse.proto
diff --git a/fixture/RemoveListenerCertificates.yaml b/fixture/RemoveListenerCertificates.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveListenerCertificates.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/elasticloadbalancing/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  elasticloadbalancing.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RemoveListenerCertificatesResponse.proto b/fixture/RemoveListenerCertificatesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveListenerCertificatesResponse.proto
diff --git a/fixture/SetIPAddressType.yaml b/fixture/SetIPAddressType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SetIPAddressType.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/elasticloadbalancing/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  elasticloadbalancing.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/SetIPAddressTypeResponse.proto b/fixture/SetIPAddressTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SetIPAddressTypeResponse.proto
diff --git a/gen/Network/AWS/ELBv2.hs b/gen/Network/AWS/ELBv2.hs
--- a/gen/Network/AWS/ELBv2.hs
+++ b/gen/Network/AWS/ELBv2.hs
@@ -5,9 +5,9 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -15,13 +15,17 @@
 --
 -- A load balancer distributes incoming traffic across targets, such as your EC2 instances. This enables you to increase the availability of your application. The load balancer also monitors the health of its registered targets and ensures that it routes traffic only to healthy targets. You configure your load balancer to accept incoming traffic by specifying one or more listeners, which are configured with a protocol and port number for connections from clients to the load balancer. You configure a target group with a protocol and port number for connections from the load balancer to the targets, and with health check settings to be used when checking the health status of the targets.
 --
--- Elastic Load Balancing supports two types of load balancers: Classic Load Balancers and Application Load Balancers. A Classic Load Balancer makes routing and load balancing decisions either at the transport layer (TCP/SSL) or the application layer (HTTP/HTTPS), and supports either EC2-Classic or a VPC. An Application Load Balancer makes routing and load balancing decisions at the application layer (HTTP/HTTPS), supports path-based routing, and can route requests to one or more ports on each EC2 instance or container instance in your virtual private cloud (VPC). For more information, see the <http://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/ Elastic Load Balancing User Guide> .
+-- Elastic Load Balancing supports the following types of load balancers: Application Load Balancers, Network Load Balancers, and Classic Load Balancers.
 --
--- This reference covers the 2015-12-01 API, which supports Application Load Balancers. The 2012-06-01 API supports Classic Load Balancers.
+-- An Application Load Balancer makes routing and load balancing decisions at the application layer (HTTP/HTTPS). A Network Load Balancer makes routing and load balancing decisions at the transport layer (TCP). Both Application Load Balancers and Network Load Balancers can route requests to one or more ports on each EC2 instance or container instance in your virtual private cloud (VPC).
 --
+-- A Classic Load Balancer makes routing and load balancing decisions either at the transport layer (TCP/SSL) or the application layer (HTTP/HTTPS), and supports either EC2-Classic or a VPC. For more information, see the <http://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/ Elastic Load Balancing User Guide> .
+--
+-- This reference covers the 2015-12-01 API, which supports Application Load Balancers and Network Load Balancers. The 2012-06-01 API supports Classic Load Balancers.
+--
 -- To get started, complete the following tasks:
 --
---     * Create an Application Load Balancer using 'CreateLoadBalancer' .
+--     * Create a load balancer using 'CreateLoadBalancer' .
 --
 --     * Create a target group using 'CreateTargetGroup' .
 --
@@ -29,11 +33,9 @@
 --
 --     * Create one or more listeners for your load balancer using 'CreateListener' .
 --
---     * (Optional) Create one or more rules for content routing based on URL using 'CreateRule' .
 --
 --
---
--- To delete an Application Load Balancer and its related resources, complete the following tasks:
+-- To delete a load balancer and its related resources, complete the following tasks:
 --
 --     * Delete the load balancer using 'DeleteLoadBalancer' .
 --
@@ -96,6 +98,9 @@
     -- ** HealthUnavailableException
     , _HealthUnavailableException
 
+    -- ** AllocationIdNotFoundException
+    , _AllocationIdNotFoundException
+
     -- ** PriorityInUseException
     , _PriorityInUseException
 
@@ -135,6 +140,9 @@
     -- ** InvalidSchemeException
     , _InvalidSchemeException
 
+    -- ** AvailabilityZoneNotSupportedException
+    , _AvailabilityZoneNotSupportedException
+
     -- ** LoadBalancerNotFoundException
     , _LoadBalancerNotFoundException
 
@@ -171,6 +179,9 @@
     -- ** CreateRule
     , module Network.AWS.ELBv2.CreateRule
 
+    -- ** DescribeListenerCertificates
+    , module Network.AWS.ELBv2.DescribeListenerCertificates
+
     -- ** SetSecurityGroups
     , module Network.AWS.ELBv2.SetSecurityGroups
 
@@ -207,6 +218,9 @@
     -- ** DescribeSSLPolicies
     , module Network.AWS.ELBv2.DescribeSSLPolicies
 
+    -- ** DescribeAccountLimits
+    , module Network.AWS.ELBv2.DescribeAccountLimits
+
     -- ** DeregisterTargets
     , module Network.AWS.ELBv2.DeregisterTargets
 
@@ -219,6 +233,9 @@
     -- ** ModifyLoadBalancerAttributes
     , module Network.AWS.ELBv2.ModifyLoadBalancerAttributes
 
+    -- ** SetIPAddressType
+    , module Network.AWS.ELBv2.SetIPAddressType
+
     -- ** AddTags
     , module Network.AWS.ELBv2.AddTags
 
@@ -234,14 +251,23 @@
     -- ** CreateLoadBalancer
     , module Network.AWS.ELBv2.CreateLoadBalancer
 
+    -- ** RemoveListenerCertificates
+    , module Network.AWS.ELBv2.RemoveListenerCertificates
+
     -- ** ModifyRule
     , module Network.AWS.ELBv2.ModifyRule
 
+    -- ** AddListenerCertificates
+    , module Network.AWS.ELBv2.AddListenerCertificates
+
     -- * Types
 
     -- ** ActionTypeEnum
     , ActionTypeEnum (..)
 
+    -- ** IPAddressType
+    , IPAddressType (..)
+
     -- ** LoadBalancerSchemeEnum
     , LoadBalancerSchemeEnum (..)
 
@@ -260,6 +286,9 @@
     -- ** TargetHealthStateEnum
     , TargetHealthStateEnum (..)
 
+    -- ** TargetTypeEnum
+    , TargetTypeEnum (..)
+
     -- ** Action
     , Action
     , action
@@ -271,11 +300,13 @@
     , availabilityZone
     , azSubnetId
     , azZoneName
+    , azLoadBalancerAddresses
 
     -- ** Certificate
     , Certificate
     , certificate
     , cCertificateARN
+    , cIsDefault
 
     -- ** Cipher
     , Cipher
@@ -283,6 +314,12 @@
     , cPriority
     , cName
 
+    -- ** Limit
+    , Limit
+    , limit
+    , lMax
+    , lName
+
     -- ** Listener
     , Listener
     , listener
@@ -305,10 +342,17 @@
     , lbCanonicalHostedZoneId
     , lbAvailabilityZones
     , lbLoadBalancerARN
+    , lbIPAddressType
     , lbScheme
     , lbType
     , lbDNSName
 
+    -- ** LoadBalancerAddress
+    , LoadBalancerAddress
+    , loadBalancerAddress
+    , lbaIPAddress
+    , lbaAllocationId
+
     -- ** LoadBalancerAttribute
     , LoadBalancerAttribute
     , loadBalancerAttribute
@@ -354,6 +398,12 @@
     , spName
     , spSSLProtocols
 
+    -- ** SubnetMapping
+    , SubnetMapping
+    , subnetMapping
+    , smAllocationId
+    , smSubnetId
+
     -- ** Tag
     , Tag
     , tag
@@ -369,6 +419,7 @@
     -- ** TargetDescription
     , TargetDescription
     , targetDescription
+    , tdAvailabilityZone
     , tdPort
     , tdId
 
@@ -382,6 +433,7 @@
     , tgTargetGroupARN
     , tgProtocol
     , tgHealthCheckIntervalSeconds
+    , tgTargetType
     , tgHealthyThresholdCount
     , tgHealthCheckProtocol
     , tgLoadBalancerARNs
@@ -411,37 +463,42 @@
     , thdTarget
     ) where
 
-import           Network.AWS.ELBv2.AddTags
-import           Network.AWS.ELBv2.CreateListener
-import           Network.AWS.ELBv2.CreateLoadBalancer
-import           Network.AWS.ELBv2.CreateRule
-import           Network.AWS.ELBv2.CreateTargetGroup
-import           Network.AWS.ELBv2.DeleteListener
-import           Network.AWS.ELBv2.DeleteLoadBalancer
-import           Network.AWS.ELBv2.DeleteRule
-import           Network.AWS.ELBv2.DeleteTargetGroup
-import           Network.AWS.ELBv2.DeregisterTargets
-import           Network.AWS.ELBv2.DescribeListeners
-import           Network.AWS.ELBv2.DescribeLoadBalancerAttributes
-import           Network.AWS.ELBv2.DescribeLoadBalancers
-import           Network.AWS.ELBv2.DescribeRules
-import           Network.AWS.ELBv2.DescribeSSLPolicies
-import           Network.AWS.ELBv2.DescribeTags
-import           Network.AWS.ELBv2.DescribeTargetGroupAttributes
-import           Network.AWS.ELBv2.DescribeTargetGroups
-import           Network.AWS.ELBv2.DescribeTargetHealth
-import           Network.AWS.ELBv2.ModifyListener
-import           Network.AWS.ELBv2.ModifyLoadBalancerAttributes
-import           Network.AWS.ELBv2.ModifyRule
-import           Network.AWS.ELBv2.ModifyTargetGroup
-import           Network.AWS.ELBv2.ModifyTargetGroupAttributes
-import           Network.AWS.ELBv2.RegisterTargets
-import           Network.AWS.ELBv2.RemoveTags
-import           Network.AWS.ELBv2.SetRulePriorities
-import           Network.AWS.ELBv2.SetSecurityGroups
-import           Network.AWS.ELBv2.SetSubnets
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Waiters
+import Network.AWS.ELBv2.AddListenerCertificates
+import Network.AWS.ELBv2.AddTags
+import Network.AWS.ELBv2.CreateListener
+import Network.AWS.ELBv2.CreateLoadBalancer
+import Network.AWS.ELBv2.CreateRule
+import Network.AWS.ELBv2.CreateTargetGroup
+import Network.AWS.ELBv2.DeleteListener
+import Network.AWS.ELBv2.DeleteLoadBalancer
+import Network.AWS.ELBv2.DeleteRule
+import Network.AWS.ELBv2.DeleteTargetGroup
+import Network.AWS.ELBv2.DeregisterTargets
+import Network.AWS.ELBv2.DescribeAccountLimits
+import Network.AWS.ELBv2.DescribeListenerCertificates
+import Network.AWS.ELBv2.DescribeListeners
+import Network.AWS.ELBv2.DescribeLoadBalancerAttributes
+import Network.AWS.ELBv2.DescribeLoadBalancers
+import Network.AWS.ELBv2.DescribeRules
+import Network.AWS.ELBv2.DescribeSSLPolicies
+import Network.AWS.ELBv2.DescribeTags
+import Network.AWS.ELBv2.DescribeTargetGroupAttributes
+import Network.AWS.ELBv2.DescribeTargetGroups
+import Network.AWS.ELBv2.DescribeTargetHealth
+import Network.AWS.ELBv2.ModifyListener
+import Network.AWS.ELBv2.ModifyLoadBalancerAttributes
+import Network.AWS.ELBv2.ModifyRule
+import Network.AWS.ELBv2.ModifyTargetGroup
+import Network.AWS.ELBv2.ModifyTargetGroupAttributes
+import Network.AWS.ELBv2.RegisterTargets
+import Network.AWS.ELBv2.RemoveListenerCertificates
+import Network.AWS.ELBv2.RemoveTags
+import Network.AWS.ELBv2.SetIPAddressType
+import Network.AWS.ELBv2.SetRulePriorities
+import Network.AWS.ELBv2.SetSecurityGroups
+import Network.AWS.ELBv2.SetSubnets
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Waiters
 
 {- $errors
 Error matchers are designed for use with the functions provided by
diff --git a/gen/Network/AWS/ELBv2/AddListenerCertificates.hs b/gen/Network/AWS/ELBv2/AddListenerCertificates.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/ELBv2/AddListenerCertificates.hs
@@ -0,0 +1,144 @@
+{-# 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.ELBv2.AddListenerCertificates
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds the specified certificate to the specified secure listener.
+--
+--
+-- If the certificate was already added, the call is successful but the certificate is not added again.
+--
+-- To list the certificates for your listener, use 'DescribeListenerCertificates' . To remove certificates from your listener, use 'RemoveListenerCertificates' .
+--
+module Network.AWS.ELBv2.AddListenerCertificates
+    (
+    -- * Creating a Request
+      addListenerCertificates
+    , AddListenerCertificates
+    -- * Request Lenses
+    , alcListenerARN
+    , alcCertificates
+
+    -- * Destructuring the Response
+    , addListenerCertificatesResponse
+    , AddListenerCertificatesResponse
+    -- * Response Lenses
+    , alcrsCertificates
+    , alcrsResponseStatus
+    ) where
+
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'addListenerCertificates' smart constructor.
+data AddListenerCertificates = AddListenerCertificates'
+  { _alcListenerARN  :: !Text
+  , _alcCertificates :: ![Certificate]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AddListenerCertificates' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'alcListenerARN' - The Amazon Resource Name (ARN) of the listener.
+--
+-- * 'alcCertificates' - The certificate to add. You can specify one certificate per call.
+addListenerCertificates
+    :: Text -- ^ 'alcListenerARN'
+    -> AddListenerCertificates
+addListenerCertificates pListenerARN_ =
+  AddListenerCertificates'
+  {_alcListenerARN = pListenerARN_, _alcCertificates = mempty}
+
+
+-- | The Amazon Resource Name (ARN) of the listener.
+alcListenerARN :: Lens' AddListenerCertificates Text
+alcListenerARN = lens _alcListenerARN (\ s a -> s{_alcListenerARN = a});
+
+-- | The certificate to add. You can specify one certificate per call.
+alcCertificates :: Lens' AddListenerCertificates [Certificate]
+alcCertificates = lens _alcCertificates (\ s a -> s{_alcCertificates = a}) . _Coerce;
+
+instance AWSRequest AddListenerCertificates where
+        type Rs AddListenerCertificates =
+             AddListenerCertificatesResponse
+        request = postQuery eLBv2
+        response
+          = receiveXMLWrapper "AddListenerCertificatesResult"
+              (\ s h x ->
+                 AddListenerCertificatesResponse' <$>
+                   (x .@? "Certificates" .!@ mempty >>=
+                      may (parseXMLList "member"))
+                     <*> (pure (fromEnum s)))
+
+instance Hashable AddListenerCertificates where
+
+instance NFData AddListenerCertificates where
+
+instance ToHeaders AddListenerCertificates where
+        toHeaders = const mempty
+
+instance ToPath AddListenerCertificates where
+        toPath = const "/"
+
+instance ToQuery AddListenerCertificates where
+        toQuery AddListenerCertificates'{..}
+          = mconcat
+              ["Action" =:
+                 ("AddListenerCertificates" :: ByteString),
+               "Version" =: ("2015-12-01" :: ByteString),
+               "ListenerArn" =: _alcListenerARN,
+               "Certificates" =:
+                 toQueryList "member" _alcCertificates]
+
+-- | /See:/ 'addListenerCertificatesResponse' smart constructor.
+data AddListenerCertificatesResponse = AddListenerCertificatesResponse'
+  { _alcrsCertificates   :: !(Maybe [Certificate])
+  , _alcrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AddListenerCertificatesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'alcrsCertificates' - Information about the certificates.
+--
+-- * 'alcrsResponseStatus' - -- | The response status code.
+addListenerCertificatesResponse
+    :: Int -- ^ 'alcrsResponseStatus'
+    -> AddListenerCertificatesResponse
+addListenerCertificatesResponse pResponseStatus_ =
+  AddListenerCertificatesResponse'
+  {_alcrsCertificates = Nothing, _alcrsResponseStatus = pResponseStatus_}
+
+
+-- | Information about the certificates.
+alcrsCertificates :: Lens' AddListenerCertificatesResponse [Certificate]
+alcrsCertificates = lens _alcrsCertificates (\ s a -> s{_alcrsCertificates = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+alcrsResponseStatus :: Lens' AddListenerCertificatesResponse Int
+alcrsResponseStatus = lens _alcrsResponseStatus (\ s a -> s{_alcrsResponseStatus = a});
+
+instance NFData AddListenerCertificatesResponse where
diff --git a/gen/Network/AWS/ELBv2/AddTags.hs b/gen/Network/AWS/ELBv2/AddTags.hs
--- a/gen/Network/AWS/ELBv2/AddTags.hs
+++ b/gen/Network/AWS/ELBv2/AddTags.hs
@@ -12,13 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.AddTags
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Adds the specified tags to the specified resource. You can tag your Application Load Balancers and your target groups.
+-- Adds the specified tags to the specified Elastic Load Balancing resource. You can tag your Application Load Balancers, Network Load Balancers, and your target groups.
 --
 --
 -- Each tag consists of a key and an optional value. If a resource already has a tag with the same key, @AddTags@ updates its value.
@@ -41,23 +41,20 @@
     , atrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for AddTags.
---
---
---
--- /See:/ 'addTags' smart constructor.
+-- | /See:/ 'addTags' smart constructor.
 data AddTags = AddTags'
-    { _atResourceARNs :: ![Text]
-    , _atTags         :: !(List1 Tag)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _atResourceARNs :: ![Text]
+  , _atTags         :: !(List1 Tag)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'AddTags' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -68,12 +65,9 @@
 addTags
     :: NonEmpty Tag -- ^ 'atTags'
     -> AddTags
-addTags pTags_ =
-    AddTags'
-    { _atResourceARNs = mempty
-    , _atTags = _List1 # pTags_
-    }
+addTags pTags_ = AddTags' {_atResourceARNs = mempty, _atTags = _List1 # pTags_}
 
+
 -- | The Amazon Resource Name (ARN) of the resource.
 atResourceARNs :: Lens' AddTags [Text]
 atResourceARNs = lens _atResourceARNs (\ s a -> s{_atResourceARNs = a}) . _Coerce;
@@ -89,9 +83,9 @@
           = receiveXMLWrapper "AddTagsResult"
               (\ s h x -> AddTagsResponse' <$> (pure (fromEnum s)))
 
-instance Hashable AddTags
+instance Hashable AddTags where
 
-instance NFData AddTags
+instance NFData AddTags where
 
 instance ToHeaders AddTags where
         toHeaders = const mempty
@@ -108,15 +102,12 @@
                  toQueryList "member" _atResourceARNs,
                "Tags" =: toQueryList "member" _atTags]
 
--- | Contains the output of AddTags.
---
---
---
--- /See:/ 'addTagsResponse' smart constructor.
+-- | /See:/ 'addTagsResponse' smart constructor.
 newtype AddTagsResponse = AddTagsResponse'
-    { _atrsResponseStatus :: Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _atrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'AddTagsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -126,12 +117,11 @@
     :: Int -- ^ 'atrsResponseStatus'
     -> AddTagsResponse
 addTagsResponse pResponseStatus_ =
-    AddTagsResponse'
-    { _atrsResponseStatus = pResponseStatus_
-    }
+  AddTagsResponse' {_atrsResponseStatus = pResponseStatus_}
 
+
 -- | -- | The response status code.
 atrsResponseStatus :: Lens' AddTagsResponse Int
 atrsResponseStatus = lens _atrsResponseStatus (\ s a -> s{_atrsResponseStatus = a});
 
-instance NFData AddTagsResponse
+instance NFData AddTagsResponse where
diff --git a/gen/Network/AWS/ELBv2/CreateListener.hs b/gen/Network/AWS/ELBv2/CreateListener.hs
--- a/gen/Network/AWS/ELBv2/CreateListener.hs
+++ b/gen/Network/AWS/ELBv2/CreateListener.hs
@@ -12,21 +12,21 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.CreateListener
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Creates a listener for the specified Application Load Balancer.
+-- Creates a listener for the specified Application Load Balancer or Network Load Balancer.
 --
 --
--- You can create up to 10 listeners per load balancer.
---
 -- To update a listener, use 'ModifyListener' . When you are finished with a listener, you can delete it using 'DeleteListener' . If you are finished with both the listener and the load balancer, you can delete them both using 'DeleteLoadBalancer' .
 --
--- For more information, see <http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html Listeners for Your Application Load Balancers> in the /Application Load Balancers Guide/ .
+-- This operation is idempotent, which means that it completes at most one time. If you attempt to create multiple listeners with the same settings, each call succeeds.
 --
+-- For more information, see <http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html Listeners for Your Application Load Balancers> in the /Application Load Balancers Guide/ and <http://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-listeners.html Listeners for Your Network Load Balancers> in the /Network Load Balancers Guide/ .
+--
 module Network.AWS.ELBv2.CreateListener
     (
     -- * Creating a Request
@@ -48,62 +48,60 @@
     , clrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for CreateListener.
---
---
---
--- /See:/ 'createListener' smart constructor.
+-- | /See:/ 'createListener' smart constructor.
 data CreateListener = CreateListener'
-    { _clSSLPolicy       :: !(Maybe Text)
-    , _clCertificates    :: !(Maybe [Certificate])
-    , _clLoadBalancerARN :: !Text
-    , _clProtocol        :: !ProtocolEnum
-    , _clPort            :: !Nat
-    , _clDefaultActions  :: ![Action]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _clSSLPolicy       :: !(Maybe Text)
+  , _clCertificates    :: !(Maybe [Certificate])
+  , _clLoadBalancerARN :: !Text
+  , _clProtocol        :: !ProtocolEnum
+  , _clPort            :: !Nat
+  , _clDefaultActions  :: ![Action]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateListener' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'clSSLPolicy' - The security policy that defines which ciphers and protocols are supported. The default is the current predefined security policy.
+-- * 'clSSLPolicy' - [HTTPS listeners] The security policy that defines which ciphers and protocols are supported. The default is the current predefined security policy.
 --
--- * 'clCertificates' - The SSL server certificate. You must provide exactly one certificate if the protocol is HTTPS.
+-- * 'clCertificates' - [HTTPS listeners] The SSL server certificate. You must provide exactly one certificate.
 --
 -- * 'clLoadBalancerARN' - The Amazon Resource Name (ARN) of the load balancer.
 --
--- * 'clProtocol' - The protocol for connections from clients to the load balancer.
+-- * 'clProtocol' - The protocol for connections from clients to the load balancer. For Application Load Balancers, the supported protocols are HTTP and HTTPS. For Network Load Balancers, the supported protocol is TCP.
 --
 -- * 'clPort' - The port on which the load balancer is listening.
 --
--- * 'clDefaultActions' - The default action for the listener.
+-- * 'clDefaultActions' - The default action for the listener. For Application Load Balancers, the protocol of the specified target group must be HTTP or HTTPS. For Network Load Balancers, the protocol of the specified target group must be TCP.
 createListener
     :: Text -- ^ 'clLoadBalancerARN'
     -> ProtocolEnum -- ^ 'clProtocol'
     -> Natural -- ^ 'clPort'
     -> CreateListener
 createListener pLoadBalancerARN_ pProtocol_ pPort_ =
-    CreateListener'
-    { _clSSLPolicy = Nothing
-    , _clCertificates = Nothing
-    , _clLoadBalancerARN = pLoadBalancerARN_
-    , _clProtocol = pProtocol_
-    , _clPort = _Nat # pPort_
-    , _clDefaultActions = mempty
-    }
+  CreateListener'
+  { _clSSLPolicy = Nothing
+  , _clCertificates = Nothing
+  , _clLoadBalancerARN = pLoadBalancerARN_
+  , _clProtocol = pProtocol_
+  , _clPort = _Nat # pPort_
+  , _clDefaultActions = mempty
+  }
 
--- | The security policy that defines which ciphers and protocols are supported. The default is the current predefined security policy.
+
+-- | [HTTPS listeners] The security policy that defines which ciphers and protocols are supported. The default is the current predefined security policy.
 clSSLPolicy :: Lens' CreateListener (Maybe Text)
 clSSLPolicy = lens _clSSLPolicy (\ s a -> s{_clSSLPolicy = a});
 
--- | The SSL server certificate. You must provide exactly one certificate if the protocol is HTTPS.
+-- | [HTTPS listeners] The SSL server certificate. You must provide exactly one certificate.
 clCertificates :: Lens' CreateListener [Certificate]
 clCertificates = lens _clCertificates (\ s a -> s{_clCertificates = a}) . _Default . _Coerce;
 
@@ -111,7 +109,7 @@
 clLoadBalancerARN :: Lens' CreateListener Text
 clLoadBalancerARN = lens _clLoadBalancerARN (\ s a -> s{_clLoadBalancerARN = a});
 
--- | The protocol for connections from clients to the load balancer.
+-- | The protocol for connections from clients to the load balancer. For Application Load Balancers, the supported protocols are HTTP and HTTPS. For Network Load Balancers, the supported protocol is TCP.
 clProtocol :: Lens' CreateListener ProtocolEnum
 clProtocol = lens _clProtocol (\ s a -> s{_clProtocol = a});
 
@@ -119,7 +117,7 @@
 clPort :: Lens' CreateListener Natural
 clPort = lens _clPort (\ s a -> s{_clPort = a}) . _Nat;
 
--- | The default action for the listener.
+-- | The default action for the listener. For Application Load Balancers, the protocol of the specified target group must be HTTP or HTTPS. For Network Load Balancers, the protocol of the specified target group must be TCP.
 clDefaultActions :: Lens' CreateListener [Action]
 clDefaultActions = lens _clDefaultActions (\ s a -> s{_clDefaultActions = a}) . _Coerce;
 
@@ -134,9 +132,9 @@
                       may (parseXMLList "member"))
                      <*> (pure (fromEnum s)))
 
-instance Hashable CreateListener
+instance Hashable CreateListener where
 
-instance NFData CreateListener
+instance NFData CreateListener where
 
 instance ToHeaders CreateListener where
         toHeaders = const mempty
@@ -157,16 +155,13 @@
                "DefaultActions" =:
                  toQueryList "member" _clDefaultActions]
 
--- | Contains the output of CreateListener.
---
---
---
--- /See:/ 'createListenerResponse' smart constructor.
+-- | /See:/ 'createListenerResponse' smart constructor.
 data CreateListenerResponse = CreateListenerResponse'
-    { _clrsListeners      :: !(Maybe [Listener])
-    , _clrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _clrsListeners      :: !(Maybe [Listener])
+  , _clrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateListenerResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -178,11 +173,10 @@
     :: Int -- ^ 'clrsResponseStatus'
     -> CreateListenerResponse
 createListenerResponse pResponseStatus_ =
-    CreateListenerResponse'
-    { _clrsListeners = Nothing
-    , _clrsResponseStatus = pResponseStatus_
-    }
+  CreateListenerResponse'
+  {_clrsListeners = Nothing, _clrsResponseStatus = pResponseStatus_}
 
+
 -- | Information about the listener.
 clrsListeners :: Lens' CreateListenerResponse [Listener]
 clrsListeners = lens _clrsListeners (\ s a -> s{_clrsListeners = a}) . _Default . _Coerce;
@@ -191,4 +185,4 @@
 clrsResponseStatus :: Lens' CreateListenerResponse Int
 clrsResponseStatus = lens _clrsResponseStatus (\ s a -> s{_clrsResponseStatus = a});
 
-instance NFData CreateListenerResponse
+instance NFData CreateListenerResponse where
diff --git a/gen/Network/AWS/ELBv2/CreateLoadBalancer.hs b/gen/Network/AWS/ELBv2/CreateLoadBalancer.hs
--- a/gen/Network/AWS/ELBv2/CreateLoadBalancer.hs
+++ b/gen/Network/AWS/ELBv2/CreateLoadBalancer.hs
@@ -12,34 +12,39 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.CreateLoadBalancer
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Creates an Application Load Balancer.
+-- Creates an Application Load Balancer or a Network Load Balancer.
 --
 --
--- To create listeners for your load balancer, use 'CreateListener' . You can add security groups, subnets, and tags when you create your load balancer, or you can add them later using 'SetSecurityGroups' , 'SetSubnets' , and 'AddTags' .
+-- When you create a load balancer, you can specify security groups, subnets, IP address type, and tags. Otherwise, you could do so later using 'SetSecurityGroups' , 'SetSubnets' , 'SetIpAddressType' , and 'AddTags' .
 --
--- To describe your current load balancers, see 'DescribeLoadBalancers' . When you are finished with a load balancer, you can delete it using 'DeleteLoadBalancer' .
+-- To create listeners for your load balancer, use 'CreateListener' . To describe your current load balancers, see 'DescribeLoadBalancers' . When you are finished with a load balancer, you can delete it using 'DeleteLoadBalancer' .
 --
--- You can create up to 20 load balancers per region per account. You can request an increase for the number of load balancers for your account. For more information, see <http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-limits.html Limits for Your Application Load Balancer> in the /Application Load Balancers Guide/ .
+-- For limit information, see <http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-limits.html Limits for Your Application Load Balancer> in the /Application Load Balancers Guide/ and <http://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-limits.html Limits for Your Network Load Balancer> in the /Network Load Balancers Guide/ .
 --
--- For more information, see <http://docs.aws.amazon.com/elasticloadbalancing/latest/application/application-load-balancers.html Application Load Balancers> in the /Application Load Balancers Guide/ .
+-- This operation is idempotent, which means that it completes at most one time. If you attempt to create multiple load balancers with the same settings, each call succeeds.
 --
+-- For more information, see <http://docs.aws.amazon.com/elasticloadbalancing/latest/application/application-load-balancers.html Application Load Balancers> in the /Application Load Balancers Guide/ and <http://docs.aws.amazon.com/elasticloadbalancing/latest/network/network-load-balancers.html Network Load Balancers> in the /Network Load Balancers Guide/ .
+--
 module Network.AWS.ELBv2.CreateLoadBalancer
     (
     -- * Creating a Request
       createLoadBalancer
     , CreateLoadBalancer
     -- * Request Lenses
+    , clbSubnetMappings
     , clbSecurityGroups
+    , clbSubnets
+    , clbIPAddressType
     , clbScheme
+    , clbType
     , clbTags
     , clbName
-    , clbSubnets
 
     -- * Destructuring the Response
     , createLoadBalancerResponse
@@ -49,71 +54,93 @@
     , clbrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for CreateLoadBalancer.
---
---
---
--- /See:/ 'createLoadBalancer' smart constructor.
+-- | /See:/ 'createLoadBalancer' smart constructor.
 data CreateLoadBalancer = CreateLoadBalancer'
-    { _clbSecurityGroups :: !(Maybe [Text])
-    , _clbScheme         :: !(Maybe LoadBalancerSchemeEnum)
-    , _clbTags           :: !(Maybe (List1 Tag))
-    , _clbName           :: !Text
-    , _clbSubnets        :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _clbSubnetMappings :: !(Maybe [SubnetMapping])
+  , _clbSecurityGroups :: !(Maybe [Text])
+  , _clbSubnets        :: !(Maybe [Text])
+  , _clbIPAddressType  :: !(Maybe IPAddressType)
+  , _clbScheme         :: !(Maybe LoadBalancerSchemeEnum)
+  , _clbType           :: !(Maybe LoadBalancerTypeEnum)
+  , _clbTags           :: !(Maybe (List1 Tag))
+  , _clbName           :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateLoadBalancer' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'clbSecurityGroups' - The IDs of the security groups to assign to the load balancer.
+-- * 'clbSubnetMappings' - The IDs of the subnets to attach to the load balancer. You can specify only one subnet per Availability Zone. You must specify either subnets or subnet mappings. [Application Load Balancers] You must specify subnets from at least two Availability Zones. You cannot specify Elastic IP addresses for your subnets. [Network Load Balancers] You can specify subnets from one or more Availability Zones. You can specify one Elastic IP address per subnet.
 --
+-- * 'clbSecurityGroups' - [Application Load Balancers] The IDs of the security groups to assign to the load balancer.
+--
+-- * 'clbSubnets' - The IDs of the subnets to attach to the load balancer. You can specify only one subnet per Availability Zone. You must specify either subnets or subnet mappings. [Application Load Balancers] You must specify subnets from at least two Availability Zones. [Network Load Balancers] You can specify subnets from one or more Availability Zones.
+--
+-- * 'clbIPAddressType' - [Application Load Balancers] The type of IP addresses used by the subnets for your load balancer. The possible values are @ipv4@ (for IPv4 addresses) and @dualstack@ (for IPv4 and IPv6 addresses). Internal load balancers must use @ipv4@ .
+--
 -- * 'clbScheme' - The nodes of an Internet-facing load balancer have public IP addresses. The DNS name of an Internet-facing load balancer is publicly resolvable to the public IP addresses of the nodes. Therefore, Internet-facing load balancers can route requests from clients over the Internet. The nodes of an internal load balancer have only private IP addresses. The DNS name of an internal load balancer is publicly resolvable to the private IP addresses of the nodes. Therefore, internal load balancers can only route requests from clients with access to the VPC for the load balancer. The default is an Internet-facing load balancer.
 --
--- * 'clbTags' - One or more tags to assign to the load balancer.
+-- * 'clbType' - The type of load balancer to create. The default is @application@ .
 --
--- * 'clbName' - The name of the load balancer. This name must be unique within your AWS account, can have a maximum of 32 characters, must contain only alphanumeric characters or hyphens, and must not begin or end with a hyphen.
+-- * 'clbTags' - One or more tags to assign to the load balancer.
 --
--- * 'clbSubnets' - The IDs of the subnets to attach to the load balancer. You can specify only one subnet per Availability Zone. You must specify subnets from at least two Availability Zones.
+-- * 'clbName' - The name of the load balancer. This name must be unique per region per account, can have a maximum of 32 characters, must contain only alphanumeric characters or hyphens, and must not begin or end with a hyphen.
 createLoadBalancer
     :: Text -- ^ 'clbName'
     -> CreateLoadBalancer
 createLoadBalancer pName_ =
-    CreateLoadBalancer'
-    { _clbSecurityGroups = Nothing
-    , _clbScheme = Nothing
-    , _clbTags = Nothing
-    , _clbName = pName_
-    , _clbSubnets = mempty
-    }
+  CreateLoadBalancer'
+  { _clbSubnetMappings = Nothing
+  , _clbSecurityGroups = Nothing
+  , _clbSubnets = Nothing
+  , _clbIPAddressType = Nothing
+  , _clbScheme = Nothing
+  , _clbType = Nothing
+  , _clbTags = Nothing
+  , _clbName = pName_
+  }
 
--- | The IDs of the security groups to assign to the load balancer.
+
+-- | The IDs of the subnets to attach to the load balancer. You can specify only one subnet per Availability Zone. You must specify either subnets or subnet mappings. [Application Load Balancers] You must specify subnets from at least two Availability Zones. You cannot specify Elastic IP addresses for your subnets. [Network Load Balancers] You can specify subnets from one or more Availability Zones. You can specify one Elastic IP address per subnet.
+clbSubnetMappings :: Lens' CreateLoadBalancer [SubnetMapping]
+clbSubnetMappings = lens _clbSubnetMappings (\ s a -> s{_clbSubnetMappings = a}) . _Default . _Coerce;
+
+-- | [Application Load Balancers] The IDs of the security groups to assign to the load balancer.
 clbSecurityGroups :: Lens' CreateLoadBalancer [Text]
 clbSecurityGroups = lens _clbSecurityGroups (\ s a -> s{_clbSecurityGroups = a}) . _Default . _Coerce;
 
+-- | The IDs of the subnets to attach to the load balancer. You can specify only one subnet per Availability Zone. You must specify either subnets or subnet mappings. [Application Load Balancers] You must specify subnets from at least two Availability Zones. [Network Load Balancers] You can specify subnets from one or more Availability Zones.
+clbSubnets :: Lens' CreateLoadBalancer [Text]
+clbSubnets = lens _clbSubnets (\ s a -> s{_clbSubnets = a}) . _Default . _Coerce;
+
+-- | [Application Load Balancers] The type of IP addresses used by the subnets for your load balancer. The possible values are @ipv4@ (for IPv4 addresses) and @dualstack@ (for IPv4 and IPv6 addresses). Internal load balancers must use @ipv4@ .
+clbIPAddressType :: Lens' CreateLoadBalancer (Maybe IPAddressType)
+clbIPAddressType = lens _clbIPAddressType (\ s a -> s{_clbIPAddressType = a});
+
 -- | The nodes of an Internet-facing load balancer have public IP addresses. The DNS name of an Internet-facing load balancer is publicly resolvable to the public IP addresses of the nodes. Therefore, Internet-facing load balancers can route requests from clients over the Internet. The nodes of an internal load balancer have only private IP addresses. The DNS name of an internal load balancer is publicly resolvable to the private IP addresses of the nodes. Therefore, internal load balancers can only route requests from clients with access to the VPC for the load balancer. The default is an Internet-facing load balancer.
 clbScheme :: Lens' CreateLoadBalancer (Maybe LoadBalancerSchemeEnum)
 clbScheme = lens _clbScheme (\ s a -> s{_clbScheme = a});
 
+-- | The type of load balancer to create. The default is @application@ .
+clbType :: Lens' CreateLoadBalancer (Maybe LoadBalancerTypeEnum)
+clbType = lens _clbType (\ s a -> s{_clbType = a});
+
 -- | One or more tags to assign to the load balancer.
 clbTags :: Lens' CreateLoadBalancer (Maybe (NonEmpty Tag))
 clbTags = lens _clbTags (\ s a -> s{_clbTags = a}) . mapping _List1;
 
--- | The name of the load balancer. This name must be unique within your AWS account, can have a maximum of 32 characters, must contain only alphanumeric characters or hyphens, and must not begin or end with a hyphen.
+-- | The name of the load balancer. This name must be unique per region per account, can have a maximum of 32 characters, must contain only alphanumeric characters or hyphens, and must not begin or end with a hyphen.
 clbName :: Lens' CreateLoadBalancer Text
 clbName = lens _clbName (\ s a -> s{_clbName = a});
 
--- | The IDs of the subnets to attach to the load balancer. You can specify only one subnet per Availability Zone. You must specify subnets from at least two Availability Zones.
-clbSubnets :: Lens' CreateLoadBalancer [Text]
-clbSubnets = lens _clbSubnets (\ s a -> s{_clbSubnets = a}) . _Coerce;
-
 instance AWSRequest CreateLoadBalancer where
         type Rs CreateLoadBalancer =
              CreateLoadBalancerResponse
@@ -126,9 +153,9 @@
                       may (parseXMLList "member"))
                      <*> (pure (fromEnum s)))
 
-instance Hashable CreateLoadBalancer
+instance Hashable CreateLoadBalancer where
 
-instance NFData CreateLoadBalancer
+instance NFData CreateLoadBalancer where
 
 instance ToHeaders CreateLoadBalancer where
         toHeaders = const mempty
@@ -141,25 +168,27 @@
           = mconcat
               ["Action" =: ("CreateLoadBalancer" :: ByteString),
                "Version" =: ("2015-12-01" :: ByteString),
+               "SubnetMappings" =:
+                 toQuery
+                   (toQueryList "member" <$> _clbSubnetMappings),
                "SecurityGroups" =:
                  toQuery
                    (toQueryList "member" <$> _clbSecurityGroups),
-               "Scheme" =: _clbScheme,
+               "Subnets" =:
+                 toQuery (toQueryList "member" <$> _clbSubnets),
+               "IpAddressType" =: _clbIPAddressType,
+               "Scheme" =: _clbScheme, "Type" =: _clbType,
                "Tags" =:
                  toQuery (toQueryList "member" <$> _clbTags),
-               "Name" =: _clbName,
-               "Subnets" =: toQueryList "member" _clbSubnets]
+               "Name" =: _clbName]
 
--- | Contains the output of CreateLoadBalancer.
---
---
---
--- /See:/ 'createLoadBalancerResponse' smart constructor.
+-- | /See:/ 'createLoadBalancerResponse' smart constructor.
 data CreateLoadBalancerResponse = CreateLoadBalancerResponse'
-    { _clbrsLoadBalancers  :: !(Maybe [LoadBalancer])
-    , _clbrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _clbrsLoadBalancers  :: !(Maybe [LoadBalancer])
+  , _clbrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateLoadBalancerResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -171,11 +200,10 @@
     :: Int -- ^ 'clbrsResponseStatus'
     -> CreateLoadBalancerResponse
 createLoadBalancerResponse pResponseStatus_ =
-    CreateLoadBalancerResponse'
-    { _clbrsLoadBalancers = Nothing
-    , _clbrsResponseStatus = pResponseStatus_
-    }
+  CreateLoadBalancerResponse'
+  {_clbrsLoadBalancers = Nothing, _clbrsResponseStatus = pResponseStatus_}
 
+
 -- | Information about the load balancer.
 clbrsLoadBalancers :: Lens' CreateLoadBalancerResponse [LoadBalancer]
 clbrsLoadBalancers = lens _clbrsLoadBalancers (\ s a -> s{_clbrsLoadBalancers = a}) . _Default . _Coerce;
@@ -184,4 +212,4 @@
 clbrsResponseStatus :: Lens' CreateLoadBalancerResponse Int
 clbrsResponseStatus = lens _clbrsResponseStatus (\ s a -> s{_clbrsResponseStatus = a});
 
-instance NFData CreateLoadBalancerResponse
+instance NFData CreateLoadBalancerResponse where
diff --git a/gen/Network/AWS/ELBv2/CreateRule.hs b/gen/Network/AWS/ELBv2/CreateRule.hs
--- a/gen/Network/AWS/ELBv2/CreateRule.hs
+++ b/gen/Network/AWS/ELBv2/CreateRule.hs
@@ -12,16 +12,16 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.CreateRule
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Creates a rule for the specified listener.
+-- Creates a rule for the specified listener. The listener must be associated with an Application Load Balancer.
 --
 --
--- Each rule can have one action and one condition. Rules are evaluated in priority order, from the lowest value to the highest value. When the condition for a rule is met, the specified action is taken. If no conditions are met, the default action for the default rule is taken. For more information, see <http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#listener-rules Listener Rules> in the /Application Load Balancers Guide/ .
+-- Rules are evaluated in priority order, from the lowest value to the highest value. When the condition for a rule is met, the specified action is taken. If no conditions are met, the action for the default rule is taken. For more information, see <http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#listener-rules Listener Rules> in the /Application Load Balancers Guide/ .
 --
 -- To view your current rules, use 'DescribeRules' . To update a rule, use 'ModifyRule' . To set the priorities of your rules, use 'SetRulePriorities' . To delete a rule, use 'DeleteRule' .
 --
@@ -44,32 +44,29 @@
     , crrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for CreateRule.
---
---
---
--- /See:/ 'createRule' smart constructor.
+-- | /See:/ 'createRule' smart constructor.
 data CreateRule = CreateRule'
-    { _crListenerARN :: !Text
-    , _crConditions  :: ![RuleCondition]
-    , _crPriority    :: !Nat
-    , _crActions     :: ![Action]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _crListenerARN :: !Text
+  , _crConditions  :: ![RuleCondition]
+  , _crPriority    :: !Nat
+  , _crActions     :: ![Action]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateRule' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
 -- * 'crListenerARN' - The Amazon Resource Name (ARN) of the listener.
 --
--- * 'crConditions' - A condition. Each condition has the field @path-pattern@ and specifies one path pattern. A path pattern is case sensitive, can be up to 255 characters in length, and can contain any of the following characters:     * A-Z, a-z, 0-9     * _ - . $ / ~ " ' @ : +     * & (using &amp;)     * * (matches 0 or more characters)     * ? (matches exactly 1 character)
+-- * 'crConditions' - The conditions. Each condition specifies a field name and a single value. If the field name is @host-header@ , you can specify a single host name (for example, my.example.com). A host name is case insensitive, can be up to 128 characters in length, and can contain any of the following characters. Note that you can include up to three wildcard characters.     * A-Z, a-z, 0-9     * - .     * * (matches 0 or more characters)     * ? (matches exactly 1 character) If the field name is @path-pattern@ , you can specify a single path pattern. A path pattern is case sensitive, can be up to 128 characters in length, and can contain any of the following characters. Note that you can include up to three wildcard characters.     * A-Z, a-z, 0-9     * _ - . $ / ~ " ' @ : +     * & (using &amp;)     * * (matches 0 or more characters)     * ? (matches exactly 1 character)
 --
 -- * 'crPriority' - The priority for the rule. A listener can't have multiple rules with the same priority.
 --
@@ -79,18 +76,19 @@
     -> Natural -- ^ 'crPriority'
     -> CreateRule
 createRule pListenerARN_ pPriority_ =
-    CreateRule'
-    { _crListenerARN = pListenerARN_
-    , _crConditions = mempty
-    , _crPriority = _Nat # pPriority_
-    , _crActions = mempty
-    }
+  CreateRule'
+  { _crListenerARN = pListenerARN_
+  , _crConditions = mempty
+  , _crPriority = _Nat # pPriority_
+  , _crActions = mempty
+  }
 
+
 -- | The Amazon Resource Name (ARN) of the listener.
 crListenerARN :: Lens' CreateRule Text
 crListenerARN = lens _crListenerARN (\ s a -> s{_crListenerARN = a});
 
--- | A condition. Each condition has the field @path-pattern@ and specifies one path pattern. A path pattern is case sensitive, can be up to 255 characters in length, and can contain any of the following characters:     * A-Z, a-z, 0-9     * _ - . $ / ~ " ' @ : +     * & (using &amp;)     * * (matches 0 or more characters)     * ? (matches exactly 1 character)
+-- | The conditions. Each condition specifies a field name and a single value. If the field name is @host-header@ , you can specify a single host name (for example, my.example.com). A host name is case insensitive, can be up to 128 characters in length, and can contain any of the following characters. Note that you can include up to three wildcard characters.     * A-Z, a-z, 0-9     * - .     * * (matches 0 or more characters)     * ? (matches exactly 1 character) If the field name is @path-pattern@ , you can specify a single path pattern. A path pattern is case sensitive, can be up to 128 characters in length, and can contain any of the following characters. Note that you can include up to three wildcard characters.     * A-Z, a-z, 0-9     * _ - . $ / ~ " ' @ : +     * & (using &amp;)     * * (matches 0 or more characters)     * ? (matches exactly 1 character)
 crConditions :: Lens' CreateRule [RuleCondition]
 crConditions = lens _crConditions (\ s a -> s{_crConditions = a}) . _Coerce;
 
@@ -113,9 +111,9 @@
                       may (parseXMLList "member"))
                      <*> (pure (fromEnum s)))
 
-instance Hashable CreateRule
+instance Hashable CreateRule where
 
-instance NFData CreateRule
+instance NFData CreateRule where
 
 instance ToHeaders CreateRule where
         toHeaders = const mempty
@@ -133,16 +131,13 @@
                "Priority" =: _crPriority,
                "Actions" =: toQueryList "member" _crActions]
 
--- | Contains the output of CreateRule.
---
---
---
--- /See:/ 'createRuleResponse' smart constructor.
+-- | /See:/ 'createRuleResponse' smart constructor.
 data CreateRuleResponse = CreateRuleResponse'
-    { _crrsRules          :: !(Maybe [Rule])
-    , _crrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _crrsRules          :: !(Maybe [Rule])
+  , _crrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateRuleResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -154,11 +149,10 @@
     :: Int -- ^ 'crrsResponseStatus'
     -> CreateRuleResponse
 createRuleResponse pResponseStatus_ =
-    CreateRuleResponse'
-    { _crrsRules = Nothing
-    , _crrsResponseStatus = pResponseStatus_
-    }
+  CreateRuleResponse'
+  {_crrsRules = Nothing, _crrsResponseStatus = pResponseStatus_}
 
+
 -- | Information about the rule.
 crrsRules :: Lens' CreateRuleResponse [Rule]
 crrsRules = lens _crrsRules (\ s a -> s{_crrsRules = a}) . _Default . _Coerce;
@@ -167,4 +161,4 @@
 crrsResponseStatus :: Lens' CreateRuleResponse Int
 crrsResponseStatus = lens _crrsResponseStatus (\ s a -> s{_crrsResponseStatus = a});
 
-instance NFData CreateRuleResponse
+instance NFData CreateRuleResponse where
diff --git a/gen/Network/AWS/ELBv2/CreateTargetGroup.hs b/gen/Network/AWS/ELBv2/CreateTargetGroup.hs
--- a/gen/Network/AWS/ELBv2/CreateTargetGroup.hs
+++ b/gen/Network/AWS/ELBv2/CreateTargetGroup.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.CreateTargetGroup
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -27,8 +27,10 @@
 --
 -- To delete a target group, use 'DeleteTargetGroup' .
 --
--- For more information, see <http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html Target Groups for Your Application Load Balancers> in the /Application Load Balancers Guide/ .
+-- This operation is idempotent, which means that it completes at most one time. If you attempt to create multiple target groups with the same settings, each call succeeds.
 --
+-- For more information, see <http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html Target Groups for Your Application Load Balancers> in the /Application Load Balancers Guide/ or <http://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-target-groups.html Target Groups for Your Network Load Balancers> in the /Network Load Balancers Guide/ .
+--
 module Network.AWS.ELBv2.CreateTargetGroup
     (
     -- * Creating a Request
@@ -39,6 +41,7 @@
     , ctgHealthCheckPath
     , ctgUnhealthyThresholdCount
     , ctgHealthCheckIntervalSeconds
+    , ctgTargetType
     , ctgHealthyThresholdCount
     , ctgHealthCheckProtocol
     , ctgHealthCheckTimeoutSeconds
@@ -56,57 +59,57 @@
     , ctgrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for CreateTargetGroup.
---
---
---
--- /See:/ 'createTargetGroup' smart constructor.
+-- | /See:/ 'createTargetGroup' smart constructor.
 data CreateTargetGroup = CreateTargetGroup'
-    { _ctgMatcher                    :: !(Maybe Matcher)
-    , _ctgHealthCheckPath            :: !(Maybe Text)
-    , _ctgUnhealthyThresholdCount    :: !(Maybe Nat)
-    , _ctgHealthCheckIntervalSeconds :: !(Maybe Nat)
-    , _ctgHealthyThresholdCount      :: !(Maybe Nat)
-    , _ctgHealthCheckProtocol        :: !(Maybe ProtocolEnum)
-    , _ctgHealthCheckTimeoutSeconds  :: !(Maybe Nat)
-    , _ctgHealthCheckPort            :: !(Maybe Text)
-    , _ctgName                       :: !Text
-    , _ctgProtocol                   :: !ProtocolEnum
-    , _ctgPort                       :: !Nat
-    , _ctgVPCId                      :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ctgMatcher                    :: !(Maybe Matcher)
+  , _ctgHealthCheckPath            :: !(Maybe Text)
+  , _ctgUnhealthyThresholdCount    :: !(Maybe Nat)
+  , _ctgHealthCheckIntervalSeconds :: !(Maybe Nat)
+  , _ctgTargetType                 :: !(Maybe TargetTypeEnum)
+  , _ctgHealthyThresholdCount      :: !(Maybe Nat)
+  , _ctgHealthCheckProtocol        :: !(Maybe ProtocolEnum)
+  , _ctgHealthCheckTimeoutSeconds  :: !(Maybe Nat)
+  , _ctgHealthCheckPort            :: !(Maybe Text)
+  , _ctgName                       :: !Text
+  , _ctgProtocol                   :: !ProtocolEnum
+  , _ctgPort                       :: !Nat
+  , _ctgVPCId                      :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateTargetGroup' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ctgMatcher' - The HTTP codes to use when checking for a successful response from a target. The default is 200.
+-- * 'ctgMatcher' - [HTTP/HTTPS health checks] The HTTP codes to use when checking for a successful response from a target.
 --
--- * 'ctgHealthCheckPath' - The ping path that is the destination on the targets for health checks. The default is /.
+-- * 'ctgHealthCheckPath' - [HTTP/HTTPS health checks] The ping path that is the destination on the targets for health checks. The default is /.
 --
--- * 'ctgUnhealthyThresholdCount' - The number of consecutive health check failures required before considering a target unhealthy. The default is 2.
+-- * 'ctgUnhealthyThresholdCount' - The number of consecutive health check failures required before considering a target unhealthy. For Application Load Balancers, the default is 2. For Network Load Balancers, this value must be the same as the healthy threshold count.
 --
--- * 'ctgHealthCheckIntervalSeconds' - The approximate amount of time, in seconds, between health checks of an individual target. The default is 30 seconds.
+-- * 'ctgHealthCheckIntervalSeconds' - The approximate amount of time, in seconds, between health checks of an individual target. For Application Load Balancers, the range is 5 to 300 seconds. For Network Load Balancers, the supported values are 10 or 30 seconds. The default is 30 seconds.
 --
--- * 'ctgHealthyThresholdCount' - The number of consecutive health checks successes required before considering an unhealthy target healthy. The default is 5.
+-- * 'ctgTargetType' - The type of target that you must specify when registering targets with this target group. The possible values are @instance@ (targets are specified by instance ID) or @ip@ (targets are specified by IP address). The default is @instance@ . Note that you can't specify targets for a target group using both instance IDs and IP addresses. If the target type is @ip@ , specify IP addresses from the subnets of the virtual private cloud (VPC) for the target group, the RFC 1918 range (10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16), and the RFC 6598 range (100.64.0.0/10). You can't specify publicly routable IP addresses.
 --
--- * 'ctgHealthCheckProtocol' - The protocol the load balancer uses when performing health checks on targets. The default is the HTTP protocol.
+-- * 'ctgHealthyThresholdCount' - The number of consecutive health checks successes required before considering an unhealthy target healthy. For Application Load Balancers, the default is 5. For Network Load Balancers, the default is 3.
 --
--- * 'ctgHealthCheckTimeoutSeconds' - The amount of time, in seconds, during which no response from a target means a failed health check. The default is 5 seconds.
+-- * 'ctgHealthCheckProtocol' - The protocol the load balancer uses when performing health checks on targets. The TCP protocol is supported only if the protocol of the target group is TCP. For Application Load Balancers, the default is HTTP. For Network Load Balancers, the default is TCP.
 --
--- * 'ctgHealthCheckPort' - The port the load balancer uses when performing health checks on targets. The default is @traffic-port@ , which indicates the port on which each target receives traffic from the load balancer.
+-- * 'ctgHealthCheckTimeoutSeconds' - The amount of time, in seconds, during which no response from a target means a failed health check. For Application Load Balancers, the range is 2 to 60 seconds and the default is 5 seconds. For Network Load Balancers, this is 10 seconds for TCP and HTTPS health checks and 6 seconds for HTTP health checks.
 --
--- * 'ctgName' - The name of the target group.
+-- * 'ctgHealthCheckPort' - The port the load balancer uses when performing health checks on targets. The default is @traffic-port@ , which is the port on which each target receives traffic from the load balancer.
 --
--- * 'ctgProtocol' - The protocol to use for routing traffic to the targets.
+-- * 'ctgName' - The name of the target group. This name must be unique per region per account, can have a maximum of 32 characters, must contain only alphanumeric characters or hyphens, and must not begin or end with a hyphen.
 --
+-- * 'ctgProtocol' - The protocol to use for routing traffic to the targets. For Application Load Balancers, the supported protocols are HTTP and HTTPS. For Network Load Balancers, the supported protocol is TCP.
+--
 -- * 'ctgPort' - The port on which the targets receive traffic. This port is used unless you specify a port override when registering the target.
 --
 -- * 'ctgVPCId' - The identifier of the virtual private cloud (VPC).
@@ -117,58 +120,64 @@
     -> Text -- ^ 'ctgVPCId'
     -> CreateTargetGroup
 createTargetGroup pName_ pProtocol_ pPort_ pVPCId_ =
-    CreateTargetGroup'
-    { _ctgMatcher = Nothing
-    , _ctgHealthCheckPath = Nothing
-    , _ctgUnhealthyThresholdCount = Nothing
-    , _ctgHealthCheckIntervalSeconds = Nothing
-    , _ctgHealthyThresholdCount = Nothing
-    , _ctgHealthCheckProtocol = Nothing
-    , _ctgHealthCheckTimeoutSeconds = Nothing
-    , _ctgHealthCheckPort = Nothing
-    , _ctgName = pName_
-    , _ctgProtocol = pProtocol_
-    , _ctgPort = _Nat # pPort_
-    , _ctgVPCId = pVPCId_
-    }
+  CreateTargetGroup'
+  { _ctgMatcher = Nothing
+  , _ctgHealthCheckPath = Nothing
+  , _ctgUnhealthyThresholdCount = Nothing
+  , _ctgHealthCheckIntervalSeconds = Nothing
+  , _ctgTargetType = Nothing
+  , _ctgHealthyThresholdCount = Nothing
+  , _ctgHealthCheckProtocol = Nothing
+  , _ctgHealthCheckTimeoutSeconds = Nothing
+  , _ctgHealthCheckPort = Nothing
+  , _ctgName = pName_
+  , _ctgProtocol = pProtocol_
+  , _ctgPort = _Nat # pPort_
+  , _ctgVPCId = pVPCId_
+  }
 
--- | The HTTP codes to use when checking for a successful response from a target. The default is 200.
+
+-- | [HTTP/HTTPS health checks] The HTTP codes to use when checking for a successful response from a target.
 ctgMatcher :: Lens' CreateTargetGroup (Maybe Matcher)
 ctgMatcher = lens _ctgMatcher (\ s a -> s{_ctgMatcher = a});
 
--- | The ping path that is the destination on the targets for health checks. The default is /.
+-- | [HTTP/HTTPS health checks] The ping path that is the destination on the targets for health checks. The default is /.
 ctgHealthCheckPath :: Lens' CreateTargetGroup (Maybe Text)
 ctgHealthCheckPath = lens _ctgHealthCheckPath (\ s a -> s{_ctgHealthCheckPath = a});
 
--- | The number of consecutive health check failures required before considering a target unhealthy. The default is 2.
+-- | The number of consecutive health check failures required before considering a target unhealthy. For Application Load Balancers, the default is 2. For Network Load Balancers, this value must be the same as the healthy threshold count.
 ctgUnhealthyThresholdCount :: Lens' CreateTargetGroup (Maybe Natural)
 ctgUnhealthyThresholdCount = lens _ctgUnhealthyThresholdCount (\ s a -> s{_ctgUnhealthyThresholdCount = a}) . mapping _Nat;
 
--- | The approximate amount of time, in seconds, between health checks of an individual target. The default is 30 seconds.
+-- | The approximate amount of time, in seconds, between health checks of an individual target. For Application Load Balancers, the range is 5 to 300 seconds. For Network Load Balancers, the supported values are 10 or 30 seconds. The default is 30 seconds.
 ctgHealthCheckIntervalSeconds :: Lens' CreateTargetGroup (Maybe Natural)
 ctgHealthCheckIntervalSeconds = lens _ctgHealthCheckIntervalSeconds (\ s a -> s{_ctgHealthCheckIntervalSeconds = a}) . mapping _Nat;
 
--- | The number of consecutive health checks successes required before considering an unhealthy target healthy. The default is 5.
+-- | The type of target that you must specify when registering targets with this target group. The possible values are @instance@ (targets are specified by instance ID) or @ip@ (targets are specified by IP address). The default is @instance@ . Note that you can't specify targets for a target group using both instance IDs and IP addresses. If the target type is @ip@ , specify IP addresses from the subnets of the virtual private cloud (VPC) for the target group, the RFC 1918 range (10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16), and the RFC 6598 range (100.64.0.0/10). You can't specify publicly routable IP addresses.
+ctgTargetType :: Lens' CreateTargetGroup (Maybe TargetTypeEnum)
+ctgTargetType = lens _ctgTargetType (\ s a -> s{_ctgTargetType = a});
+
+-- | The number of consecutive health checks successes required before considering an unhealthy target healthy. For Application Load Balancers, the default is 5. For Network Load Balancers, the default is 3.
 ctgHealthyThresholdCount :: Lens' CreateTargetGroup (Maybe Natural)
 ctgHealthyThresholdCount = lens _ctgHealthyThresholdCount (\ s a -> s{_ctgHealthyThresholdCount = a}) . mapping _Nat;
 
--- | The protocol the load balancer uses when performing health checks on targets. The default is the HTTP protocol.
+-- | The protocol the load balancer uses when performing health checks on targets. The TCP protocol is supported only if the protocol of the target group is TCP. For Application Load Balancers, the default is HTTP. For Network Load Balancers, the default is TCP.
 ctgHealthCheckProtocol :: Lens' CreateTargetGroup (Maybe ProtocolEnum)
 ctgHealthCheckProtocol = lens _ctgHealthCheckProtocol (\ s a -> s{_ctgHealthCheckProtocol = a});
 
--- | The amount of time, in seconds, during which no response from a target means a failed health check. The default is 5 seconds.
+-- | The amount of time, in seconds, during which no response from a target means a failed health check. For Application Load Balancers, the range is 2 to 60 seconds and the default is 5 seconds. For Network Load Balancers, this is 10 seconds for TCP and HTTPS health checks and 6 seconds for HTTP health checks.
 ctgHealthCheckTimeoutSeconds :: Lens' CreateTargetGroup (Maybe Natural)
 ctgHealthCheckTimeoutSeconds = lens _ctgHealthCheckTimeoutSeconds (\ s a -> s{_ctgHealthCheckTimeoutSeconds = a}) . mapping _Nat;
 
--- | The port the load balancer uses when performing health checks on targets. The default is @traffic-port@ , which indicates the port on which each target receives traffic from the load balancer.
+-- | The port the load balancer uses when performing health checks on targets. The default is @traffic-port@ , which is the port on which each target receives traffic from the load balancer.
 ctgHealthCheckPort :: Lens' CreateTargetGroup (Maybe Text)
 ctgHealthCheckPort = lens _ctgHealthCheckPort (\ s a -> s{_ctgHealthCheckPort = a});
 
--- | The name of the target group.
+-- | The name of the target group. This name must be unique per region per account, can have a maximum of 32 characters, must contain only alphanumeric characters or hyphens, and must not begin or end with a hyphen.
 ctgName :: Lens' CreateTargetGroup Text
 ctgName = lens _ctgName (\ s a -> s{_ctgName = a});
 
--- | The protocol to use for routing traffic to the targets.
+-- | The protocol to use for routing traffic to the targets. For Application Load Balancers, the supported protocols are HTTP and HTTPS. For Network Load Balancers, the supported protocol is TCP.
 ctgProtocol :: Lens' CreateTargetGroup ProtocolEnum
 ctgProtocol = lens _ctgProtocol (\ s a -> s{_ctgProtocol = a});
 
@@ -191,9 +200,9 @@
                       may (parseXMLList "member"))
                      <*> (pure (fromEnum s)))
 
-instance Hashable CreateTargetGroup
+instance Hashable CreateTargetGroup where
 
-instance NFData CreateTargetGroup
+instance NFData CreateTargetGroup where
 
 instance ToHeaders CreateTargetGroup where
         toHeaders = const mempty
@@ -212,6 +221,7 @@
                  _ctgUnhealthyThresholdCount,
                "HealthCheckIntervalSeconds" =:
                  _ctgHealthCheckIntervalSeconds,
+               "TargetType" =: _ctgTargetType,
                "HealthyThresholdCount" =: _ctgHealthyThresholdCount,
                "HealthCheckProtocol" =: _ctgHealthCheckProtocol,
                "HealthCheckTimeoutSeconds" =:
@@ -220,16 +230,13 @@
                "Name" =: _ctgName, "Protocol" =: _ctgProtocol,
                "Port" =: _ctgPort, "VpcId" =: _ctgVPCId]
 
--- | Contains the output of CreateTargetGroup.
---
---
---
--- /See:/ 'createTargetGroupResponse' smart constructor.
+-- | /See:/ 'createTargetGroupResponse' smart constructor.
 data CreateTargetGroupResponse = CreateTargetGroupResponse'
-    { _ctgrsTargetGroups   :: !(Maybe [TargetGroup])
-    , _ctgrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ctgrsTargetGroups   :: !(Maybe [TargetGroup])
+  , _ctgrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateTargetGroupResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -241,11 +248,10 @@
     :: Int -- ^ 'ctgrsResponseStatus'
     -> CreateTargetGroupResponse
 createTargetGroupResponse pResponseStatus_ =
-    CreateTargetGroupResponse'
-    { _ctgrsTargetGroups = Nothing
-    , _ctgrsResponseStatus = pResponseStatus_
-    }
+  CreateTargetGroupResponse'
+  {_ctgrsTargetGroups = Nothing, _ctgrsResponseStatus = pResponseStatus_}
 
+
 -- | Information about the target group.
 ctgrsTargetGroups :: Lens' CreateTargetGroupResponse [TargetGroup]
 ctgrsTargetGroups = lens _ctgrsTargetGroups (\ s a -> s{_ctgrsTargetGroups = a}) . _Default . _Coerce;
@@ -254,4 +260,4 @@
 ctgrsResponseStatus :: Lens' CreateTargetGroupResponse Int
 ctgrsResponseStatus = lens _ctgrsResponseStatus (\ s a -> s{_ctgrsResponseStatus = a});
 
-instance NFData CreateTargetGroupResponse
+instance NFData CreateTargetGroupResponse where
diff --git a/gen/Network/AWS/ELBv2/DeleteListener.hs b/gen/Network/AWS/ELBv2/DeleteListener.hs
--- a/gen/Network/AWS/ELBv2/DeleteListener.hs
+++ b/gen/Network/AWS/ELBv2/DeleteListener.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.DeleteListener
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -38,22 +38,19 @@
     , dlrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for DeleteListener.
---
---
---
--- /See:/ 'deleteListener' smart constructor.
+-- | /See:/ 'deleteListener' smart constructor.
 newtype DeleteListener = DeleteListener'
-    { _dlListenerARN :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dlListenerARN :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteListener' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -62,11 +59,9 @@
 deleteListener
     :: Text -- ^ 'dlListenerARN'
     -> DeleteListener
-deleteListener pListenerARN_ =
-    DeleteListener'
-    { _dlListenerARN = pListenerARN_
-    }
+deleteListener pListenerARN_ = DeleteListener' {_dlListenerARN = pListenerARN_}
 
+
 -- | The Amazon Resource Name (ARN) of the listener.
 dlListenerARN :: Lens' DeleteListener Text
 dlListenerARN = lens _dlListenerARN (\ s a -> s{_dlListenerARN = a});
@@ -79,9 +74,9 @@
               (\ s h x ->
                  DeleteListenerResponse' <$> (pure (fromEnum s)))
 
-instance Hashable DeleteListener
+instance Hashable DeleteListener where
 
-instance NFData DeleteListener
+instance NFData DeleteListener where
 
 instance ToHeaders DeleteListener where
         toHeaders = const mempty
@@ -96,15 +91,12 @@
                "Version" =: ("2015-12-01" :: ByteString),
                "ListenerArn" =: _dlListenerARN]
 
--- | Contains the output of DeleteListener.
---
---
---
--- /See:/ 'deleteListenerResponse' smart constructor.
+-- | /See:/ 'deleteListenerResponse' smart constructor.
 newtype DeleteListenerResponse = DeleteListenerResponse'
-    { _dlrsResponseStatus :: Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dlrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteListenerResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -114,12 +106,11 @@
     :: Int -- ^ 'dlrsResponseStatus'
     -> DeleteListenerResponse
 deleteListenerResponse pResponseStatus_ =
-    DeleteListenerResponse'
-    { _dlrsResponseStatus = pResponseStatus_
-    }
+  DeleteListenerResponse' {_dlrsResponseStatus = pResponseStatus_}
 
+
 -- | -- | The response status code.
 dlrsResponseStatus :: Lens' DeleteListenerResponse Int
 dlrsResponseStatus = lens _dlrsResponseStatus (\ s a -> s{_dlrsResponseStatus = a});
 
-instance NFData DeleteListenerResponse
+instance NFData DeleteListenerResponse where
diff --git a/gen/Network/AWS/ELBv2/DeleteLoadBalancer.hs b/gen/Network/AWS/ELBv2/DeleteLoadBalancer.hs
--- a/gen/Network/AWS/ELBv2/DeleteLoadBalancer.hs
+++ b/gen/Network/AWS/ELBv2/DeleteLoadBalancer.hs
@@ -12,13 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.DeleteLoadBalancer
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Deletes the specified Application Load Balancer and its attached listeners.
+-- Deletes the specified Application Load Balancer or Network Load Balancer and its attached listeners.
 --
 --
 -- You can't delete a load balancer if deletion protection is enabled. If the load balancer does not exist or has already been deleted, the call succeeds.
@@ -40,22 +40,19 @@
     , drsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for DeleteLoadBalancer.
---
---
---
--- /See:/ 'deleteLoadBalancer' smart constructor.
+-- | /See:/ 'deleteLoadBalancer' smart constructor.
 newtype DeleteLoadBalancer = DeleteLoadBalancer'
-    { _dlbLoadBalancerARN :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dlbLoadBalancerARN :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteLoadBalancer' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -65,10 +62,9 @@
     :: Text -- ^ 'dlbLoadBalancerARN'
     -> DeleteLoadBalancer
 deleteLoadBalancer pLoadBalancerARN_ =
-    DeleteLoadBalancer'
-    { _dlbLoadBalancerARN = pLoadBalancerARN_
-    }
+  DeleteLoadBalancer' {_dlbLoadBalancerARN = pLoadBalancerARN_}
 
+
 -- | The Amazon Resource Name (ARN) of the load balancer.
 dlbLoadBalancerARN :: Lens' DeleteLoadBalancer Text
 dlbLoadBalancerARN = lens _dlbLoadBalancerARN (\ s a -> s{_dlbLoadBalancerARN = a});
@@ -82,9 +78,9 @@
               (\ s h x ->
                  DeleteLoadBalancerResponse' <$> (pure (fromEnum s)))
 
-instance Hashable DeleteLoadBalancer
+instance Hashable DeleteLoadBalancer where
 
-instance NFData DeleteLoadBalancer
+instance NFData DeleteLoadBalancer where
 
 instance ToHeaders DeleteLoadBalancer where
         toHeaders = const mempty
@@ -99,15 +95,12 @@
                "Version" =: ("2015-12-01" :: ByteString),
                "LoadBalancerArn" =: _dlbLoadBalancerARN]
 
--- | Contains the output of DeleteLoadBalancer.
---
---
---
--- /See:/ 'deleteLoadBalancerResponse' smart constructor.
+-- | /See:/ 'deleteLoadBalancerResponse' smart constructor.
 newtype DeleteLoadBalancerResponse = DeleteLoadBalancerResponse'
-    { _drsResponseStatus :: Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _drsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteLoadBalancerResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -117,12 +110,11 @@
     :: Int -- ^ 'drsResponseStatus'
     -> DeleteLoadBalancerResponse
 deleteLoadBalancerResponse pResponseStatus_ =
-    DeleteLoadBalancerResponse'
-    { _drsResponseStatus = pResponseStatus_
-    }
+  DeleteLoadBalancerResponse' {_drsResponseStatus = pResponseStatus_}
 
+
 -- | -- | The response status code.
 drsResponseStatus :: Lens' DeleteLoadBalancerResponse Int
 drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a});
 
-instance NFData DeleteLoadBalancerResponse
+instance NFData DeleteLoadBalancerResponse where
diff --git a/gen/Network/AWS/ELBv2/DeleteRule.hs b/gen/Network/AWS/ELBv2/DeleteRule.hs
--- a/gen/Network/AWS/ELBv2/DeleteRule.hs
+++ b/gen/Network/AWS/ELBv2/DeleteRule.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.DeleteRule
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -36,22 +36,19 @@
     , drrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for DeleteRule.
---
---
---
--- /See:/ 'deleteRule' smart constructor.
+-- | /See:/ 'deleteRule' smart constructor.
 newtype DeleteRule = DeleteRule'
-    { _drRuleARN :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _drRuleARN :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteRule' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -60,11 +57,9 @@
 deleteRule
     :: Text -- ^ 'drRuleARN'
     -> DeleteRule
-deleteRule pRuleARN_ =
-    DeleteRule'
-    { _drRuleARN = pRuleARN_
-    }
+deleteRule pRuleARN_ = DeleteRule' {_drRuleARN = pRuleARN_}
 
+
 -- | The Amazon Resource Name (ARN) of the rule.
 drRuleARN :: Lens' DeleteRule Text
 drRuleARN = lens _drRuleARN (\ s a -> s{_drRuleARN = a});
@@ -77,9 +72,9 @@
               (\ s h x ->
                  DeleteRuleResponse' <$> (pure (fromEnum s)))
 
-instance Hashable DeleteRule
+instance Hashable DeleteRule where
 
-instance NFData DeleteRule
+instance NFData DeleteRule where
 
 instance ToHeaders DeleteRule where
         toHeaders = const mempty
@@ -94,15 +89,12 @@
                "Version" =: ("2015-12-01" :: ByteString),
                "RuleArn" =: _drRuleARN]
 
--- | Contains the output of DeleteRule.
---
---
---
--- /See:/ 'deleteRuleResponse' smart constructor.
+-- | /See:/ 'deleteRuleResponse' smart constructor.
 newtype DeleteRuleResponse = DeleteRuleResponse'
-    { _drrsResponseStatus :: Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _drrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteRuleResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -112,12 +104,11 @@
     :: Int -- ^ 'drrsResponseStatus'
     -> DeleteRuleResponse
 deleteRuleResponse pResponseStatus_ =
-    DeleteRuleResponse'
-    { _drrsResponseStatus = pResponseStatus_
-    }
+  DeleteRuleResponse' {_drrsResponseStatus = pResponseStatus_}
 
+
 -- | -- | The response status code.
 drrsResponseStatus :: Lens' DeleteRuleResponse Int
 drrsResponseStatus = lens _drrsResponseStatus (\ s a -> s{_drrsResponseStatus = a});
 
-instance NFData DeleteRuleResponse
+instance NFData DeleteRuleResponse where
diff --git a/gen/Network/AWS/ELBv2/DeleteTargetGroup.hs b/gen/Network/AWS/ELBv2/DeleteTargetGroup.hs
--- a/gen/Network/AWS/ELBv2/DeleteTargetGroup.hs
+++ b/gen/Network/AWS/ELBv2/DeleteTargetGroup.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.DeleteTargetGroup
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -38,22 +38,19 @@
     , dtgrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for DeleteTargetGroup.
---
---
---
--- /See:/ 'deleteTargetGroup' smart constructor.
+-- | /See:/ 'deleteTargetGroup' smart constructor.
 newtype DeleteTargetGroup = DeleteTargetGroup'
-    { _dtgTargetGroupARN :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dtgTargetGroupARN :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteTargetGroup' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -63,10 +60,9 @@
     :: Text -- ^ 'dtgTargetGroupARN'
     -> DeleteTargetGroup
 deleteTargetGroup pTargetGroupARN_ =
-    DeleteTargetGroup'
-    { _dtgTargetGroupARN = pTargetGroupARN_
-    }
+  DeleteTargetGroup' {_dtgTargetGroupARN = pTargetGroupARN_}
 
+
 -- | The Amazon Resource Name (ARN) of the target group.
 dtgTargetGroupARN :: Lens' DeleteTargetGroup Text
 dtgTargetGroupARN = lens _dtgTargetGroupARN (\ s a -> s{_dtgTargetGroupARN = a});
@@ -79,9 +75,9 @@
               (\ s h x ->
                  DeleteTargetGroupResponse' <$> (pure (fromEnum s)))
 
-instance Hashable DeleteTargetGroup
+instance Hashable DeleteTargetGroup where
 
-instance NFData DeleteTargetGroup
+instance NFData DeleteTargetGroup where
 
 instance ToHeaders DeleteTargetGroup where
         toHeaders = const mempty
@@ -96,15 +92,12 @@
                "Version" =: ("2015-12-01" :: ByteString),
                "TargetGroupArn" =: _dtgTargetGroupARN]
 
--- | Contains the output of DeleteTargetGroup.
---
---
---
--- /See:/ 'deleteTargetGroupResponse' smart constructor.
+-- | /See:/ 'deleteTargetGroupResponse' smart constructor.
 newtype DeleteTargetGroupResponse = DeleteTargetGroupResponse'
-    { _dtgrsResponseStatus :: Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dtgrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteTargetGroupResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -114,12 +107,11 @@
     :: Int -- ^ 'dtgrsResponseStatus'
     -> DeleteTargetGroupResponse
 deleteTargetGroupResponse pResponseStatus_ =
-    DeleteTargetGroupResponse'
-    { _dtgrsResponseStatus = pResponseStatus_
-    }
+  DeleteTargetGroupResponse' {_dtgrsResponseStatus = pResponseStatus_}
 
+
 -- | -- | The response status code.
 dtgrsResponseStatus :: Lens' DeleteTargetGroupResponse Int
 dtgrsResponseStatus = lens _dtgrsResponseStatus (\ s a -> s{_dtgrsResponseStatus = a});
 
-instance NFData DeleteTargetGroupResponse
+instance NFData DeleteTargetGroupResponse where
diff --git a/gen/Network/AWS/ELBv2/DeregisterTargets.hs b/gen/Network/AWS/ELBv2/DeregisterTargets.hs
--- a/gen/Network/AWS/ELBv2/DeregisterTargets.hs
+++ b/gen/Network/AWS/ELBv2/DeregisterTargets.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.DeregisterTargets
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,23 +37,20 @@
     , dtsrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for DeregisterTargets.
---
---
---
--- /See:/ 'deregisterTargets' smart constructor.
+-- | /See:/ 'deregisterTargets' smart constructor.
 data DeregisterTargets = DeregisterTargets'
-    { _dtTargetGroupARN :: !Text
-    , _dtTargets        :: ![TargetDescription]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dtTargetGroupARN :: !Text
+  , _dtTargets        :: ![TargetDescription]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeregisterTargets' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -65,11 +62,9 @@
     :: Text -- ^ 'dtTargetGroupARN'
     -> DeregisterTargets
 deregisterTargets pTargetGroupARN_ =
-    DeregisterTargets'
-    { _dtTargetGroupARN = pTargetGroupARN_
-    , _dtTargets = mempty
-    }
+  DeregisterTargets' {_dtTargetGroupARN = pTargetGroupARN_, _dtTargets = mempty}
 
+
 -- | The Amazon Resource Name (ARN) of the target group.
 dtTargetGroupARN :: Lens' DeregisterTargets Text
 dtTargetGroupARN = lens _dtTargetGroupARN (\ s a -> s{_dtTargetGroupARN = a});
@@ -86,9 +81,9 @@
               (\ s h x ->
                  DeregisterTargetsResponse' <$> (pure (fromEnum s)))
 
-instance Hashable DeregisterTargets
+instance Hashable DeregisterTargets where
 
-instance NFData DeregisterTargets
+instance NFData DeregisterTargets where
 
 instance ToHeaders DeregisterTargets where
         toHeaders = const mempty
@@ -104,15 +99,12 @@
                "TargetGroupArn" =: _dtTargetGroupARN,
                "Targets" =: toQueryList "member" _dtTargets]
 
--- | Contains the output of DeregisterTargets.
---
---
---
--- /See:/ 'deregisterTargetsResponse' smart constructor.
+-- | /See:/ 'deregisterTargetsResponse' smart constructor.
 newtype DeregisterTargetsResponse = DeregisterTargetsResponse'
-    { _dtsrsResponseStatus :: Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dtsrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeregisterTargetsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -122,12 +114,11 @@
     :: Int -- ^ 'dtsrsResponseStatus'
     -> DeregisterTargetsResponse
 deregisterTargetsResponse pResponseStatus_ =
-    DeregisterTargetsResponse'
-    { _dtsrsResponseStatus = pResponseStatus_
-    }
+  DeregisterTargetsResponse' {_dtsrsResponseStatus = pResponseStatus_}
 
+
 -- | -- | The response status code.
 dtsrsResponseStatus :: Lens' DeregisterTargetsResponse Int
 dtsrsResponseStatus = lens _dtsrsResponseStatus (\ s a -> s{_dtsrsResponseStatus = a});
 
-instance NFData DeregisterTargetsResponse
+instance NFData DeregisterTargetsResponse where
diff --git a/gen/Network/AWS/ELBv2/DescribeAccountLimits.hs b/gen/Network/AWS/ELBv2/DescribeAccountLimits.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/ELBv2/DescribeAccountLimits.hs
@@ -0,0 +1,149 @@
+{-# 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.ELBv2.DescribeAccountLimits
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the current Elastic Load Balancing resource limits for your AWS account.
+--
+--
+-- For more information, see <http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-limits.html Limits for Your Application Load Balancers> in the /Application Load Balancer Guide/ or <http://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-limits.html Limits for Your Network Load Balancers> in the /Network Load Balancers Guide/ .
+--
+module Network.AWS.ELBv2.DescribeAccountLimits
+    (
+    -- * Creating a Request
+      describeAccountLimits
+    , DescribeAccountLimits
+    -- * Request Lenses
+    , dalMarker
+    , dalPageSize
+
+    -- * Destructuring the Response
+    , describeAccountLimitsResponse
+    , DescribeAccountLimitsResponse
+    -- * Response Lenses
+    , dalrsLimits
+    , dalrsNextMarker
+    , dalrsResponseStatus
+    ) where
+
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'describeAccountLimits' smart constructor.
+data DescribeAccountLimits = DescribeAccountLimits'
+  { _dalMarker   :: !(Maybe Text)
+  , _dalPageSize :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeAccountLimits' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dalMarker' - The marker for the next set of results. (You received this marker from a previous call.)
+--
+-- * 'dalPageSize' - The maximum number of results to return with this call.
+describeAccountLimits
+    :: DescribeAccountLimits
+describeAccountLimits =
+  DescribeAccountLimits' {_dalMarker = Nothing, _dalPageSize = Nothing}
+
+
+-- | The marker for the next set of results. (You received this marker from a previous call.)
+dalMarker :: Lens' DescribeAccountLimits (Maybe Text)
+dalMarker = lens _dalMarker (\ s a -> s{_dalMarker = a});
+
+-- | The maximum number of results to return with this call.
+dalPageSize :: Lens' DescribeAccountLimits (Maybe Natural)
+dalPageSize = lens _dalPageSize (\ s a -> s{_dalPageSize = a}) . mapping _Nat;
+
+instance AWSRequest DescribeAccountLimits where
+        type Rs DescribeAccountLimits =
+             DescribeAccountLimitsResponse
+        request = postQuery eLBv2
+        response
+          = receiveXMLWrapper "DescribeAccountLimitsResult"
+              (\ s h x ->
+                 DescribeAccountLimitsResponse' <$>
+                   (x .@? "Limits" .!@ mempty >>=
+                      may (parseXMLList "member"))
+                     <*> (x .@? "NextMarker")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeAccountLimits where
+
+instance NFData DescribeAccountLimits where
+
+instance ToHeaders DescribeAccountLimits where
+        toHeaders = const mempty
+
+instance ToPath DescribeAccountLimits where
+        toPath = const "/"
+
+instance ToQuery DescribeAccountLimits where
+        toQuery DescribeAccountLimits'{..}
+          = mconcat
+              ["Action" =: ("DescribeAccountLimits" :: ByteString),
+               "Version" =: ("2015-12-01" :: ByteString),
+               "Marker" =: _dalMarker, "PageSize" =: _dalPageSize]
+
+-- | /See:/ 'describeAccountLimitsResponse' smart constructor.
+data DescribeAccountLimitsResponse = DescribeAccountLimitsResponse'
+  { _dalrsLimits         :: !(Maybe [Limit])
+  , _dalrsNextMarker     :: !(Maybe Text)
+  , _dalrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeAccountLimitsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dalrsLimits' - Information about the limits.
+--
+-- * 'dalrsNextMarker' - The marker to use when requesting the next set of results. If there are no additional results, the string is empty.
+--
+-- * 'dalrsResponseStatus' - -- | The response status code.
+describeAccountLimitsResponse
+    :: Int -- ^ 'dalrsResponseStatus'
+    -> DescribeAccountLimitsResponse
+describeAccountLimitsResponse pResponseStatus_ =
+  DescribeAccountLimitsResponse'
+  { _dalrsLimits = Nothing
+  , _dalrsNextMarker = Nothing
+  , _dalrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | Information about the limits.
+dalrsLimits :: Lens' DescribeAccountLimitsResponse [Limit]
+dalrsLimits = lens _dalrsLimits (\ s a -> s{_dalrsLimits = a}) . _Default . _Coerce;
+
+-- | The marker to use when requesting the next set of results. If there are no additional results, the string is empty.
+dalrsNextMarker :: Lens' DescribeAccountLimitsResponse (Maybe Text)
+dalrsNextMarker = lens _dalrsNextMarker (\ s a -> s{_dalrsNextMarker = a});
+
+-- | -- | The response status code.
+dalrsResponseStatus :: Lens' DescribeAccountLimitsResponse Int
+dalrsResponseStatus = lens _dalrsResponseStatus (\ s a -> s{_dalrsResponseStatus = a});
+
+instance NFData DescribeAccountLimitsResponse where
diff --git a/gen/Network/AWS/ELBv2/DescribeListenerCertificates.hs b/gen/Network/AWS/ELBv2/DescribeListenerCertificates.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/ELBv2/DescribeListenerCertificates.hs
@@ -0,0 +1,165 @@
+{-# 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.ELBv2.DescribeListenerCertificates
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the certificates for the specified secure listener.
+--
+--
+module Network.AWS.ELBv2.DescribeListenerCertificates
+    (
+    -- * Creating a Request
+      describeListenerCertificates
+    , DescribeListenerCertificates
+    -- * Request Lenses
+    , dlcMarker
+    , dlcPageSize
+    , dlcListenerARN
+
+    -- * Destructuring the Response
+    , describeListenerCertificatesResponse
+    , DescribeListenerCertificatesResponse
+    -- * Response Lenses
+    , dlcrsCertificates
+    , dlcrsNextMarker
+    , dlcrsResponseStatus
+    ) where
+
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'describeListenerCertificates' smart constructor.
+data DescribeListenerCertificates = DescribeListenerCertificates'
+  { _dlcMarker      :: !(Maybe Text)
+  , _dlcPageSize    :: !(Maybe Nat)
+  , _dlcListenerARN :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeListenerCertificates' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dlcMarker' - The marker for the next set of results. (You received this marker from a previous call.)
+--
+-- * 'dlcPageSize' - The maximum number of results to return with this call.
+--
+-- * 'dlcListenerARN' - The Amazon Resource Names (ARN) of the listener.
+describeListenerCertificates
+    :: Text -- ^ 'dlcListenerARN'
+    -> DescribeListenerCertificates
+describeListenerCertificates pListenerARN_ =
+  DescribeListenerCertificates'
+  { _dlcMarker = Nothing
+  , _dlcPageSize = Nothing
+  , _dlcListenerARN = pListenerARN_
+  }
+
+
+-- | The marker for the next set of results. (You received this marker from a previous call.)
+dlcMarker :: Lens' DescribeListenerCertificates (Maybe Text)
+dlcMarker = lens _dlcMarker (\ s a -> s{_dlcMarker = a});
+
+-- | The maximum number of results to return with this call.
+dlcPageSize :: Lens' DescribeListenerCertificates (Maybe Natural)
+dlcPageSize = lens _dlcPageSize (\ s a -> s{_dlcPageSize = a}) . mapping _Nat;
+
+-- | The Amazon Resource Names (ARN) of the listener.
+dlcListenerARN :: Lens' DescribeListenerCertificates Text
+dlcListenerARN = lens _dlcListenerARN (\ s a -> s{_dlcListenerARN = a});
+
+instance AWSRequest DescribeListenerCertificates
+         where
+        type Rs DescribeListenerCertificates =
+             DescribeListenerCertificatesResponse
+        request = postQuery eLBv2
+        response
+          = receiveXMLWrapper
+              "DescribeListenerCertificatesResult"
+              (\ s h x ->
+                 DescribeListenerCertificatesResponse' <$>
+                   (x .@? "Certificates" .!@ mempty >>=
+                      may (parseXMLList "member"))
+                     <*> (x .@? "NextMarker")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeListenerCertificates where
+
+instance NFData DescribeListenerCertificates where
+
+instance ToHeaders DescribeListenerCertificates where
+        toHeaders = const mempty
+
+instance ToPath DescribeListenerCertificates where
+        toPath = const "/"
+
+instance ToQuery DescribeListenerCertificates where
+        toQuery DescribeListenerCertificates'{..}
+          = mconcat
+              ["Action" =:
+                 ("DescribeListenerCertificates" :: ByteString),
+               "Version" =: ("2015-12-01" :: ByteString),
+               "Marker" =: _dlcMarker, "PageSize" =: _dlcPageSize,
+               "ListenerArn" =: _dlcListenerARN]
+
+-- | /See:/ 'describeListenerCertificatesResponse' smart constructor.
+data DescribeListenerCertificatesResponse = DescribeListenerCertificatesResponse'
+  { _dlcrsCertificates   :: !(Maybe [Certificate])
+  , _dlcrsNextMarker     :: !(Maybe Text)
+  , _dlcrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeListenerCertificatesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dlcrsCertificates' - Information about the certificates.
+--
+-- * 'dlcrsNextMarker' - The marker to use when requesting the next set of results. If there are no additional results, the string is empty.
+--
+-- * 'dlcrsResponseStatus' - -- | The response status code.
+describeListenerCertificatesResponse
+    :: Int -- ^ 'dlcrsResponseStatus'
+    -> DescribeListenerCertificatesResponse
+describeListenerCertificatesResponse pResponseStatus_ =
+  DescribeListenerCertificatesResponse'
+  { _dlcrsCertificates = Nothing
+  , _dlcrsNextMarker = Nothing
+  , _dlcrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | Information about the certificates.
+dlcrsCertificates :: Lens' DescribeListenerCertificatesResponse [Certificate]
+dlcrsCertificates = lens _dlcrsCertificates (\ s a -> s{_dlcrsCertificates = a}) . _Default . _Coerce;
+
+-- | The marker to use when requesting the next set of results. If there are no additional results, the string is empty.
+dlcrsNextMarker :: Lens' DescribeListenerCertificatesResponse (Maybe Text)
+dlcrsNextMarker = lens _dlcrsNextMarker (\ s a -> s{_dlcrsNextMarker = a});
+
+-- | -- | The response status code.
+dlcrsResponseStatus :: Lens' DescribeListenerCertificatesResponse Int
+dlcrsResponseStatus = lens _dlcrsResponseStatus (\ s a -> s{_dlcrsResponseStatus = a});
+
+instance NFData DescribeListenerCertificatesResponse
+         where
diff --git a/gen/Network/AWS/ELBv2/DescribeListeners.hs b/gen/Network/AWS/ELBv2/DescribeListeners.hs
--- a/gen/Network/AWS/ELBv2/DescribeListeners.hs
+++ b/gen/Network/AWS/ELBv2/DescribeListeners.hs
@@ -12,13 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.DescribeListeners
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Describes the specified listeners or the listeners for the specified Application Load Balancer. You must specify either a load balancer or one or more listeners.
+-- Describes the specified listeners or the listeners for the specified Application Load Balancer or Network Load Balancer. You must specify either a load balancer or one or more listeners.
 --
 --
 --
@@ -43,26 +43,23 @@
     , dlsrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for DescribeListeners.
---
---
---
--- /See:/ 'describeListeners' smart constructor.
+-- | /See:/ 'describeListeners' smart constructor.
 data DescribeListeners = DescribeListeners'
-    { _dlListenerARNs    :: !(Maybe [Text])
-    , _dlLoadBalancerARN :: !(Maybe Text)
-    , _dlMarker          :: !(Maybe Text)
-    , _dlPageSize        :: !(Maybe Nat)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dlListenerARNs    :: !(Maybe [Text])
+  , _dlLoadBalancerARN :: !(Maybe Text)
+  , _dlMarker          :: !(Maybe Text)
+  , _dlPageSize        :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeListeners' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -77,13 +74,14 @@
 describeListeners
     :: DescribeListeners
 describeListeners =
-    DescribeListeners'
-    { _dlListenerARNs = Nothing
-    , _dlLoadBalancerARN = Nothing
-    , _dlMarker = Nothing
-    , _dlPageSize = Nothing
-    }
+  DescribeListeners'
+  { _dlListenerARNs = Nothing
+  , _dlLoadBalancerARN = Nothing
+  , _dlMarker = Nothing
+  , _dlPageSize = Nothing
+  }
 
+
 -- | The Amazon Resource Names (ARN) of the listeners.
 dlListenerARNs :: Lens' DescribeListeners [Text]
 dlListenerARNs = lens _dlListenerARNs (\ s a -> s{_dlListenerARNs = a}) . _Default . _Coerce;
@@ -119,9 +117,9 @@
                         may (parseXMLList "member"))
                      <*> (pure (fromEnum s)))
 
-instance Hashable DescribeListeners
+instance Hashable DescribeListeners where
 
-instance NFData DescribeListeners
+instance NFData DescribeListeners where
 
 instance ToHeaders DescribeListeners where
         toHeaders = const mempty
@@ -139,17 +137,14 @@
                "LoadBalancerArn" =: _dlLoadBalancerARN,
                "Marker" =: _dlMarker, "PageSize" =: _dlPageSize]
 
--- | Contains the output of DescribeListeners.
---
---
---
--- /See:/ 'describeListenersResponse' smart constructor.
+-- | /See:/ 'describeListenersResponse' smart constructor.
 data DescribeListenersResponse = DescribeListenersResponse'
-    { _dlsrsNextMarker     :: !(Maybe Text)
-    , _dlsrsListeners      :: !(Maybe [Listener])
-    , _dlsrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dlsrsNextMarker     :: !(Maybe Text)
+  , _dlsrsListeners      :: !(Maybe [Listener])
+  , _dlsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeListenersResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -163,12 +158,13 @@
     :: Int -- ^ 'dlsrsResponseStatus'
     -> DescribeListenersResponse
 describeListenersResponse pResponseStatus_ =
-    DescribeListenersResponse'
-    { _dlsrsNextMarker = Nothing
-    , _dlsrsListeners = Nothing
-    , _dlsrsResponseStatus = pResponseStatus_
-    }
+  DescribeListenersResponse'
+  { _dlsrsNextMarker = Nothing
+  , _dlsrsListeners = Nothing
+  , _dlsrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | The marker to use when requesting the next set of results. If there are no additional results, the string is empty.
 dlsrsNextMarker :: Lens' DescribeListenersResponse (Maybe Text)
 dlsrsNextMarker = lens _dlsrsNextMarker (\ s a -> s{_dlsrsNextMarker = a});
@@ -181,4 +177,4 @@
 dlsrsResponseStatus :: Lens' DescribeListenersResponse Int
 dlsrsResponseStatus = lens _dlsrsResponseStatus (\ s a -> s{_dlsrsResponseStatus = a});
 
-instance NFData DescribeListenersResponse
+instance NFData DescribeListenersResponse where
diff --git a/gen/Network/AWS/ELBv2/DescribeLoadBalancerAttributes.hs b/gen/Network/AWS/ELBv2/DescribeLoadBalancerAttributes.hs
--- a/gen/Network/AWS/ELBv2/DescribeLoadBalancerAttributes.hs
+++ b/gen/Network/AWS/ELBv2/DescribeLoadBalancerAttributes.hs
@@ -12,13 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.DescribeLoadBalancerAttributes
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Describes the attributes for the specified Application Load Balancer.
+-- Describes the attributes for the specified Application Load Balancer or Network Load Balancer.
 --
 --
 module Network.AWS.ELBv2.DescribeLoadBalancerAttributes
@@ -37,22 +37,19 @@
     , dlbarsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for DescribeLoadBalancerAttributes.
---
---
---
--- /See:/ 'describeLoadBalancerAttributes' smart constructor.
+-- | /See:/ 'describeLoadBalancerAttributes' smart constructor.
 newtype DescribeLoadBalancerAttributes = DescribeLoadBalancerAttributes'
-    { _dlbaLoadBalancerARN :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dlbaLoadBalancerARN :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeLoadBalancerAttributes' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -62,10 +59,9 @@
     :: Text -- ^ 'dlbaLoadBalancerARN'
     -> DescribeLoadBalancerAttributes
 describeLoadBalancerAttributes pLoadBalancerARN_ =
-    DescribeLoadBalancerAttributes'
-    { _dlbaLoadBalancerARN = pLoadBalancerARN_
-    }
+  DescribeLoadBalancerAttributes' {_dlbaLoadBalancerARN = pLoadBalancerARN_}
 
+
 -- | The Amazon Resource Name (ARN) of the load balancer.
 dlbaLoadBalancerARN :: Lens' DescribeLoadBalancerAttributes Text
 dlbaLoadBalancerARN = lens _dlbaLoadBalancerARN (\ s a -> s{_dlbaLoadBalancerARN = a});
@@ -85,8 +81,9 @@
                      <*> (pure (fromEnum s)))
 
 instance Hashable DescribeLoadBalancerAttributes
+         where
 
-instance NFData DescribeLoadBalancerAttributes
+instance NFData DescribeLoadBalancerAttributes where
 
 instance ToHeaders DescribeLoadBalancerAttributes
          where
@@ -103,16 +100,13 @@
                "Version" =: ("2015-12-01" :: ByteString),
                "LoadBalancerArn" =: _dlbaLoadBalancerARN]
 
--- | Contains the output of DescribeLoadBalancerAttributes.
---
---
---
--- /See:/ 'describeLoadBalancerAttributesResponse' smart constructor.
+-- | /See:/ 'describeLoadBalancerAttributesResponse' smart constructor.
 data DescribeLoadBalancerAttributesResponse = DescribeLoadBalancerAttributesResponse'
-    { _dlbarsAttributes     :: !(Maybe [LoadBalancerAttribute])
-    , _dlbarsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dlbarsAttributes     :: !(Maybe [LoadBalancerAttribute])
+  , _dlbarsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeLoadBalancerAttributesResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -124,11 +118,10 @@
     :: Int -- ^ 'dlbarsResponseStatus'
     -> DescribeLoadBalancerAttributesResponse
 describeLoadBalancerAttributesResponse pResponseStatus_ =
-    DescribeLoadBalancerAttributesResponse'
-    { _dlbarsAttributes = Nothing
-    , _dlbarsResponseStatus = pResponseStatus_
-    }
+  DescribeLoadBalancerAttributesResponse'
+  {_dlbarsAttributes = Nothing, _dlbarsResponseStatus = pResponseStatus_}
 
+
 -- | Information about the load balancer attributes.
 dlbarsAttributes :: Lens' DescribeLoadBalancerAttributesResponse [LoadBalancerAttribute]
 dlbarsAttributes = lens _dlbarsAttributes (\ s a -> s{_dlbarsAttributes = a}) . _Default . _Coerce;
@@ -138,4 +131,5 @@
 dlbarsResponseStatus = lens _dlbarsResponseStatus (\ s a -> s{_dlbarsResponseStatus = a});
 
 instance NFData
-         DescribeLoadBalancerAttributesResponse
+           DescribeLoadBalancerAttributesResponse
+         where
diff --git a/gen/Network/AWS/ELBv2/DescribeLoadBalancers.hs b/gen/Network/AWS/ELBv2/DescribeLoadBalancers.hs
--- a/gen/Network/AWS/ELBv2/DescribeLoadBalancers.hs
+++ b/gen/Network/AWS/ELBv2/DescribeLoadBalancers.hs
@@ -12,13 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.DescribeLoadBalancers
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Describes the specified Application Load Balancers or all of your Application Load Balancers.
+-- Describes the specified load balancers or all of your load balancers.
 --
 --
 -- To describe the listeners for a load balancer, use 'DescribeListeners' . To describe the attributes for a load balancer, use 'DescribeLoadBalancerAttributes' .
@@ -45,33 +45,30 @@
     , dlbrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for DescribeLoadBalancers.
---
---
---
--- /See:/ 'describeLoadBalancers' smart constructor.
+-- | /See:/ 'describeLoadBalancers' smart constructor.
 data DescribeLoadBalancers = DescribeLoadBalancers'
-    { _dlbNames            :: !(Maybe [Text])
-    , _dlbLoadBalancerARNs :: !(Maybe [Text])
-    , _dlbMarker           :: !(Maybe Text)
-    , _dlbPageSize         :: !(Maybe Nat)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dlbNames            :: !(Maybe [Text])
+  , _dlbLoadBalancerARNs :: !(Maybe [Text])
+  , _dlbMarker           :: !(Maybe Text)
+  , _dlbPageSize         :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeLoadBalancers' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
 -- * 'dlbNames' - The names of the load balancers.
 --
--- * 'dlbLoadBalancerARNs' - The Amazon Resource Names (ARN) of the load balancers.
+-- * 'dlbLoadBalancerARNs' - The Amazon Resource Names (ARN) of the load balancers. You can specify up to 20 load balancers in a single call.
 --
 -- * 'dlbMarker' - The marker for the next set of results. (You received this marker from a previous call.)
 --
@@ -79,18 +76,19 @@
 describeLoadBalancers
     :: DescribeLoadBalancers
 describeLoadBalancers =
-    DescribeLoadBalancers'
-    { _dlbNames = Nothing
-    , _dlbLoadBalancerARNs = Nothing
-    , _dlbMarker = Nothing
-    , _dlbPageSize = Nothing
-    }
+  DescribeLoadBalancers'
+  { _dlbNames = Nothing
+  , _dlbLoadBalancerARNs = Nothing
+  , _dlbMarker = Nothing
+  , _dlbPageSize = Nothing
+  }
 
+
 -- | The names of the load balancers.
 dlbNames :: Lens' DescribeLoadBalancers [Text]
 dlbNames = lens _dlbNames (\ s a -> s{_dlbNames = a}) . _Default . _Coerce;
 
--- | The Amazon Resource Names (ARN) of the load balancers.
+-- | The Amazon Resource Names (ARN) of the load balancers. You can specify up to 20 load balancers in a single call.
 dlbLoadBalancerARNs :: Lens' DescribeLoadBalancers [Text]
 dlbLoadBalancerARNs = lens _dlbLoadBalancerARNs (\ s a -> s{_dlbLoadBalancerARNs = a}) . _Default . _Coerce;
 
@@ -122,9 +120,9 @@
                      <*> (x .@? "NextMarker")
                      <*> (pure (fromEnum s)))
 
-instance Hashable DescribeLoadBalancers
+instance Hashable DescribeLoadBalancers where
 
-instance NFData DescribeLoadBalancers
+instance NFData DescribeLoadBalancers where
 
 instance ToHeaders DescribeLoadBalancers where
         toHeaders = const mempty
@@ -144,17 +142,14 @@
                    (toQueryList "member" <$> _dlbLoadBalancerARNs),
                "Marker" =: _dlbMarker, "PageSize" =: _dlbPageSize]
 
--- | Contains the output of DescribeLoadBalancers.
---
---
---
--- /See:/ 'describeLoadBalancersResponse' smart constructor.
+-- | /See:/ 'describeLoadBalancersResponse' smart constructor.
 data DescribeLoadBalancersResponse = DescribeLoadBalancersResponse'
-    { _dlbrsLoadBalancers  :: !(Maybe [LoadBalancer])
-    , _dlbrsNextMarker     :: !(Maybe Text)
-    , _dlbrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dlbrsLoadBalancers  :: !(Maybe [LoadBalancer])
+  , _dlbrsNextMarker     :: !(Maybe Text)
+  , _dlbrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeLoadBalancersResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -168,12 +163,13 @@
     :: Int -- ^ 'dlbrsResponseStatus'
     -> DescribeLoadBalancersResponse
 describeLoadBalancersResponse pResponseStatus_ =
-    DescribeLoadBalancersResponse'
-    { _dlbrsLoadBalancers = Nothing
-    , _dlbrsNextMarker = Nothing
-    , _dlbrsResponseStatus = pResponseStatus_
-    }
+  DescribeLoadBalancersResponse'
+  { _dlbrsLoadBalancers = Nothing
+  , _dlbrsNextMarker = Nothing
+  , _dlbrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Information about the load balancers.
 dlbrsLoadBalancers :: Lens' DescribeLoadBalancersResponse [LoadBalancer]
 dlbrsLoadBalancers = lens _dlbrsLoadBalancers (\ s a -> s{_dlbrsLoadBalancers = a}) . _Default . _Coerce;
@@ -186,4 +182,4 @@
 dlbrsResponseStatus :: Lens' DescribeLoadBalancersResponse Int
 dlbrsResponseStatus = lens _dlbrsResponseStatus (\ s a -> s{_dlbrsResponseStatus = a});
 
-instance NFData DescribeLoadBalancersResponse
+instance NFData DescribeLoadBalancersResponse where
diff --git a/gen/Network/AWS/ELBv2/DescribeRules.hs b/gen/Network/AWS/ELBv2/DescribeRules.hs
--- a/gen/Network/AWS/ELBv2/DescribeRules.hs
+++ b/gen/Network/AWS/ELBv2/DescribeRules.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.DescribeRules
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -28,56 +28,73 @@
     , DescribeRules
     -- * Request Lenses
     , drListenerARN
+    , drMarker
     , drRuleARNs
+    , drPageSize
 
     -- * Destructuring the Response
     , describeRulesResponse
     , DescribeRulesResponse
     -- * Response Lenses
     , drsrsRules
+    , drsrsNextMarker
     , drsrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for DescribeRules.
---
---
---
--- /See:/ 'describeRules' smart constructor.
+-- | /See:/ 'describeRules' smart constructor.
 data DescribeRules = DescribeRules'
-    { _drListenerARN :: !(Maybe Text)
-    , _drRuleARNs    :: !(Maybe [Text])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _drListenerARN :: !(Maybe Text)
+  , _drMarker      :: !(Maybe Text)
+  , _drRuleARNs    :: !(Maybe [Text])
+  , _drPageSize    :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeRules' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
 -- * 'drListenerARN' - The Amazon Resource Name (ARN) of the listener.
 --
+-- * 'drMarker' - The marker for the next set of results. (You received this marker from a previous call.)
+--
 -- * 'drRuleARNs' - The Amazon Resource Names (ARN) of the rules.
+--
+-- * 'drPageSize' - The maximum number of results to return with this call.
 describeRules
     :: DescribeRules
 describeRules =
-    DescribeRules'
-    { _drListenerARN = Nothing
-    , _drRuleARNs = Nothing
-    }
+  DescribeRules'
+  { _drListenerARN = Nothing
+  , _drMarker = Nothing
+  , _drRuleARNs = Nothing
+  , _drPageSize = Nothing
+  }
 
+
 -- | The Amazon Resource Name (ARN) of the listener.
 drListenerARN :: Lens' DescribeRules (Maybe Text)
 drListenerARN = lens _drListenerARN (\ s a -> s{_drListenerARN = a});
 
+-- | The marker for the next set of results. (You received this marker from a previous call.)
+drMarker :: Lens' DescribeRules (Maybe Text)
+drMarker = lens _drMarker (\ s a -> s{_drMarker = a});
+
 -- | The Amazon Resource Names (ARN) of the rules.
 drRuleARNs :: Lens' DescribeRules [Text]
 drRuleARNs = lens _drRuleARNs (\ s a -> s{_drRuleARNs = a}) . _Default . _Coerce;
 
+-- | The maximum number of results to return with this call.
+drPageSize :: Lens' DescribeRules (Maybe Natural)
+drPageSize = lens _drPageSize (\ s a -> s{_drPageSize = a}) . mapping _Nat;
+
 instance AWSRequest DescribeRules where
         type Rs DescribeRules = DescribeRulesResponse
         request = postQuery eLBv2
@@ -87,11 +104,12 @@
                  DescribeRulesResponse' <$>
                    (x .@? "Rules" .!@ mempty >>=
                       may (parseXMLList "member"))
+                     <*> (x .@? "NextMarker")
                      <*> (pure (fromEnum s)))
 
-instance Hashable DescribeRules
+instance Hashable DescribeRules where
 
-instance NFData DescribeRules
+instance NFData DescribeRules where
 
 instance ToHeaders DescribeRules where
         toHeaders = const mempty
@@ -105,41 +123,49 @@
               ["Action" =: ("DescribeRules" :: ByteString),
                "Version" =: ("2015-12-01" :: ByteString),
                "ListenerArn" =: _drListenerARN,
+               "Marker" =: _drMarker,
                "RuleArns" =:
-                 toQuery (toQueryList "member" <$> _drRuleARNs)]
+                 toQuery (toQueryList "member" <$> _drRuleARNs),
+               "PageSize" =: _drPageSize]
 
--- | Contains the output of DescribeRules.
---
---
---
--- /See:/ 'describeRulesResponse' smart constructor.
+-- | /See:/ 'describeRulesResponse' smart constructor.
 data DescribeRulesResponse = DescribeRulesResponse'
-    { _drsrsRules          :: !(Maybe [Rule])
-    , _drsrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _drsrsRules          :: !(Maybe [Rule])
+  , _drsrsNextMarker     :: !(Maybe Text)
+  , _drsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeRulesResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
 -- * 'drsrsRules' - Information about the rules.
 --
+-- * 'drsrsNextMarker' - The marker to use when requesting the next set of results. If there are no additional results, the string is empty.
+--
 -- * 'drsrsResponseStatus' - -- | The response status code.
 describeRulesResponse
     :: Int -- ^ 'drsrsResponseStatus'
     -> DescribeRulesResponse
 describeRulesResponse pResponseStatus_ =
-    DescribeRulesResponse'
-    { _drsrsRules = Nothing
-    , _drsrsResponseStatus = pResponseStatus_
-    }
+  DescribeRulesResponse'
+  { _drsrsRules = Nothing
+  , _drsrsNextMarker = Nothing
+  , _drsrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Information about the rules.
 drsrsRules :: Lens' DescribeRulesResponse [Rule]
 drsrsRules = lens _drsrsRules (\ s a -> s{_drsrsRules = a}) . _Default . _Coerce;
 
+-- | The marker to use when requesting the next set of results. If there are no additional results, the string is empty.
+drsrsNextMarker :: Lens' DescribeRulesResponse (Maybe Text)
+drsrsNextMarker = lens _drsrsNextMarker (\ s a -> s{_drsrsNextMarker = a});
+
 -- | -- | The response status code.
 drsrsResponseStatus :: Lens' DescribeRulesResponse Int
 drsrsResponseStatus = lens _drsrsResponseStatus (\ s a -> s{_drsrsResponseStatus = a});
 
-instance NFData DescribeRulesResponse
+instance NFData DescribeRulesResponse where
diff --git a/gen/Network/AWS/ELBv2/DescribeSSLPolicies.hs b/gen/Network/AWS/ELBv2/DescribeSSLPolicies.hs
--- a/gen/Network/AWS/ELBv2/DescribeSSLPolicies.hs
+++ b/gen/Network/AWS/ELBv2/DescribeSSLPolicies.hs
@@ -12,16 +12,16 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.DescribeSSLPolicies
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Describes the specified policies or all policies used for SSL negotiation.
 --
 --
--- Note that the only supported policy at this time is ELBSecurityPolicy-2015-05.
+-- For more information, see <http://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html#describe-ssl-policies Security Policies> in the /Application Load Balancers Guide/ .
 --
 module Network.AWS.ELBv2.DescribeSSLPolicies
     (
@@ -42,24 +42,21 @@
     , dsprsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for DescribeSSLPolicies.
---
---
---
--- /See:/ 'describeSSLPolicies' smart constructor.
+-- | /See:/ 'describeSSLPolicies' smart constructor.
 data DescribeSSLPolicies = DescribeSSLPolicies'
-    { _dspNames    :: !(Maybe [Text])
-    , _dspMarker   :: !(Maybe Text)
-    , _dspPageSize :: !(Maybe Nat)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dspNames    :: !(Maybe [Text])
+  , _dspMarker   :: !(Maybe Text)
+  , _dspPageSize :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeSSLPolicies' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -72,12 +69,10 @@
 describeSSLPolicies
     :: DescribeSSLPolicies
 describeSSLPolicies =
-    DescribeSSLPolicies'
-    { _dspNames = Nothing
-    , _dspMarker = Nothing
-    , _dspPageSize = Nothing
-    }
+  DescribeSSLPolicies'
+  {_dspNames = Nothing, _dspMarker = Nothing, _dspPageSize = Nothing}
 
+
 -- | The names of the policies.
 dspNames :: Lens' DescribeSSLPolicies [Text]
 dspNames = lens _dspNames (\ s a -> s{_dspNames = a}) . _Default . _Coerce;
@@ -103,9 +98,9 @@
                      <*> (x .@? "NextMarker")
                      <*> (pure (fromEnum s)))
 
-instance Hashable DescribeSSLPolicies
+instance Hashable DescribeSSLPolicies where
 
-instance NFData DescribeSSLPolicies
+instance NFData DescribeSSLPolicies where
 
 instance ToHeaders DescribeSSLPolicies where
         toHeaders = const mempty
@@ -122,17 +117,14 @@
                  toQuery (toQueryList "member" <$> _dspNames),
                "Marker" =: _dspMarker, "PageSize" =: _dspPageSize]
 
--- | Contains the output of DescribeSSLPolicies.
---
---
---
--- /See:/ 'describeSSLPoliciesResponse' smart constructor.
+-- | /See:/ 'describeSSLPoliciesResponse' smart constructor.
 data DescribeSSLPoliciesResponse = DescribeSSLPoliciesResponse'
-    { _dsprsSSLPolicies    :: !(Maybe [SSLPolicy])
-    , _dsprsNextMarker     :: !(Maybe Text)
-    , _dsprsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dsprsSSLPolicies    :: !(Maybe [SSLPolicy])
+  , _dsprsNextMarker     :: !(Maybe Text)
+  , _dsprsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeSSLPoliciesResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -146,12 +138,13 @@
     :: Int -- ^ 'dsprsResponseStatus'
     -> DescribeSSLPoliciesResponse
 describeSSLPoliciesResponse pResponseStatus_ =
-    DescribeSSLPoliciesResponse'
-    { _dsprsSSLPolicies = Nothing
-    , _dsprsNextMarker = Nothing
-    , _dsprsResponseStatus = pResponseStatus_
-    }
+  DescribeSSLPoliciesResponse'
+  { _dsprsSSLPolicies = Nothing
+  , _dsprsNextMarker = Nothing
+  , _dsprsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Information about the policies.
 dsprsSSLPolicies :: Lens' DescribeSSLPoliciesResponse [SSLPolicy]
 dsprsSSLPolicies = lens _dsprsSSLPolicies (\ s a -> s{_dsprsSSLPolicies = a}) . _Default . _Coerce;
@@ -164,4 +157,4 @@
 dsprsResponseStatus :: Lens' DescribeSSLPoliciesResponse Int
 dsprsResponseStatus = lens _dsprsResponseStatus (\ s a -> s{_dsprsResponseStatus = a});
 
-instance NFData DescribeSSLPoliciesResponse
+instance NFData DescribeSSLPoliciesResponse where
diff --git a/gen/Network/AWS/ELBv2/DescribeTags.hs b/gen/Network/AWS/ELBv2/DescribeTags.hs
--- a/gen/Network/AWS/ELBv2/DescribeTags.hs
+++ b/gen/Network/AWS/ELBv2/DescribeTags.hs
@@ -12,13 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.DescribeTags
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Describes the tags for the specified resources.
+-- Describes the tags for the specified resources. You can describe the tags for one or more Application Load Balancers, Network Load Balancers, and target groups.
 --
 --
 module Network.AWS.ELBv2.DescribeTags
@@ -37,22 +37,19 @@
     , dtrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for DescribeTags.
---
---
---
--- /See:/ 'describeTags' smart constructor.
+-- | /See:/ 'describeTags' smart constructor.
 newtype DescribeTags = DescribeTags'
-    { _dtResourceARNs :: [Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dtResourceARNs :: [Text]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeTags' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -60,11 +57,9 @@
 -- * 'dtResourceARNs' - The Amazon Resource Names (ARN) of the resources.
 describeTags
     :: DescribeTags
-describeTags =
-    DescribeTags'
-    { _dtResourceARNs = mempty
-    }
+describeTags = DescribeTags' {_dtResourceARNs = mempty}
 
+
 -- | The Amazon Resource Names (ARN) of the resources.
 dtResourceARNs :: Lens' DescribeTags [Text]
 dtResourceARNs = lens _dtResourceARNs (\ s a -> s{_dtResourceARNs = a}) . _Coerce;
@@ -80,9 +75,9 @@
                       may (parseXMLList "member"))
                      <*> (pure (fromEnum s)))
 
-instance Hashable DescribeTags
+instance Hashable DescribeTags where
 
-instance NFData DescribeTags
+instance NFData DescribeTags where
 
 instance ToHeaders DescribeTags where
         toHeaders = const mempty
@@ -98,16 +93,13 @@
                "ResourceArns" =:
                  toQueryList "member" _dtResourceARNs]
 
--- | Contains the output of DescribeTags.
---
---
---
--- /See:/ 'describeTagsResponse' smart constructor.
+-- | /See:/ 'describeTagsResponse' smart constructor.
 data DescribeTagsResponse = DescribeTagsResponse'
-    { _dtrsTagDescriptions :: !(Maybe [TagDescription])
-    , _dtrsResponseStatus  :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dtrsTagDescriptions :: !(Maybe [TagDescription])
+  , _dtrsResponseStatus  :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeTagsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -119,11 +111,10 @@
     :: Int -- ^ 'dtrsResponseStatus'
     -> DescribeTagsResponse
 describeTagsResponse pResponseStatus_ =
-    DescribeTagsResponse'
-    { _dtrsTagDescriptions = Nothing
-    , _dtrsResponseStatus = pResponseStatus_
-    }
+  DescribeTagsResponse'
+  {_dtrsTagDescriptions = Nothing, _dtrsResponseStatus = pResponseStatus_}
 
+
 -- | Information about the tags.
 dtrsTagDescriptions :: Lens' DescribeTagsResponse [TagDescription]
 dtrsTagDescriptions = lens _dtrsTagDescriptions (\ s a -> s{_dtrsTagDescriptions = a}) . _Default . _Coerce;
@@ -132,4 +123,4 @@
 dtrsResponseStatus :: Lens' DescribeTagsResponse Int
 dtrsResponseStatus = lens _dtrsResponseStatus (\ s a -> s{_dtrsResponseStatus = a});
 
-instance NFData DescribeTagsResponse
+instance NFData DescribeTagsResponse where
diff --git a/gen/Network/AWS/ELBv2/DescribeTargetGroupAttributes.hs b/gen/Network/AWS/ELBv2/DescribeTargetGroupAttributes.hs
--- a/gen/Network/AWS/ELBv2/DescribeTargetGroupAttributes.hs
+++ b/gen/Network/AWS/ELBv2/DescribeTargetGroupAttributes.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.DescribeTargetGroupAttributes
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,22 +37,19 @@
     , dtgarsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for DescribeTargetGroupAttributes.
---
---
---
--- /See:/ 'describeTargetGroupAttributes' smart constructor.
+-- | /See:/ 'describeTargetGroupAttributes' smart constructor.
 newtype DescribeTargetGroupAttributes = DescribeTargetGroupAttributes'
-    { _dtgaTargetGroupARN :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dtgaTargetGroupARN :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeTargetGroupAttributes' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -62,10 +59,9 @@
     :: Text -- ^ 'dtgaTargetGroupARN'
     -> DescribeTargetGroupAttributes
 describeTargetGroupAttributes pTargetGroupARN_ =
-    DescribeTargetGroupAttributes'
-    { _dtgaTargetGroupARN = pTargetGroupARN_
-    }
+  DescribeTargetGroupAttributes' {_dtgaTargetGroupARN = pTargetGroupARN_}
 
+
 -- | The Amazon Resource Name (ARN) of the target group.
 dtgaTargetGroupARN :: Lens' DescribeTargetGroupAttributes Text
 dtgaTargetGroupARN = lens _dtgaTargetGroupARN (\ s a -> s{_dtgaTargetGroupARN = a});
@@ -84,9 +80,9 @@
                       may (parseXMLList "member"))
                      <*> (pure (fromEnum s)))
 
-instance Hashable DescribeTargetGroupAttributes
+instance Hashable DescribeTargetGroupAttributes where
 
-instance NFData DescribeTargetGroupAttributes
+instance NFData DescribeTargetGroupAttributes where
 
 instance ToHeaders DescribeTargetGroupAttributes
          where
@@ -103,16 +99,13 @@
                "Version" =: ("2015-12-01" :: ByteString),
                "TargetGroupArn" =: _dtgaTargetGroupARN]
 
--- | Contains the output of DescribeTargetGroupAttributes.
---
---
---
--- /See:/ 'describeTargetGroupAttributesResponse' smart constructor.
+-- | /See:/ 'describeTargetGroupAttributesResponse' smart constructor.
 data DescribeTargetGroupAttributesResponse = DescribeTargetGroupAttributesResponse'
-    { _dtgarsAttributes     :: !(Maybe [TargetGroupAttribute])
-    , _dtgarsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dtgarsAttributes     :: !(Maybe [TargetGroupAttribute])
+  , _dtgarsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeTargetGroupAttributesResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -124,11 +117,10 @@
     :: Int -- ^ 'dtgarsResponseStatus'
     -> DescribeTargetGroupAttributesResponse
 describeTargetGroupAttributesResponse pResponseStatus_ =
-    DescribeTargetGroupAttributesResponse'
-    { _dtgarsAttributes = Nothing
-    , _dtgarsResponseStatus = pResponseStatus_
-    }
+  DescribeTargetGroupAttributesResponse'
+  {_dtgarsAttributes = Nothing, _dtgarsResponseStatus = pResponseStatus_}
 
+
 -- | Information about the target group attributes
 dtgarsAttributes :: Lens' DescribeTargetGroupAttributesResponse [TargetGroupAttribute]
 dtgarsAttributes = lens _dtgarsAttributes (\ s a -> s{_dtgarsAttributes = a}) . _Default . _Coerce;
@@ -138,3 +130,4 @@
 dtgarsResponseStatus = lens _dtgarsResponseStatus (\ s a -> s{_dtgarsResponseStatus = a});
 
 instance NFData DescribeTargetGroupAttributesResponse
+         where
diff --git a/gen/Network/AWS/ELBv2/DescribeTargetGroups.hs b/gen/Network/AWS/ELBv2/DescribeTargetGroups.hs
--- a/gen/Network/AWS/ELBv2/DescribeTargetGroups.hs
+++ b/gen/Network/AWS/ELBv2/DescribeTargetGroups.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.DescribeTargetGroups
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -46,27 +46,24 @@
     , dtgsrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for DescribeTargetGroups.
---
---
---
--- /See:/ 'describeTargetGroups' smart constructor.
+-- | /See:/ 'describeTargetGroups' smart constructor.
 data DescribeTargetGroups = DescribeTargetGroups'
-    { _dtgTargetGroupARNs :: !(Maybe [Text])
-    , _dtgNames           :: !(Maybe [Text])
-    , _dtgLoadBalancerARN :: !(Maybe Text)
-    , _dtgMarker          :: !(Maybe Text)
-    , _dtgPageSize        :: !(Maybe Nat)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dtgTargetGroupARNs :: !(Maybe [Text])
+  , _dtgNames           :: !(Maybe [Text])
+  , _dtgLoadBalancerARN :: !(Maybe Text)
+  , _dtgMarker          :: !(Maybe Text)
+  , _dtgPageSize        :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeTargetGroups' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -83,14 +80,15 @@
 describeTargetGroups
     :: DescribeTargetGroups
 describeTargetGroups =
-    DescribeTargetGroups'
-    { _dtgTargetGroupARNs = Nothing
-    , _dtgNames = Nothing
-    , _dtgLoadBalancerARN = Nothing
-    , _dtgMarker = Nothing
-    , _dtgPageSize = Nothing
-    }
+  DescribeTargetGroups'
+  { _dtgTargetGroupARNs = Nothing
+  , _dtgNames = Nothing
+  , _dtgLoadBalancerARN = Nothing
+  , _dtgMarker = Nothing
+  , _dtgPageSize = Nothing
+  }
 
+
 -- | The Amazon Resource Names (ARN) of the target groups.
 dtgTargetGroupARNs :: Lens' DescribeTargetGroups [Text]
 dtgTargetGroupARNs = lens _dtgTargetGroupARNs (\ s a -> s{_dtgTargetGroupARNs = a}) . _Default . _Coerce;
@@ -131,9 +129,9 @@
                         may (parseXMLList "member"))
                      <*> (pure (fromEnum s)))
 
-instance Hashable DescribeTargetGroups
+instance Hashable DescribeTargetGroups where
 
-instance NFData DescribeTargetGroups
+instance NFData DescribeTargetGroups where
 
 instance ToHeaders DescribeTargetGroups where
         toHeaders = const mempty
@@ -154,17 +152,14 @@
                "LoadBalancerArn" =: _dtgLoadBalancerARN,
                "Marker" =: _dtgMarker, "PageSize" =: _dtgPageSize]
 
--- | Contains the output of DescribeTargetGroups.
---
---
---
--- /See:/ 'describeTargetGroupsResponse' smart constructor.
+-- | /See:/ 'describeTargetGroupsResponse' smart constructor.
 data DescribeTargetGroupsResponse = DescribeTargetGroupsResponse'
-    { _dtgsrsNextMarker     :: !(Maybe Text)
-    , _dtgsrsTargetGroups   :: !(Maybe [TargetGroup])
-    , _dtgsrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dtgsrsNextMarker     :: !(Maybe Text)
+  , _dtgsrsTargetGroups   :: !(Maybe [TargetGroup])
+  , _dtgsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeTargetGroupsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -178,12 +173,13 @@
     :: Int -- ^ 'dtgsrsResponseStatus'
     -> DescribeTargetGroupsResponse
 describeTargetGroupsResponse pResponseStatus_ =
-    DescribeTargetGroupsResponse'
-    { _dtgsrsNextMarker = Nothing
-    , _dtgsrsTargetGroups = Nothing
-    , _dtgsrsResponseStatus = pResponseStatus_
-    }
+  DescribeTargetGroupsResponse'
+  { _dtgsrsNextMarker = Nothing
+  , _dtgsrsTargetGroups = Nothing
+  , _dtgsrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | The marker to use when requesting the next set of results. If there are no additional results, the string is empty.
 dtgsrsNextMarker :: Lens' DescribeTargetGroupsResponse (Maybe Text)
 dtgsrsNextMarker = lens _dtgsrsNextMarker (\ s a -> s{_dtgsrsNextMarker = a});
@@ -196,4 +192,4 @@
 dtgsrsResponseStatus :: Lens' DescribeTargetGroupsResponse Int
 dtgsrsResponseStatus = lens _dtgsrsResponseStatus (\ s a -> s{_dtgsrsResponseStatus = a});
 
-instance NFData DescribeTargetGroupsResponse
+instance NFData DescribeTargetGroupsResponse where
diff --git a/gen/Network/AWS/ELBv2/DescribeTargetHealth.hs b/gen/Network/AWS/ELBv2/DescribeTargetHealth.hs
--- a/gen/Network/AWS/ELBv2/DescribeTargetHealth.hs
+++ b/gen/Network/AWS/ELBv2/DescribeTargetHealth.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.DescribeTargetHealth
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -38,23 +38,20 @@
     , dthrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for DescribeTargetHealth.
---
---
---
--- /See:/ 'describeTargetHealth' smart constructor.
+-- | /See:/ 'describeTargetHealth' smart constructor.
 data DescribeTargetHealth = DescribeTargetHealth'
-    { _dthTargets        :: !(Maybe [TargetDescription])
-    , _dthTargetGroupARN :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dthTargets        :: !(Maybe [TargetDescription])
+  , _dthTargetGroupARN :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeTargetHealth' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -66,11 +63,10 @@
     :: Text -- ^ 'dthTargetGroupARN'
     -> DescribeTargetHealth
 describeTargetHealth pTargetGroupARN_ =
-    DescribeTargetHealth'
-    { _dthTargets = Nothing
-    , _dthTargetGroupARN = pTargetGroupARN_
-    }
+  DescribeTargetHealth'
+  {_dthTargets = Nothing, _dthTargetGroupARN = pTargetGroupARN_}
 
+
 -- | The targets.
 dthTargets :: Lens' DescribeTargetHealth [TargetDescription]
 dthTargets = lens _dthTargets (\ s a -> s{_dthTargets = a}) . _Default . _Coerce;
@@ -91,9 +87,9 @@
                       may (parseXMLList "member"))
                      <*> (pure (fromEnum s)))
 
-instance Hashable DescribeTargetHealth
+instance Hashable DescribeTargetHealth where
 
-instance NFData DescribeTargetHealth
+instance NFData DescribeTargetHealth where
 
 instance ToHeaders DescribeTargetHealth where
         toHeaders = const mempty
@@ -110,16 +106,13 @@
                  toQuery (toQueryList "member" <$> _dthTargets),
                "TargetGroupArn" =: _dthTargetGroupARN]
 
--- | Contains the output of DescribeTargetHealth.
---
---
---
--- /See:/ 'describeTargetHealthResponse' smart constructor.
+-- | /See:/ 'describeTargetHealthResponse' smart constructor.
 data DescribeTargetHealthResponse = DescribeTargetHealthResponse'
-    { _dthrsTargetHealthDescriptions :: !(Maybe [TargetHealthDescription])
-    , _dthrsResponseStatus           :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dthrsTargetHealthDescriptions :: !(Maybe [TargetHealthDescription])
+  , _dthrsResponseStatus           :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeTargetHealthResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -131,11 +124,12 @@
     :: Int -- ^ 'dthrsResponseStatus'
     -> DescribeTargetHealthResponse
 describeTargetHealthResponse pResponseStatus_ =
-    DescribeTargetHealthResponse'
-    { _dthrsTargetHealthDescriptions = Nothing
-    , _dthrsResponseStatus = pResponseStatus_
-    }
+  DescribeTargetHealthResponse'
+  { _dthrsTargetHealthDescriptions = Nothing
+  , _dthrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Information about the health of the targets.
 dthrsTargetHealthDescriptions :: Lens' DescribeTargetHealthResponse [TargetHealthDescription]
 dthrsTargetHealthDescriptions = lens _dthrsTargetHealthDescriptions (\ s a -> s{_dthrsTargetHealthDescriptions = a}) . _Default . _Coerce;
@@ -144,4 +138,4 @@
 dthrsResponseStatus :: Lens' DescribeTargetHealthResponse Int
 dthrsResponseStatus = lens _dthrsResponseStatus (\ s a -> s{_dthrsResponseStatus = a});
 
-instance NFData DescribeTargetHealthResponse
+instance NFData DescribeTargetHealthResponse where
diff --git a/gen/Network/AWS/ELBv2/ModifyListener.hs b/gen/Network/AWS/ELBv2/ModifyListener.hs
--- a/gen/Network/AWS/ELBv2/ModifyListener.hs
+++ b/gen/Network/AWS/ELBv2/ModifyListener.hs
@@ -12,16 +12,16 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.ModifyListener
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Modifies the specified properties of the specified listener.
 --
 --
--- Any properties that you do not specify retain their current values. However, changing the protocol from HTTPS to HTTP removes the security policy and SSL certificate properties. If you change the protocol from HTTP to HTTPS, you must add the security policy.
+-- Any properties that you do not specify retain their current values. However, changing the protocol from HTTPS to HTTP removes the security policy and SSL certificate properties. If you change the protocol from HTTP to HTTPS, you must add the security policy and server certificate.
 --
 module Network.AWS.ELBv2.ModifyListener
     (
@@ -44,38 +44,35 @@
     , mlrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for ModifyListener.
---
---
---
--- /See:/ 'modifyListener' smart constructor.
+-- | /See:/ 'modifyListener' smart constructor.
 data ModifyListener = ModifyListener'
-    { _mlSSLPolicy      :: !(Maybe Text)
-    , _mlProtocol       :: !(Maybe ProtocolEnum)
-    , _mlDefaultActions :: !(Maybe [Action])
-    , _mlCertificates   :: !(Maybe [Certificate])
-    , _mlPort           :: !(Maybe Nat)
-    , _mlListenerARN    :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _mlSSLPolicy      :: !(Maybe Text)
+  , _mlProtocol       :: !(Maybe ProtocolEnum)
+  , _mlDefaultActions :: !(Maybe [Action])
+  , _mlCertificates   :: !(Maybe [Certificate])
+  , _mlPort           :: !(Maybe Nat)
+  , _mlListenerARN    :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ModifyListener' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'mlSSLPolicy' - The security policy that defines which ciphers and protocols are supported.
+-- * 'mlSSLPolicy' - The security policy that defines which protocols and ciphers are supported. For more information, see <http://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html#describe-ssl-policies Security Policies> in the /Application Load Balancers Guide/ .
 --
--- * 'mlProtocol' - The protocol for connections from clients to the load balancer.
+-- * 'mlProtocol' - The protocol for connections from clients to the load balancer. Application Load Balancers support HTTP and HTTPS and Network Load Balancers support TCP.
 --
--- * 'mlDefaultActions' - The default actions.
+-- * 'mlDefaultActions' - The default action. For Application Load Balancers, the protocol of the specified target group must be HTTP or HTTPS. For Network Load Balancers, the protocol of the specified target group must be TCP.
 --
--- * 'mlCertificates' - The SSL server certificate.
+-- * 'mlCertificates' - The default SSL server certificate.
 --
 -- * 'mlPort' - The port for connections from clients to the load balancer.
 --
@@ -84,28 +81,29 @@
     :: Text -- ^ 'mlListenerARN'
     -> ModifyListener
 modifyListener pListenerARN_ =
-    ModifyListener'
-    { _mlSSLPolicy = Nothing
-    , _mlProtocol = Nothing
-    , _mlDefaultActions = Nothing
-    , _mlCertificates = Nothing
-    , _mlPort = Nothing
-    , _mlListenerARN = pListenerARN_
-    }
+  ModifyListener'
+  { _mlSSLPolicy = Nothing
+  , _mlProtocol = Nothing
+  , _mlDefaultActions = Nothing
+  , _mlCertificates = Nothing
+  , _mlPort = Nothing
+  , _mlListenerARN = pListenerARN_
+  }
 
--- | The security policy that defines which ciphers and protocols are supported.
+
+-- | The security policy that defines which protocols and ciphers are supported. For more information, see <http://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html#describe-ssl-policies Security Policies> in the /Application Load Balancers Guide/ .
 mlSSLPolicy :: Lens' ModifyListener (Maybe Text)
 mlSSLPolicy = lens _mlSSLPolicy (\ s a -> s{_mlSSLPolicy = a});
 
--- | The protocol for connections from clients to the load balancer.
+-- | The protocol for connections from clients to the load balancer. Application Load Balancers support HTTP and HTTPS and Network Load Balancers support TCP.
 mlProtocol :: Lens' ModifyListener (Maybe ProtocolEnum)
 mlProtocol = lens _mlProtocol (\ s a -> s{_mlProtocol = a});
 
--- | The default actions.
+-- | The default action. For Application Load Balancers, the protocol of the specified target group must be HTTP or HTTPS. For Network Load Balancers, the protocol of the specified target group must be TCP.
 mlDefaultActions :: Lens' ModifyListener [Action]
 mlDefaultActions = lens _mlDefaultActions (\ s a -> s{_mlDefaultActions = a}) . _Default . _Coerce;
 
--- | The SSL server certificate.
+-- | The default SSL server certificate.
 mlCertificates :: Lens' ModifyListener [Certificate]
 mlCertificates = lens _mlCertificates (\ s a -> s{_mlCertificates = a}) . _Default . _Coerce;
 
@@ -128,9 +126,9 @@
                       may (parseXMLList "member"))
                      <*> (pure (fromEnum s)))
 
-instance Hashable ModifyListener
+instance Hashable ModifyListener where
 
-instance NFData ModifyListener
+instance NFData ModifyListener where
 
 instance ToHeaders ModifyListener where
         toHeaders = const mempty
@@ -151,16 +149,13 @@
                  toQuery (toQueryList "member" <$> _mlCertificates),
                "Port" =: _mlPort, "ListenerArn" =: _mlListenerARN]
 
--- | Contains the output of ModifyListener.
---
---
---
--- /See:/ 'modifyListenerResponse' smart constructor.
+-- | /See:/ 'modifyListenerResponse' smart constructor.
 data ModifyListenerResponse = ModifyListenerResponse'
-    { _mlrsListeners      :: !(Maybe [Listener])
-    , _mlrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _mlrsListeners      :: !(Maybe [Listener])
+  , _mlrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ModifyListenerResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -172,11 +167,10 @@
     :: Int -- ^ 'mlrsResponseStatus'
     -> ModifyListenerResponse
 modifyListenerResponse pResponseStatus_ =
-    ModifyListenerResponse'
-    { _mlrsListeners = Nothing
-    , _mlrsResponseStatus = pResponseStatus_
-    }
+  ModifyListenerResponse'
+  {_mlrsListeners = Nothing, _mlrsResponseStatus = pResponseStatus_}
 
+
 -- | Information about the modified listeners.
 mlrsListeners :: Lens' ModifyListenerResponse [Listener]
 mlrsListeners = lens _mlrsListeners (\ s a -> s{_mlrsListeners = a}) . _Default . _Coerce;
@@ -185,4 +179,4 @@
 mlrsResponseStatus :: Lens' ModifyListenerResponse Int
 mlrsResponseStatus = lens _mlrsResponseStatus (\ s a -> s{_mlrsResponseStatus = a});
 
-instance NFData ModifyListenerResponse
+instance NFData ModifyListenerResponse where
diff --git a/gen/Network/AWS/ELBv2/ModifyLoadBalancerAttributes.hs b/gen/Network/AWS/ELBv2/ModifyLoadBalancerAttributes.hs
--- a/gen/Network/AWS/ELBv2/ModifyLoadBalancerAttributes.hs
+++ b/gen/Network/AWS/ELBv2/ModifyLoadBalancerAttributes.hs
@@ -12,13 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.ModifyLoadBalancerAttributes
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Modifies the specified attributes of the specified Application Load Balancer.
+-- Modifies the specified attributes of the specified Application Load Balancer or Network Load Balancer.
 --
 --
 -- If any of the specified attributes can't be modified as requested, the call fails. Any existing attributes that you do not modify retain their current values.
@@ -40,23 +40,20 @@
     , mlbarsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for ModifyLoadBalancerAttributes.
---
---
---
--- /See:/ 'modifyLoadBalancerAttributes' smart constructor.
+-- | /See:/ 'modifyLoadBalancerAttributes' smart constructor.
 data ModifyLoadBalancerAttributes = ModifyLoadBalancerAttributes'
-    { _mlbaLoadBalancerARN :: !Text
-    , _mlbaAttributes      :: ![LoadBalancerAttribute]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _mlbaLoadBalancerARN :: !Text
+  , _mlbaAttributes      :: ![LoadBalancerAttribute]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ModifyLoadBalancerAttributes' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -68,11 +65,10 @@
     :: Text -- ^ 'mlbaLoadBalancerARN'
     -> ModifyLoadBalancerAttributes
 modifyLoadBalancerAttributes pLoadBalancerARN_ =
-    ModifyLoadBalancerAttributes'
-    { _mlbaLoadBalancerARN = pLoadBalancerARN_
-    , _mlbaAttributes = mempty
-    }
+  ModifyLoadBalancerAttributes'
+  {_mlbaLoadBalancerARN = pLoadBalancerARN_, _mlbaAttributes = mempty}
 
+
 -- | The Amazon Resource Name (ARN) of the load balancer.
 mlbaLoadBalancerARN :: Lens' ModifyLoadBalancerAttributes Text
 mlbaLoadBalancerARN = lens _mlbaLoadBalancerARN (\ s a -> s{_mlbaLoadBalancerARN = a});
@@ -95,9 +91,9 @@
                       may (parseXMLList "member"))
                      <*> (pure (fromEnum s)))
 
-instance Hashable ModifyLoadBalancerAttributes
+instance Hashable ModifyLoadBalancerAttributes where
 
-instance NFData ModifyLoadBalancerAttributes
+instance NFData ModifyLoadBalancerAttributes where
 
 instance ToHeaders ModifyLoadBalancerAttributes where
         toHeaders = const mempty
@@ -114,16 +110,13 @@
                "LoadBalancerArn" =: _mlbaLoadBalancerARN,
                "Attributes" =: toQueryList "member" _mlbaAttributes]
 
--- | Contains the output of ModifyLoadBalancerAttributes.
---
---
---
--- /See:/ 'modifyLoadBalancerAttributesResponse' smart constructor.
+-- | /See:/ 'modifyLoadBalancerAttributesResponse' smart constructor.
 data ModifyLoadBalancerAttributesResponse = ModifyLoadBalancerAttributesResponse'
-    { _mlbarsAttributes     :: !(Maybe [LoadBalancerAttribute])
-    , _mlbarsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _mlbarsAttributes     :: !(Maybe [LoadBalancerAttribute])
+  , _mlbarsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ModifyLoadBalancerAttributesResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -135,11 +128,10 @@
     :: Int -- ^ 'mlbarsResponseStatus'
     -> ModifyLoadBalancerAttributesResponse
 modifyLoadBalancerAttributesResponse pResponseStatus_ =
-    ModifyLoadBalancerAttributesResponse'
-    { _mlbarsAttributes = Nothing
-    , _mlbarsResponseStatus = pResponseStatus_
-    }
+  ModifyLoadBalancerAttributesResponse'
+  {_mlbarsAttributes = Nothing, _mlbarsResponseStatus = pResponseStatus_}
 
+
 -- | Information about the load balancer attributes.
 mlbarsAttributes :: Lens' ModifyLoadBalancerAttributesResponse [LoadBalancerAttribute]
 mlbarsAttributes = lens _mlbarsAttributes (\ s a -> s{_mlbarsAttributes = a}) . _Default . _Coerce;
@@ -149,3 +141,4 @@
 mlbarsResponseStatus = lens _mlbarsResponseStatus (\ s a -> s{_mlbarsResponseStatus = a});
 
 instance NFData ModifyLoadBalancerAttributesResponse
+         where
diff --git a/gen/Network/AWS/ELBv2/ModifyRule.hs b/gen/Network/AWS/ELBv2/ModifyRule.hs
--- a/gen/Network/AWS/ELBv2/ModifyRule.hs
+++ b/gen/Network/AWS/ELBv2/ModifyRule.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.ModifyRule
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -43,29 +43,26 @@
     , mrrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for ModifyRules.
---
---
---
--- /See:/ 'modifyRule' smart constructor.
+-- | /See:/ 'modifyRule' smart constructor.
 data ModifyRule = ModifyRule'
-    { _mrActions    :: !(Maybe [Action])
-    , _mrConditions :: !(Maybe [RuleCondition])
-    , _mrRuleARN    :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _mrActions    :: !(Maybe [Action])
+  , _mrConditions :: !(Maybe [RuleCondition])
+  , _mrRuleARN    :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ModifyRule' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'mrActions' - The actions.
+-- * 'mrActions' - The actions. The target group must use the HTTP or HTTPS protocol.
 --
 -- * 'mrConditions' - The conditions.
 --
@@ -74,13 +71,11 @@
     :: Text -- ^ 'mrRuleARN'
     -> ModifyRule
 modifyRule pRuleARN_ =
-    ModifyRule'
-    { _mrActions = Nothing
-    , _mrConditions = Nothing
-    , _mrRuleARN = pRuleARN_
-    }
+  ModifyRule'
+  {_mrActions = Nothing, _mrConditions = Nothing, _mrRuleARN = pRuleARN_}
 
--- | The actions.
+
+-- | The actions. The target group must use the HTTP or HTTPS protocol.
 mrActions :: Lens' ModifyRule [Action]
 mrActions = lens _mrActions (\ s a -> s{_mrActions = a}) . _Default . _Coerce;
 
@@ -103,9 +98,9 @@
                       may (parseXMLList "member"))
                      <*> (pure (fromEnum s)))
 
-instance Hashable ModifyRule
+instance Hashable ModifyRule where
 
-instance NFData ModifyRule
+instance NFData ModifyRule where
 
 instance ToHeaders ModifyRule where
         toHeaders = const mempty
@@ -124,16 +119,13 @@
                  toQuery (toQueryList "member" <$> _mrConditions),
                "RuleArn" =: _mrRuleARN]
 
--- | Contains the output of ModifyRules.
---
---
---
--- /See:/ 'modifyRuleResponse' smart constructor.
+-- | /See:/ 'modifyRuleResponse' smart constructor.
 data ModifyRuleResponse = ModifyRuleResponse'
-    { _mrrsRules          :: !(Maybe [Rule])
-    , _mrrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _mrrsRules          :: !(Maybe [Rule])
+  , _mrrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ModifyRuleResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -145,11 +137,10 @@
     :: Int -- ^ 'mrrsResponseStatus'
     -> ModifyRuleResponse
 modifyRuleResponse pResponseStatus_ =
-    ModifyRuleResponse'
-    { _mrrsRules = Nothing
-    , _mrrsResponseStatus = pResponseStatus_
-    }
+  ModifyRuleResponse'
+  {_mrrsRules = Nothing, _mrrsResponseStatus = pResponseStatus_}
 
+
 -- | Information about the rule.
 mrrsRules :: Lens' ModifyRuleResponse [Rule]
 mrrsRules = lens _mrrsRules (\ s a -> s{_mrrsRules = a}) . _Default . _Coerce;
@@ -158,4 +149,4 @@
 mrrsResponseStatus :: Lens' ModifyRuleResponse Int
 mrrsResponseStatus = lens _mrrsResponseStatus (\ s a -> s{_mrrsResponseStatus = a});
 
-instance NFData ModifyRuleResponse
+instance NFData ModifyRuleResponse where
diff --git a/gen/Network/AWS/ELBv2/ModifyTargetGroup.hs b/gen/Network/AWS/ELBv2/ModifyTargetGroup.hs
--- a/gen/Network/AWS/ELBv2/ModifyTargetGroup.hs
+++ b/gen/Network/AWS/ELBv2/ModifyTargetGroup.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.ModifyTargetGroup
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -47,80 +47,78 @@
     , mtgrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for ModifyTargetGroup.
---
---
---
--- /See:/ 'modifyTargetGroup' smart constructor.
+-- | /See:/ 'modifyTargetGroup' smart constructor.
 data ModifyTargetGroup = ModifyTargetGroup'
-    { _mtgMatcher                    :: !(Maybe Matcher)
-    , _mtgHealthCheckPath            :: !(Maybe Text)
-    , _mtgUnhealthyThresholdCount    :: !(Maybe Nat)
-    , _mtgHealthCheckIntervalSeconds :: !(Maybe Nat)
-    , _mtgHealthyThresholdCount      :: !(Maybe Nat)
-    , _mtgHealthCheckProtocol        :: !(Maybe ProtocolEnum)
-    , _mtgHealthCheckTimeoutSeconds  :: !(Maybe Nat)
-    , _mtgHealthCheckPort            :: !(Maybe Text)
-    , _mtgTargetGroupARN             :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _mtgMatcher                    :: !(Maybe Matcher)
+  , _mtgHealthCheckPath            :: !(Maybe Text)
+  , _mtgUnhealthyThresholdCount    :: !(Maybe Nat)
+  , _mtgHealthCheckIntervalSeconds :: !(Maybe Nat)
+  , _mtgHealthyThresholdCount      :: !(Maybe Nat)
+  , _mtgHealthCheckProtocol        :: !(Maybe ProtocolEnum)
+  , _mtgHealthCheckTimeoutSeconds  :: !(Maybe Nat)
+  , _mtgHealthCheckPort            :: !(Maybe Text)
+  , _mtgTargetGroupARN             :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ModifyTargetGroup' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'mtgMatcher' - The HTTP codes to use when checking for a successful response from a target.
+-- * 'mtgMatcher' - [HTTP/HTTPS health checks] The HTTP codes to use when checking for a successful response from a target.
 --
--- * 'mtgHealthCheckPath' - The ping path that is the destination for the health check request.
+-- * 'mtgHealthCheckPath' - [HTTP/HTTPS health checks] The ping path that is the destination for the health check request.
 --
--- * 'mtgUnhealthyThresholdCount' - The number of consecutive health check failures required before considering the target unhealthy.
+-- * 'mtgUnhealthyThresholdCount' - The number of consecutive health check failures required before considering the target unhealthy. For Network Load Balancers, this value must be the same as the healthy threshold count.
 --
--- * 'mtgHealthCheckIntervalSeconds' - The approximate amount of time, in seconds, between health checks of an individual target.
+-- * 'mtgHealthCheckIntervalSeconds' - The approximate amount of time, in seconds, between health checks of an individual target. For Application Load Balancers, the range is 5 to 300 seconds. For Network Load Balancers, the supported values are 10 or 30 seconds.
 --
 -- * 'mtgHealthyThresholdCount' - The number of consecutive health checks successes required before considering an unhealthy target healthy.
 --
--- * 'mtgHealthCheckProtocol' - The protocol to use to connect with the target.
+-- * 'mtgHealthCheckProtocol' - The protocol the load balancer uses when performing health checks on targets. The TCP protocol is supported only if the protocol of the target group is TCP.
 --
--- * 'mtgHealthCheckTimeoutSeconds' - The amount of time, in seconds, during which no response means a failed health check.
+-- * 'mtgHealthCheckTimeoutSeconds' - [HTTP/HTTPS health checks] The amount of time, in seconds, during which no response means a failed health check.
 --
--- * 'mtgHealthCheckPort' - The port to use to connect with the target.
+-- * 'mtgHealthCheckPort' - The port the load balancer uses when performing health checks on targets.
 --
 -- * 'mtgTargetGroupARN' - The Amazon Resource Name (ARN) of the target group.
 modifyTargetGroup
     :: Text -- ^ 'mtgTargetGroupARN'
     -> ModifyTargetGroup
 modifyTargetGroup pTargetGroupARN_ =
-    ModifyTargetGroup'
-    { _mtgMatcher = Nothing
-    , _mtgHealthCheckPath = Nothing
-    , _mtgUnhealthyThresholdCount = Nothing
-    , _mtgHealthCheckIntervalSeconds = Nothing
-    , _mtgHealthyThresholdCount = Nothing
-    , _mtgHealthCheckProtocol = Nothing
-    , _mtgHealthCheckTimeoutSeconds = Nothing
-    , _mtgHealthCheckPort = Nothing
-    , _mtgTargetGroupARN = pTargetGroupARN_
-    }
+  ModifyTargetGroup'
+  { _mtgMatcher = Nothing
+  , _mtgHealthCheckPath = Nothing
+  , _mtgUnhealthyThresholdCount = Nothing
+  , _mtgHealthCheckIntervalSeconds = Nothing
+  , _mtgHealthyThresholdCount = Nothing
+  , _mtgHealthCheckProtocol = Nothing
+  , _mtgHealthCheckTimeoutSeconds = Nothing
+  , _mtgHealthCheckPort = Nothing
+  , _mtgTargetGroupARN = pTargetGroupARN_
+  }
 
--- | The HTTP codes to use when checking for a successful response from a target.
+
+-- | [HTTP/HTTPS health checks] The HTTP codes to use when checking for a successful response from a target.
 mtgMatcher :: Lens' ModifyTargetGroup (Maybe Matcher)
 mtgMatcher = lens _mtgMatcher (\ s a -> s{_mtgMatcher = a});
 
--- | The ping path that is the destination for the health check request.
+-- | [HTTP/HTTPS health checks] The ping path that is the destination for the health check request.
 mtgHealthCheckPath :: Lens' ModifyTargetGroup (Maybe Text)
 mtgHealthCheckPath = lens _mtgHealthCheckPath (\ s a -> s{_mtgHealthCheckPath = a});
 
--- | The number of consecutive health check failures required before considering the target unhealthy.
+-- | The number of consecutive health check failures required before considering the target unhealthy. For Network Load Balancers, this value must be the same as the healthy threshold count.
 mtgUnhealthyThresholdCount :: Lens' ModifyTargetGroup (Maybe Natural)
 mtgUnhealthyThresholdCount = lens _mtgUnhealthyThresholdCount (\ s a -> s{_mtgUnhealthyThresholdCount = a}) . mapping _Nat;
 
--- | The approximate amount of time, in seconds, between health checks of an individual target.
+-- | The approximate amount of time, in seconds, between health checks of an individual target. For Application Load Balancers, the range is 5 to 300 seconds. For Network Load Balancers, the supported values are 10 or 30 seconds.
 mtgHealthCheckIntervalSeconds :: Lens' ModifyTargetGroup (Maybe Natural)
 mtgHealthCheckIntervalSeconds = lens _mtgHealthCheckIntervalSeconds (\ s a -> s{_mtgHealthCheckIntervalSeconds = a}) . mapping _Nat;
 
@@ -128,15 +126,15 @@
 mtgHealthyThresholdCount :: Lens' ModifyTargetGroup (Maybe Natural)
 mtgHealthyThresholdCount = lens _mtgHealthyThresholdCount (\ s a -> s{_mtgHealthyThresholdCount = a}) . mapping _Nat;
 
--- | The protocol to use to connect with the target.
+-- | The protocol the load balancer uses when performing health checks on targets. The TCP protocol is supported only if the protocol of the target group is TCP.
 mtgHealthCheckProtocol :: Lens' ModifyTargetGroup (Maybe ProtocolEnum)
 mtgHealthCheckProtocol = lens _mtgHealthCheckProtocol (\ s a -> s{_mtgHealthCheckProtocol = a});
 
--- | The amount of time, in seconds, during which no response means a failed health check.
+-- | [HTTP/HTTPS health checks] The amount of time, in seconds, during which no response means a failed health check.
 mtgHealthCheckTimeoutSeconds :: Lens' ModifyTargetGroup (Maybe Natural)
 mtgHealthCheckTimeoutSeconds = lens _mtgHealthCheckTimeoutSeconds (\ s a -> s{_mtgHealthCheckTimeoutSeconds = a}) . mapping _Nat;
 
--- | The port to use to connect with the target.
+-- | The port the load balancer uses when performing health checks on targets.
 mtgHealthCheckPort :: Lens' ModifyTargetGroup (Maybe Text)
 mtgHealthCheckPort = lens _mtgHealthCheckPort (\ s a -> s{_mtgHealthCheckPort = a});
 
@@ -155,9 +153,9 @@
                       may (parseXMLList "member"))
                      <*> (pure (fromEnum s)))
 
-instance Hashable ModifyTargetGroup
+instance Hashable ModifyTargetGroup where
 
-instance NFData ModifyTargetGroup
+instance NFData ModifyTargetGroup where
 
 instance ToHeaders ModifyTargetGroup where
         toHeaders = const mempty
@@ -183,16 +181,13 @@
                "HealthCheckPort" =: _mtgHealthCheckPort,
                "TargetGroupArn" =: _mtgTargetGroupARN]
 
--- | Contains the output of ModifyTargetGroup.
---
---
---
--- /See:/ 'modifyTargetGroupResponse' smart constructor.
+-- | /See:/ 'modifyTargetGroupResponse' smart constructor.
 data ModifyTargetGroupResponse = ModifyTargetGroupResponse'
-    { _mtgrsTargetGroups   :: !(Maybe [TargetGroup])
-    , _mtgrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _mtgrsTargetGroups   :: !(Maybe [TargetGroup])
+  , _mtgrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ModifyTargetGroupResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -204,11 +199,10 @@
     :: Int -- ^ 'mtgrsResponseStatus'
     -> ModifyTargetGroupResponse
 modifyTargetGroupResponse pResponseStatus_ =
-    ModifyTargetGroupResponse'
-    { _mtgrsTargetGroups = Nothing
-    , _mtgrsResponseStatus = pResponseStatus_
-    }
+  ModifyTargetGroupResponse'
+  {_mtgrsTargetGroups = Nothing, _mtgrsResponseStatus = pResponseStatus_}
 
+
 -- | Information about the target group.
 mtgrsTargetGroups :: Lens' ModifyTargetGroupResponse [TargetGroup]
 mtgrsTargetGroups = lens _mtgrsTargetGroups (\ s a -> s{_mtgrsTargetGroups = a}) . _Default . _Coerce;
@@ -217,4 +211,4 @@
 mtgrsResponseStatus :: Lens' ModifyTargetGroupResponse Int
 mtgrsResponseStatus = lens _mtgrsResponseStatus (\ s a -> s{_mtgrsResponseStatus = a});
 
-instance NFData ModifyTargetGroupResponse
+instance NFData ModifyTargetGroupResponse where
diff --git a/gen/Network/AWS/ELBv2/ModifyTargetGroupAttributes.hs b/gen/Network/AWS/ELBv2/ModifyTargetGroupAttributes.hs
--- a/gen/Network/AWS/ELBv2/ModifyTargetGroupAttributes.hs
+++ b/gen/Network/AWS/ELBv2/ModifyTargetGroupAttributes.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.ModifyTargetGroupAttributes
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -38,23 +38,20 @@
     , mtgarsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for ModifyTargetGroupAttributes.
---
---
---
--- /See:/ 'modifyTargetGroupAttributes' smart constructor.
+-- | /See:/ 'modifyTargetGroupAttributes' smart constructor.
 data ModifyTargetGroupAttributes = ModifyTargetGroupAttributes'
-    { _mtgaTargetGroupARN :: !Text
-    , _mtgaAttributes     :: ![TargetGroupAttribute]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _mtgaTargetGroupARN :: !Text
+  , _mtgaAttributes     :: ![TargetGroupAttribute]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ModifyTargetGroupAttributes' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -66,11 +63,10 @@
     :: Text -- ^ 'mtgaTargetGroupARN'
     -> ModifyTargetGroupAttributes
 modifyTargetGroupAttributes pTargetGroupARN_ =
-    ModifyTargetGroupAttributes'
-    { _mtgaTargetGroupARN = pTargetGroupARN_
-    , _mtgaAttributes = mempty
-    }
+  ModifyTargetGroupAttributes'
+  {_mtgaTargetGroupARN = pTargetGroupARN_, _mtgaAttributes = mempty}
 
+
 -- | The Amazon Resource Name (ARN) of the target group.
 mtgaTargetGroupARN :: Lens' ModifyTargetGroupAttributes Text
 mtgaTargetGroupARN = lens _mtgaTargetGroupARN (\ s a -> s{_mtgaTargetGroupARN = a});
@@ -92,9 +88,9 @@
                       may (parseXMLList "member"))
                      <*> (pure (fromEnum s)))
 
-instance Hashable ModifyTargetGroupAttributes
+instance Hashable ModifyTargetGroupAttributes where
 
-instance NFData ModifyTargetGroupAttributes
+instance NFData ModifyTargetGroupAttributes where
 
 instance ToHeaders ModifyTargetGroupAttributes where
         toHeaders = const mempty
@@ -111,16 +107,13 @@
                "TargetGroupArn" =: _mtgaTargetGroupARN,
                "Attributes" =: toQueryList "member" _mtgaAttributes]
 
--- | Contains the output of ModifyTargetGroupAttributes.
---
---
---
--- /See:/ 'modifyTargetGroupAttributesResponse' smart constructor.
+-- | /See:/ 'modifyTargetGroupAttributesResponse' smart constructor.
 data ModifyTargetGroupAttributesResponse = ModifyTargetGroupAttributesResponse'
-    { _mtgarsAttributes     :: !(Maybe [TargetGroupAttribute])
-    , _mtgarsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _mtgarsAttributes     :: !(Maybe [TargetGroupAttribute])
+  , _mtgarsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ModifyTargetGroupAttributesResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -132,11 +125,10 @@
     :: Int -- ^ 'mtgarsResponseStatus'
     -> ModifyTargetGroupAttributesResponse
 modifyTargetGroupAttributesResponse pResponseStatus_ =
-    ModifyTargetGroupAttributesResponse'
-    { _mtgarsAttributes = Nothing
-    , _mtgarsResponseStatus = pResponseStatus_
-    }
+  ModifyTargetGroupAttributesResponse'
+  {_mtgarsAttributes = Nothing, _mtgarsResponseStatus = pResponseStatus_}
 
+
 -- | Information about the attributes.
 mtgarsAttributes :: Lens' ModifyTargetGroupAttributesResponse [TargetGroupAttribute]
 mtgarsAttributes = lens _mtgarsAttributes (\ s a -> s{_mtgarsAttributes = a}) . _Default . _Coerce;
@@ -146,3 +138,4 @@
 mtgarsResponseStatus = lens _mtgarsResponseStatus (\ s a -> s{_mtgarsResponseStatus = a});
 
 instance NFData ModifyTargetGroupAttributesResponse
+         where
diff --git a/gen/Network/AWS/ELBv2/RegisterTargets.hs b/gen/Network/AWS/ELBv2/RegisterTargets.hs
--- a/gen/Network/AWS/ELBv2/RegisterTargets.hs
+++ b/gen/Network/AWS/ELBv2/RegisterTargets.hs
@@ -12,19 +12,21 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.RegisterTargets
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Registers the specified targets with the specified target group.
 --
 --
--- By default, the load balancer routes requests to registered targets using the protocol and port number for the target group. Alternatively, you can override the port for a target when you register it.
+-- You can register targets by instance ID or by IP address. If the target is an EC2 instance, it must be in the @running@ state when you register it.
 --
--- The target must be in the virtual private cloud (VPC) that you specified for the target group. If the target is an EC2 instance, it can't be in the @stopped@ or @running@ state when you register it.
+-- By default, the load balancer routes requests to registered targets using the protocol and port for the target group. Alternatively, you can override the port for a target when you register it. You can register each EC2 instance or IP address with the same target group multiple times using different ports.
 --
+-- With a Network Load Balancer, you cannot register instances by instance ID if they have the following instance types: C1, CC1, CC2, CG1, CG2, CR1, CS1, G1, G2, HI1, HS1, M1, M2, M3, and T1. You can register instances of these types by IP address.
+--
 -- To remove a target from a target group, use 'DeregisterTargets' .
 --
 module Network.AWS.ELBv2.RegisterTargets
@@ -43,44 +45,39 @@
     , rrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for RegisterTargets.
---
---
---
--- /See:/ 'registerTargets' smart constructor.
+-- | /See:/ 'registerTargets' smart constructor.
 data RegisterTargets = RegisterTargets'
-    { _rtTargetGroupARN :: !Text
-    , _rtTargets        :: ![TargetDescription]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _rtTargetGroupARN :: !Text
+  , _rtTargets        :: ![TargetDescription]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'RegisterTargets' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
 -- * 'rtTargetGroupARN' - The Amazon Resource Name (ARN) of the target group.
 --
--- * 'rtTargets' - The targets. The default port for a target is the port for the target group. You can specify a port override. If a target is already registered, you can register it again using a different port.
+-- * 'rtTargets' - The targets.
 registerTargets
     :: Text -- ^ 'rtTargetGroupARN'
     -> RegisterTargets
 registerTargets pTargetGroupARN_ =
-    RegisterTargets'
-    { _rtTargetGroupARN = pTargetGroupARN_
-    , _rtTargets = mempty
-    }
+  RegisterTargets' {_rtTargetGroupARN = pTargetGroupARN_, _rtTargets = mempty}
 
+
 -- | The Amazon Resource Name (ARN) of the target group.
 rtTargetGroupARN :: Lens' RegisterTargets Text
 rtTargetGroupARN = lens _rtTargetGroupARN (\ s a -> s{_rtTargetGroupARN = a});
 
--- | The targets. The default port for a target is the port for the target group. You can specify a port override. If a target is already registered, you can register it again using a different port.
+-- | The targets.
 rtTargets :: Lens' RegisterTargets [TargetDescription]
 rtTargets = lens _rtTargets (\ s a -> s{_rtTargets = a}) . _Coerce;
 
@@ -92,9 +89,9 @@
               (\ s h x ->
                  RegisterTargetsResponse' <$> (pure (fromEnum s)))
 
-instance Hashable RegisterTargets
+instance Hashable RegisterTargets where
 
-instance NFData RegisterTargets
+instance NFData RegisterTargets where
 
 instance ToHeaders RegisterTargets where
         toHeaders = const mempty
@@ -110,15 +107,12 @@
                "TargetGroupArn" =: _rtTargetGroupARN,
                "Targets" =: toQueryList "member" _rtTargets]
 
--- | Contains the output of RegisterTargets.
---
---
---
--- /See:/ 'registerTargetsResponse' smart constructor.
+-- | /See:/ 'registerTargetsResponse' smart constructor.
 newtype RegisterTargetsResponse = RegisterTargetsResponse'
-    { _rrsResponseStatus :: Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _rrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'RegisterTargetsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -128,12 +122,11 @@
     :: Int -- ^ 'rrsResponseStatus'
     -> RegisterTargetsResponse
 registerTargetsResponse pResponseStatus_ =
-    RegisterTargetsResponse'
-    { _rrsResponseStatus = pResponseStatus_
-    }
+  RegisterTargetsResponse' {_rrsResponseStatus = pResponseStatus_}
 
+
 -- | -- | The response status code.
 rrsResponseStatus :: Lens' RegisterTargetsResponse Int
 rrsResponseStatus = lens _rrsResponseStatus (\ s a -> s{_rrsResponseStatus = a});
 
-instance NFData RegisterTargetsResponse
+instance NFData RegisterTargetsResponse where
diff --git a/gen/Network/AWS/ELBv2/RemoveListenerCertificates.hs b/gen/Network/AWS/ELBv2/RemoveListenerCertificates.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/ELBv2/RemoveListenerCertificates.hs
@@ -0,0 +1,135 @@
+{-# 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.ELBv2.RemoveListenerCertificates
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes the specified certificate from the specified secure listener.
+--
+--
+-- You can't remove the default certificate for a listener. To replace the default certificate, call 'ModifyListener' .
+--
+-- To list the certificates for your listener, use 'DescribeListenerCertificates' .
+--
+module Network.AWS.ELBv2.RemoveListenerCertificates
+    (
+    -- * Creating a Request
+      removeListenerCertificates
+    , RemoveListenerCertificates
+    -- * Request Lenses
+    , rlcListenerARN
+    , rlcCertificates
+
+    -- * Destructuring the Response
+    , removeListenerCertificatesResponse
+    , RemoveListenerCertificatesResponse
+    -- * Response Lenses
+    , rlcrsResponseStatus
+    ) where
+
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'removeListenerCertificates' smart constructor.
+data RemoveListenerCertificates = RemoveListenerCertificates'
+  { _rlcListenerARN  :: !Text
+  , _rlcCertificates :: ![Certificate]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RemoveListenerCertificates' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rlcListenerARN' - The Amazon Resource Name (ARN) of the listener.
+--
+-- * 'rlcCertificates' - The certificate to remove. You can specify one certificate per call.
+removeListenerCertificates
+    :: Text -- ^ 'rlcListenerARN'
+    -> RemoveListenerCertificates
+removeListenerCertificates pListenerARN_ =
+  RemoveListenerCertificates'
+  {_rlcListenerARN = pListenerARN_, _rlcCertificates = mempty}
+
+
+-- | The Amazon Resource Name (ARN) of the listener.
+rlcListenerARN :: Lens' RemoveListenerCertificates Text
+rlcListenerARN = lens _rlcListenerARN (\ s a -> s{_rlcListenerARN = a});
+
+-- | The certificate to remove. You can specify one certificate per call.
+rlcCertificates :: Lens' RemoveListenerCertificates [Certificate]
+rlcCertificates = lens _rlcCertificates (\ s a -> s{_rlcCertificates = a}) . _Coerce;
+
+instance AWSRequest RemoveListenerCertificates where
+        type Rs RemoveListenerCertificates =
+             RemoveListenerCertificatesResponse
+        request = postQuery eLBv2
+        response
+          = receiveXMLWrapper
+              "RemoveListenerCertificatesResult"
+              (\ s h x ->
+                 RemoveListenerCertificatesResponse' <$>
+                   (pure (fromEnum s)))
+
+instance Hashable RemoveListenerCertificates where
+
+instance NFData RemoveListenerCertificates where
+
+instance ToHeaders RemoveListenerCertificates where
+        toHeaders = const mempty
+
+instance ToPath RemoveListenerCertificates where
+        toPath = const "/"
+
+instance ToQuery RemoveListenerCertificates where
+        toQuery RemoveListenerCertificates'{..}
+          = mconcat
+              ["Action" =:
+                 ("RemoveListenerCertificates" :: ByteString),
+               "Version" =: ("2015-12-01" :: ByteString),
+               "ListenerArn" =: _rlcListenerARN,
+               "Certificates" =:
+                 toQueryList "member" _rlcCertificates]
+
+-- | /See:/ 'removeListenerCertificatesResponse' smart constructor.
+newtype RemoveListenerCertificatesResponse = RemoveListenerCertificatesResponse'
+  { _rlcrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RemoveListenerCertificatesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rlcrsResponseStatus' - -- | The response status code.
+removeListenerCertificatesResponse
+    :: Int -- ^ 'rlcrsResponseStatus'
+    -> RemoveListenerCertificatesResponse
+removeListenerCertificatesResponse pResponseStatus_ =
+  RemoveListenerCertificatesResponse' {_rlcrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+rlcrsResponseStatus :: Lens' RemoveListenerCertificatesResponse Int
+rlcrsResponseStatus = lens _rlcrsResponseStatus (\ s a -> s{_rlcrsResponseStatus = a});
+
+instance NFData RemoveListenerCertificatesResponse
+         where
diff --git a/gen/Network/AWS/ELBv2/RemoveTags.hs b/gen/Network/AWS/ELBv2/RemoveTags.hs
--- a/gen/Network/AWS/ELBv2/RemoveTags.hs
+++ b/gen/Network/AWS/ELBv2/RemoveTags.hs
@@ -12,13 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.RemoveTags
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Removes the specified tags from the specified resource.
+-- Removes the specified tags from the specified Elastic Load Balancing resource.
 --
 --
 -- To list the current tags for your resources, use 'DescribeTags' .
@@ -39,23 +39,20 @@
     , rtrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for RemoveTags.
---
---
---
--- /See:/ 'removeTags' smart constructor.
+-- | /See:/ 'removeTags' smart constructor.
 data RemoveTags = RemoveTags'
-    { _rtResourceARNs :: ![Text]
-    , _rtTagKeys      :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _rtResourceARNs :: ![Text]
+  , _rtTagKeys      :: ![Text]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'RemoveTags' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -65,12 +62,9 @@
 -- * 'rtTagKeys' - The tag keys for the tags to remove.
 removeTags
     :: RemoveTags
-removeTags =
-    RemoveTags'
-    { _rtResourceARNs = mempty
-    , _rtTagKeys = mempty
-    }
+removeTags = RemoveTags' {_rtResourceARNs = mempty, _rtTagKeys = mempty}
 
+
 -- | The Amazon Resource Name (ARN) of the resource.
 rtResourceARNs :: Lens' RemoveTags [Text]
 rtResourceARNs = lens _rtResourceARNs (\ s a -> s{_rtResourceARNs = a}) . _Coerce;
@@ -87,9 +81,9 @@
               (\ s h x ->
                  RemoveTagsResponse' <$> (pure (fromEnum s)))
 
-instance Hashable RemoveTags
+instance Hashable RemoveTags where
 
-instance NFData RemoveTags
+instance NFData RemoveTags where
 
 instance ToHeaders RemoveTags where
         toHeaders = const mempty
@@ -106,15 +100,12 @@
                  toQueryList "member" _rtResourceARNs,
                "TagKeys" =: toQueryList "member" _rtTagKeys]
 
--- | Contains the output of RemoveTags.
---
---
---
--- /See:/ 'removeTagsResponse' smart constructor.
+-- | /See:/ 'removeTagsResponse' smart constructor.
 newtype RemoveTagsResponse = RemoveTagsResponse'
-    { _rtrsResponseStatus :: Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _rtrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'RemoveTagsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -124,12 +115,11 @@
     :: Int -- ^ 'rtrsResponseStatus'
     -> RemoveTagsResponse
 removeTagsResponse pResponseStatus_ =
-    RemoveTagsResponse'
-    { _rtrsResponseStatus = pResponseStatus_
-    }
+  RemoveTagsResponse' {_rtrsResponseStatus = pResponseStatus_}
 
+
 -- | -- | The response status code.
 rtrsResponseStatus :: Lens' RemoveTagsResponse Int
 rtrsResponseStatus = lens _rtrsResponseStatus (\ s a -> s{_rtrsResponseStatus = a});
 
-instance NFData RemoveTagsResponse
+instance NFData RemoveTagsResponse where
diff --git a/gen/Network/AWS/ELBv2/SetIPAddressType.hs b/gen/Network/AWS/ELBv2/SetIPAddressType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/ELBv2/SetIPAddressType.hs
@@ -0,0 +1,140 @@
+{-# 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.ELBv2.SetIPAddressType
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sets the type of IP addresses used by the subnets of the specified Application Load Balancer or Network Load Balancer.
+--
+--
+-- Note that Network Load Balancers must use @ipv4@ .
+--
+module Network.AWS.ELBv2.SetIPAddressType
+    (
+    -- * Creating a Request
+      setIPAddressType
+    , SetIPAddressType
+    -- * Request Lenses
+    , siatLoadBalancerARN
+    , siatIPAddressType
+
+    -- * Destructuring the Response
+    , setIPAddressTypeResponse
+    , SetIPAddressTypeResponse
+    -- * Response Lenses
+    , siatrsIPAddressType
+    , siatrsResponseStatus
+    ) where
+
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'setIPAddressType' smart constructor.
+data SetIPAddressType = SetIPAddressType'
+  { _siatLoadBalancerARN :: !Text
+  , _siatIPAddressType   :: !IPAddressType
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SetIPAddressType' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'siatLoadBalancerARN' - The Amazon Resource Name (ARN) of the load balancer.
+--
+-- * 'siatIPAddressType' - The IP address type. The possible values are @ipv4@ (for IPv4 addresses) and @dualstack@ (for IPv4 and IPv6 addresses). Internal load balancers must use @ipv4@ .
+setIPAddressType
+    :: Text -- ^ 'siatLoadBalancerARN'
+    -> IPAddressType -- ^ 'siatIPAddressType'
+    -> SetIPAddressType
+setIPAddressType pLoadBalancerARN_ pIPAddressType_ =
+  SetIPAddressType'
+  { _siatLoadBalancerARN = pLoadBalancerARN_
+  , _siatIPAddressType = pIPAddressType_
+  }
+
+
+-- | The Amazon Resource Name (ARN) of the load balancer.
+siatLoadBalancerARN :: Lens' SetIPAddressType Text
+siatLoadBalancerARN = lens _siatLoadBalancerARN (\ s a -> s{_siatLoadBalancerARN = a});
+
+-- | The IP address type. The possible values are @ipv4@ (for IPv4 addresses) and @dualstack@ (for IPv4 and IPv6 addresses). Internal load balancers must use @ipv4@ .
+siatIPAddressType :: Lens' SetIPAddressType IPAddressType
+siatIPAddressType = lens _siatIPAddressType (\ s a -> s{_siatIPAddressType = a});
+
+instance AWSRequest SetIPAddressType where
+        type Rs SetIPAddressType = SetIPAddressTypeResponse
+        request = postQuery eLBv2
+        response
+          = receiveXMLWrapper "SetIpAddressTypeResult"
+              (\ s h x ->
+                 SetIPAddressTypeResponse' <$>
+                   (x .@? "IpAddressType") <*> (pure (fromEnum s)))
+
+instance Hashable SetIPAddressType where
+
+instance NFData SetIPAddressType where
+
+instance ToHeaders SetIPAddressType where
+        toHeaders = const mempty
+
+instance ToPath SetIPAddressType where
+        toPath = const "/"
+
+instance ToQuery SetIPAddressType where
+        toQuery SetIPAddressType'{..}
+          = mconcat
+              ["Action" =: ("SetIpAddressType" :: ByteString),
+               "Version" =: ("2015-12-01" :: ByteString),
+               "LoadBalancerArn" =: _siatLoadBalancerARN,
+               "IpAddressType" =: _siatIPAddressType]
+
+-- | /See:/ 'setIPAddressTypeResponse' smart constructor.
+data SetIPAddressTypeResponse = SetIPAddressTypeResponse'
+  { _siatrsIPAddressType  :: !(Maybe IPAddressType)
+  , _siatrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SetIPAddressTypeResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'siatrsIPAddressType' - The IP address type.
+--
+-- * 'siatrsResponseStatus' - -- | The response status code.
+setIPAddressTypeResponse
+    :: Int -- ^ 'siatrsResponseStatus'
+    -> SetIPAddressTypeResponse
+setIPAddressTypeResponse pResponseStatus_ =
+  SetIPAddressTypeResponse'
+  {_siatrsIPAddressType = Nothing, _siatrsResponseStatus = pResponseStatus_}
+
+
+-- | The IP address type.
+siatrsIPAddressType :: Lens' SetIPAddressTypeResponse (Maybe IPAddressType)
+siatrsIPAddressType = lens _siatrsIPAddressType (\ s a -> s{_siatrsIPAddressType = a});
+
+-- | -- | The response status code.
+siatrsResponseStatus :: Lens' SetIPAddressTypeResponse Int
+siatrsResponseStatus = lens _siatrsResponseStatus (\ s a -> s{_siatrsResponseStatus = a});
+
+instance NFData SetIPAddressTypeResponse where
diff --git a/gen/Network/AWS/ELBv2/SetRulePriorities.hs b/gen/Network/AWS/ELBv2/SetRulePriorities.hs
--- a/gen/Network/AWS/ELBv2/SetRulePriorities.hs
+++ b/gen/Network/AWS/ELBv2/SetRulePriorities.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.SetRulePriorities
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -39,22 +39,19 @@
     , srprsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for SetRulePriorities.
---
---
---
--- /See:/ 'setRulePriorities' smart constructor.
+-- | /See:/ 'setRulePriorities' smart constructor.
 newtype SetRulePriorities = SetRulePriorities'
-    { _srpRulePriorities :: [RulePriorityPair]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _srpRulePriorities :: [RulePriorityPair]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SetRulePriorities' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -62,11 +59,9 @@
 -- * 'srpRulePriorities' - The rule priorities.
 setRulePriorities
     :: SetRulePriorities
-setRulePriorities =
-    SetRulePriorities'
-    { _srpRulePriorities = mempty
-    }
+setRulePriorities = SetRulePriorities' {_srpRulePriorities = mempty}
 
+
 -- | The rule priorities.
 srpRulePriorities :: Lens' SetRulePriorities [RulePriorityPair]
 srpRulePriorities = lens _srpRulePriorities (\ s a -> s{_srpRulePriorities = a}) . _Coerce;
@@ -82,9 +77,9 @@
                       may (parseXMLList "member"))
                      <*> (pure (fromEnum s)))
 
-instance Hashable SetRulePriorities
+instance Hashable SetRulePriorities where
 
-instance NFData SetRulePriorities
+instance NFData SetRulePriorities where
 
 instance ToHeaders SetRulePriorities where
         toHeaders = const mempty
@@ -100,16 +95,13 @@
                "RulePriorities" =:
                  toQueryList "member" _srpRulePriorities]
 
--- | Contains the output of SetRulePriorities.
---
---
---
--- /See:/ 'setRulePrioritiesResponse' smart constructor.
+-- | /See:/ 'setRulePrioritiesResponse' smart constructor.
 data SetRulePrioritiesResponse = SetRulePrioritiesResponse'
-    { _srprsRules          :: !(Maybe [Rule])
-    , _srprsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _srprsRules          :: !(Maybe [Rule])
+  , _srprsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SetRulePrioritiesResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -121,11 +113,10 @@
     :: Int -- ^ 'srprsResponseStatus'
     -> SetRulePrioritiesResponse
 setRulePrioritiesResponse pResponseStatus_ =
-    SetRulePrioritiesResponse'
-    { _srprsRules = Nothing
-    , _srprsResponseStatus = pResponseStatus_
-    }
+  SetRulePrioritiesResponse'
+  {_srprsRules = Nothing, _srprsResponseStatus = pResponseStatus_}
 
+
 -- | Information about the rules.
 srprsRules :: Lens' SetRulePrioritiesResponse [Rule]
 srprsRules = lens _srprsRules (\ s a -> s{_srprsRules = a}) . _Default . _Coerce;
@@ -134,4 +125,4 @@
 srprsResponseStatus :: Lens' SetRulePrioritiesResponse Int
 srprsResponseStatus = lens _srprsResponseStatus (\ s a -> s{_srprsResponseStatus = a});
 
-instance NFData SetRulePrioritiesResponse
+instance NFData SetRulePrioritiesResponse where
diff --git a/gen/Network/AWS/ELBv2/SetSecurityGroups.hs b/gen/Network/AWS/ELBv2/SetSecurityGroups.hs
--- a/gen/Network/AWS/ELBv2/SetSecurityGroups.hs
+++ b/gen/Network/AWS/ELBv2/SetSecurityGroups.hs
@@ -12,15 +12,17 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.SetSecurityGroups
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Associates the specified security groups with the specified load balancer. The specified security groups override the previously associated security groups.
+-- Associates the specified security groups with the specified Application Load Balancer. The specified security groups override the previously associated security groups.
 --
 --
+-- Note that you can't specify a security group for a Network Load Balancer.
+--
 module Network.AWS.ELBv2.SetSecurityGroups
     (
     -- * Creating a Request
@@ -38,23 +40,20 @@
     , ssgrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for SetSecurityGroups.
---
---
---
--- /See:/ 'setSecurityGroups' smart constructor.
+-- | /See:/ 'setSecurityGroups' smart constructor.
 data SetSecurityGroups = SetSecurityGroups'
-    { _ssgLoadBalancerARN :: !Text
-    , _ssgSecurityGroups  :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ssgLoadBalancerARN :: !Text
+  , _ssgSecurityGroups  :: ![Text]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SetSecurityGroups' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -66,11 +65,10 @@
     :: Text -- ^ 'ssgLoadBalancerARN'
     -> SetSecurityGroups
 setSecurityGroups pLoadBalancerARN_ =
-    SetSecurityGroups'
-    { _ssgLoadBalancerARN = pLoadBalancerARN_
-    , _ssgSecurityGroups = mempty
-    }
+  SetSecurityGroups'
+  {_ssgLoadBalancerARN = pLoadBalancerARN_, _ssgSecurityGroups = mempty}
 
+
 -- | The Amazon Resource Name (ARN) of the load balancer.
 ssgLoadBalancerARN :: Lens' SetSecurityGroups Text
 ssgLoadBalancerARN = lens _ssgLoadBalancerARN (\ s a -> s{_ssgLoadBalancerARN = a});
@@ -90,9 +88,9 @@
                       may (parseXMLList "member"))
                      <*> (pure (fromEnum s)))
 
-instance Hashable SetSecurityGroups
+instance Hashable SetSecurityGroups where
 
-instance NFData SetSecurityGroups
+instance NFData SetSecurityGroups where
 
 instance ToHeaders SetSecurityGroups where
         toHeaders = const mempty
@@ -109,16 +107,13 @@
                "SecurityGroups" =:
                  toQueryList "member" _ssgSecurityGroups]
 
--- | Contains the output of SetSecurityGroups.
---
---
---
--- /See:/ 'setSecurityGroupsResponse' smart constructor.
+-- | /See:/ 'setSecurityGroupsResponse' smart constructor.
 data SetSecurityGroupsResponse = SetSecurityGroupsResponse'
-    { _ssgrsSecurityGroupIds :: !(Maybe [Text])
-    , _ssgrsResponseStatus   :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ssgrsSecurityGroupIds :: !(Maybe [Text])
+  , _ssgrsResponseStatus   :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SetSecurityGroupsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -130,11 +125,10 @@
     :: Int -- ^ 'ssgrsResponseStatus'
     -> SetSecurityGroupsResponse
 setSecurityGroupsResponse pResponseStatus_ =
-    SetSecurityGroupsResponse'
-    { _ssgrsSecurityGroupIds = Nothing
-    , _ssgrsResponseStatus = pResponseStatus_
-    }
+  SetSecurityGroupsResponse'
+  {_ssgrsSecurityGroupIds = Nothing, _ssgrsResponseStatus = pResponseStatus_}
 
+
 -- | The IDs of the security groups associated with the load balancer.
 ssgrsSecurityGroupIds :: Lens' SetSecurityGroupsResponse [Text]
 ssgrsSecurityGroupIds = lens _ssgrsSecurityGroupIds (\ s a -> s{_ssgrsSecurityGroupIds = a}) . _Default . _Coerce;
@@ -143,4 +137,4 @@
 ssgrsResponseStatus :: Lens' SetSecurityGroupsResponse Int
 ssgrsResponseStatus = lens _ssgrsResponseStatus (\ s a -> s{_ssgrsResponseStatus = a});
 
-instance NFData SetSecurityGroupsResponse
+instance NFData SetSecurityGroupsResponse where
diff --git a/gen/Network/AWS/ELBv2/SetSubnets.hs b/gen/Network/AWS/ELBv2/SetSubnets.hs
--- a/gen/Network/AWS/ELBv2/SetSubnets.hs
+++ b/gen/Network/AWS/ELBv2/SetSubnets.hs
@@ -12,21 +12,24 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.SetSubnets
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Enables the Availability Zone for the specified subnets for the specified load balancer. The specified subnets replace the previously enabled subnets.
+-- Enables the Availability Zone for the specified subnets for the specified Application Load Balancer. The specified subnets replace the previously enabled subnets.
 --
 --
+-- Note that you can't change the subnets for a Network Load Balancer.
+--
 module Network.AWS.ELBv2.SetSubnets
     (
     -- * Creating a Request
       setSubnets
     , SetSubnets
     -- * Request Lenses
+    , ssSubnetMappings
     , ssLoadBalancerARN
     , ssSubnets
 
@@ -38,44 +41,50 @@
     , ssrsResponseStatus
     ) where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.ELBv2.Types
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
--- | Contains the parameters for SetSubnets.
---
---
---
--- /See:/ 'setSubnets' smart constructor.
+-- | /See:/ 'setSubnets' smart constructor.
 data SetSubnets = SetSubnets'
-    { _ssLoadBalancerARN :: !Text
-    , _ssSubnets         :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ssSubnetMappings  :: !(Maybe [SubnetMapping])
+  , _ssLoadBalancerARN :: !Text
+  , _ssSubnets         :: ![Text]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SetSubnets' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'ssSubnetMappings' - The IDs of the subnets. You must specify subnets from at least two Availability Zones. You can specify only one subnet per Availability Zone. You must specify either subnets or subnet mappings. You cannot specify Elastic IP addresses for your subnets.
+--
 -- * 'ssLoadBalancerARN' - The Amazon Resource Name (ARN) of the load balancer.
 --
--- * 'ssSubnets' - The IDs of the subnets. You must specify at least two subnets. You can add only one subnet per Availability Zone.
+-- * 'ssSubnets' - The IDs of the subnets. You must specify subnets from at least two Availability Zones. You can specify only one subnet per Availability Zone. You must specify either subnets or subnet mappings.
 setSubnets
     :: Text -- ^ 'ssLoadBalancerARN'
     -> SetSubnets
 setSubnets pLoadBalancerARN_ =
-    SetSubnets'
-    { _ssLoadBalancerARN = pLoadBalancerARN_
-    , _ssSubnets = mempty
-    }
+  SetSubnets'
+  { _ssSubnetMappings = Nothing
+  , _ssLoadBalancerARN = pLoadBalancerARN_
+  , _ssSubnets = mempty
+  }
 
+
+-- | The IDs of the subnets. You must specify subnets from at least two Availability Zones. You can specify only one subnet per Availability Zone. You must specify either subnets or subnet mappings. You cannot specify Elastic IP addresses for your subnets.
+ssSubnetMappings :: Lens' SetSubnets [SubnetMapping]
+ssSubnetMappings = lens _ssSubnetMappings (\ s a -> s{_ssSubnetMappings = a}) . _Default . _Coerce;
+
 -- | The Amazon Resource Name (ARN) of the load balancer.
 ssLoadBalancerARN :: Lens' SetSubnets Text
 ssLoadBalancerARN = lens _ssLoadBalancerARN (\ s a -> s{_ssLoadBalancerARN = a});
 
--- | The IDs of the subnets. You must specify at least two subnets. You can add only one subnet per Availability Zone.
+-- | The IDs of the subnets. You must specify subnets from at least two Availability Zones. You can specify only one subnet per Availability Zone. You must specify either subnets or subnet mappings.
 ssSubnets :: Lens' SetSubnets [Text]
 ssSubnets = lens _ssSubnets (\ s a -> s{_ssSubnets = a}) . _Coerce;
 
@@ -90,9 +99,9 @@
                       may (parseXMLList "member"))
                      <*> (pure (fromEnum s)))
 
-instance Hashable SetSubnets
+instance Hashable SetSubnets where
 
-instance NFData SetSubnets
+instance NFData SetSubnets where
 
 instance ToHeaders SetSubnets where
         toHeaders = const mempty
@@ -105,19 +114,18 @@
           = mconcat
               ["Action" =: ("SetSubnets" :: ByteString),
                "Version" =: ("2015-12-01" :: ByteString),
+               "SubnetMappings" =:
+                 toQuery (toQueryList "member" <$> _ssSubnetMappings),
                "LoadBalancerArn" =: _ssLoadBalancerARN,
                "Subnets" =: toQueryList "member" _ssSubnets]
 
--- | Contains the output of SetSubnets.
---
---
---
--- /See:/ 'setSubnetsResponse' smart constructor.
+-- | /See:/ 'setSubnetsResponse' smart constructor.
 data SetSubnetsResponse = SetSubnetsResponse'
-    { _ssrsAvailabilityZones :: !(Maybe [AvailabilityZone])
-    , _ssrsResponseStatus    :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ssrsAvailabilityZones :: !(Maybe [AvailabilityZone])
+  , _ssrsResponseStatus    :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SetSubnetsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -129,11 +137,10 @@
     :: Int -- ^ 'ssrsResponseStatus'
     -> SetSubnetsResponse
 setSubnetsResponse pResponseStatus_ =
-    SetSubnetsResponse'
-    { _ssrsAvailabilityZones = Nothing
-    , _ssrsResponseStatus = pResponseStatus_
-    }
+  SetSubnetsResponse'
+  {_ssrsAvailabilityZones = Nothing, _ssrsResponseStatus = pResponseStatus_}
 
+
 -- | Information about the subnet and Availability Zone.
 ssrsAvailabilityZones :: Lens' SetSubnetsResponse [AvailabilityZone]
 ssrsAvailabilityZones = lens _ssrsAvailabilityZones (\ s a -> s{_ssrsAvailabilityZones = a}) . _Default . _Coerce;
@@ -142,4 +149,4 @@
 ssrsResponseStatus :: Lens' SetSubnetsResponse Int
 ssrsResponseStatus = lens _ssrsResponseStatus (\ s a -> s{_ssrsResponseStatus = a});
 
-instance NFData SetSubnetsResponse
+instance NFData SetSubnetsResponse where
diff --git a/gen/Network/AWS/ELBv2/Types.hs b/gen/Network/AWS/ELBv2/Types.hs
--- a/gen/Network/AWS/ELBv2/Types.hs
+++ b/gen/Network/AWS/ELBv2/Types.hs
@@ -4,9 +4,9 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.Types
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -31,6 +31,7 @@
     , _TooManyTagsException
     , _DuplicateTargetGroupNameException
     , _HealthUnavailableException
+    , _AllocationIdNotFoundException
     , _PriorityInUseException
     , _TooManyLoadBalancersException
     , _UnsupportedProtocolException
@@ -44,6 +45,7 @@
     , _OperationNotPermittedException
     , _SSLPolicyNotFoundException
     , _InvalidSchemeException
+    , _AvailabilityZoneNotSupportedException
     , _LoadBalancerNotFoundException
     , _ResourceInUseException
     , _CertificateNotFoundException
@@ -51,6 +53,9 @@
     -- * ActionTypeEnum
     , ActionTypeEnum (..)
 
+    -- * IPAddressType
+    , IPAddressType (..)
+
     -- * LoadBalancerSchemeEnum
     , LoadBalancerSchemeEnum (..)
 
@@ -69,6 +74,9 @@
     -- * TargetHealthStateEnum
     , TargetHealthStateEnum (..)
 
+    -- * TargetTypeEnum
+    , TargetTypeEnum (..)
+
     -- * Action
     , Action
     , action
@@ -80,11 +88,13 @@
     , availabilityZone
     , azSubnetId
     , azZoneName
+    , azLoadBalancerAddresses
 
     -- * Certificate
     , Certificate
     , certificate
     , cCertificateARN
+    , cIsDefault
 
     -- * Cipher
     , Cipher
@@ -92,6 +102,12 @@
     , cPriority
     , cName
 
+    -- * Limit
+    , Limit
+    , limit
+    , lMax
+    , lName
+
     -- * Listener
     , Listener
     , listener
@@ -114,10 +130,17 @@
     , lbCanonicalHostedZoneId
     , lbAvailabilityZones
     , lbLoadBalancerARN
+    , lbIPAddressType
     , lbScheme
     , lbType
     , lbDNSName
 
+    -- * LoadBalancerAddress
+    , LoadBalancerAddress
+    , loadBalancerAddress
+    , lbaIPAddress
+    , lbaAllocationId
+
     -- * LoadBalancerAttribute
     , LoadBalancerAttribute
     , loadBalancerAttribute
@@ -163,6 +186,12 @@
     , spName
     , spSSLProtocols
 
+    -- * SubnetMapping
+    , SubnetMapping
+    , subnetMapping
+    , smAllocationId
+    , smSubnetId
+
     -- * Tag
     , Tag
     , tag
@@ -178,6 +207,7 @@
     -- * TargetDescription
     , TargetDescription
     , targetDescription
+    , tdAvailabilityZone
     , tdPort
     , tdId
 
@@ -191,6 +221,7 @@
     , tgTargetGroupARN
     , tgProtocol
     , tgHealthCheckIntervalSeconds
+    , tgTargetType
     , tgHealthyThresholdCount
     , tgHealthCheckProtocol
     , tgLoadBalancerARNs
@@ -220,38 +251,40 @@
     , thdTarget
     ) where
 
-import           Network.AWS.ELBv2.Types.Product
-import           Network.AWS.ELBv2.Types.Sum
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Sign.V4
+import Network.AWS.ELBv2.Types.Product
+import Network.AWS.ELBv2.Types.Sum
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Sign.V4
 
 -- | API version @2015-12-01@ of the Amazon Elastic Load Balancing SDK configuration.
 eLBv2 :: Service
 eLBv2 =
-    Service
-    { _svcAbbrev = "ELBv2"
-    , _svcSigner = v4
-    , _svcPrefix = "elasticloadbalancing"
-    , _svcVersion = "2015-12-01"
-    , _svcEndpoint = defaultEndpoint eLBv2
-    , _svcTimeout = Just 70
-    , _svcCheck = statusSuccess
-    , _svcError = parseXMLError "ELBv2"
-    , _svcRetry = retry
-    }
+  Service
+  { _svcAbbrev = "ELBv2"
+  , _svcSigner = v4
+  , _svcPrefix = "elasticloadbalancing"
+  , _svcVersion = "2015-12-01"
+  , _svcEndpoint = defaultEndpoint eLBv2
+  , _svcTimeout = Just 70
+  , _svcCheck = statusSuccess
+  , _svcError = parseXMLError "ELBv2"
+  , _svcRetry = retry
+  }
   where
     retry =
-        Exponential
-        { _retryBase = 5.0e-2
-        , _retryGrowth = 2
-        , _retryAttempts = 5
-        , _retryCheck = check
-        }
+      Exponential
+      { _retryBase = 5.0e-2
+      , _retryGrowth = 2
+      , _retryAttempts = 5
+      , _retryCheck = check
+      }
     check e
+      | has (hasCode "ThrottledException" . hasStatus 400) e =
+        Just "throttled_exception"
       | has (hasStatus 429) e = Just "too_many_requests"
       | has (hasCode "ThrottlingException" . hasStatus 400) e =
-          Just "throttling_exception"
+        Just "throttling_exception"
       | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
       | has (hasStatus 504) e = Just "gateway_timeout"
       | has (hasStatus 502) e = Just "bad_gateway"
@@ -260,216 +293,264 @@
       | has (hasStatus 509) e = Just "limit_exceeded"
       | otherwise = Nothing
 
+
 -- | The requested configuration is not valid.
 --
 --
 _InvalidConfigurationRequestException :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidConfigurationRequestException =
-    _ServiceError . hasStatus 400 . hasCode "InvalidConfigurationRequest"
+  _MatchServiceError eLBv2 "InvalidConfigurationRequest" . hasStatus 400
 
+
 -- | The specified subnet does not exist.
 --
 --
 _SubnetNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
 _SubnetNotFoundException =
-    _ServiceError . hasStatus 400 . hasCode "SubnetNotFound"
+  _MatchServiceError eLBv2 "SubnetNotFound" . hasStatus 400
 
+
 -- | You've reached the limit on the number of targets.
 --
 --
 _TooManyTargetsException :: AsError a => Getting (First ServiceError) a ServiceError
 _TooManyTargetsException =
-    _ServiceError . hasStatus 400 . hasCode "TooManyTargets"
+  _MatchServiceError eLBv2 "TooManyTargets" . hasStatus 400
 
+
 -- | The specified rule does not exist.
 --
 --
 _RuleNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
-_RuleNotFoundException = _ServiceError . hasStatus 400 . hasCode "RuleNotFound"
+_RuleNotFoundException = _MatchServiceError eLBv2 "RuleNotFound" . hasStatus 400
 
+
 -- | The specified subnet is out of available addresses.
 --
 --
 _InvalidSubnetException :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidSubnetException =
-    _ServiceError . hasStatus 400 . hasCode "InvalidSubnet"
+  _MatchServiceError eLBv2 "InvalidSubnet" . hasStatus 400
 
+
 -- | You've reached the limit on the number of rules per load balancer.
 --
 --
 _TooManyRulesException :: AsError a => Getting (First ServiceError) a ServiceError
-_TooManyRulesException = _ServiceError . hasStatus 400 . hasCode "TooManyRules"
+_TooManyRulesException = _MatchServiceError eLBv2 "TooManyRules" . hasStatus 400
 
+
 -- | You've reached the limit on the number of target groups for your AWS account.
 --
 --
 _TooManyTargetGroupsException :: AsError a => Getting (First ServiceError) a ServiceError
 _TooManyTargetGroupsException =
-    _ServiceError . hasStatus 400 . hasCode "TooManyTargetGroups"
+  _MatchServiceError eLBv2 "TooManyTargetGroups" . hasStatus 400
 
--- | A load balancer with the specified name already exists for this account.
+
+-- | A load balancer with the specified name already exists.
 --
 --
 _DuplicateLoadBalancerNameException :: AsError a => Getting (First ServiceError) a ServiceError
 _DuplicateLoadBalancerNameException =
-    _ServiceError . hasStatus 400 . hasCode "DuplicateLoadBalancerName"
+  _MatchServiceError eLBv2 "DuplicateLoadBalancerName" . hasStatus 400
 
+
 -- | The specified configuration is not valid with this protocol.
 --
 --
 _IncompatibleProtocolsException :: AsError a => Getting (First ServiceError) a ServiceError
 _IncompatibleProtocolsException =
-    _ServiceError . hasStatus 400 . hasCode "IncompatibleProtocols"
+  _MatchServiceError eLBv2 "IncompatibleProtocols" . hasStatus 400
 
--- | You've reached the limit on the number of certificates per listener.
+
+-- | You've reached the limit on the number of certificates per load balancer.
 --
 --
 _TooManyCertificatesException :: AsError a => Getting (First ServiceError) a ServiceError
 _TooManyCertificatesException =
-    _ServiceError . hasStatus 400 . hasCode "TooManyCertificates"
+  _MatchServiceError eLBv2 "TooManyCertificates" . hasStatus 400
 
+
 -- | A tag key was specified more than once.
 --
 --
 _DuplicateTagKeysException :: AsError a => Getting (First ServiceError) a ServiceError
 _DuplicateTagKeysException =
-    _ServiceError . hasStatus 400 . hasCode "DuplicateTagKeys"
+  _MatchServiceError eLBv2 "DuplicateTagKeys" . hasStatus 400
 
+
 -- | A listener with the specified port already exists.
 --
 --
 _DuplicateListenerException :: AsError a => Getting (First ServiceError) a ServiceError
 _DuplicateListenerException =
-    _ServiceError . hasStatus 400 . hasCode "DuplicateListener"
+  _MatchServiceError eLBv2 "DuplicateListener" . hasStatus 400
 
+
 -- | You've reached the limit on the number of tags per load balancer.
 --
 --
 _TooManyTagsException :: AsError a => Getting (First ServiceError) a ServiceError
-_TooManyTagsException = _ServiceError . hasStatus 400 . hasCode "TooManyTags"
+_TooManyTagsException = _MatchServiceError eLBv2 "TooManyTags" . hasStatus 400
 
+
 -- | A target group with the specified name already exists.
 --
 --
 _DuplicateTargetGroupNameException :: AsError a => Getting (First ServiceError) a ServiceError
 _DuplicateTargetGroupNameException =
-    _ServiceError . hasStatus 400 . hasCode "DuplicateTargetGroupName"
+  _MatchServiceError eLBv2 "DuplicateTargetGroupName" . hasStatus 400
 
+
 -- | The health of the specified targets could not be retrieved due to an internal error.
 --
 --
 _HealthUnavailableException :: AsError a => Getting (First ServiceError) a ServiceError
 _HealthUnavailableException =
-    _ServiceError . hasStatus 500 . hasCode "HealthUnavailable"
+  _MatchServiceError eLBv2 "HealthUnavailable" . hasStatus 500
 
+
+-- | The specified allocation ID does not exist.
+--
+--
+_AllocationIdNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_AllocationIdNotFoundException =
+  _MatchServiceError eLBv2 "AllocationIdNotFound" . hasStatus 400
+
+
 -- | The specified priority is in use.
 --
 --
 _PriorityInUseException :: AsError a => Getting (First ServiceError) a ServiceError
 _PriorityInUseException =
-    _ServiceError . hasStatus 400 . hasCode "PriorityInUse"
+  _MatchServiceError eLBv2 "PriorityInUse" . hasStatus 400
 
+
 -- | You've reached the limit on the number of load balancers for your AWS account.
 --
 --
 _TooManyLoadBalancersException :: AsError a => Getting (First ServiceError) a ServiceError
 _TooManyLoadBalancersException =
-    _ServiceError . hasStatus 400 . hasCode "TooManyLoadBalancers"
+  _MatchServiceError eLBv2 "TooManyLoadBalancers" . hasStatus 400
 
+
 -- | The specified protocol is not supported.
 --
 --
 _UnsupportedProtocolException :: AsError a => Getting (First ServiceError) a ServiceError
 _UnsupportedProtocolException =
-    _ServiceError . hasStatus 400 . hasCode "UnsupportedProtocol"
+  _MatchServiceError eLBv2 "UnsupportedProtocol" . hasStatus 400
 
--- | The specified target does not exist or is not in the same VPC as the target group.
+
+-- | The specified target does not exist, is not in the same VPC as the target group, or has an unsupported instance type.
 --
 --
 _InvalidTargetException :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidTargetException =
-    _ServiceError . hasStatus 400 . hasCode "InvalidTarget"
+  _MatchServiceError eLBv2 "InvalidTarget" . hasStatus 400
 
+
 -- | The specified security group does not exist.
 --
 --
 _InvalidSecurityGroupException :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidSecurityGroupException =
-    _ServiceError . hasStatus 400 . hasCode "InvalidSecurityGroup"
+  _MatchServiceError eLBv2 "InvalidSecurityGroup" . hasStatus 400
 
+
 -- | The specified target group does not exist.
 --
 --
 _TargetGroupNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
 _TargetGroupNotFoundException =
-    _ServiceError . hasStatus 400 . hasCode "TargetGroupNotFound"
+  _MatchServiceError eLBv2 "TargetGroupNotFound" . hasStatus 400
 
+
 -- | The specified listener does not exist.
 --
 --
 _ListenerNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
 _ListenerNotFoundException =
-    _ServiceError . hasStatus 400 . hasCode "ListenerNotFound"
+  _MatchServiceError eLBv2 "ListenerNotFound" . hasStatus 400
 
+
 -- | You've reached the limit on the number of times a target can be registered with a load balancer.
 --
 --
 _TooManyRegistrationsForTargetIdException :: AsError a => Getting (First ServiceError) a ServiceError
 _TooManyRegistrationsForTargetIdException =
-    _ServiceError . hasStatus 400 . hasCode "TooManyRegistrationsForTargetId"
+  _MatchServiceError eLBv2 "TooManyRegistrationsForTargetId" . hasStatus 400
 
+
 -- | You've reached the limit on the number of listeners per load balancer.
 --
 --
 _TooManyListenersException :: AsError a => Getting (First ServiceError) a ServiceError
 _TooManyListenersException =
-    _ServiceError . hasStatus 400 . hasCode "TooManyListeners"
+  _MatchServiceError eLBv2 "TooManyListeners" . hasStatus 400
 
+
 -- | You've reached the limit on the number of load balancers per target group.
 --
 --
 _TargetGroupAssociationLimitException :: AsError a => Getting (First ServiceError) a ServiceError
 _TargetGroupAssociationLimitException =
-    _ServiceError . hasStatus 400 . hasCode "TargetGroupAssociationLimit"
+  _MatchServiceError eLBv2 "TargetGroupAssociationLimit" . hasStatus 400
 
+
 -- | This operation is not allowed.
 --
 --
 _OperationNotPermittedException :: AsError a => Getting (First ServiceError) a ServiceError
 _OperationNotPermittedException =
-    _ServiceError . hasStatus 400 . hasCode "OperationNotPermitted"
+  _MatchServiceError eLBv2 "OperationNotPermitted" . hasStatus 400
 
+
 -- | The specified SSL policy does not exist.
 --
 --
 _SSLPolicyNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
 _SSLPolicyNotFoundException =
-    _ServiceError . hasStatus 400 . hasCode "SSLPolicyNotFound"
+  _MatchServiceError eLBv2 "SSLPolicyNotFound" . hasStatus 400
 
+
 -- | The requested scheme is not valid.
 --
 --
 _InvalidSchemeException :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidSchemeException =
-    _ServiceError . hasStatus 400 . hasCode "InvalidScheme"
+  _MatchServiceError eLBv2 "InvalidScheme" . hasStatus 400
 
+
+-- | The specified Availability Zone is not supported.
+--
+--
+_AvailabilityZoneNotSupportedException :: AsError a => Getting (First ServiceError) a ServiceError
+_AvailabilityZoneNotSupportedException =
+  _MatchServiceError eLBv2 "AvailabilityZoneNotSupported" . hasStatus 400
+
+
 -- | The specified load balancer does not exist.
 --
 --
 _LoadBalancerNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
 _LoadBalancerNotFoundException =
-    _ServiceError . hasStatus 400 . hasCode "LoadBalancerNotFound"
+  _MatchServiceError eLBv2 "LoadBalancerNotFound" . hasStatus 400
 
+
 -- | A specified resource is in use.
 --
 --
 _ResourceInUseException :: AsError a => Getting (First ServiceError) a ServiceError
 _ResourceInUseException =
-    _ServiceError . hasStatus 400 . hasCode "ResourceInUse"
+  _MatchServiceError eLBv2 "ResourceInUse" . hasStatus 400
 
+
 -- | The specified certificate does not exist.
 --
 --
 _CertificateNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
 _CertificateNotFoundException =
-    _ServiceError . hasStatus 400 . hasCode "CertificateNotFound"
+  _MatchServiceError eLBv2 "CertificateNotFound" . hasStatus 400
+
diff --git a/gen/Network/AWS/ELBv2/Types/Product.hs b/gen/Network/AWS/ELBv2/Types/Product.hs
--- a/gen/Network/AWS/ELBv2/Types/Product.hs
+++ b/gen/Network/AWS/ELBv2/Types/Product.hs
@@ -9,17 +9,17 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.Types.Product
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 module Network.AWS.ELBv2.Types.Product where
 
-import           Network.AWS.ELBv2.Types.Sum
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
+import Network.AWS.ELBv2.Types.Sum
+import Network.AWS.Lens
+import Network.AWS.Prelude
 
 -- | Information about an action.
 --
@@ -27,10 +27,11 @@
 --
 -- /See:/ 'action' smart constructor.
 data Action = Action'
-    { _aType           :: !ActionTypeEnum
-    , _aTargetGroupARN :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _aType           :: !ActionTypeEnum
+  , _aTargetGroupARN :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'Action' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -43,11 +44,9 @@
     -> Text -- ^ 'aTargetGroupARN'
     -> Action
 action pType_ pTargetGroupARN_ =
-    Action'
-    { _aType = pType_
-    , _aTargetGroupARN = pTargetGroupARN_
-    }
+  Action' {_aType = pType_, _aTargetGroupARN = pTargetGroupARN_}
 
+
 -- | The type of action.
 aType :: Lens' Action ActionTypeEnum
 aType = lens _aType (\ s a -> s{_aType = a});
@@ -61,9 +60,9 @@
           = Action' <$>
               (x .@ "Type") <*> (x .@ "TargetGroupArn")
 
-instance Hashable Action
+instance Hashable Action where
 
-instance NFData Action
+instance NFData Action where
 
 instance ToQuery Action where
         toQuery Action'{..}
@@ -77,10 +76,12 @@
 --
 -- /See:/ 'availabilityZone' smart constructor.
 data AvailabilityZone = AvailabilityZone'
-    { _azSubnetId :: !(Maybe Text)
-    , _azZoneName :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _azSubnetId              :: !(Maybe Text)
+  , _azZoneName              :: !(Maybe Text)
+  , _azLoadBalancerAddresses :: !(Maybe [LoadBalancerAddress])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'AvailabilityZone' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -88,14 +89,18 @@
 -- * 'azSubnetId' - The ID of the subnet.
 --
 -- * 'azZoneName' - The name of the Availability Zone.
+--
+-- * 'azLoadBalancerAddresses' - [Network Load Balancers] The static IP address.
 availabilityZone
     :: AvailabilityZone
 availabilityZone =
-    AvailabilityZone'
-    { _azSubnetId = Nothing
-    , _azZoneName = Nothing
-    }
+  AvailabilityZone'
+  { _azSubnetId = Nothing
+  , _azZoneName = Nothing
+  , _azLoadBalancerAddresses = Nothing
+  }
 
+
 -- | The ID of the subnet.
 azSubnetId :: Lens' AvailabilityZone (Maybe Text)
 azSubnetId = lens _azSubnetId (\ s a -> s{_azSubnetId = a});
@@ -104,51 +109,66 @@
 azZoneName :: Lens' AvailabilityZone (Maybe Text)
 azZoneName = lens _azZoneName (\ s a -> s{_azZoneName = a});
 
+-- | [Network Load Balancers] The static IP address.
+azLoadBalancerAddresses :: Lens' AvailabilityZone [LoadBalancerAddress]
+azLoadBalancerAddresses = lens _azLoadBalancerAddresses (\ s a -> s{_azLoadBalancerAddresses = a}) . _Default . _Coerce;
+
 instance FromXML AvailabilityZone where
         parseXML x
           = AvailabilityZone' <$>
-              (x .@? "SubnetId") <*> (x .@? "ZoneName")
+              (x .@? "SubnetId") <*> (x .@? "ZoneName") <*>
+                (x .@? "LoadBalancerAddresses" .!@ mempty >>=
+                   may (parseXMLList "member"))
 
-instance Hashable AvailabilityZone
+instance Hashable AvailabilityZone where
 
-instance NFData AvailabilityZone
+instance NFData AvailabilityZone where
 
--- | Information about an SSL server certificate deployed on a load balancer.
+-- | Information about an SSL server certificate.
 --
 --
 --
 -- /See:/ 'certificate' smart constructor.
-newtype Certificate = Certificate'
-    { _cCertificateARN :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+data Certificate = Certificate'
+  { _cCertificateARN :: !(Maybe Text)
+  , _cIsDefault      :: !(Maybe Bool)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'Certificate' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
 -- * 'cCertificateARN' - The Amazon Resource Name (ARN) of the certificate.
+--
+-- * 'cIsDefault' - Indicates whether the certificate is the default certificate.
 certificate
     :: Certificate
-certificate =
-    Certificate'
-    { _cCertificateARN = Nothing
-    }
+certificate = Certificate' {_cCertificateARN = Nothing, _cIsDefault = Nothing}
 
+
 -- | The Amazon Resource Name (ARN) of the certificate.
 cCertificateARN :: Lens' Certificate (Maybe Text)
 cCertificateARN = lens _cCertificateARN (\ s a -> s{_cCertificateARN = a});
 
+-- | Indicates whether the certificate is the default certificate.
+cIsDefault :: Lens' Certificate (Maybe Bool)
+cIsDefault = lens _cIsDefault (\ s a -> s{_cIsDefault = a});
+
 instance FromXML Certificate where
         parseXML x
-          = Certificate' <$> (x .@? "CertificateArn")
+          = Certificate' <$>
+              (x .@? "CertificateArn") <*> (x .@? "IsDefault")
 
-instance Hashable Certificate
+instance Hashable Certificate where
 
-instance NFData Certificate
+instance NFData Certificate where
 
 instance ToQuery Certificate where
         toQuery Certificate'{..}
-          = mconcat ["CertificateArn" =: _cCertificateARN]
+          = mconcat
+              ["CertificateArn" =: _cCertificateARN,
+               "IsDefault" =: _cIsDefault]
 
 -- | Information about a cipher used in a policy.
 --
@@ -156,10 +176,11 @@
 --
 -- /See:/ 'cipher' smart constructor.
 data Cipher = Cipher'
-    { _cPriority :: !(Maybe Int)
-    , _cName     :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _cPriority :: !(Maybe Int)
+  , _cName     :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'Cipher' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -169,12 +190,9 @@
 -- * 'cName' - The name of the cipher.
 cipher
     :: Cipher
-cipher =
-    Cipher'
-    { _cPriority = Nothing
-    , _cName = Nothing
-    }
+cipher = Cipher' {_cPriority = Nothing, _cName = Nothing}
 
+
 -- | The priority of the cipher.
 cPriority :: Lens' Cipher (Maybe Int)
 cPriority = lens _cPriority (\ s a -> s{_cPriority = a});
@@ -187,25 +205,65 @@
         parseXML x
           = Cipher' <$> (x .@? "Priority") <*> (x .@? "Name")
 
-instance Hashable Cipher
+instance Hashable Cipher where
 
-instance NFData Cipher
+instance NFData Cipher where
 
+-- | Information about an Elastic Load Balancing resource limit for your AWS account.
+--
+--
+--
+-- /See:/ 'limit' smart constructor.
+data Limit = Limit'
+  { _lMax  :: !(Maybe Text)
+  , _lName :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Limit' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lMax' - The maximum value of the limit.
+--
+-- * 'lName' - The name of the limit. The possible values are:     * application-load-balancers     * listeners-per-application-load-balancer     * listeners-per-network-load-balancer     * network-load-balancers     * rules-per-application-load-balancer     * target-groups     * targets-per-application-load-balancer     * targets-per-availability-zone-per-network-load-balancer     * targets-per-network-load-balancer
+limit
+    :: Limit
+limit = Limit' {_lMax = Nothing, _lName = Nothing}
+
+
+-- | The maximum value of the limit.
+lMax :: Lens' Limit (Maybe Text)
+lMax = lens _lMax (\ s a -> s{_lMax = a});
+
+-- | The name of the limit. The possible values are:     * application-load-balancers     * listeners-per-application-load-balancer     * listeners-per-network-load-balancer     * network-load-balancers     * rules-per-application-load-balancer     * target-groups     * targets-per-application-load-balancer     * targets-per-availability-zone-per-network-load-balancer     * targets-per-network-load-balancer
+lName :: Lens' Limit (Maybe Text)
+lName = lens _lName (\ s a -> s{_lName = a});
+
+instance FromXML Limit where
+        parseXML x
+          = Limit' <$> (x .@? "Max") <*> (x .@? "Name")
+
+instance Hashable Limit where
+
+instance NFData Limit where
+
 -- | Information about a listener.
 --
 --
 --
 -- /See:/ 'listener' smart constructor.
 data Listener = Listener'
-    { _lSSLPolicy       :: !(Maybe Text)
-    , _lListenerARN     :: !(Maybe Text)
-    , _lProtocol        :: !(Maybe ProtocolEnum)
-    , _lDefaultActions  :: !(Maybe [Action])
-    , _lCertificates    :: !(Maybe [Certificate])
-    , _lLoadBalancerARN :: !(Maybe Text)
-    , _lPort            :: !(Maybe Nat)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lSSLPolicy       :: !(Maybe Text)
+  , _lListenerARN     :: !(Maybe Text)
+  , _lProtocol        :: !(Maybe ProtocolEnum)
+  , _lDefaultActions  :: !(Maybe [Action])
+  , _lCertificates    :: !(Maybe [Certificate])
+  , _lLoadBalancerARN :: !(Maybe Text)
+  , _lPort            :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'Listener' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -226,16 +284,17 @@
 listener
     :: Listener
 listener =
-    Listener'
-    { _lSSLPolicy = Nothing
-    , _lListenerARN = Nothing
-    , _lProtocol = Nothing
-    , _lDefaultActions = Nothing
-    , _lCertificates = Nothing
-    , _lLoadBalancerARN = Nothing
-    , _lPort = Nothing
-    }
+  Listener'
+  { _lSSLPolicy = Nothing
+  , _lListenerARN = Nothing
+  , _lProtocol = Nothing
+  , _lDefaultActions = Nothing
+  , _lCertificates = Nothing
+  , _lLoadBalancerARN = Nothing
+  , _lPort = Nothing
+  }
 
+
 -- | The security policy that defines which ciphers and protocols are supported. The default is the current predefined security policy.
 lSSLPolicy :: Lens' Listener (Maybe Text)
 lSSLPolicy = lens _lSSLPolicy (\ s a -> s{_lSSLPolicy = a});
@@ -278,9 +337,9 @@
                 <*> (x .@? "LoadBalancerArn")
                 <*> (x .@? "Port")
 
-instance Hashable Listener
+instance Hashable Listener where
 
-instance NFData Listener
+instance NFData Listener where
 
 -- | Information about a load balancer.
 --
@@ -288,19 +347,21 @@
 --
 -- /See:/ 'loadBalancer' smart constructor.
 data LoadBalancer = LoadBalancer'
-    { _lbState                 :: !(Maybe LoadBalancerState)
-    , _lbSecurityGroups        :: !(Maybe [Text])
-    , _lbLoadBalancerName      :: !(Maybe Text)
-    , _lbCreatedTime           :: !(Maybe ISO8601)
-    , _lbVPCId                 :: !(Maybe Text)
-    , _lbCanonicalHostedZoneId :: !(Maybe Text)
-    , _lbAvailabilityZones     :: !(Maybe [AvailabilityZone])
-    , _lbLoadBalancerARN       :: !(Maybe Text)
-    , _lbScheme                :: !(Maybe LoadBalancerSchemeEnum)
-    , _lbType                  :: !(Maybe LoadBalancerTypeEnum)
-    , _lbDNSName               :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lbState                 :: !(Maybe LoadBalancerState)
+  , _lbSecurityGroups        :: !(Maybe [Text])
+  , _lbLoadBalancerName      :: !(Maybe Text)
+  , _lbCreatedTime           :: !(Maybe ISO8601)
+  , _lbVPCId                 :: !(Maybe Text)
+  , _lbCanonicalHostedZoneId :: !(Maybe Text)
+  , _lbAvailabilityZones     :: !(Maybe [AvailabilityZone])
+  , _lbLoadBalancerARN       :: !(Maybe Text)
+  , _lbIPAddressType         :: !(Maybe IPAddressType)
+  , _lbScheme                :: !(Maybe LoadBalancerSchemeEnum)
+  , _lbType                  :: !(Maybe LoadBalancerTypeEnum)
+  , _lbDNSName               :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'LoadBalancer' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -321,6 +382,8 @@
 --
 -- * 'lbLoadBalancerARN' - The Amazon Resource Name (ARN) of the load balancer.
 --
+-- * 'lbIPAddressType' - The type of IP addresses used by the subnets for your load balancer. The possible values are @ipv4@ (for IPv4 addresses) and @dualstack@ (for IPv4 and IPv6 addresses).
+--
 -- * 'lbScheme' - The nodes of an Internet-facing load balancer have public IP addresses. The DNS name of an Internet-facing load balancer is publicly resolvable to the public IP addresses of the nodes. Therefore, Internet-facing load balancers can route requests from clients over the Internet. The nodes of an internal load balancer have only private IP addresses. The DNS name of an internal load balancer is publicly resolvable to the private IP addresses of the nodes. Therefore, internal load balancers can only route requests from clients with access to the VPC for the load balancer.
 --
 -- * 'lbType' - The type of load balancer.
@@ -329,20 +392,22 @@
 loadBalancer
     :: LoadBalancer
 loadBalancer =
-    LoadBalancer'
-    { _lbState = Nothing
-    , _lbSecurityGroups = Nothing
-    , _lbLoadBalancerName = Nothing
-    , _lbCreatedTime = Nothing
-    , _lbVPCId = Nothing
-    , _lbCanonicalHostedZoneId = Nothing
-    , _lbAvailabilityZones = Nothing
-    , _lbLoadBalancerARN = Nothing
-    , _lbScheme = Nothing
-    , _lbType = Nothing
-    , _lbDNSName = Nothing
-    }
+  LoadBalancer'
+  { _lbState = Nothing
+  , _lbSecurityGroups = Nothing
+  , _lbLoadBalancerName = Nothing
+  , _lbCreatedTime = Nothing
+  , _lbVPCId = Nothing
+  , _lbCanonicalHostedZoneId = Nothing
+  , _lbAvailabilityZones = Nothing
+  , _lbLoadBalancerARN = Nothing
+  , _lbIPAddressType = Nothing
+  , _lbScheme = Nothing
+  , _lbType = Nothing
+  , _lbDNSName = Nothing
+  }
 
+
 -- | The state of the load balancer.
 lbState :: Lens' LoadBalancer (Maybe LoadBalancerState)
 lbState = lens _lbState (\ s a -> s{_lbState = a});
@@ -375,6 +440,10 @@
 lbLoadBalancerARN :: Lens' LoadBalancer (Maybe Text)
 lbLoadBalancerARN = lens _lbLoadBalancerARN (\ s a -> s{_lbLoadBalancerARN = a});
 
+-- | The type of IP addresses used by the subnets for your load balancer. The possible values are @ipv4@ (for IPv4 addresses) and @dualstack@ (for IPv4 and IPv6 addresses).
+lbIPAddressType :: Lens' LoadBalancer (Maybe IPAddressType)
+lbIPAddressType = lens _lbIPAddressType (\ s a -> s{_lbIPAddressType = a});
+
 -- | The nodes of an Internet-facing load balancer have public IP addresses. The DNS name of an Internet-facing load balancer is publicly resolvable to the public IP addresses of the nodes. Therefore, Internet-facing load balancers can route requests from clients over the Internet. The nodes of an internal load balancer have only private IP addresses. The DNS name of an internal load balancer is publicly resolvable to the private IP addresses of the nodes. Therefore, internal load balancers can only route requests from clients with access to the VPC for the load balancer.
 lbScheme :: Lens' LoadBalancer (Maybe LoadBalancerSchemeEnum)
 lbScheme = lens _lbScheme (\ s a -> s{_lbScheme = a});
@@ -401,44 +470,85 @@
                 (x .@? "AvailabilityZones" .!@ mempty >>=
                    may (parseXMLList "member"))
                 <*> (x .@? "LoadBalancerArn")
+                <*> (x .@? "IpAddressType")
                 <*> (x .@? "Scheme")
                 <*> (x .@? "Type")
                 <*> (x .@? "DNSName")
 
-instance Hashable LoadBalancer
+instance Hashable LoadBalancer where
 
-instance NFData LoadBalancer
+instance NFData LoadBalancer where
 
+-- | Information about a static IP address for a load balancer.
+--
+--
+--
+-- /See:/ 'loadBalancerAddress' smart constructor.
+data LoadBalancerAddress = LoadBalancerAddress'
+  { _lbaIPAddress    :: !(Maybe Text)
+  , _lbaAllocationId :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'LoadBalancerAddress' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lbaIPAddress' - The static IP address.
+--
+-- * 'lbaAllocationId' - [Network Load Balancers] The allocation ID of the Elastic IP address.
+loadBalancerAddress
+    :: LoadBalancerAddress
+loadBalancerAddress =
+  LoadBalancerAddress' {_lbaIPAddress = Nothing, _lbaAllocationId = Nothing}
+
+
+-- | The static IP address.
+lbaIPAddress :: Lens' LoadBalancerAddress (Maybe Text)
+lbaIPAddress = lens _lbaIPAddress (\ s a -> s{_lbaIPAddress = a});
+
+-- | [Network Load Balancers] The allocation ID of the Elastic IP address.
+lbaAllocationId :: Lens' LoadBalancerAddress (Maybe Text)
+lbaAllocationId = lens _lbaAllocationId (\ s a -> s{_lbaAllocationId = a});
+
+instance FromXML LoadBalancerAddress where
+        parseXML x
+          = LoadBalancerAddress' <$>
+              (x .@? "IpAddress") <*> (x .@? "AllocationId")
+
+instance Hashable LoadBalancerAddress where
+
+instance NFData LoadBalancerAddress where
+
 -- | Information about a load balancer attribute.
 --
 --
 --
 -- /See:/ 'loadBalancerAttribute' smart constructor.
 data LoadBalancerAttribute = LoadBalancerAttribute'
-    { _lbaValue :: !(Maybe Text)
-    , _lbaKey   :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lbaValue :: !(Maybe Text)
+  , _lbaKey   :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'LoadBalancerAttribute' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
 -- * 'lbaValue' - The value of the attribute.
 --
--- * 'lbaKey' - The name of the attribute.     * @access_logs.s3.enabled@ - Indicates whether access logs stored in Amazon S3 are enabled. The value is @true@ or @false@ .     * @access_logs.s3.bucket@ - The name of the S3 bucket for the access logs. This attribute is required if access logs in Amazon S3 are enabled. The bucket must exist in the same region as the load balancer and have a bucket policy that grants Elastic Load Balancing permission to write to the bucket.     * @access_logs.s3.prefix@ - The prefix for the location in the S3 bucket. If you don't specify a prefix, the access logs are stored in the root of the bucket.     * @deletion_protection.enabled@ - Indicates whether deletion protection is enabled. The value is @true@ or @false@ .     * @idle_timeout.timeout_seconds@ - The idle timeout value, in seconds. The valid range is 1-3600. The default is 60 seconds.
+-- * 'lbaKey' - The name of the attribute.     * @access_logs.s3.enabled@ - [Application Load Balancers] Indicates whether access logs stored in Amazon S3 are enabled. The value is @true@ or @false@ .     * @access_logs.s3.bucket@ - [Application Load Balancers] The name of the S3 bucket for the access logs. This attribute is required if access logs in Amazon S3 are enabled. The bucket must exist in the same region as the load balancer and have a bucket policy that grants Elastic Load Balancing permission to write to the bucket.     * @access_logs.s3.prefix@ - [Application Load Balancers] The prefix for the location in the S3 bucket. If you don't specify a prefix, the access logs are stored in the root of the bucket.     * @deletion_protection.enabled@ - Indicates whether deletion protection is enabled. The value is @true@ or @false@ .     * @idle_timeout.timeout_seconds@ - [Application Load Balancers] The idle timeout value, in seconds. The valid range is 1-4000. The default is 60 seconds.
 loadBalancerAttribute
     :: LoadBalancerAttribute
 loadBalancerAttribute =
-    LoadBalancerAttribute'
-    { _lbaValue = Nothing
-    , _lbaKey = Nothing
-    }
+  LoadBalancerAttribute' {_lbaValue = Nothing, _lbaKey = Nothing}
 
+
 -- | The value of the attribute.
 lbaValue :: Lens' LoadBalancerAttribute (Maybe Text)
 lbaValue = lens _lbaValue (\ s a -> s{_lbaValue = a});
 
--- | The name of the attribute.     * @access_logs.s3.enabled@ - Indicates whether access logs stored in Amazon S3 are enabled. The value is @true@ or @false@ .     * @access_logs.s3.bucket@ - The name of the S3 bucket for the access logs. This attribute is required if access logs in Amazon S3 are enabled. The bucket must exist in the same region as the load balancer and have a bucket policy that grants Elastic Load Balancing permission to write to the bucket.     * @access_logs.s3.prefix@ - The prefix for the location in the S3 bucket. If you don't specify a prefix, the access logs are stored in the root of the bucket.     * @deletion_protection.enabled@ - Indicates whether deletion protection is enabled. The value is @true@ or @false@ .     * @idle_timeout.timeout_seconds@ - The idle timeout value, in seconds. The valid range is 1-3600. The default is 60 seconds.
+-- | The name of the attribute.     * @access_logs.s3.enabled@ - [Application Load Balancers] Indicates whether access logs stored in Amazon S3 are enabled. The value is @true@ or @false@ .     * @access_logs.s3.bucket@ - [Application Load Balancers] The name of the S3 bucket for the access logs. This attribute is required if access logs in Amazon S3 are enabled. The bucket must exist in the same region as the load balancer and have a bucket policy that grants Elastic Load Balancing permission to write to the bucket.     * @access_logs.s3.prefix@ - [Application Load Balancers] The prefix for the location in the S3 bucket. If you don't specify a prefix, the access logs are stored in the root of the bucket.     * @deletion_protection.enabled@ - Indicates whether deletion protection is enabled. The value is @true@ or @false@ .     * @idle_timeout.timeout_seconds@ - [Application Load Balancers] The idle timeout value, in seconds. The valid range is 1-4000. The default is 60 seconds.
 lbaKey :: Lens' LoadBalancerAttribute (Maybe Text)
 lbaKey = lens _lbaKey (\ s a -> s{_lbaKey = a});
 
@@ -447,9 +557,9 @@
           = LoadBalancerAttribute' <$>
               (x .@? "Value") <*> (x .@? "Key")
 
-instance Hashable LoadBalancerAttribute
+instance Hashable LoadBalancerAttribute where
 
-instance NFData LoadBalancerAttribute
+instance NFData LoadBalancerAttribute where
 
 instance ToQuery LoadBalancerAttribute where
         toQuery LoadBalancerAttribute'{..}
@@ -461,10 +571,11 @@
 --
 -- /See:/ 'loadBalancerState' smart constructor.
 data LoadBalancerState = LoadBalancerState'
-    { _lbsReason :: !(Maybe Text)
-    , _lbsCode   :: !(Maybe LoadBalancerStateEnum)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lbsReason :: !(Maybe Text)
+  , _lbsCode   :: !(Maybe LoadBalancerStateEnum)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'LoadBalancerState' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -475,11 +586,9 @@
 loadBalancerState
     :: LoadBalancerState
 loadBalancerState =
-    LoadBalancerState'
-    { _lbsReason = Nothing
-    , _lbsCode = Nothing
-    }
+  LoadBalancerState' {_lbsReason = Nothing, _lbsCode = Nothing}
 
+
 -- | A description of the state.
 lbsReason :: Lens' LoadBalancerState (Maybe Text)
 lbsReason = lens _lbsReason (\ s a -> s{_lbsReason = a});
@@ -493,9 +602,9 @@
           = LoadBalancerState' <$>
               (x .@? "Reason") <*> (x .@? "Code")
 
-instance Hashable LoadBalancerState
+instance Hashable LoadBalancerState where
 
-instance NFData LoadBalancerState
+instance NFData LoadBalancerState where
 
 -- | Information to use when checking for a successful response from a target.
 --
@@ -503,32 +612,31 @@
 --
 -- /See:/ 'matcher' smart constructor.
 newtype Matcher = Matcher'
-    { _mHTTPCode :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _mHTTPCode :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'Matcher' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'mHTTPCode' - The HTTP codes. The default value is 200. You can specify multiple values (for example, "200,202") or a range of values (for example, "200-299").
+-- * 'mHTTPCode' - The HTTP codes. For Application Load Balancers, you can specify values between 200 and 499, and the default value is 200. You can specify multiple values (for example, "200,202") or a range of values (for example, "200-299"). For Network Load Balancers, this is 200 to 399.
 matcher
     :: Text -- ^ 'mHTTPCode'
     -> Matcher
-matcher pHTTPCode_ =
-    Matcher'
-    { _mHTTPCode = pHTTPCode_
-    }
+matcher pHTTPCode_ = Matcher' {_mHTTPCode = pHTTPCode_}
 
--- | The HTTP codes. The default value is 200. You can specify multiple values (for example, "200,202") or a range of values (for example, "200-299").
+
+-- | The HTTP codes. For Application Load Balancers, you can specify values between 200 and 499, and the default value is 200. You can specify multiple values (for example, "200,202") or a range of values (for example, "200-299"). For Network Load Balancers, this is 200 to 399.
 mHTTPCode :: Lens' Matcher Text
 mHTTPCode = lens _mHTTPCode (\ s a -> s{_mHTTPCode = a});
 
 instance FromXML Matcher where
         parseXML x = Matcher' <$> (x .@ "HttpCode")
 
-instance Hashable Matcher
+instance Hashable Matcher where
 
-instance NFData Matcher
+instance NFData Matcher where
 
 instance ToQuery Matcher where
         toQuery Matcher'{..}
@@ -540,13 +648,14 @@
 --
 -- /See:/ 'rule' smart constructor.
 data Rule = Rule'
-    { _rPriority   :: !(Maybe Text)
-    , _rActions    :: !(Maybe [Action])
-    , _rConditions :: !(Maybe [RuleCondition])
-    , _rRuleARN    :: !(Maybe Text)
-    , _rIsDefault  :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _rPriority   :: !(Maybe Text)
+  , _rActions    :: !(Maybe [Action])
+  , _rConditions :: !(Maybe [RuleCondition])
+  , _rRuleARN    :: !(Maybe Text)
+  , _rIsDefault  :: !(Maybe Bool)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'Rule' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -563,14 +672,15 @@
 rule
     :: Rule
 rule =
-    Rule'
-    { _rPriority = Nothing
-    , _rActions = Nothing
-    , _rConditions = Nothing
-    , _rRuleARN = Nothing
-    , _rIsDefault = Nothing
-    }
+  Rule'
+  { _rPriority = Nothing
+  , _rActions = Nothing
+  , _rConditions = Nothing
+  , _rRuleARN = Nothing
+  , _rIsDefault = Nothing
+  }
 
+
 -- | The priority.
 rPriority :: Lens' Rule (Maybe Text)
 rPriority = lens _rPriority (\ s a -> s{_rPriority = a});
@@ -603,9 +713,9 @@
                 <*> (x .@? "RuleArn")
                 <*> (x .@? "IsDefault")
 
-instance Hashable Rule
+instance Hashable Rule where
 
-instance NFData Rule
+instance NFData Rule where
 
 -- | Information about a condition for a rule.
 --
@@ -613,30 +723,28 @@
 --
 -- /See:/ 'ruleCondition' smart constructor.
 data RuleCondition = RuleCondition'
-    { _rcField  :: !(Maybe Text)
-    , _rcValues :: !(Maybe [Text])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _rcField  :: !(Maybe Text)
+  , _rcValues :: !(Maybe [Text])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'RuleCondition' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'rcField' - The only possible value is @path-pattern@ .
+-- * 'rcField' - The name of the field. The possible values are @host-header@ and @path-pattern@ .
 --
--- * 'rcValues' - The path pattern. You can specify a single path pattern. A path pattern is case sensitive, can be up to 255 characters in length, and can contain any of the following characters:     * A-Z, a-z, 0-9     * _ - . $ / ~ " ' @ : +     * & (using &amp;)     * * (matches 0 or more characters)     * ? (matches exactly 1 character)
+-- * 'rcValues' - The condition value. If the field name is @host-header@ , you can specify a single host name (for example, my.example.com). A host name is case insensitive, can be up to 128 characters in length, and can contain any of the following characters. Note that you can include up to three wildcard characters.     * A-Z, a-z, 0-9     * - .     * * (matches 0 or more characters)     * ? (matches exactly 1 character) If the field name is @path-pattern@ , you can specify a single path pattern (for example, /img/*). A path pattern is case sensitive, can be up to 128 characters in length, and can contain any of the following characters. Note that you can include up to three wildcard characters.     * A-Z, a-z, 0-9     * _ - . $ / ~ " ' @ : +     * & (using &amp;)     * * (matches 0 or more characters)     * ? (matches exactly 1 character)
 ruleCondition
     :: RuleCondition
-ruleCondition =
-    RuleCondition'
-    { _rcField = Nothing
-    , _rcValues = Nothing
-    }
+ruleCondition = RuleCondition' {_rcField = Nothing, _rcValues = Nothing}
 
--- | The only possible value is @path-pattern@ .
+
+-- | The name of the field. The possible values are @host-header@ and @path-pattern@ .
 rcField :: Lens' RuleCondition (Maybe Text)
 rcField = lens _rcField (\ s a -> s{_rcField = a});
 
--- | The path pattern. You can specify a single path pattern. A path pattern is case sensitive, can be up to 255 characters in length, and can contain any of the following characters:     * A-Z, a-z, 0-9     * _ - . $ / ~ " ' @ : +     * & (using &amp;)     * * (matches 0 or more characters)     * ? (matches exactly 1 character)
+-- | The condition value. If the field name is @host-header@ , you can specify a single host name (for example, my.example.com). A host name is case insensitive, can be up to 128 characters in length, and can contain any of the following characters. Note that you can include up to three wildcard characters.     * A-Z, a-z, 0-9     * - .     * * (matches 0 or more characters)     * ? (matches exactly 1 character) If the field name is @path-pattern@ , you can specify a single path pattern (for example, /img/*). A path pattern is case sensitive, can be up to 128 characters in length, and can contain any of the following characters. Note that you can include up to three wildcard characters.     * A-Z, a-z, 0-9     * _ - . $ / ~ " ' @ : +     * & (using &amp;)     * * (matches 0 or more characters)     * ? (matches exactly 1 character)
 rcValues :: Lens' RuleCondition [Text]
 rcValues = lens _rcValues (\ s a -> s{_rcValues = a}) . _Default . _Coerce;
 
@@ -647,9 +755,9 @@
                 (x .@? "Values" .!@ mempty >>=
                    may (parseXMLList "member"))
 
-instance Hashable RuleCondition
+instance Hashable RuleCondition where
 
-instance NFData RuleCondition
+instance NFData RuleCondition where
 
 instance ToQuery RuleCondition where
         toQuery RuleCondition'{..}
@@ -664,10 +772,11 @@
 --
 -- /See:/ 'rulePriorityPair' smart constructor.
 data RulePriorityPair = RulePriorityPair'
-    { _rppPriority :: !(Maybe Nat)
-    , _rppRuleARN  :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _rppPriority :: !(Maybe Nat)
+  , _rppRuleARN  :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'RulePriorityPair' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -678,11 +787,9 @@
 rulePriorityPair
     :: RulePriorityPair
 rulePriorityPair =
-    RulePriorityPair'
-    { _rppPriority = Nothing
-    , _rppRuleARN = Nothing
-    }
+  RulePriorityPair' {_rppPriority = Nothing, _rppRuleARN = Nothing}
 
+
 -- | The rule priority.
 rppPriority :: Lens' RulePriorityPair (Maybe Natural)
 rppPriority = lens _rppPriority (\ s a -> s{_rppPriority = a}) . mapping _Nat;
@@ -691,9 +798,9 @@
 rppRuleARN :: Lens' RulePriorityPair (Maybe Text)
 rppRuleARN = lens _rppRuleARN (\ s a -> s{_rppRuleARN = a});
 
-instance Hashable RulePriorityPair
+instance Hashable RulePriorityPair where
 
-instance NFData RulePriorityPair
+instance NFData RulePriorityPair where
 
 instance ToQuery RulePriorityPair where
         toQuery RulePriorityPair'{..}
@@ -707,11 +814,12 @@
 --
 -- /See:/ 'sslPolicy' smart constructor.
 data SSLPolicy = SSLPolicy'
-    { _spCiphers      :: !(Maybe [Cipher])
-    , _spName         :: !(Maybe Text)
-    , _spSSLProtocols :: !(Maybe [Text])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _spCiphers      :: !(Maybe [Cipher])
+  , _spName         :: !(Maybe Text)
+  , _spSSLProtocols :: !(Maybe [Text])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SSLPolicy' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -724,12 +832,10 @@
 sslPolicy
     :: SSLPolicy
 sslPolicy =
-    SSLPolicy'
-    { _spCiphers = Nothing
-    , _spName = Nothing
-    , _spSSLProtocols = Nothing
-    }
+  SSLPolicy'
+  {_spCiphers = Nothing, _spName = Nothing, _spSSLProtocols = Nothing}
 
+
 -- | The ciphers.
 spCiphers :: Lens' SSLPolicy [Cipher]
 spCiphers = lens _spCiphers (\ s a -> s{_spCiphers = a}) . _Default . _Coerce;
@@ -752,20 +858,63 @@
                 (x .@? "SslProtocols" .!@ mempty >>=
                    may (parseXMLList "member"))
 
-instance Hashable SSLPolicy
+instance Hashable SSLPolicy where
 
-instance NFData SSLPolicy
+instance NFData SSLPolicy where
 
+-- | Information about a subnet mapping.
+--
+--
+--
+-- /See:/ 'subnetMapping' smart constructor.
+data SubnetMapping = SubnetMapping'
+  { _smAllocationId :: !(Maybe Text)
+  , _smSubnetId     :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SubnetMapping' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'smAllocationId' - [Network Load Balancers] The allocation ID of the Elastic IP address.
+--
+-- * 'smSubnetId' - The ID of the subnet.
+subnetMapping
+    :: SubnetMapping
+subnetMapping =
+  SubnetMapping' {_smAllocationId = Nothing, _smSubnetId = Nothing}
+
+
+-- | [Network Load Balancers] The allocation ID of the Elastic IP address.
+smAllocationId :: Lens' SubnetMapping (Maybe Text)
+smAllocationId = lens _smAllocationId (\ s a -> s{_smAllocationId = a});
+
+-- | The ID of the subnet.
+smSubnetId :: Lens' SubnetMapping (Maybe Text)
+smSubnetId = lens _smSubnetId (\ s a -> s{_smSubnetId = a});
+
+instance Hashable SubnetMapping where
+
+instance NFData SubnetMapping where
+
+instance ToQuery SubnetMapping where
+        toQuery SubnetMapping'{..}
+          = mconcat
+              ["AllocationId" =: _smAllocationId,
+               "SubnetId" =: _smSubnetId]
+
 -- | Information about a tag.
 --
 --
 --
 -- /See:/ 'tag' smart constructor.
 data Tag = Tag'
-    { _tagValue :: !(Maybe Text)
-    , _tagKey   :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _tagValue :: !(Maybe Text)
+  , _tagKey   :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'Tag' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -776,12 +925,9 @@
 tag
     :: Text -- ^ 'tagKey'
     -> Tag
-tag pKey_ =
-    Tag'
-    { _tagValue = Nothing
-    , _tagKey = pKey_
-    }
+tag pKey_ = Tag' {_tagValue = Nothing, _tagKey = pKey_}
 
+
 -- | The value of the tag.
 tagValue :: Lens' Tag (Maybe Text)
 tagValue = lens _tagValue (\ s a -> s{_tagValue = a});
@@ -794,9 +940,9 @@
         parseXML x
           = Tag' <$> (x .@? "Value") <*> (x .@ "Key")
 
-instance Hashable Tag
+instance Hashable Tag where
 
-instance NFData Tag
+instance NFData Tag where
 
 instance ToQuery Tag where
         toQuery Tag'{..}
@@ -808,10 +954,11 @@
 --
 -- /See:/ 'tagDescription' smart constructor.
 data TagDescription = TagDescription'
-    { _tdResourceARN :: !(Maybe Text)
-    , _tdTags        :: !(Maybe (List1 Tag))
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _tdResourceARN :: !(Maybe Text)
+  , _tdTags        :: !(Maybe (List1 Tag))
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'TagDescription' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -821,12 +968,9 @@
 -- * 'tdTags' - Information about the tags.
 tagDescription
     :: TagDescription
-tagDescription =
-    TagDescription'
-    { _tdResourceARN = Nothing
-    , _tdTags = Nothing
-    }
+tagDescription = TagDescription' {_tdResourceARN = Nothing, _tdTags = Nothing}
 
+
 -- | The Amazon Resource Name (ARN) of the resource.
 tdResourceARN :: Lens' TagDescription (Maybe Text)
 tdResourceARN = lens _tdResourceARN (\ s a -> s{_tdResourceARN = a});
@@ -842,9 +986,9 @@
                 (x .@? "Tags" .!@ mempty >>=
                    may (parseXMLList1 "member"))
 
-instance Hashable TagDescription
+instance Hashable TagDescription where
 
-instance NFData TagDescription
+instance NFData TagDescription where
 
 -- | Information about a target.
 --
@@ -852,46 +996,56 @@
 --
 -- /See:/ 'targetDescription' smart constructor.
 data TargetDescription = TargetDescription'
-    { _tdPort :: !(Maybe Nat)
-    , _tdId   :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _tdAvailabilityZone :: !(Maybe Text)
+  , _tdPort             :: !(Maybe Nat)
+  , _tdId               :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'TargetDescription' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'tdAvailabilityZone' - An Availability Zone or @all@ . This determines whether the target receives traffic from the load balancer nodes in the specified Availability Zone or from all enabled Availability Zones for the load balancer. This parameter is not supported if the target type of the target group is @instance@ . If the IP address is in a subnet of the VPC for the target group, the Availability Zone is automatically detected and this parameter is optional. If the IP address is outside the VPC, this parameter is required. With an Application Load Balancer, if the IP address is outside the VPC for the target group, the only supported value is @all@ .
+--
 -- * 'tdPort' - The port on which the target is listening.
 --
--- * 'tdId' - The ID of the target.
+-- * 'tdId' - The ID of the target. If the target type of the target group is @instance@ , specify an instance ID. If the target type is @ip@ , specify an IP address.
 targetDescription
     :: Text -- ^ 'tdId'
     -> TargetDescription
 targetDescription pId_ =
-    TargetDescription'
-    { _tdPort = Nothing
-    , _tdId = pId_
-    }
+  TargetDescription'
+  {_tdAvailabilityZone = Nothing, _tdPort = Nothing, _tdId = pId_}
 
+
+-- | An Availability Zone or @all@ . This determines whether the target receives traffic from the load balancer nodes in the specified Availability Zone or from all enabled Availability Zones for the load balancer. This parameter is not supported if the target type of the target group is @instance@ . If the IP address is in a subnet of the VPC for the target group, the Availability Zone is automatically detected and this parameter is optional. If the IP address is outside the VPC, this parameter is required. With an Application Load Balancer, if the IP address is outside the VPC for the target group, the only supported value is @all@ .
+tdAvailabilityZone :: Lens' TargetDescription (Maybe Text)
+tdAvailabilityZone = lens _tdAvailabilityZone (\ s a -> s{_tdAvailabilityZone = a});
+
 -- | The port on which the target is listening.
 tdPort :: Lens' TargetDescription (Maybe Natural)
 tdPort = lens _tdPort (\ s a -> s{_tdPort = a}) . mapping _Nat;
 
--- | The ID of the target.
+-- | The ID of the target. If the target type of the target group is @instance@ , specify an instance ID. If the target type is @ip@ , specify an IP address.
 tdId :: Lens' TargetDescription Text
 tdId = lens _tdId (\ s a -> s{_tdId = a});
 
 instance FromXML TargetDescription where
         parseXML x
           = TargetDescription' <$>
-              (x .@? "Port") <*> (x .@ "Id")
+              (x .@? "AvailabilityZone") <*> (x .@? "Port") <*>
+                (x .@ "Id")
 
-instance Hashable TargetDescription
+instance Hashable TargetDescription where
 
-instance NFData TargetDescription
+instance NFData TargetDescription where
 
 instance ToQuery TargetDescription where
         toQuery TargetDescription'{..}
-          = mconcat ["Port" =: _tdPort, "Id" =: _tdId]
+          = mconcat
+              ["AvailabilityZone" =: _tdAvailabilityZone,
+               "Port" =: _tdPort, "Id" =: _tdId]
 
 -- | Information about a target group.
 --
@@ -899,22 +1053,24 @@
 --
 -- /See:/ 'targetGroup' smart constructor.
 data TargetGroup = TargetGroup'
-    { _tgMatcher                    :: !(Maybe Matcher)
-    , _tgHealthCheckPath            :: !(Maybe Text)
-    , _tgUnhealthyThresholdCount    :: !(Maybe Nat)
-    , _tgVPCId                      :: !(Maybe Text)
-    , _tgTargetGroupARN             :: !(Maybe Text)
-    , _tgProtocol                   :: !(Maybe ProtocolEnum)
-    , _tgHealthCheckIntervalSeconds :: !(Maybe Nat)
-    , _tgHealthyThresholdCount      :: !(Maybe Nat)
-    , _tgHealthCheckProtocol        :: !(Maybe ProtocolEnum)
-    , _tgLoadBalancerARNs           :: !(Maybe [Text])
-    , _tgHealthCheckTimeoutSeconds  :: !(Maybe Nat)
-    , _tgHealthCheckPort            :: !(Maybe Text)
-    , _tgTargetGroupName            :: !(Maybe Text)
-    , _tgPort                       :: !(Maybe Nat)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _tgMatcher                    :: !(Maybe Matcher)
+  , _tgHealthCheckPath            :: !(Maybe Text)
+  , _tgUnhealthyThresholdCount    :: !(Maybe Nat)
+  , _tgVPCId                      :: !(Maybe Text)
+  , _tgTargetGroupARN             :: !(Maybe Text)
+  , _tgProtocol                   :: !(Maybe ProtocolEnum)
+  , _tgHealthCheckIntervalSeconds :: !(Maybe Nat)
+  , _tgTargetType                 :: !(Maybe TargetTypeEnum)
+  , _tgHealthyThresholdCount      :: !(Maybe Nat)
+  , _tgHealthCheckProtocol        :: !(Maybe ProtocolEnum)
+  , _tgLoadBalancerARNs           :: !(Maybe [Text])
+  , _tgHealthCheckTimeoutSeconds  :: !(Maybe Nat)
+  , _tgHealthCheckPort            :: !(Maybe Text)
+  , _tgTargetGroupName            :: !(Maybe Text)
+  , _tgPort                       :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'TargetGroup' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -933,6 +1089,8 @@
 --
 -- * 'tgHealthCheckIntervalSeconds' - The approximate amount of time, in seconds, between health checks of an individual target.
 --
+-- * 'tgTargetType' - The type of target that you must specify when registering targets with this target group. The possible values are @instance@ (targets are specified by instance ID) or @ip@ (targets are specified by IP address).
+--
 -- * 'tgHealthyThresholdCount' - The number of consecutive health checks successes required before considering an unhealthy target healthy.
 --
 -- * 'tgHealthCheckProtocol' - The protocol to use to connect with the target.
@@ -949,23 +1107,25 @@
 targetGroup
     :: TargetGroup
 targetGroup =
-    TargetGroup'
-    { _tgMatcher = Nothing
-    , _tgHealthCheckPath = Nothing
-    , _tgUnhealthyThresholdCount = Nothing
-    , _tgVPCId = Nothing
-    , _tgTargetGroupARN = Nothing
-    , _tgProtocol = Nothing
-    , _tgHealthCheckIntervalSeconds = Nothing
-    , _tgHealthyThresholdCount = Nothing
-    , _tgHealthCheckProtocol = Nothing
-    , _tgLoadBalancerARNs = Nothing
-    , _tgHealthCheckTimeoutSeconds = Nothing
-    , _tgHealthCheckPort = Nothing
-    , _tgTargetGroupName = Nothing
-    , _tgPort = Nothing
-    }
+  TargetGroup'
+  { _tgMatcher = Nothing
+  , _tgHealthCheckPath = Nothing
+  , _tgUnhealthyThresholdCount = Nothing
+  , _tgVPCId = Nothing
+  , _tgTargetGroupARN = Nothing
+  , _tgProtocol = Nothing
+  , _tgHealthCheckIntervalSeconds = Nothing
+  , _tgTargetType = Nothing
+  , _tgHealthyThresholdCount = Nothing
+  , _tgHealthCheckProtocol = Nothing
+  , _tgLoadBalancerARNs = Nothing
+  , _tgHealthCheckTimeoutSeconds = Nothing
+  , _tgHealthCheckPort = Nothing
+  , _tgTargetGroupName = Nothing
+  , _tgPort = Nothing
+  }
 
+
 -- | The HTTP codes to use when checking for a successful response from a target.
 tgMatcher :: Lens' TargetGroup (Maybe Matcher)
 tgMatcher = lens _tgMatcher (\ s a -> s{_tgMatcher = a});
@@ -994,6 +1154,10 @@
 tgHealthCheckIntervalSeconds :: Lens' TargetGroup (Maybe Natural)
 tgHealthCheckIntervalSeconds = lens _tgHealthCheckIntervalSeconds (\ s a -> s{_tgHealthCheckIntervalSeconds = a}) . mapping _Nat;
 
+-- | The type of target that you must specify when registering targets with this target group. The possible values are @instance@ (targets are specified by instance ID) or @ip@ (targets are specified by IP address).
+tgTargetType :: Lens' TargetGroup (Maybe TargetTypeEnum)
+tgTargetType = lens _tgTargetType (\ s a -> s{_tgTargetType = a});
+
 -- | The number of consecutive health checks successes required before considering an unhealthy target healthy.
 tgHealthyThresholdCount :: Lens' TargetGroup (Maybe Natural)
 tgHealthyThresholdCount = lens _tgHealthyThresholdCount (\ s a -> s{_tgHealthyThresholdCount = a}) . mapping _Nat;
@@ -1031,6 +1195,7 @@
                 <*> (x .@? "TargetGroupArn")
                 <*> (x .@? "Protocol")
                 <*> (x .@? "HealthCheckIntervalSeconds")
+                <*> (x .@? "TargetType")
                 <*> (x .@? "HealthyThresholdCount")
                 <*> (x .@? "HealthCheckProtocol")
                 <*>
@@ -1041,9 +1206,9 @@
                 <*> (x .@? "TargetGroupName")
                 <*> (x .@? "Port")
 
-instance Hashable TargetGroup
+instance Hashable TargetGroup where
 
-instance NFData TargetGroup
+instance NFData TargetGroup where
 
 -- | Information about a target group attribute.
 --
@@ -1051,30 +1216,29 @@
 --
 -- /See:/ 'targetGroupAttribute' smart constructor.
 data TargetGroupAttribute = TargetGroupAttribute'
-    { _tgaValue :: !(Maybe Text)
-    , _tgaKey   :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _tgaValue :: !(Maybe Text)
+  , _tgaKey   :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'TargetGroupAttribute' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
 -- * 'tgaValue' - The value of the attribute.
 --
--- * 'tgaKey' - The name of the attribute.     * @deregistration_delay.timeout_seconds@ - The amount time for Elastic Load Balancing to wait before changing the state of a deregistering target from @draining@ to @unused@ . The range is 0-3600 seconds. The default value is 300 seconds.     * @stickiness.enabled@ - Indicates whether sticky sessions are enabled. The value is @true@ or @false@ .     * @stickiness.type@ - The type of sticky sessions. The possible value is @lb_cookie@ .     * @stickiness.lb_cookie.duration_seconds@ - The time period, in seconds, during which requests from a client should be routed to the same target. After this time period expires, the load balancer-generated cookie is considered stale. The range is 1 second to 1 week (604800 seconds). The default value is 1 day (86400 seconds).
+-- * 'tgaKey' - The name of the attribute.     * @deregistration_delay.timeout_seconds@ - The amount time for Elastic Load Balancing to wait before changing the state of a deregistering target from @draining@ to @unused@ . The range is 0-3600 seconds. The default value is 300 seconds.     * @stickiness.enabled@ - [Application Load Balancers] Indicates whether sticky sessions are enabled. The value is @true@ or @false@ .     * @stickiness.type@ - [Application Load Balancers] The type of sticky sessions. The possible value is @lb_cookie@ .     * @stickiness.lb_cookie.duration_seconds@ - [Application Load Balancers] The time period, in seconds, during which requests from a client should be routed to the same target. After this time period expires, the load balancer-generated cookie is considered stale. The range is 1 second to 1 week (604800 seconds). The default value is 1 day (86400 seconds).
 targetGroupAttribute
     :: TargetGroupAttribute
 targetGroupAttribute =
-    TargetGroupAttribute'
-    { _tgaValue = Nothing
-    , _tgaKey = Nothing
-    }
+  TargetGroupAttribute' {_tgaValue = Nothing, _tgaKey = Nothing}
 
+
 -- | The value of the attribute.
 tgaValue :: Lens' TargetGroupAttribute (Maybe Text)
 tgaValue = lens _tgaValue (\ s a -> s{_tgaValue = a});
 
--- | The name of the attribute.     * @deregistration_delay.timeout_seconds@ - The amount time for Elastic Load Balancing to wait before changing the state of a deregistering target from @draining@ to @unused@ . The range is 0-3600 seconds. The default value is 300 seconds.     * @stickiness.enabled@ - Indicates whether sticky sessions are enabled. The value is @true@ or @false@ .     * @stickiness.type@ - The type of sticky sessions. The possible value is @lb_cookie@ .     * @stickiness.lb_cookie.duration_seconds@ - The time period, in seconds, during which requests from a client should be routed to the same target. After this time period expires, the load balancer-generated cookie is considered stale. The range is 1 second to 1 week (604800 seconds). The default value is 1 day (86400 seconds).
+-- | The name of the attribute.     * @deregistration_delay.timeout_seconds@ - The amount time for Elastic Load Balancing to wait before changing the state of a deregistering target from @draining@ to @unused@ . The range is 0-3600 seconds. The default value is 300 seconds.     * @stickiness.enabled@ - [Application Load Balancers] Indicates whether sticky sessions are enabled. The value is @true@ or @false@ .     * @stickiness.type@ - [Application Load Balancers] The type of sticky sessions. The possible value is @lb_cookie@ .     * @stickiness.lb_cookie.duration_seconds@ - [Application Load Balancers] The time period, in seconds, during which requests from a client should be routed to the same target. After this time period expires, the load balancer-generated cookie is considered stale. The range is 1 second to 1 week (604800 seconds). The default value is 1 day (86400 seconds).
 tgaKey :: Lens' TargetGroupAttribute (Maybe Text)
 tgaKey = lens _tgaKey (\ s a -> s{_tgaKey = a});
 
@@ -1083,9 +1247,9 @@
           = TargetGroupAttribute' <$>
               (x .@? "Value") <*> (x .@? "Key")
 
-instance Hashable TargetGroupAttribute
+instance Hashable TargetGroupAttribute where
 
-instance NFData TargetGroupAttribute
+instance NFData TargetGroupAttribute where
 
 instance ToQuery TargetGroupAttribute where
         toQuery TargetGroupAttribute'{..}
@@ -1097,34 +1261,33 @@
 --
 -- /See:/ 'targetHealth' smart constructor.
 data TargetHealth = TargetHealth'
-    { _thState       :: !(Maybe TargetHealthStateEnum)
-    , _thReason      :: !(Maybe TargetHealthReasonEnum)
-    , _thDescription :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _thState       :: !(Maybe TargetHealthStateEnum)
+  , _thReason      :: !(Maybe TargetHealthReasonEnum)
+  , _thDescription :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'TargetHealth' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
 -- * 'thState' - The state of the target.
 --
--- * 'thReason' - The reason code. If the target state is @healthy@ , a reason code is not provided. If the target state is @initial@ , the reason code can be one of the following values:     * @Elb.RegistrationInProgress@ - The target is in the process of being registered with the load balancer.     * @Elb.InitialHealthChecking@ - The load balancer is still sending the target the minimum number of health checks required to determine its health status. If the target state is @unhealthy@ , the reason code can be one of the following values:     * @Target.ResponseCodeMismatch@ - The health checks did not return an expected HTTP code.     * @Target.Timeout@ - The health check requests timed out.     * @Target.FailedHealthChecks@ - The health checks failed because the connection to the target timed out, the target response was malformed, or the target failed the health check for an unknown reason.     * @Elb.InternalError@ - The health checks failed due to an internal error. If the target state is @unused@ , the reason code can be one of the following values:     * @Target.NotRegistered@ - The target is not registered with the target group.     * @Target.NotInUse@ - The target group is not used by any load balancer or the target is in an Availability Zone that is not enabled for its load balancer.     * @Target.InvalidState@ - The target is in the stopped or terminated state. If the target state is @draining@ , the reason code can be the following value:     * @Target.DeregistrationInProgress@ - The target is in the process of being deregistered and the deregistration delay period has not expired.
+-- * 'thReason' - The reason code. If the target state is @healthy@ , a reason code is not provided. If the target state is @initial@ , the reason code can be one of the following values:     * @Elb.RegistrationInProgress@ - The target is in the process of being registered with the load balancer.     * @Elb.InitialHealthChecking@ - The load balancer is still sending the target the minimum number of health checks required to determine its health status. If the target state is @unhealthy@ , the reason code can be one of the following values:     * @Target.ResponseCodeMismatch@ - The health checks did not return an expected HTTP code.     * @Target.Timeout@ - The health check requests timed out.     * @Target.FailedHealthChecks@ - The health checks failed because the connection to the target timed out, the target response was malformed, or the target failed the health check for an unknown reason.     * @Elb.InternalError@ - The health checks failed due to an internal error. If the target state is @unused@ , the reason code can be one of the following values:     * @Target.NotRegistered@ - The target is not registered with the target group.     * @Target.NotInUse@ - The target group is not used by any load balancer or the target is in an Availability Zone that is not enabled for its load balancer.     * @Target.IpUnusable@ - The target IP address is reserved for use by a load balancer.     * @Target.InvalidState@ - The target is in the stopped or terminated state. If the target state is @draining@ , the reason code can be the following value:     * @Target.DeregistrationInProgress@ - The target is in the process of being deregistered and the deregistration delay period has not expired.
 --
 -- * 'thDescription' - A description of the target health that provides additional details. If the state is @healthy@ , a description is not provided.
 targetHealth
     :: TargetHealth
 targetHealth =
-    TargetHealth'
-    { _thState = Nothing
-    , _thReason = Nothing
-    , _thDescription = Nothing
-    }
+  TargetHealth'
+  {_thState = Nothing, _thReason = Nothing, _thDescription = Nothing}
 
+
 -- | The state of the target.
 thState :: Lens' TargetHealth (Maybe TargetHealthStateEnum)
 thState = lens _thState (\ s a -> s{_thState = a});
 
--- | The reason code. If the target state is @healthy@ , a reason code is not provided. If the target state is @initial@ , the reason code can be one of the following values:     * @Elb.RegistrationInProgress@ - The target is in the process of being registered with the load balancer.     * @Elb.InitialHealthChecking@ - The load balancer is still sending the target the minimum number of health checks required to determine its health status. If the target state is @unhealthy@ , the reason code can be one of the following values:     * @Target.ResponseCodeMismatch@ - The health checks did not return an expected HTTP code.     * @Target.Timeout@ - The health check requests timed out.     * @Target.FailedHealthChecks@ - The health checks failed because the connection to the target timed out, the target response was malformed, or the target failed the health check for an unknown reason.     * @Elb.InternalError@ - The health checks failed due to an internal error. If the target state is @unused@ , the reason code can be one of the following values:     * @Target.NotRegistered@ - The target is not registered with the target group.     * @Target.NotInUse@ - The target group is not used by any load balancer or the target is in an Availability Zone that is not enabled for its load balancer.     * @Target.InvalidState@ - The target is in the stopped or terminated state. If the target state is @draining@ , the reason code can be the following value:     * @Target.DeregistrationInProgress@ - The target is in the process of being deregistered and the deregistration delay period has not expired.
+-- | The reason code. If the target state is @healthy@ , a reason code is not provided. If the target state is @initial@ , the reason code can be one of the following values:     * @Elb.RegistrationInProgress@ - The target is in the process of being registered with the load balancer.     * @Elb.InitialHealthChecking@ - The load balancer is still sending the target the minimum number of health checks required to determine its health status. If the target state is @unhealthy@ , the reason code can be one of the following values:     * @Target.ResponseCodeMismatch@ - The health checks did not return an expected HTTP code.     * @Target.Timeout@ - The health check requests timed out.     * @Target.FailedHealthChecks@ - The health checks failed because the connection to the target timed out, the target response was malformed, or the target failed the health check for an unknown reason.     * @Elb.InternalError@ - The health checks failed due to an internal error. If the target state is @unused@ , the reason code can be one of the following values:     * @Target.NotRegistered@ - The target is not registered with the target group.     * @Target.NotInUse@ - The target group is not used by any load balancer or the target is in an Availability Zone that is not enabled for its load balancer.     * @Target.IpUnusable@ - The target IP address is reserved for use by a load balancer.     * @Target.InvalidState@ - The target is in the stopped or terminated state. If the target state is @draining@ , the reason code can be the following value:     * @Target.DeregistrationInProgress@ - The target is in the process of being deregistered and the deregistration delay period has not expired.
 thReason :: Lens' TargetHealth (Maybe TargetHealthReasonEnum)
 thReason = lens _thReason (\ s a -> s{_thReason = a});
 
@@ -1138,9 +1301,9 @@
               (x .@? "State") <*> (x .@? "Reason") <*>
                 (x .@? "Description")
 
-instance Hashable TargetHealth
+instance Hashable TargetHealth where
 
-instance NFData TargetHealth
+instance NFData TargetHealth where
 
 -- | Information about the health of a target.
 --
@@ -1148,11 +1311,12 @@
 --
 -- /See:/ 'targetHealthDescription' smart constructor.
 data TargetHealthDescription = TargetHealthDescription'
-    { _thdTargetHealth    :: !(Maybe TargetHealth)
-    , _thdHealthCheckPort :: !(Maybe Text)
-    , _thdTarget          :: !(Maybe TargetDescription)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _thdTargetHealth    :: !(Maybe TargetHealth)
+  , _thdHealthCheckPort :: !(Maybe Text)
+  , _thdTarget          :: !(Maybe TargetDescription)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'TargetHealthDescription' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -1165,12 +1329,13 @@
 targetHealthDescription
     :: TargetHealthDescription
 targetHealthDescription =
-    TargetHealthDescription'
-    { _thdTargetHealth = Nothing
-    , _thdHealthCheckPort = Nothing
-    , _thdTarget = Nothing
-    }
+  TargetHealthDescription'
+  { _thdTargetHealth = Nothing
+  , _thdHealthCheckPort = Nothing
+  , _thdTarget = Nothing
+  }
 
+
 -- | The health information for the target.
 thdTargetHealth :: Lens' TargetHealthDescription (Maybe TargetHealth)
 thdTargetHealth = lens _thdTargetHealth (\ s a -> s{_thdTargetHealth = a});
@@ -1189,6 +1354,6 @@
               (x .@? "TargetHealth") <*> (x .@? "HealthCheckPort")
                 <*> (x .@? "Target")
 
-instance Hashable TargetHealthDescription
+instance Hashable TargetHealthDescription where
 
-instance NFData TargetHealthDescription
+instance NFData TargetHealthDescription where
diff --git a/gen/Network/AWS/ELBv2/Types/Sum.hs b/gen/Network/AWS/ELBv2/Types/Sum.hs
--- a/gen/Network/AWS/ELBv2/Types/Sum.hs
+++ b/gen/Network/AWS/ELBv2/Types/Sum.hs
@@ -9,20 +9,21 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.Types.Sum
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 module Network.AWS.ELBv2.Types.Sum where
 
-import           Network.AWS.Prelude
+import Network.AWS.Prelude
 
 data ActionTypeEnum =
-    Forward
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  Forward
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText ActionTypeEnum where
     parser = takeLowerText >>= \case
         "forward" -> pure Forward
@@ -42,11 +43,39 @@
 instance FromXML ActionTypeEnum where
     parseXML = parseXMLText "ActionTypeEnum"
 
+data IPAddressType
+  = Dualstack
+  | IPV4
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText IPAddressType where
+    parser = takeLowerText >>= \case
+        "dualstack" -> pure Dualstack
+        "ipv4" -> pure IPV4
+        e -> fromTextError $ "Failure parsing IPAddressType from value: '" <> e
+           <> "'. Accepted values: dualstack, ipv4"
+
+instance ToText IPAddressType where
+    toText = \case
+        Dualstack -> "dualstack"
+        IPV4 -> "ipv4"
+
+instance Hashable     IPAddressType
+instance NFData       IPAddressType
+instance ToByteString IPAddressType
+instance ToQuery      IPAddressType
+instance ToHeader     IPAddressType
+
+instance FromXML IPAddressType where
+    parseXML = parseXMLText "IPAddressType"
+
 data LoadBalancerSchemeEnum
-    = Internal
-    | InternetFacing
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Internal
+  | InternetFacing
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText LoadBalancerSchemeEnum where
     parser = takeLowerText >>= \case
         "internal" -> pure Internal
@@ -69,22 +98,26 @@
     parseXML = parseXMLText "LoadBalancerSchemeEnum"
 
 data LoadBalancerStateEnum
-    = Active
-    | Failed
-    | Provisioning
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Active
+  | ActiveImpaired
+  | Failed
+  | Provisioning
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText LoadBalancerStateEnum where
     parser = takeLowerText >>= \case
         "active" -> pure Active
+        "active_impaired" -> pure ActiveImpaired
         "failed" -> pure Failed
         "provisioning" -> pure Provisioning
         e -> fromTextError $ "Failure parsing LoadBalancerStateEnum from value: '" <> e
-           <> "'. Accepted values: active, failed, provisioning"
+           <> "'. Accepted values: active, active_impaired, failed, provisioning"
 
 instance ToText LoadBalancerStateEnum where
     toText = \case
         Active -> "active"
+        ActiveImpaired -> "active_impaired"
         Failed -> "failed"
         Provisioning -> "provisioning"
 
@@ -97,19 +130,23 @@
 instance FromXML LoadBalancerStateEnum where
     parseXML = parseXMLText "LoadBalancerStateEnum"
 
-data LoadBalancerTypeEnum =
-    Application
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+data LoadBalancerTypeEnum
+  = Application
+  | Network
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText LoadBalancerTypeEnum where
     parser = takeLowerText >>= \case
         "application" -> pure Application
+        "network" -> pure Network
         e -> fromTextError $ "Failure parsing LoadBalancerTypeEnum from value: '" <> e
-           <> "'. Accepted values: application"
+           <> "'. Accepted values: application, network"
 
 instance ToText LoadBalancerTypeEnum where
     toText = \case
         Application -> "application"
+        Network -> "network"
 
 instance Hashable     LoadBalancerTypeEnum
 instance NFData       LoadBalancerTypeEnum
@@ -121,21 +158,25 @@
     parseXML = parseXMLText "LoadBalancerTypeEnum"
 
 data ProtocolEnum
-    = HTTP
-    | HTTPS
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = HTTP
+  | HTTPS
+  | TCP
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText ProtocolEnum where
     parser = takeLowerText >>= \case
         "http" -> pure HTTP
         "https" -> pure HTTPS
+        "tcp" -> pure TCP
         e -> fromTextError $ "Failure parsing ProtocolEnum from value: '" <> e
-           <> "'. Accepted values: http, https"
+           <> "'. Accepted values: http, https, tcp"
 
 instance ToText ProtocolEnum where
     toText = \case
         HTTP -> "HTTP"
         HTTPS -> "HTTPS"
+        TCP -> "TCP"
 
 instance Hashable     ProtocolEnum
 instance NFData       ProtocolEnum
@@ -147,18 +188,20 @@
     parseXML = parseXMLText "ProtocolEnum"
 
 data TargetHealthReasonEnum
-    = Elb_InitialHealthChecking
-    | Elb_InternalError
-    | Elb_RegistrationInProgress
-    | Target_DeregistrationInProgress
-    | Target_FailedHealthChecks
-    | Target_InvalidState
-    | Target_NotInUse
-    | Target_NotRegistered
-    | Target_ResponseCodeMismatch
-    | Target_Timeout
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Elb_InitialHealthChecking
+  | Elb_InternalError
+  | Elb_RegistrationInProgress
+  | Target_DeregistrationInProgress
+  | Target_FailedHealthChecks
+  | Target_IPUnusable
+  | Target_InvalidState
+  | Target_NotInUse
+  | Target_NotRegistered
+  | Target_ResponseCodeMismatch
+  | Target_Timeout
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText TargetHealthReasonEnum where
     parser = takeLowerText >>= \case
         "elb.initialhealthchecking" -> pure Elb_InitialHealthChecking
@@ -166,13 +209,14 @@
         "elb.registrationinprogress" -> pure Elb_RegistrationInProgress
         "target.deregistrationinprogress" -> pure Target_DeregistrationInProgress
         "target.failedhealthchecks" -> pure Target_FailedHealthChecks
+        "target.ipunusable" -> pure Target_IPUnusable
         "target.invalidstate" -> pure Target_InvalidState
         "target.notinuse" -> pure Target_NotInUse
         "target.notregistered" -> pure Target_NotRegistered
         "target.responsecodemismatch" -> pure Target_ResponseCodeMismatch
         "target.timeout" -> pure Target_Timeout
         e -> fromTextError $ "Failure parsing TargetHealthReasonEnum from value: '" <> e
-           <> "'. Accepted values: elb.initialhealthchecking, elb.internalerror, elb.registrationinprogress, target.deregistrationinprogress, target.failedhealthchecks, target.invalidstate, target.notinuse, target.notregistered, target.responsecodemismatch, target.timeout"
+           <> "'. Accepted values: elb.initialhealthchecking, elb.internalerror, elb.registrationinprogress, target.deregistrationinprogress, target.failedhealthchecks, target.ipunusable, target.invalidstate, target.notinuse, target.notregistered, target.responsecodemismatch, target.timeout"
 
 instance ToText TargetHealthReasonEnum where
     toText = \case
@@ -181,6 +225,7 @@
         Elb_RegistrationInProgress -> "Elb.RegistrationInProgress"
         Target_DeregistrationInProgress -> "Target.DeregistrationInProgress"
         Target_FailedHealthChecks -> "Target.FailedHealthChecks"
+        Target_IPUnusable -> "Target.IpUnusable"
         Target_InvalidState -> "Target.InvalidState"
         Target_NotInUse -> "Target.NotInUse"
         Target_NotRegistered -> "Target.NotRegistered"
@@ -197,28 +242,32 @@
     parseXML = parseXMLText "TargetHealthReasonEnum"
 
 data TargetHealthStateEnum
-    = Draining
-    | Healthy
-    | Initial
-    | Unhealthy
-    | Unused
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Draining
+  | Healthy
+  | Initial
+  | Unavailable
+  | Unhealthy
+  | Unused
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText TargetHealthStateEnum where
     parser = takeLowerText >>= \case
         "draining" -> pure Draining
         "healthy" -> pure Healthy
         "initial" -> pure Initial
+        "unavailable" -> pure Unavailable
         "unhealthy" -> pure Unhealthy
         "unused" -> pure Unused
         e -> fromTextError $ "Failure parsing TargetHealthStateEnum from value: '" <> e
-           <> "'. Accepted values: draining, healthy, initial, unhealthy, unused"
+           <> "'. Accepted values: draining, healthy, initial, unavailable, unhealthy, unused"
 
 instance ToText TargetHealthStateEnum where
     toText = \case
         Draining -> "draining"
         Healthy -> "healthy"
         Initial -> "initial"
+        Unavailable -> "unavailable"
         Unhealthy -> "unhealthy"
         Unused -> "unused"
 
@@ -230,3 +279,30 @@
 
 instance FromXML TargetHealthStateEnum where
     parseXML = parseXMLText "TargetHealthStateEnum"
+
+data TargetTypeEnum
+  = IP
+  | Instance
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText TargetTypeEnum where
+    parser = takeLowerText >>= \case
+        "ip" -> pure IP
+        "instance" -> pure Instance
+        e -> fromTextError $ "Failure parsing TargetTypeEnum from value: '" <> e
+           <> "'. Accepted values: ip, instance"
+
+instance ToText TargetTypeEnum where
+    toText = \case
+        IP -> "ip"
+        Instance -> "instance"
+
+instance Hashable     TargetTypeEnum
+instance NFData       TargetTypeEnum
+instance ToByteString TargetTypeEnum
+instance ToQuery      TargetTypeEnum
+instance ToHeader     TargetTypeEnum
+
+instance FromXML TargetTypeEnum where
+    parseXML = parseXMLText "TargetTypeEnum"
diff --git a/gen/Network/AWS/ELBv2/Waiters.hs b/gen/Network/AWS/ELBv2/Waiters.hs
--- a/gen/Network/AWS/ELBv2/Waiters.hs
+++ b/gen/Network/AWS/ELBv2/Waiters.hs
@@ -7,15 +7,15 @@
 
 -- |
 -- Module      : Network.AWS.ELBv2.Waiters
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 module Network.AWS.ELBv2.Waiters where
 
-import           Network.AWS.ELBv2.Types
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Waiter
+import Network.AWS.ELBv2.Types
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Waiter
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -2,9 +2,9 @@
 
 -- |
 -- Module      : Main
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
diff --git a/test/Test/AWS/Gen/ELBv2.hs b/test/Test/AWS/Gen/ELBv2.hs
--- a/test/Test/AWS/Gen/ELBv2.hs
+++ b/test/Test/AWS/Gen/ELBv2.hs
@@ -5,20 +5,20 @@
 
 -- |
 -- Module      : Test.AWS.Gen.ELBv2
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 module Test.AWS.Gen.ELBv2 where
 
 import Data.Proxy
+import Network.AWS.ELBv2
+import Test.AWS.ELBv2.Internal
 import Test.AWS.Fixture
 import Test.AWS.Prelude
 import Test.Tasty
-import Network.AWS.ELBv2
-import Test.AWS.ELBv2.Internal
 
 -- Auto-generated: the actual test selection needs to be manually placed into
 -- the top-level so that real test data can be incrementally added.
@@ -49,6 +49,9 @@
 --         , requestCreateRule $
 --             createRule
 --
+--         , requestDescribeListenerCertificates $
+--             describeListenerCertificates
+--
 --         , requestSetSecurityGroups $
 --             setSecurityGroups
 --
@@ -85,6 +88,9 @@
 --         , requestDescribeSSLPolicies $
 --             describeSSLPolicies
 --
+--         , requestDescribeAccountLimits $
+--             describeAccountLimits
+--
 --         , requestDeregisterTargets $
 --             deregisterTargets
 --
@@ -97,6 +103,9 @@
 --         , requestModifyLoadBalancerAttributes $
 --             modifyLoadBalancerAttributes
 --
+--         , requestSetIPAddressType $
+--             setIPAddressType
+--
 --         , requestAddTags $
 --             addTags
 --
@@ -112,9 +121,15 @@
 --         , requestCreateLoadBalancer $
 --             createLoadBalancer
 --
+--         , requestRemoveListenerCertificates $
+--             removeListenerCertificates
+--
 --         , requestModifyRule $
 --             modifyRule
 --
+--         , requestAddListenerCertificates $
+--             addListenerCertificates
+--
 --           ]
 
 --     , testGroup "response"
@@ -139,6 +154,9 @@
 --         , responseCreateRule $
 --             createRuleResponse
 --
+--         , responseDescribeListenerCertificates $
+--             describeListenerCertificatesResponse
+--
 --         , responseSetSecurityGroups $
 --             setSecurityGroupsResponse
 --
@@ -175,6 +193,9 @@
 --         , responseDescribeSSLPolicies $
 --             describeSSLPoliciesResponse
 --
+--         , responseDescribeAccountLimits $
+--             describeAccountLimitsResponse
+--
 --         , responseDeregisterTargets $
 --             deregisterTargetsResponse
 --
@@ -187,6 +208,9 @@
 --         , responseModifyLoadBalancerAttributes $
 --             modifyLoadBalancerAttributesResponse
 --
+--         , responseSetIPAddressType $
+--             setIPAddressTypeResponse
+--
 --         , responseAddTags $
 --             addTagsResponse
 --
@@ -202,9 +226,15 @@
 --         , responseCreateLoadBalancer $
 --             createLoadBalancerResponse
 --
+--         , responseRemoveListenerCertificates $
+--             removeListenerCertificatesResponse
+--
 --         , responseModifyRule $
 --             modifyRuleResponse
 --
+--         , responseAddListenerCertificates $
+--             addListenerCertificatesResponse
+--
 --           ]
 --     ]
 
@@ -245,6 +275,11 @@
     "CreateRule"
     "fixture/CreateRule.yaml"
 
+requestDescribeListenerCertificates :: DescribeListenerCertificates -> TestTree
+requestDescribeListenerCertificates = req
+    "DescribeListenerCertificates"
+    "fixture/DescribeListenerCertificates.yaml"
+
 requestSetSecurityGroups :: SetSecurityGroups -> TestTree
 requestSetSecurityGroups = req
     "SetSecurityGroups"
@@ -305,6 +340,11 @@
     "DescribeSSLPolicies"
     "fixture/DescribeSSLPolicies.yaml"
 
+requestDescribeAccountLimits :: DescribeAccountLimits -> TestTree
+requestDescribeAccountLimits = req
+    "DescribeAccountLimits"
+    "fixture/DescribeAccountLimits.yaml"
+
 requestDeregisterTargets :: DeregisterTargets -> TestTree
 requestDeregisterTargets = req
     "DeregisterTargets"
@@ -325,6 +365,11 @@
     "ModifyLoadBalancerAttributes"
     "fixture/ModifyLoadBalancerAttributes.yaml"
 
+requestSetIPAddressType :: SetIPAddressType -> TestTree
+requestSetIPAddressType = req
+    "SetIPAddressType"
+    "fixture/SetIPAddressType.yaml"
+
 requestAddTags :: AddTags -> TestTree
 requestAddTags = req
     "AddTags"
@@ -350,11 +395,21 @@
     "CreateLoadBalancer"
     "fixture/CreateLoadBalancer.yaml"
 
+requestRemoveListenerCertificates :: RemoveListenerCertificates -> TestTree
+requestRemoveListenerCertificates = req
+    "RemoveListenerCertificates"
+    "fixture/RemoveListenerCertificates.yaml"
+
 requestModifyRule :: ModifyRule -> TestTree
 requestModifyRule = req
     "ModifyRule"
     "fixture/ModifyRule.yaml"
 
+requestAddListenerCertificates :: AddListenerCertificates -> TestTree
+requestAddListenerCertificates = req
+    "AddListenerCertificates"
+    "fixture/AddListenerCertificates.yaml"
+
 -- Responses
 
 responseDescribeLoadBalancers :: DescribeLoadBalancersResponse -> TestTree
@@ -406,6 +461,13 @@
     eLBv2
     (Proxy :: Proxy CreateRule)
 
+responseDescribeListenerCertificates :: DescribeListenerCertificatesResponse -> TestTree
+responseDescribeListenerCertificates = res
+    "DescribeListenerCertificatesResponse"
+    "fixture/DescribeListenerCertificatesResponse.proto"
+    eLBv2
+    (Proxy :: Proxy DescribeListenerCertificates)
+
 responseSetSecurityGroups :: SetSecurityGroupsResponse -> TestTree
 responseSetSecurityGroups = res
     "SetSecurityGroupsResponse"
@@ -490,6 +552,13 @@
     eLBv2
     (Proxy :: Proxy DescribeSSLPolicies)
 
+responseDescribeAccountLimits :: DescribeAccountLimitsResponse -> TestTree
+responseDescribeAccountLimits = res
+    "DescribeAccountLimitsResponse"
+    "fixture/DescribeAccountLimitsResponse.proto"
+    eLBv2
+    (Proxy :: Proxy DescribeAccountLimits)
+
 responseDeregisterTargets :: DeregisterTargetsResponse -> TestTree
 responseDeregisterTargets = res
     "DeregisterTargetsResponse"
@@ -518,6 +587,13 @@
     eLBv2
     (Proxy :: Proxy ModifyLoadBalancerAttributes)
 
+responseSetIPAddressType :: SetIPAddressTypeResponse -> TestTree
+responseSetIPAddressType = res
+    "SetIPAddressTypeResponse"
+    "fixture/SetIPAddressTypeResponse.proto"
+    eLBv2
+    (Proxy :: Proxy SetIPAddressType)
+
 responseAddTags :: AddTagsResponse -> TestTree
 responseAddTags = res
     "AddTagsResponse"
@@ -553,9 +629,23 @@
     eLBv2
     (Proxy :: Proxy CreateLoadBalancer)
 
+responseRemoveListenerCertificates :: RemoveListenerCertificatesResponse -> TestTree
+responseRemoveListenerCertificates = res
+    "RemoveListenerCertificatesResponse"
+    "fixture/RemoveListenerCertificatesResponse.proto"
+    eLBv2
+    (Proxy :: Proxy RemoveListenerCertificates)
+
 responseModifyRule :: ModifyRuleResponse -> TestTree
 responseModifyRule = res
     "ModifyRuleResponse"
     "fixture/ModifyRuleResponse.proto"
     eLBv2
     (Proxy :: Proxy ModifyRule)
+
+responseAddListenerCertificates :: AddListenerCertificatesResponse -> TestTree
+responseAddListenerCertificates = res
+    "AddListenerCertificatesResponse"
+    "fixture/AddListenerCertificatesResponse.proto"
+    eLBv2
+    (Proxy :: Proxy AddListenerCertificates)
