diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.3.7`
+`1.4.0`
 
 
 ## Description
@@ -42,7 +42,7 @@
 make up your data warehouse.
 
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-redshift)
-and the [AWS API Reference](http://docs.aws.amazon.com/redshift/latest/APIReference/Welcome.html).
+and the [AWS API Reference](https://aws.amazon.com/documentation/).
 
 The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
 which provides mechanisms for specifying AuthN/AuthZ information and sending requests.
diff --git a/amazonka-redshift.cabal b/amazonka-redshift.cabal
--- a/amazonka-redshift.cabal
+++ b/amazonka-redshift.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-redshift
-version:               1.3.7
+version:               1.4.0
 synopsis:              Amazon Redshift SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -7,7 +7,7 @@
 license-file:          LICENSE
 author:                Brendan Hay
 maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2013-2015 Brendan Hay
+copyright:             Copyright (c) 2013-2016 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 cabal-version:         >= 1.10
@@ -52,7 +52,7 @@
     such as <http://hackage.haskell.org/package/lens lens> or
     <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
     .
-    See "Network.AWS.Redshift" and the <http://docs.aws.amazon.com/redshift/latest/APIReference/Welcome.html AWS API Reference>
+    See "Network.AWS.Redshift" or <https://aws.amazon.com/documentation/ the AWS Documentation>
     to get started.
 
 source-repository head
@@ -109,6 +109,7 @@
         , Network.AWS.Redshift.DescribeReservedNodes
         , Network.AWS.Redshift.DescribeResize
         , Network.AWS.Redshift.DescribeSnapshotCopyGrants
+        , Network.AWS.Redshift.DescribeTableRestoreStatus
         , Network.AWS.Redshift.DescribeTags
         , Network.AWS.Redshift.DisableLogging
         , Network.AWS.Redshift.DisableSnapshotCopy
@@ -123,6 +124,7 @@
         , Network.AWS.Redshift.RebootCluster
         , Network.AWS.Redshift.ResetClusterParameterGroup
         , Network.AWS.Redshift.RestoreFromClusterSnapshot
+        , Network.AWS.Redshift.RestoreTableFromClusterSnapshot
         , Network.AWS.Redshift.RevokeClusterSecurityGroupIngress
         , Network.AWS.Redshift.RevokeSnapshotAccess
         , Network.AWS.Redshift.RotateEncryptionKey
@@ -134,7 +136,7 @@
         , Network.AWS.Redshift.Types.Sum
 
     build-depends:
-          amazonka-core == 1.3.7.*
+          amazonka-core == 1.4.0.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-redshift-test
@@ -154,9 +156,9 @@
         , Test.AWS.Redshift.Internal
 
     build-depends:
-          amazonka-core == 1.3.7.*
-        , amazonka-test == 1.3.7.*
-        , amazonka-redshift == 1.3.7.*
+          amazonka-core == 1.4.0.*
+        , amazonka-test == 1.4.0.*
+        , amazonka-redshift == 1.4.0.*
         , base
         , bytestring
         , tasty
diff --git a/fixture/DescribeTableRestoreStatus.yaml b/fixture/DescribeTableRestoreStatus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTableRestoreStatus.yaml
diff --git a/fixture/DescribeTableRestoreStatusResponse.proto b/fixture/DescribeTableRestoreStatusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTableRestoreStatusResponse.proto
diff --git a/fixture/RestoreTableFromClusterSnapshot.yaml b/fixture/RestoreTableFromClusterSnapshot.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RestoreTableFromClusterSnapshot.yaml
diff --git a/fixture/RestoreTableFromClusterSnapshotResponse.proto b/fixture/RestoreTableFromClusterSnapshotResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RestoreTableFromClusterSnapshotResponse.proto
diff --git a/gen/Network/AWS/Redshift.hs b/gen/Network/AWS/Redshift.hs
--- a/gen/Network/AWS/Redshift.hs
+++ b/gen/Network/AWS/Redshift.hs
@@ -5,7 +5,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -38,8 +38,6 @@
 -- <http://docs.aws.amazon.com/redshift/latest/dg/welcome.html Amazon Redshift Database Developer Guide>
 -- explains how to design, build, query, and maintain the databases that
 -- make up your data warehouse.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/Welcome.html AWS API Reference>
 module Network.AWS.Redshift
     (
     -- * Service Configuration
@@ -78,6 +76,9 @@
     -- ** InvalidElasticIPFault
     , _InvalidElasticIPFault
 
+    -- ** TableRestoreNotFoundFault
+    , _TableRestoreNotFoundFault
+
     -- ** HSMConfigurationNotFoundFault
     , _HSMConfigurationNotFoundFault
 
@@ -156,6 +157,9 @@
     -- ** InvalidClusterStateFault
     , _InvalidClusterStateFault
 
+    -- ** InvalidTableRestoreArgumentFault
+    , _InvalidTableRestoreArgumentFault
+
     -- ** SnapshotCopyGrantNotFoundFault
     , _SnapshotCopyGrantNotFoundFault
 
@@ -189,6 +193,9 @@
     -- ** InvalidSubscriptionStateFault
     , _InvalidSubscriptionStateFault
 
+    -- ** DependentServiceRequestThrottlingFault
+    , _DependentServiceRequestThrottlingFault
+
     -- ** AuthorizationNotFoundFault
     , _AuthorizationNotFoundFault
 
@@ -228,6 +235,9 @@
     -- ** ReservedNodeAlreadyExistsFault
     , _ReservedNodeAlreadyExistsFault
 
+    -- ** InProgressTableRestoreQuotaExceededFault
+    , _InProgressTableRestoreQuotaExceededFault
+
     -- ** InvalidRestoreFault
     , _InvalidRestoreFault
 
@@ -384,6 +394,9 @@
     -- ** CreateHSMClientCertificate
     , module Network.AWS.Redshift.CreateHSMClientCertificate
 
+    -- ** RestoreTableFromClusterSnapshot
+    , module Network.AWS.Redshift.RestoreTableFromClusterSnapshot
+
     -- ** DescribeDefaultClusterParameters (Paginated)
     , module Network.AWS.Redshift.DescribeDefaultClusterParameters
 
@@ -420,6 +433,9 @@
     -- ** AuthorizeClusterSecurityGroupIngress
     , module Network.AWS.Redshift.AuthorizeClusterSecurityGroupIngress
 
+    -- ** DescribeTableRestoreStatus
+    , module Network.AWS.Redshift.DescribeTableRestoreStatus
+
     -- ** CreateClusterSnapshot
     , module Network.AWS.Redshift.CreateClusterSnapshot
 
@@ -485,6 +501,9 @@
     -- ** SourceType
     , SourceType (..)
 
+    -- ** TableRestoreStatusType
+    , TableRestoreStatusType (..)
+
     -- ** AccountWithRestoreAccess
     , AccountWithRestoreAccess
     , accountWithRestoreAccess
@@ -736,6 +755,7 @@
     , PendingModifiedValues
     , pendingModifiedValues
     , pmvMasterUserPassword
+    , pmvPubliclyAccessible
     , pmvAutomatedSnapshotRetentionPeriod
     , pmvClusterIdentifier
     , pmvNumberOfNodes
@@ -833,6 +853,24 @@
     , sSubnetIdentifier
     , sSubnetAvailabilityZone
 
+    -- ** TableRestoreStatus
+    , TableRestoreStatus
+    , tableRestoreStatus
+    , trsStatus
+    , trsTargetSchemaName
+    , trsSnapshotIdentifier
+    , trsSourceDatabaseName
+    , trsTableRestoreRequestId
+    , trsNewTableName
+    , trsTargetDatabaseName
+    , trsSourceSchemaName
+    , trsClusterIdentifier
+    , trsRequestTime
+    , trsSourceTableName
+    , trsTotalDataInMegaBytes
+    , trsProgressInMegaBytes
+    , trsMessage
+
     -- ** Tag
     , Tag
     , tag
@@ -895,6 +933,7 @@
 import           Network.AWS.Redshift.DescribeReservedNodes
 import           Network.AWS.Redshift.DescribeResize
 import           Network.AWS.Redshift.DescribeSnapshotCopyGrants
+import           Network.AWS.Redshift.DescribeTableRestoreStatus
 import           Network.AWS.Redshift.DescribeTags
 import           Network.AWS.Redshift.DisableLogging
 import           Network.AWS.Redshift.DisableSnapshotCopy
@@ -909,6 +948,7 @@
 import           Network.AWS.Redshift.RebootCluster
 import           Network.AWS.Redshift.ResetClusterParameterGroup
 import           Network.AWS.Redshift.RestoreFromClusterSnapshot
+import           Network.AWS.Redshift.RestoreTableFromClusterSnapshot
 import           Network.AWS.Redshift.RevokeClusterSecurityGroupIngress
 import           Network.AWS.Redshift.RevokeSnapshotAccess
 import           Network.AWS.Redshift.RotateEncryptionKey
diff --git a/gen/Network/AWS/Redshift/AuthorizeClusterSecurityGroupIngress.hs b/gen/Network/AWS/Redshift/AuthorizeClusterSecurityGroupIngress.hs
--- a/gen/Network/AWS/Redshift/AuthorizeClusterSecurityGroupIngress.hs
+++ b/gen/Network/AWS/Redshift/AuthorizeClusterSecurityGroupIngress.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.AuthorizeClusterSecurityGroupIngress
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,14 +20,17 @@
 --
 -- Adds an inbound (ingress) rule to an Amazon Redshift security group.
 -- Depending on whether the application accessing your cluster is running
--- on the Internet or an EC2 instance, you can authorize inbound access to
--- either a Classless Interdomain Routing (CIDR) IP address range or an EC2
--- security group. You can add as many as 20 ingress rules to an Amazon
--- Redshift security group.
+-- on the Internet or an Amazon EC2 instance, you can authorize inbound
+-- access to either a Classless Interdomain Routing (CIDR)\/Internet
+-- Protocol (IP) range or to an Amazon EC2 security group. You can add as
+-- many as 20 ingress rules to an Amazon Redshift security group.
 --
--- The EC2 security group must be defined in the AWS region where the
--- cluster resides.
+-- If you authorize access to an Amazon EC2 security group, specify
+-- /EC2SecurityGroupName/ and /EC2SecurityGroupOwnerId/. The Amazon EC2
+-- security group and Amazon Redshift cluster must be in the same AWS
+-- region.
 --
+-- If you authorize access to a CIDR\/IP address range, specify /CIDRIP/.
 -- For an overview of CIDR blocks, see the Wikipedia article on
 -- <http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing Classless Inter-Domain Routing>.
 --
@@ -37,8 +40,6 @@
 -- groups, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-security-groups.html Working with Security Groups>
 -- in the /Amazon Redshift Cluster Management Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_AuthorizeClusterSecurityGroupIngress.html AWS API Reference> for AuthorizeClusterSecurityGroupIngress.
 module Network.AWS.Redshift.AuthorizeClusterSecurityGroupIngress
     (
     -- * Creating a Request
@@ -65,7 +66,7 @@
 import           Network.AWS.Request
 import           Network.AWS.Response
 
--- | ???
+-- |
 --
 -- /See:/ 'authorizeClusterSecurityGroupIngress' smart constructor.
 data AuthorizeClusterSecurityGroupIngress = AuthorizeClusterSecurityGroupIngress'
@@ -129,6 +130,9 @@
                  AuthorizeClusterSecurityGroupIngressResponse' <$>
                    (x .@? "ClusterSecurityGroup") <*>
                      (pure (fromEnum s)))
+
+instance Hashable
+         AuthorizeClusterSecurityGroupIngress
 
 instance ToHeaders
          AuthorizeClusterSecurityGroupIngress where
diff --git a/gen/Network/AWS/Redshift/AuthorizeSnapshotAccess.hs b/gen/Network/AWS/Redshift/AuthorizeSnapshotAccess.hs
--- a/gen/Network/AWS/Redshift/AuthorizeSnapshotAccess.hs
+++ b/gen/Network/AWS/Redshift/AuthorizeSnapshotAccess.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.AuthorizeSnapshotAccess
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -24,8 +24,6 @@
 -- For more information about working with snapshots, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-snapshots.html Amazon Redshift Snapshots>
 -- in the /Amazon Redshift Cluster Management Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_AuthorizeSnapshotAccess.html AWS API Reference> for AuthorizeSnapshotAccess.
 module Network.AWS.Redshift.AuthorizeSnapshotAccess
     (
     -- * Creating a Request
@@ -105,6 +103,8 @@
               (\ s h x ->
                  AuthorizeSnapshotAccessResponse' <$>
                    (x .@? "Snapshot") <*> (pure (fromEnum s)))
+
+instance Hashable AuthorizeSnapshotAccess
 
 instance ToHeaders AuthorizeSnapshotAccess where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/CopyClusterSnapshot.hs b/gen/Network/AWS/Redshift/CopyClusterSnapshot.hs
--- a/gen/Network/AWS/Redshift/CopyClusterSnapshot.hs
+++ b/gen/Network/AWS/Redshift/CopyClusterSnapshot.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.CopyClusterSnapshot
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -32,8 +32,6 @@
 -- For more information about working with snapshots, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-snapshots.html Amazon Redshift Snapshots>
 -- in the /Amazon Redshift Cluster Management Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_CopyClusterSnapshot.html AWS API Reference> for CopyClusterSnapshot.
 module Network.AWS.Redshift.CopyClusterSnapshot
     (
     -- * Creating a Request
@@ -129,6 +127,8 @@
               (\ s h x ->
                  CopyClusterSnapshotResponse' <$>
                    (x .@? "Snapshot") <*> (pure (fromEnum s)))
+
+instance Hashable CopyClusterSnapshot
 
 instance ToHeaders CopyClusterSnapshot where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/CreateCluster.hs b/gen/Network/AWS/Redshift/CreateCluster.hs
--- a/gen/Network/AWS/Redshift/CreateCluster.hs
+++ b/gen/Network/AWS/Redshift/CreateCluster.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.CreateCluster
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -26,14 +26,13 @@
 -- managing clusters, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html Amazon Redshift Clusters>
 -- in the /Amazon Redshift Cluster Management Guide/ .
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_CreateCluster.html AWS API Reference> for CreateCluster.
 module Network.AWS.Redshift.CreateCluster
     (
     -- * Creating a Request
       createCluster
     , CreateCluster
     -- * Request Lenses
+    , ccAdditionalInfo
     , ccPubliclyAccessible
     , ccHSMConfigurationIdentifier
     , ccClusterSecurityGroups
@@ -78,7 +77,8 @@
 --
 -- /See:/ 'createCluster' smart constructor.
 data CreateCluster = CreateCluster'
-    { _ccPubliclyAccessible               :: !(Maybe Bool)
+    { _ccAdditionalInfo                   :: !(Maybe Text)
+    , _ccPubliclyAccessible               :: !(Maybe Bool)
     , _ccHSMConfigurationIdentifier       :: !(Maybe Text)
     , _ccClusterSecurityGroups            :: !(Maybe [Text])
     , _ccAutomatedSnapshotRetentionPeriod :: !(Maybe Int)
@@ -108,6 +108,8 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'ccAdditionalInfo'
+--
 -- * 'ccPubliclyAccessible'
 --
 -- * 'ccHSMConfigurationIdentifier'
@@ -163,7 +165,8 @@
     -> CreateCluster
 createCluster pClusterIdentifier_ pNodeType_ pMasterUsername_ pMasterUserPassword_ =
     CreateCluster'
-    { _ccPubliclyAccessible = Nothing
+    { _ccAdditionalInfo = Nothing
+    , _ccPubliclyAccessible = Nothing
     , _ccHSMConfigurationIdentifier = Nothing
     , _ccClusterSecurityGroups = Nothing
     , _ccAutomatedSnapshotRetentionPeriod = Nothing
@@ -189,6 +192,10 @@
     , _ccMasterUserPassword = pMasterUserPassword_
     }
 
+-- | Reserved.
+ccAdditionalInfo :: Lens' CreateCluster (Maybe Text)
+ccAdditionalInfo = lens _ccAdditionalInfo (\ s a -> s{_ccAdditionalInfo = a});
+
 -- | If 'true', the cluster can be accessed from a public network.
 ccPubliclyAccessible :: Lens' CreateCluster (Maybe Bool)
 ccPubliclyAccessible = lens _ccPubliclyAccessible (\ s a -> s{_ccPubliclyAccessible = a});
@@ -208,7 +215,7 @@
 -- | The number of days that automated snapshots are retained. If the value
 -- is 0, automated snapshots are disabled. Even if automated snapshots are
 -- disabled, you can still create manual snapshots when you want with
--- CreateClusterSnapshot.
+-- < CreateClusterSnapshot>.
 --
 -- Default: '1'
 --
@@ -453,6 +460,8 @@
                  CreateClusterResponse' <$>
                    (x .@? "Cluster") <*> (pure (fromEnum s)))
 
+instance Hashable CreateCluster
+
 instance ToHeaders CreateCluster where
         toHeaders = const mempty
 
@@ -464,6 +473,7 @@
           = mconcat
               ["Action" =: ("CreateCluster" :: ByteString),
                "Version" =: ("2012-12-01" :: ByteString),
+               "AdditionalInfo" =: _ccAdditionalInfo,
                "PubliclyAccessible" =: _ccPubliclyAccessible,
                "HsmConfigurationIdentifier" =:
                  _ccHSMConfigurationIdentifier,
diff --git a/gen/Network/AWS/Redshift/CreateClusterParameterGroup.hs b/gen/Network/AWS/Redshift/CreateClusterParameterGroup.hs
--- a/gen/Network/AWS/Redshift/CreateClusterParameterGroup.hs
+++ b/gen/Network/AWS/Redshift/CreateClusterParameterGroup.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.CreateClusterParameterGroup
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,15 +23,13 @@
 -- Creating parameter groups is independent of creating clusters. You can
 -- associate a cluster with a parameter group when you create the cluster.
 -- You can also associate an existing cluster with a parameter group after
--- the cluster is created by using ModifyCluster.
+-- the cluster is created by using < ModifyCluster>.
 --
 -- Parameters in the parameter group define specific behavior that applies
 -- to the databases you create on the cluster. For more information about
 -- parameters and parameter groups, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html Amazon Redshift Parameter Groups>
 -- in the /Amazon Redshift Cluster Management Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_CreateClusterParameterGroup.html AWS API Reference> for CreateClusterParameterGroup.
 module Network.AWS.Redshift.CreateClusterParameterGroup
     (
     -- * Creating a Request
@@ -113,7 +111,7 @@
 -- applies. The cluster engine version determines the set of parameters.
 --
 -- To get a list of valid parameter group family names, you can call
--- DescribeClusterParameterGroups. By default, Amazon Redshift returns a
+-- < DescribeClusterParameterGroups>. By default, Amazon Redshift returns a
 -- list of all the parameter groups that are owned by your AWS account,
 -- including the default parameter groups for each Amazon Redshift engine
 -- version. The parameter group family names associated with the default
@@ -137,6 +135,8 @@
                  CreateClusterParameterGroupResponse' <$>
                    (x .@? "ClusterParameterGroup") <*>
                      (pure (fromEnum s)))
+
+instance Hashable CreateClusterParameterGroup
 
 instance ToHeaders CreateClusterParameterGroup where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/CreateClusterSecurityGroup.hs b/gen/Network/AWS/Redshift/CreateClusterSecurityGroup.hs
--- a/gen/Network/AWS/Redshift/CreateClusterSecurityGroup.hs
+++ b/gen/Network/AWS/Redshift/CreateClusterSecurityGroup.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.CreateClusterSecurityGroup
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -24,8 +24,6 @@
 -- For information about managing security groups, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-security-groups.html Amazon Redshift Cluster Security Groups>
 -- in the /Amazon Redshift Cluster Management Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_CreateClusterSecurityGroup.html AWS API Reference> for CreateClusterSecurityGroup.
 module Network.AWS.Redshift.CreateClusterSecurityGroup
     (
     -- * Creating a Request
@@ -51,7 +49,7 @@
 import           Network.AWS.Request
 import           Network.AWS.Response
 
--- | ???
+-- |
 --
 -- /See:/ 'createClusterSecurityGroup' smart constructor.
 data CreateClusterSecurityGroup = CreateClusterSecurityGroup'
@@ -113,6 +111,8 @@
                  CreateClusterSecurityGroupResponse' <$>
                    (x .@? "ClusterSecurityGroup") <*>
                      (pure (fromEnum s)))
+
+instance Hashable CreateClusterSecurityGroup
 
 instance ToHeaders CreateClusterSecurityGroup where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/CreateClusterSnapshot.hs b/gen/Network/AWS/Redshift/CreateClusterSnapshot.hs
--- a/gen/Network/AWS/Redshift/CreateClusterSnapshot.hs
+++ b/gen/Network/AWS/Redshift/CreateClusterSnapshot.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.CreateClusterSnapshot
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -24,8 +24,6 @@
 -- For more information about working with snapshots, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-snapshots.html Amazon Redshift Snapshots>
 -- in the /Amazon Redshift Cluster Management Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_CreateClusterSnapshot.html AWS API Reference> for CreateClusterSnapshot.
 module Network.AWS.Redshift.CreateClusterSnapshot
     (
     -- * Creating a Request
@@ -111,6 +109,8 @@
               (\ s h x ->
                  CreateClusterSnapshotResponse' <$>
                    (x .@? "Snapshot") <*> (pure (fromEnum s)))
+
+instance Hashable CreateClusterSnapshot
 
 instance ToHeaders CreateClusterSnapshot where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/CreateClusterSubnetGroup.hs b/gen/Network/AWS/Redshift/CreateClusterSubnetGroup.hs
--- a/gen/Network/AWS/Redshift/CreateClusterSubnetGroup.hs
+++ b/gen/Network/AWS/Redshift/CreateClusterSubnetGroup.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.CreateClusterSubnetGroup
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -25,8 +25,6 @@
 -- For information about subnet groups, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-cluster-subnet-groups.html Amazon Redshift Cluster Subnet Groups>
 -- in the /Amazon Redshift Cluster Management Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_CreateClusterSubnetGroup.html AWS API Reference> for CreateClusterSubnetGroup.
 module Network.AWS.Redshift.CreateClusterSubnetGroup
     (
     -- * Creating a Request
@@ -122,6 +120,8 @@
               (\ s h x ->
                  CreateClusterSubnetGroupResponse' <$>
                    (x .@? "ClusterSubnetGroup") <*> (pure (fromEnum s)))
+
+instance Hashable CreateClusterSubnetGroup
 
 instance ToHeaders CreateClusterSubnetGroup where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/CreateEventSubscription.hs b/gen/Network/AWS/Redshift/CreateEventSubscription.hs
--- a/gen/Network/AWS/Redshift/CreateEventSubscription.hs
+++ b/gen/Network/AWS/Redshift/CreateEventSubscription.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.CreateEventSubscription
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -42,8 +42,6 @@
 -- you will be notified of events generated from all Amazon Redshift
 -- sources belonging to your AWS account. You must specify a source type if
 -- you specify a source ID.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_CreateEventSubscription.html AWS API Reference> for CreateEventSubscription.
 module Network.AWS.Redshift.CreateEventSubscription
     (
     -- * Creating a Request
@@ -195,6 +193,8 @@
               (\ s h x ->
                  CreateEventSubscriptionResponse' <$>
                    (x .@? "EventSubscription") <*> (pure (fromEnum s)))
+
+instance Hashable CreateEventSubscription
 
 instance ToHeaders CreateEventSubscription where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/CreateHSMClientCertificate.hs b/gen/Network/AWS/Redshift/CreateHSMClientCertificate.hs
--- a/gen/Network/AWS/Redshift/CreateHSMClientCertificate.hs
+++ b/gen/Network/AWS/Redshift/CreateHSMClientCertificate.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.CreateHSMClientCertificate
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -29,8 +29,6 @@
 -- information, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-HSM.html Hardware Security Modules>
 -- in the Amazon Redshift Cluster Management Guide.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_CreateHSMClientCertificate.html AWS API Reference> for CreateHSMClientCertificate.
 module Network.AWS.Redshift.CreateHSMClientCertificate
     (
     -- * Creating a Request
@@ -100,6 +98,8 @@
                  CreateHSMClientCertificateResponse' <$>
                    (x .@? "HsmClientCertificate") <*>
                      (pure (fromEnum s)))
+
+instance Hashable CreateHSMClientCertificate
 
 instance ToHeaders CreateHSMClientCertificate where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/CreateHSMConfiguration.hs b/gen/Network/AWS/Redshift/CreateHSMConfiguration.hs
--- a/gen/Network/AWS/Redshift/CreateHSMConfiguration.hs
+++ b/gen/Network/AWS/Redshift/CreateHSMConfiguration.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.CreateHSMConfiguration
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -28,8 +28,6 @@
 -- HSM client certificate. For more information, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-HSM.html Hardware Security Modules>
 -- in the Amazon Redshift Cluster Management Guide.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_CreateHSMConfiguration.html AWS API Reference> for CreateHSMConfiguration.
 module Network.AWS.Redshift.CreateHSMConfiguration
     (
     -- * Creating a Request
@@ -149,6 +147,8 @@
               (\ s h x ->
                  CreateHSMConfigurationResponse' <$>
                    (x .@? "HsmConfiguration") <*> (pure (fromEnum s)))
+
+instance Hashable CreateHSMConfiguration
 
 instance ToHeaders CreateHSMConfiguration where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/CreateSnapshotCopyGrant.hs b/gen/Network/AWS/Redshift/CreateSnapshotCopyGrant.hs
--- a/gen/Network/AWS/Redshift/CreateSnapshotCopyGrant.hs
+++ b/gen/Network/AWS/Redshift/CreateSnapshotCopyGrant.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.CreateSnapshotCopyGrant
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -25,8 +25,6 @@
 -- For more information about managing snapshot copy grants, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-db-encryption.html Amazon Redshift Database Encryption>
 -- in the /Amazon Redshift Cluster Management Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_CreateSnapshotCopyGrant.html AWS API Reference> for CreateSnapshotCopyGrant.
 module Network.AWS.Redshift.CreateSnapshotCopyGrant
     (
     -- * Creating a Request
@@ -112,6 +110,8 @@
               (\ s h x ->
                  CreateSnapshotCopyGrantResponse' <$>
                    (x .@? "SnapshotCopyGrant") <*> (pure (fromEnum s)))
+
+instance Hashable CreateSnapshotCopyGrant
 
 instance ToHeaders CreateSnapshotCopyGrant where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/CreateTags.hs b/gen/Network/AWS/Redshift/CreateTags.hs
--- a/gen/Network/AWS/Redshift/CreateTags.hs
+++ b/gen/Network/AWS/Redshift/CreateTags.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.CreateTags
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -26,8 +26,6 @@
 --
 -- If you specify a key that already exists for the resource, the value for
 -- that key will be updated with the new value.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_CreateTags.html AWS API Reference> for CreateTags.
 module Network.AWS.Redshift.CreateTags
     (
     -- * Creating a Request
@@ -91,6 +89,8 @@
         type Rs CreateTags = CreateTagsResponse
         request = postQuery redshift
         response = receiveNull CreateTagsResponse'
+
+instance Hashable CreateTags
 
 instance ToHeaders CreateTags where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/DeleteCluster.hs b/gen/Network/AWS/Redshift/DeleteCluster.hs
--- a/gen/Network/AWS/Redshift/DeleteCluster.hs
+++ b/gen/Network/AWS/Redshift/DeleteCluster.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DeleteCluster
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,7 +20,7 @@
 --
 -- Deletes a previously provisioned cluster. A successful response from the
 -- web service indicates that the request was received correctly. Use
--- DescribeClusters to monitor the status of the deletion. The delete
+-- < DescribeClusters> to monitor the status of the deletion. The delete
 -- operation cannot be canceled or reverted once submitted. For more
 -- information about managing clusters, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html Amazon Redshift Clusters>
@@ -37,8 +37,6 @@
 -- For more information about managing clusters, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html Amazon Redshift Clusters>
 -- in the /Amazon Redshift Cluster Management Guide/ .
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DeleteCluster.html AWS API Reference> for DeleteCluster.
 module Network.AWS.Redshift.DeleteCluster
     (
     -- * Creating a Request
@@ -135,6 +133,8 @@
               (\ s h x ->
                  DeleteClusterResponse' <$>
                    (x .@? "Cluster") <*> (pure (fromEnum s)))
+
+instance Hashable DeleteCluster
 
 instance ToHeaders DeleteCluster where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/DeleteClusterParameterGroup.hs b/gen/Network/AWS/Redshift/DeleteClusterParameterGroup.hs
--- a/gen/Network/AWS/Redshift/DeleteClusterParameterGroup.hs
+++ b/gen/Network/AWS/Redshift/DeleteClusterParameterGroup.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DeleteClusterParameterGroup
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Deletes a specified Amazon Redshift parameter group.
 -- You cannot delete a parameter group if it is associated with a cluster.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DeleteClusterParameterGroup.html AWS API Reference> for DeleteClusterParameterGroup.
 module Network.AWS.Redshift.DeleteClusterParameterGroup
     (
     -- * Creating a Request
@@ -77,6 +75,8 @@
         request = postQuery redshift
         response
           = receiveNull DeleteClusterParameterGroupResponse'
+
+instance Hashable DeleteClusterParameterGroup
 
 instance ToHeaders DeleteClusterParameterGroup where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/DeleteClusterSecurityGroup.hs b/gen/Network/AWS/Redshift/DeleteClusterSecurityGroup.hs
--- a/gen/Network/AWS/Redshift/DeleteClusterSecurityGroup.hs
+++ b/gen/Network/AWS/Redshift/DeleteClusterSecurityGroup.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DeleteClusterSecurityGroup
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -26,8 +26,6 @@
 -- For information about managing security groups, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-security-groups.html Amazon Redshift Cluster Security Groups>
 -- in the /Amazon Redshift Cluster Management Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DeleteClusterSecurityGroup.html AWS API Reference> for DeleteClusterSecurityGroup.
 module Network.AWS.Redshift.DeleteClusterSecurityGroup
     (
     -- * Creating a Request
@@ -78,6 +76,8 @@
         request = postQuery redshift
         response
           = receiveNull DeleteClusterSecurityGroupResponse'
+
+instance Hashable DeleteClusterSecurityGroup
 
 instance ToHeaders DeleteClusterSecurityGroup where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/DeleteClusterSnapshot.hs b/gen/Network/AWS/Redshift/DeleteClusterSnapshot.hs
--- a/gen/Network/AWS/Redshift/DeleteClusterSnapshot.hs
+++ b/gen/Network/AWS/Redshift/DeleteClusterSnapshot.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DeleteClusterSnapshot
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -28,8 +28,6 @@
 -- charged. If other accounts are authorized to access the snapshot, you
 -- must revoke all of the authorizations before you can delete the
 -- snapshot.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DeleteClusterSnapshot.html AWS API Reference> for DeleteClusterSnapshot.
 module Network.AWS.Redshift.DeleteClusterSnapshot
     (
     -- * Creating a Request
@@ -103,6 +101,8 @@
               (\ s h x ->
                  DeleteClusterSnapshotResponse' <$>
                    (x .@? "Snapshot") <*> (pure (fromEnum s)))
+
+instance Hashable DeleteClusterSnapshot
 
 instance ToHeaders DeleteClusterSnapshot where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/DeleteClusterSubnetGroup.hs b/gen/Network/AWS/Redshift/DeleteClusterSubnetGroup.hs
--- a/gen/Network/AWS/Redshift/DeleteClusterSubnetGroup.hs
+++ b/gen/Network/AWS/Redshift/DeleteClusterSubnetGroup.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DeleteClusterSubnetGroup
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Deletes the specified cluster subnet group.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DeleteClusterSubnetGroup.html AWS API Reference> for DeleteClusterSubnetGroup.
 module Network.AWS.Redshift.DeleteClusterSubnetGroup
     (
     -- * Creating a Request
@@ -41,7 +39,9 @@
 import           Network.AWS.Request
 import           Network.AWS.Response
 
--- | /See:/ 'deleteClusterSubnetGroup' smart constructor.
+-- |
+--
+-- /See:/ 'deleteClusterSubnetGroup' smart constructor.
 newtype DeleteClusterSubnetGroup = DeleteClusterSubnetGroup'
     { _dcsgClusterSubnetGroupName :: Text
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
@@ -69,6 +69,8 @@
         request = postQuery redshift
         response
           = receiveNull DeleteClusterSubnetGroupResponse'
+
+instance Hashable DeleteClusterSubnetGroup
 
 instance ToHeaders DeleteClusterSubnetGroup where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/DeleteEventSubscription.hs b/gen/Network/AWS/Redshift/DeleteEventSubscription.hs
--- a/gen/Network/AWS/Redshift/DeleteEventSubscription.hs
+++ b/gen/Network/AWS/Redshift/DeleteEventSubscription.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DeleteEventSubscription
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Deletes an Amazon Redshift event notification subscription.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DeleteEventSubscription.html AWS API Reference> for DeleteEventSubscription.
 module Network.AWS.Redshift.DeleteEventSubscription
     (
     -- * Creating a Request
@@ -72,6 +70,8 @@
         request = postQuery redshift
         response
           = receiveNull DeleteEventSubscriptionResponse'
+
+instance Hashable DeleteEventSubscription
 
 instance ToHeaders DeleteEventSubscription where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/DeleteHSMClientCertificate.hs b/gen/Network/AWS/Redshift/DeleteHSMClientCertificate.hs
--- a/gen/Network/AWS/Redshift/DeleteHSMClientCertificate.hs
+++ b/gen/Network/AWS/Redshift/DeleteHSMClientCertificate.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DeleteHSMClientCertificate
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Deletes the specified HSM client certificate.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DeleteHSMClientCertificate.html AWS API Reference> for DeleteHSMClientCertificate.
 module Network.AWS.Redshift.DeleteHSMClientCertificate
     (
     -- * Creating a Request
@@ -71,6 +69,8 @@
         request = postQuery redshift
         response
           = receiveNull DeleteHSMClientCertificateResponse'
+
+instance Hashable DeleteHSMClientCertificate
 
 instance ToHeaders DeleteHSMClientCertificate where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/DeleteHSMConfiguration.hs b/gen/Network/AWS/Redshift/DeleteHSMConfiguration.hs
--- a/gen/Network/AWS/Redshift/DeleteHSMConfiguration.hs
+++ b/gen/Network/AWS/Redshift/DeleteHSMConfiguration.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DeleteHSMConfiguration
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Deletes the specified Amazon Redshift HSM configuration.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DeleteHSMConfiguration.html AWS API Reference> for DeleteHSMConfiguration.
 module Network.AWS.Redshift.DeleteHSMConfiguration
     (
     -- * Creating a Request
@@ -71,6 +69,8 @@
         request = postQuery redshift
         response
           = receiveNull DeleteHSMConfigurationResponse'
+
+instance Hashable DeleteHSMConfiguration
 
 instance ToHeaders DeleteHSMConfiguration where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/DeleteSnapshotCopyGrant.hs b/gen/Network/AWS/Redshift/DeleteSnapshotCopyGrant.hs
--- a/gen/Network/AWS/Redshift/DeleteSnapshotCopyGrant.hs
+++ b/gen/Network/AWS/Redshift/DeleteSnapshotCopyGrant.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DeleteSnapshotCopyGrant
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Deletes the specified snapshot copy grant.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DeleteSnapshotCopyGrant.html AWS API Reference> for DeleteSnapshotCopyGrant.
 module Network.AWS.Redshift.DeleteSnapshotCopyGrant
     (
     -- * Creating a Request
@@ -71,6 +69,8 @@
         request = postQuery redshift
         response
           = receiveNull DeleteSnapshotCopyGrantResponse'
+
+instance Hashable DeleteSnapshotCopyGrant
 
 instance ToHeaders DeleteSnapshotCopyGrant where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/DeleteTags.hs b/gen/Network/AWS/Redshift/DeleteTags.hs
--- a/gen/Network/AWS/Redshift/DeleteTags.hs
+++ b/gen/Network/AWS/Redshift/DeleteTags.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DeleteTags
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Deletes a tag or tags from a resource. You must provide the ARN of the
 -- resource from which you want to delete the tag or tags.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DeleteTags.html AWS API Reference> for DeleteTags.
 module Network.AWS.Redshift.DeleteTags
     (
     -- * Creating a Request
@@ -80,6 +78,8 @@
         type Rs DeleteTags = DeleteTagsResponse
         request = postQuery redshift
         response = receiveNull DeleteTagsResponse'
+
+instance Hashable DeleteTags
 
 instance ToHeaders DeleteTags where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/DescribeClusterParameterGroups.hs b/gen/Network/AWS/Redshift/DescribeClusterParameterGroups.hs
--- a/gen/Network/AWS/Redshift/DescribeClusterParameterGroups.hs
+++ b/gen/Network/AWS/Redshift/DescribeClusterParameterGroups.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DescribeClusterParameterGroups
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -38,8 +38,6 @@
 -- groups are returned regardless of whether they have tag keys or values
 -- associated with them.
 --
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeClusterParameterGroups.html AWS API Reference> for DescribeClusterParameterGroups.
---
 -- This operation returns paginated results.
 module Network.AWS.Redshift.DescribeClusterParameterGroups
     (
@@ -127,7 +125,7 @@
 
 -- | An optional parameter that specifies the starting point to return a set
 -- of response records. When the results of a
--- DescribeClusterParameterGroups request exceed the value specified in
+-- < DescribeClusterParameterGroups> request exceed the value specified in
 -- 'MaxRecords', AWS returns a value in the 'Marker' field of the response.
 -- You can retrieve the next set of response records by providing the
 -- returned marker value in the 'Marker' parameter and retrying the
@@ -176,6 +174,8 @@
                         may (parseXMLList "ClusterParameterGroup"))
                      <*> (pure (fromEnum s)))
 
+instance Hashable DescribeClusterParameterGroups
+
 instance ToHeaders DescribeClusterParameterGroups
          where
         toHeaders = const mempty
@@ -197,7 +197,7 @@
                "MaxRecords" =: _dcpgMaxRecords,
                "ParameterGroupName" =: _dcpgParameterGroupName]
 
--- | Contains the output from the DescribeClusterParameterGroups action.
+-- | Contains the output from the < DescribeClusterParameterGroups> action.
 --
 -- /See:/ 'describeClusterParameterGroupsResponse' smart constructor.
 data DescribeClusterParameterGroupsResponse = DescribeClusterParameterGroupsResponse'
@@ -234,8 +234,8 @@
 dcpgrsMarker :: Lens' DescribeClusterParameterGroupsResponse (Maybe Text)
 dcpgrsMarker = lens _dcpgrsMarker (\ s a -> s{_dcpgrsMarker = a});
 
--- | A list of ClusterParameterGroup instances. Each instance describes one
--- cluster parameter group.
+-- | A list of < ClusterParameterGroup> instances. Each instance describes
+-- one cluster parameter group.
 dcpgrsParameterGroups :: Lens' DescribeClusterParameterGroupsResponse [ClusterParameterGroup]
 dcpgrsParameterGroups = lens _dcpgrsParameterGroups (\ s a -> s{_dcpgrsParameterGroups = a}) . _Default . _Coerce;
 
diff --git a/gen/Network/AWS/Redshift/DescribeClusterParameters.hs b/gen/Network/AWS/Redshift/DescribeClusterParameters.hs
--- a/gen/Network/AWS/Redshift/DescribeClusterParameters.hs
+++ b/gen/Network/AWS/Redshift/DescribeClusterParameters.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DescribeClusterParameters
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -25,15 +25,13 @@
 --
 -- You can specify /source/ filter to retrieve parameters of only specific
 -- type. For example, to retrieve parameters that were modified by a user
--- action such as from ModifyClusterParameterGroup, you can specify
+-- action such as from < ModifyClusterParameterGroup>, you can specify
 -- /source/ equal to /user/.
 --
 -- For more information about parameters and parameter groups, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html Amazon Redshift Parameter Groups>
 -- in the /Amazon Redshift Cluster Management Guide/.
 --
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeClusterParameters.html AWS API Reference> for DescribeClusterParameters.
---
 -- This operation returns paginated results.
 module Network.AWS.Redshift.DescribeClusterParameters
     (
@@ -94,7 +92,7 @@
     }
 
 -- | An optional parameter that specifies the starting point to return a set
--- of response records. When the results of a DescribeClusterParameters
+-- of response records. When the results of a < DescribeClusterParameters>
 -- request exceed the value specified in 'MaxRecords', AWS returns a value
 -- in the 'Marker' field of the response. You can retrieve the next set of
 -- response records by providing the returned marker value in the 'Marker'
@@ -148,6 +146,8 @@
                         may (parseXMLList "Parameter"))
                      <*> (pure (fromEnum s)))
 
+instance Hashable DescribeClusterParameters
+
 instance ToHeaders DescribeClusterParameters where
         toHeaders = const mempty
 
@@ -165,7 +165,7 @@
                "Source" =: _dcpsSource,
                "ParameterGroupName" =: _dcpsParameterGroupName]
 
--- | Contains the output from the DescribeClusterParameters action.
+-- | Contains the output from the < DescribeClusterParameters> action.
 --
 -- /See:/ 'describeClusterParametersResponse' smart constructor.
 data DescribeClusterParametersResponse = DescribeClusterParametersResponse'
@@ -202,8 +202,8 @@
 dcprsMarker :: Lens' DescribeClusterParametersResponse (Maybe Text)
 dcprsMarker = lens _dcprsMarker (\ s a -> s{_dcprsMarker = a});
 
--- | A list of Parameter instances. Each instance lists the parameters of one
--- cluster parameter group.
+-- | A list of < Parameter> instances. Each instance lists the parameters of
+-- one cluster parameter group.
 dcprsParameters :: Lens' DescribeClusterParametersResponse [Parameter]
 dcprsParameters = lens _dcprsParameters (\ s a -> s{_dcprsParameters = a}) . _Default . _Coerce;
 
diff --git a/gen/Network/AWS/Redshift/DescribeClusterSecurityGroups.hs b/gen/Network/AWS/Redshift/DescribeClusterSecurityGroups.hs
--- a/gen/Network/AWS/Redshift/DescribeClusterSecurityGroups.hs
+++ b/gen/Network/AWS/Redshift/DescribeClusterSecurityGroups.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DescribeClusterSecurityGroups
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -36,8 +36,6 @@
 -- groups are returned regardless of whether they have tag keys or values
 -- associated with them.
 --
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeClusterSecurityGroups.html AWS API Reference> for DescribeClusterSecurityGroups.
---
 -- This operation returns paginated results.
 module Network.AWS.Redshift.DescribeClusterSecurityGroups
     (
@@ -68,7 +66,7 @@
 import           Network.AWS.Request
 import           Network.AWS.Response
 
--- | ???
+-- |
 --
 -- /See:/ 'describeClusterSecurityGroups' smart constructor.
 data DescribeClusterSecurityGroups = DescribeClusterSecurityGroups'
@@ -131,11 +129,12 @@
 dcsgClusterSecurityGroupName = lens _dcsgClusterSecurityGroupName (\ s a -> s{_dcsgClusterSecurityGroupName = a});
 
 -- | An optional parameter that specifies the starting point to return a set
--- of response records. When the results of a DescribeClusterSecurityGroups
--- request exceed the value specified in 'MaxRecords', AWS returns a value
--- in the 'Marker' field of the response. You can retrieve the next set of
--- response records by providing the returned marker value in the 'Marker'
--- parameter and retrying the request.
+-- of response records. When the results of a
+-- < DescribeClusterSecurityGroups> request exceed the value specified in
+-- 'MaxRecords', AWS returns a value in the 'Marker' field of the response.
+-- You can retrieve the next set of response records by providing the
+-- returned marker value in the 'Marker' parameter and retrying the
+-- request.
 --
 -- Constraints: You can specify either the __ClusterSecurityGroupName__
 -- parameter or the __Marker__ parameter, but not both.
@@ -176,6 +175,8 @@
                      <*> (x .@? "Marker")
                      <*> (pure (fromEnum s)))
 
+instance Hashable DescribeClusterSecurityGroups
+
 instance ToHeaders DescribeClusterSecurityGroups
          where
         toHeaders = const mempty
@@ -198,7 +199,7 @@
                "Marker" =: _dcsgMarker,
                "MaxRecords" =: _dcsgMaxRecords]
 
--- | Contains the output from the DescribeClusterSecurityGroups action.
+-- |
 --
 -- /See:/ 'describeClusterSecurityGroupsResponse' smart constructor.
 data DescribeClusterSecurityGroupsResponse = DescribeClusterSecurityGroupsResponse'
@@ -226,7 +227,7 @@
     , _dcsgsrsResponseStatus = pResponseStatus_
     }
 
--- | A list of ClusterSecurityGroup instances.
+-- | A list of < ClusterSecurityGroup> instances.
 dcsgsrsClusterSecurityGroups :: Lens' DescribeClusterSecurityGroupsResponse [ClusterSecurityGroup]
 dcsgsrsClusterSecurityGroups = lens _dcsgsrsClusterSecurityGroups (\ s a -> s{_dcsgsrsClusterSecurityGroups = a}) . _Default . _Coerce;
 
diff --git a/gen/Network/AWS/Redshift/DescribeClusterSnapshots.hs b/gen/Network/AWS/Redshift/DescribeClusterSnapshots.hs
--- a/gen/Network/AWS/Redshift/DescribeClusterSnapshots.hs
+++ b/gen/Network/AWS/Redshift/DescribeClusterSnapshots.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DescribeClusterSnapshots
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -36,8 +36,6 @@
 -- returned regardless of whether they have tag keys or values associated
 -- with them.
 --
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeClusterSnapshots.html AWS API Reference> for DescribeClusterSnapshots.
---
 -- This operation returns paginated results.
 module Network.AWS.Redshift.DescribeClusterSnapshots
     (
@@ -173,7 +171,7 @@
 dSnapshotType = lens _dSnapshotType (\ s a -> s{_dSnapshotType = a});
 
 -- | An optional parameter that specifies the starting point to return a set
--- of response records. When the results of a DescribeClusterSnapshots
+-- of response records. When the results of a < DescribeClusterSnapshots>
 -- request exceed the value specified in 'MaxRecords', AWS returns a value
 -- in the 'Marker' field of the response. You can retrieve the next set of
 -- response records by providing the returned marker value in the 'Marker'
@@ -229,6 +227,8 @@
                      <*> (x .@? "Marker")
                      <*> (pure (fromEnum s)))
 
+instance Hashable DescribeClusterSnapshots
+
 instance ToHeaders DescribeClusterSnapshots where
         toHeaders = const mempty
 
@@ -253,7 +253,7 @@
                "EndTime" =: _dEndTime,
                "OwnerAccount" =: _dOwnerAccount]
 
--- | Contains the output from the DescribeClusterSnapshots action.
+-- | Contains the output from the < DescribeClusterSnapshots> action.
 --
 -- /See:/ 'describeClusterSnapshotsResponse' smart constructor.
 data DescribeClusterSnapshotsResponse = DescribeClusterSnapshotsResponse'
@@ -281,7 +281,7 @@
     , _dcssrsResponseStatus = pResponseStatus_
     }
 
--- | A list of Snapshot instances.
+-- | A list of < Snapshot> instances.
 dcssrsSnapshots :: Lens' DescribeClusterSnapshotsResponse [Snapshot]
 dcssrsSnapshots = lens _dcssrsSnapshots (\ s a -> s{_dcssrsSnapshots = a}) . _Default . _Coerce;
 
diff --git a/gen/Network/AWS/Redshift/DescribeClusterSubnetGroups.hs b/gen/Network/AWS/Redshift/DescribeClusterSubnetGroups.hs
--- a/gen/Network/AWS/Redshift/DescribeClusterSubnetGroups.hs
+++ b/gen/Network/AWS/Redshift/DescribeClusterSubnetGroups.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DescribeClusterSubnetGroups
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -33,8 +33,6 @@
 -- are returned regardless of whether they have tag keys or values
 -- associated with them.
 --
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeClusterSubnetGroups.html AWS API Reference> for DescribeClusterSubnetGroups.
---
 -- This operation returns paginated results.
 module Network.AWS.Redshift.DescribeClusterSubnetGroups
     (
@@ -124,11 +122,12 @@
 dcsgsClusterSubnetGroupName = lens _dcsgsClusterSubnetGroupName (\ s a -> s{_dcsgsClusterSubnetGroupName = a});
 
 -- | An optional parameter that specifies the starting point to return a set
--- of response records. When the results of a DescribeClusterSubnetGroups
--- request exceed the value specified in 'MaxRecords', AWS returns a value
--- in the 'Marker' field of the response. You can retrieve the next set of
--- response records by providing the returned marker value in the 'Marker'
--- parameter and retrying the request.
+-- of response records. When the results of a
+-- < DescribeClusterSubnetGroups> request exceed the value specified in
+-- 'MaxRecords', AWS returns a value in the 'Marker' field of the response.
+-- You can retrieve the next set of response records by providing the
+-- returned marker value in the 'Marker' parameter and retrying the
+-- request.
 dcsgsMarker :: Lens' DescribeClusterSubnetGroups (Maybe Text)
 dcsgsMarker = lens _dcsgsMarker (\ s a -> s{_dcsgsMarker = a});
 
@@ -165,6 +164,8 @@
                      <*> (x .@? "Marker")
                      <*> (pure (fromEnum s)))
 
+instance Hashable DescribeClusterSubnetGroups
+
 instance ToHeaders DescribeClusterSubnetGroups where
         toHeaders = const mempty
 
@@ -186,7 +187,7 @@
                "Marker" =: _dcsgsMarker,
                "MaxRecords" =: _dcsgsMaxRecords]
 
--- | Contains the output from the DescribeClusterSubnetGroups action.
+-- | Contains the output from the < DescribeClusterSubnetGroups> action.
 --
 -- /See:/ 'describeClusterSubnetGroupsResponse' smart constructor.
 data DescribeClusterSubnetGroupsResponse = DescribeClusterSubnetGroupsResponse'
@@ -214,7 +215,7 @@
     , _dcsgrsResponseStatus = pResponseStatus_
     }
 
--- | A list of ClusterSubnetGroup instances.
+-- | A list of < ClusterSubnetGroup> instances.
 dcsgrsClusterSubnetGroups :: Lens' DescribeClusterSubnetGroupsResponse [ClusterSubnetGroup]
 dcsgrsClusterSubnetGroups = lens _dcsgrsClusterSubnetGroups (\ s a -> s{_dcsgrsClusterSubnetGroups = a}) . _Default . _Coerce;
 
diff --git a/gen/Network/AWS/Redshift/DescribeClusterVersions.hs b/gen/Network/AWS/Redshift/DescribeClusterVersions.hs
--- a/gen/Network/AWS/Redshift/DescribeClusterVersions.hs
+++ b/gen/Network/AWS/Redshift/DescribeClusterVersions.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DescribeClusterVersions
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -25,8 +25,6 @@
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html Amazon Redshift Clusters>
 -- in the /Amazon Redshift Cluster Management Guide/
 --
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeClusterVersions.html AWS API Reference> for DescribeClusterVersions.
---
 -- This operation returns paginated results.
 module Network.AWS.Redshift.DescribeClusterVersions
     (
@@ -56,7 +54,9 @@
 import           Network.AWS.Request
 import           Network.AWS.Response
 
--- | /See:/ 'describeClusterVersions' smart constructor.
+-- |
+--
+-- /See:/ 'describeClusterVersions' smart constructor.
 data DescribeClusterVersions = DescribeClusterVersions'
     { _dcvClusterParameterGroupFamily :: !(Maybe Text)
     , _dcvMarker                      :: !(Maybe Text)
@@ -97,7 +97,7 @@
 dcvClusterParameterGroupFamily = lens _dcvClusterParameterGroupFamily (\ s a -> s{_dcvClusterParameterGroupFamily = a});
 
 -- | An optional parameter that specifies the starting point to return a set
--- of response records. When the results of a DescribeClusterVersions
+-- of response records. When the results of a < DescribeClusterVersions>
 -- request exceed the value specified in 'MaxRecords', AWS returns a value
 -- in the 'Marker' field of the response. You can retrieve the next set of
 -- response records by providing the returned marker value in the 'Marker'
@@ -143,6 +143,8 @@
                      <*> (x .@? "Marker")
                      <*> (pure (fromEnum s)))
 
+instance Hashable DescribeClusterVersions
+
 instance ToHeaders DescribeClusterVersions where
         toHeaders = const mempty
 
@@ -161,7 +163,7 @@
                "MaxRecords" =: _dcvMaxRecords,
                "ClusterVersion" =: _dcvClusterVersion]
 
--- | Contains the output from the DescribeClusterVersions action.
+-- | Contains the output from the < DescribeClusterVersions> action.
 --
 -- /See:/ 'describeClusterVersionsResponse' smart constructor.
 data DescribeClusterVersionsResponse = DescribeClusterVersionsResponse'
diff --git a/gen/Network/AWS/Redshift/DescribeClusters.hs b/gen/Network/AWS/Redshift/DescribeClusters.hs
--- a/gen/Network/AWS/Redshift/DescribeClusters.hs
+++ b/gen/Network/AWS/Redshift/DescribeClusters.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DescribeClusters
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -35,8 +35,6 @@
 -- returned regardless of whether they have tag keys or values associated
 -- with them.
 --
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeClusters.html AWS API Reference> for DescribeClusters.
---
 -- This operation returns paginated results.
 module Network.AWS.Redshift.DescribeClusters
     (
@@ -128,7 +126,7 @@
 dcClusterIdentifier = lens _dcClusterIdentifier (\ s a -> s{_dcClusterIdentifier = a});
 
 -- | An optional parameter that specifies the starting point to return a set
--- of response records. When the results of a DescribeClusters request
+-- of response records. When the results of a < DescribeClusters> request
 -- exceed the value specified in 'MaxRecords', AWS returns a value in the
 -- 'Marker' field of the response. You can retrieve the next set of
 -- response records by providing the returned marker value in the 'Marker'
@@ -170,6 +168,8 @@
                         may (parseXMLList "Cluster"))
                      <*> (pure (fromEnum s)))
 
+instance Hashable DescribeClusters
+
 instance ToHeaders DescribeClusters where
         toHeaders = const mempty
 
@@ -188,7 +188,7 @@
                "ClusterIdentifier" =: _dcClusterIdentifier,
                "Marker" =: _dcMarker, "MaxRecords" =: _dcMaxRecords]
 
--- | Contains the output from the DescribeClusters action.
+-- | Contains the output from the < DescribeClusters> action.
 --
 -- /See:/ 'describeClustersResponse' smart constructor.
 data DescribeClustersResponse = DescribeClustersResponse'
@@ -225,7 +225,7 @@
 dcrsMarker :: Lens' DescribeClustersResponse (Maybe Text)
 dcrsMarker = lens _dcrsMarker (\ s a -> s{_dcrsMarker = a});
 
--- | A list of Cluster objects, where each object describes one cluster.
+-- | A list of 'Cluster' objects, where each object describes one cluster.
 dcrsClusters :: Lens' DescribeClustersResponse [Cluster]
 dcrsClusters = lens _dcrsClusters (\ s a -> s{_dcrsClusters = a}) . _Default . _Coerce;
 
diff --git a/gen/Network/AWS/Redshift/DescribeDefaultClusterParameters.hs b/gen/Network/AWS/Redshift/DescribeDefaultClusterParameters.hs
--- a/gen/Network/AWS/Redshift/DescribeDefaultClusterParameters.hs
+++ b/gen/Network/AWS/Redshift/DescribeDefaultClusterParameters.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DescribeDefaultClusterParameters
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -25,8 +25,6 @@
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html Amazon Redshift Parameter Groups>
 -- in the /Amazon Redshift Cluster Management Guide/.
 --
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeDefaultClusterParameters.html AWS API Reference> for DescribeDefaultClusterParameters.
---
 -- This operation returns paginated results.
 module Network.AWS.Redshift.DescribeDefaultClusterParameters
     (
@@ -84,10 +82,10 @@
 
 -- | An optional parameter that specifies the starting point to return a set
 -- of response records. When the results of a
--- DescribeDefaultClusterParameters request exceed the value specified in
--- 'MaxRecords', AWS returns a value in the 'Marker' field of the response.
--- You can retrieve the next set of response records by providing the
--- returned marker value in the 'Marker' parameter and retrying the
+-- < DescribeDefaultClusterParameters> request exceed the value specified
+-- in 'MaxRecords', AWS returns a value in the 'Marker' field of the
+-- response. You can retrieve the next set of response records by providing
+-- the returned marker value in the 'Marker' parameter and retrying the
 -- request.
 ddcpMarker :: Lens' DescribeDefaultClusterParameters (Maybe Text)
 ddcpMarker = lens _ddcpMarker (\ s a -> s{_ddcpMarker = a});
@@ -137,6 +135,8 @@
                  DescribeDefaultClusterParametersResponse' <$>
                    (pure (fromEnum s)) <*>
                      (x .@ "DefaultClusterParameters"))
+
+instance Hashable DescribeDefaultClusterParameters
 
 instance ToHeaders DescribeDefaultClusterParameters
          where
diff --git a/gen/Network/AWS/Redshift/DescribeEventCategories.hs b/gen/Network/AWS/Redshift/DescribeEventCategories.hs
--- a/gen/Network/AWS/Redshift/DescribeEventCategories.hs
+++ b/gen/Network/AWS/Redshift/DescribeEventCategories.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DescribeEventCategories
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -22,8 +22,6 @@
 -- specified source type. For a list of the event categories and source
 -- types, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-event-notifications.html Amazon Redshift Event Notifications>.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeEventCategories.html AWS API Reference> for DescribeEventCategories.
 module Network.AWS.Redshift.DescribeEventCategories
     (
     -- * Creating a Request
@@ -69,7 +67,8 @@
 -- | The source type, such as cluster or parameter group, to which the
 -- described event categories apply.
 --
--- Valid values: cluster, snapshot, parameter group, and security group.
+-- Valid values: cluster, cluster-snapshot, cluster-parameter-group, and
+-- cluster-security-group.
 decSourceType :: Lens' DescribeEventCategories (Maybe Text)
 decSourceType = lens _decSourceType (\ s a -> s{_decSourceType = a});
 
@@ -84,6 +83,8 @@
                    (x .@? "EventCategoriesMapList" .!@ mempty >>=
                       may (parseXMLList "EventCategoriesMap"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeEventCategories
 
 instance ToHeaders DescribeEventCategories where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/DescribeEventSubscriptions.hs b/gen/Network/AWS/Redshift/DescribeEventSubscriptions.hs
--- a/gen/Network/AWS/Redshift/DescribeEventSubscriptions.hs
+++ b/gen/Network/AWS/Redshift/DescribeEventSubscriptions.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DescribeEventSubscriptions
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -22,8 +22,6 @@
 -- subscription for a customer account. If you specify a subscription name,
 -- lists the description for that subscription.
 --
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeEventSubscriptions.html AWS API Reference> for DescribeEventSubscriptions.
---
 -- This operation returns paginated results.
 module Network.AWS.Redshift.DescribeEventSubscriptions
     (
@@ -85,7 +83,7 @@
 dessSubscriptionName = lens _dessSubscriptionName (\ s a -> s{_dessSubscriptionName = a});
 
 -- | An optional parameter that specifies the starting point to return a set
--- of response records. When the results of a DescribeEventSubscriptions
+-- of response records. When the results of a < DescribeEventSubscriptions>
 -- request exceed the value specified in 'MaxRecords', AWS returns a value
 -- in the 'Marker' field of the response. You can retrieve the next set of
 -- response records by providing the returned marker value in the 'Marker'
@@ -125,6 +123,8 @@
                       may (parseXMLList "EventSubscription"))
                      <*> (x .@? "Marker")
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeEventSubscriptions
 
 instance ToHeaders DescribeEventSubscriptions where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/DescribeEvents.hs b/gen/Network/AWS/Redshift/DescribeEvents.hs
--- a/gen/Network/AWS/Redshift/DescribeEvents.hs
+++ b/gen/Network/AWS/Redshift/DescribeEvents.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DescribeEvents
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -24,8 +24,6 @@
 -- providing the name as a parameter. By default, the past hour of events
 -- are returned.
 --
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeEvents.html AWS API Reference> for DescribeEvents.
---
 -- This operation returns paginated results.
 module Network.AWS.Redshift.DescribeEvents
     (
@@ -145,11 +143,11 @@
 deSourceIdentifier = lens _deSourceIdentifier (\ s a -> s{_deSourceIdentifier = a});
 
 -- | An optional parameter that specifies the starting point to return a set
--- of response records. When the results of a DescribeEvents request exceed
--- the value specified in 'MaxRecords', AWS returns a value in the 'Marker'
--- field of the response. You can retrieve the next set of response records
--- by providing the returned marker value in the 'Marker' parameter and
--- retrying the request.
+-- of response records. When the results of a < DescribeEvents> request
+-- exceed the value specified in 'MaxRecords', AWS returns a value in the
+-- 'Marker' field of the response. You can retrieve the next set of
+-- response records by providing the returned marker value in the 'Marker'
+-- parameter and retrying the request.
 deMarker :: Lens' DescribeEvents (Maybe Text)
 deMarker = lens _deMarker (\ s a -> s{_deMarker = a});
 
@@ -201,6 +199,8 @@
                      <*> (x .@? "Marker")
                      <*> (pure (fromEnum s)))
 
+instance Hashable DescribeEvents
+
 instance ToHeaders DescribeEvents where
         toHeaders = const mempty
 
@@ -218,7 +218,7 @@
                "Marker" =: _deMarker, "MaxRecords" =: _deMaxRecords,
                "EndTime" =: _deEndTime, "Duration" =: _deDuration]
 
--- | Contains the output from the DescribeEvents action.
+-- |
 --
 -- /See:/ 'describeEventsResponse' smart constructor.
 data DescribeEventsResponse = DescribeEventsResponse'
@@ -246,7 +246,7 @@
     , _dersResponseStatus = pResponseStatus_
     }
 
--- | A list of Event instances.
+-- | A list of 'Event' instances.
 dersEvents :: Lens' DescribeEventsResponse [Event]
 dersEvents = lens _dersEvents (\ s a -> s{_dersEvents = a}) . _Default . _Coerce;
 
diff --git a/gen/Network/AWS/Redshift/DescribeHSMClientCertificates.hs b/gen/Network/AWS/Redshift/DescribeHSMClientCertificates.hs
--- a/gen/Network/AWS/Redshift/DescribeHSMClientCertificates.hs
+++ b/gen/Network/AWS/Redshift/DescribeHSMClientCertificates.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DescribeHSMClientCertificates
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -33,8 +33,6 @@
 -- certificates are returned regardless of whether they have tag keys or
 -- values associated with them.
 --
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeHSMClientCertificates.html AWS API Reference> for DescribeHSMClientCertificates.
---
 -- This operation returns paginated results.
 module Network.AWS.Redshift.DescribeHSMClientCertificates
     (
@@ -127,11 +125,12 @@
 dhccHSMClientCertificateIdentifier = lens _dhccHSMClientCertificateIdentifier (\ s a -> s{_dhccHSMClientCertificateIdentifier = a});
 
 -- | An optional parameter that specifies the starting point to return a set
--- of response records. When the results of a DescribeHsmClientCertificates
--- request exceed the value specified in 'MaxRecords', AWS returns a value
--- in the 'Marker' field of the response. You can retrieve the next set of
--- response records by providing the returned marker value in the 'Marker'
--- parameter and retrying the request.
+-- of response records. When the results of a
+-- < DescribeHsmClientCertificates> request exceed the value specified in
+-- 'MaxRecords', AWS returns a value in the 'Marker' field of the response.
+-- You can retrieve the next set of response records by providing the
+-- returned marker value in the 'Marker' parameter and retrying the
+-- request.
 dhccMarker :: Lens' DescribeHSMClientCertificates (Maybe Text)
 dhccMarker = lens _dhccMarker (\ s a -> s{_dhccMarker = a});
 
@@ -168,6 +167,8 @@
                      (x .@? "HsmClientCertificates" .!@ mempty >>=
                         may (parseXMLList "HsmClientCertificate"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeHSMClientCertificates
 
 instance ToHeaders DescribeHSMClientCertificates
          where
diff --git a/gen/Network/AWS/Redshift/DescribeHSMConfigurations.hs b/gen/Network/AWS/Redshift/DescribeHSMConfigurations.hs
--- a/gen/Network/AWS/Redshift/DescribeHSMConfigurations.hs
+++ b/gen/Network/AWS/Redshift/DescribeHSMConfigurations.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DescribeHSMConfigurations
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -32,8 +32,6 @@
 -- connections are returned regardless of whether they have tag keys or
 -- values associated with them.
 --
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeHSMConfigurations.html AWS API Reference> for DescribeHSMConfigurations.
---
 -- This operation returns paginated results.
 module Network.AWS.Redshift.DescribeHSMConfigurations
     (
@@ -126,7 +124,7 @@
 dhsmcTagKeys = lens _dhsmcTagKeys (\ s a -> s{_dhsmcTagKeys = a}) . _Default . _Coerce;
 
 -- | An optional parameter that specifies the starting point to return a set
--- of response records. When the results of a DescribeHsmConfigurations
+-- of response records. When the results of a < DescribeHsmConfigurations>
 -- request exceed the value specified in 'MaxRecords', AWS returns a value
 -- in the 'Marker' field of the response. You can retrieve the next set of
 -- response records by providing the returned marker value in the 'Marker'
@@ -166,6 +164,8 @@
                         may (parseXMLList "HsmConfiguration"))
                      <*> (pure (fromEnum s)))
 
+instance Hashable DescribeHSMConfigurations
+
 instance ToHeaders DescribeHSMConfigurations where
         toHeaders = const mempty
 
@@ -224,7 +224,7 @@
 dhcrsMarker :: Lens' DescribeHSMConfigurationsResponse (Maybe Text)
 dhcrsMarker = lens _dhcrsMarker (\ s a -> s{_dhcrsMarker = a});
 
--- | A list of Amazon Redshift HSM configurations.
+-- | A list of 'HsmConfiguration' objects.
 dhcrsHSMConfigurations :: Lens' DescribeHSMConfigurationsResponse [HSMConfiguration]
 dhcrsHSMConfigurations = lens _dhcrsHSMConfigurations (\ s a -> s{_dhcrsHSMConfigurations = a}) . _Default . _Coerce;
 
diff --git a/gen/Network/AWS/Redshift/DescribeLoggingStatus.hs b/gen/Network/AWS/Redshift/DescribeLoggingStatus.hs
--- a/gen/Network/AWS/Redshift/DescribeLoggingStatus.hs
+++ b/gen/Network/AWS/Redshift/DescribeLoggingStatus.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DescribeLoggingStatus
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Describes whether information, such as queries and connection attempts,
 -- is being logged for the specified Amazon Redshift cluster.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeLoggingStatus.html AWS API Reference> for DescribeLoggingStatus.
 module Network.AWS.Redshift.DescribeLoggingStatus
     (
     -- * Creating a Request
@@ -69,7 +67,7 @@
     { _dlsClusterIdentifier = pClusterIdentifier_
     }
 
--- | The identifier of the cluster to get the logging status from.
+-- | The identifier of the cluster from which to get the logging status.
 --
 -- Example: 'examplecluster'
 dlsClusterIdentifier :: Lens' DescribeLoggingStatus Text
@@ -81,6 +79,8 @@
         response
           = receiveXMLWrapper "DescribeLoggingStatusResult"
               (\ s h x -> parseXML x)
+
+instance Hashable DescribeLoggingStatus
 
 instance ToHeaders DescribeLoggingStatus where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/DescribeOrderableClusterOptions.hs b/gen/Network/AWS/Redshift/DescribeOrderableClusterOptions.hs
--- a/gen/Network/AWS/Redshift/DescribeOrderableClusterOptions.hs
+++ b/gen/Network/AWS/Redshift/DescribeOrderableClusterOptions.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DescribeOrderableClusterOptions
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -29,8 +29,6 @@
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html Amazon Redshift Clusters>
 -- in the /Amazon Redshift Cluster Management Guide/
 --
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeOrderableClusterOptions.html AWS API Reference> for DescribeOrderableClusterOptions.
---
 -- This operation returns paginated results.
 module Network.AWS.Redshift.DescribeOrderableClusterOptions
     (
@@ -93,7 +91,7 @@
 
 -- | An optional parameter that specifies the starting point to return a set
 -- of response records. When the results of a
--- DescribeOrderableClusterOptions request exceed the value specified in
+-- < DescribeOrderableClusterOptions> request exceed the value specified in
 -- 'MaxRecords', AWS returns a value in the 'Marker' field of the response.
 -- You can retrieve the next set of response records by providing the
 -- returned marker value in the 'Marker' parameter and retrying the
@@ -119,7 +117,7 @@
 -- Default: All versions.
 --
 -- Constraints: Must be one of the version returned from
--- DescribeClusterVersions.
+-- < DescribeClusterVersions>.
 docoClusterVersion :: Lens' DescribeOrderableClusterOptions (Maybe Text)
 docoClusterVersion = lens _docoClusterVersion (\ s a -> s{_docoClusterVersion = a});
 
@@ -152,6 +150,8 @@
                         may (parseXMLList "OrderableClusterOption"))
                      <*> (pure (fromEnum s)))
 
+instance Hashable DescribeOrderableClusterOptions
+
 instance ToHeaders DescribeOrderableClusterOptions
          where
         toHeaders = const mempty
@@ -171,7 +171,7 @@
                "ClusterVersion" =: _docoClusterVersion,
                "NodeType" =: _docoNodeType]
 
--- | Contains the output from the DescribeOrderableClusterOptions action.
+-- | Contains the output from the < DescribeOrderableClusterOptions> action.
 --
 -- /See:/ 'describeOrderableClusterOptionsResponse' smart constructor.
 data DescribeOrderableClusterOptionsResponse = DescribeOrderableClusterOptionsResponse'
@@ -208,8 +208,8 @@
 docorsMarker :: Lens' DescribeOrderableClusterOptionsResponse (Maybe Text)
 docorsMarker = lens _docorsMarker (\ s a -> s{_docorsMarker = a});
 
--- | An OrderableClusterOption structure containing information about
--- orderable options for the Cluster.
+-- | An 'OrderableClusterOption' structure containing information about
+-- orderable options for the cluster.
 docorsOrderableClusterOptions :: Lens' DescribeOrderableClusterOptionsResponse [OrderableClusterOption]
 docorsOrderableClusterOptions = lens _docorsOrderableClusterOptions (\ s a -> s{_docorsOrderableClusterOptions = a}) . _Default . _Coerce;
 
diff --git a/gen/Network/AWS/Redshift/DescribeReservedNodeOfferings.hs b/gen/Network/AWS/Redshift/DescribeReservedNodeOfferings.hs
--- a/gen/Network/AWS/Redshift/DescribeReservedNodeOfferings.hs
+++ b/gen/Network/AWS/Redshift/DescribeReservedNodeOfferings.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DescribeReservedNodeOfferings
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,15 +23,13 @@
 -- recurring costs of reserving the node and duration the node will be
 -- reserved for you. These descriptions help you determine which reserve
 -- node offering you want to purchase. You then use the unique offering ID
--- in you call to PurchaseReservedNodeOffering to reserve one or more nodes
--- for your Amazon Redshift cluster.
+-- in you call to < PurchaseReservedNodeOffering> to reserve one or more
+-- nodes for your Amazon Redshift cluster.
 --
 -- For more information about reserved node offerings, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/purchase-reserved-node-instance.html Purchasing Reserved Nodes>
 -- in the /Amazon Redshift Cluster Management Guide/.
 --
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeReservedNodeOfferings.html AWS API Reference> for DescribeReservedNodeOfferings.
---
 -- This operation returns paginated results.
 module Network.AWS.Redshift.DescribeReservedNodeOfferings
     (
@@ -92,11 +90,12 @@
 drnoReservedNodeOfferingId = lens _drnoReservedNodeOfferingId (\ s a -> s{_drnoReservedNodeOfferingId = a});
 
 -- | An optional parameter that specifies the starting point to return a set
--- of response records. When the results of a DescribeReservedNodeOfferings
--- request exceed the value specified in 'MaxRecords', AWS returns a value
--- in the 'Marker' field of the response. You can retrieve the next set of
--- response records by providing the returned marker value in the 'Marker'
--- parameter and retrying the request.
+-- of response records. When the results of a
+-- < DescribeReservedNodeOfferings> request exceed the value specified in
+-- 'MaxRecords', AWS returns a value in the 'Marker' field of the response.
+-- You can retrieve the next set of response records by providing the
+-- returned marker value in the 'Marker' parameter and retrying the
+-- request.
 drnoMarker :: Lens' DescribeReservedNodeOfferings (Maybe Text)
 drnoMarker = lens _drnoMarker (\ s a -> s{_drnoMarker = a});
 
@@ -134,6 +133,8 @@
                      <*> (x .@? "Marker")
                      <*> (pure (fromEnum s)))
 
+instance Hashable DescribeReservedNodeOfferings
+
 instance ToHeaders DescribeReservedNodeOfferings
          where
         toHeaders = const mempty
@@ -152,7 +153,7 @@
                "Marker" =: _drnoMarker,
                "MaxRecords" =: _drnoMaxRecords]
 
--- | Contains the output from the DescribeReservedNodeOfferings action.
+-- |
 --
 -- /See:/ 'describeReservedNodeOfferingsResponse' smart constructor.
 data DescribeReservedNodeOfferingsResponse = DescribeReservedNodeOfferingsResponse'
@@ -180,7 +181,7 @@
     , _drnorsResponseStatus = pResponseStatus_
     }
 
--- | A list of reserved node offerings.
+-- | A list of 'ReservedNodeOffering' objects.
 drnorsReservedNodeOfferings :: Lens' DescribeReservedNodeOfferingsResponse [ReservedNodeOffering]
 drnorsReservedNodeOfferings = lens _drnorsReservedNodeOfferings (\ s a -> s{_drnorsReservedNodeOfferings = a}) . _Default . _Coerce;
 
diff --git a/gen/Network/AWS/Redshift/DescribeReservedNodes.hs b/gen/Network/AWS/Redshift/DescribeReservedNodes.hs
--- a/gen/Network/AWS/Redshift/DescribeReservedNodes.hs
+++ b/gen/Network/AWS/Redshift/DescribeReservedNodes.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DescribeReservedNodes
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Returns the descriptions of the reserved nodes.
 --
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeReservedNodes.html AWS API Reference> for DescribeReservedNodes.
---
 -- This operation returns paginated results.
 module Network.AWS.Redshift.DescribeReservedNodes
     (
@@ -82,9 +80,9 @@
 drnReservedNodeId = lens _drnReservedNodeId (\ s a -> s{_drnReservedNodeId = a});
 
 -- | An optional parameter that specifies the starting point to return a set
--- of response records. When the results of a DescribeReservedNodes request
--- exceed the value specified in 'MaxRecords', AWS returns a value in the
--- 'Marker' field of the response. You can retrieve the next set of
+-- of response records. When the results of a < DescribeReservedNodes>
+-- request exceed the value specified in 'MaxRecords', AWS returns a value
+-- in the 'Marker' field of the response. You can retrieve the next set of
 -- response records by providing the returned marker value in the 'Marker'
 -- parameter and retrying the request.
 drnMarker :: Lens' DescribeReservedNodes (Maybe Text)
@@ -122,6 +120,8 @@
                      <*> (x .@? "Marker")
                      <*> (pure (fromEnum s)))
 
+instance Hashable DescribeReservedNodes
+
 instance ToHeaders DescribeReservedNodes where
         toHeaders = const mempty
 
@@ -137,7 +137,7 @@
                "Marker" =: _drnMarker,
                "MaxRecords" =: _drnMaxRecords]
 
--- | Contains the output from the DescribeReservedNodes action.
+-- |
 --
 -- /See:/ 'describeReservedNodesResponse' smart constructor.
 data DescribeReservedNodesResponse = DescribeReservedNodesResponse'
@@ -165,7 +165,7 @@
     , _drnrsResponseStatus = pResponseStatus_
     }
 
--- | The list of reserved nodes.
+-- | The list of 'ReservedNode' objects.
 drnrsReservedNodes :: Lens' DescribeReservedNodesResponse [ReservedNode]
 drnrsReservedNodes = lens _drnrsReservedNodes (\ s a -> s{_drnrsReservedNodes = a}) . _Default . _Coerce;
 
diff --git a/gen/Network/AWS/Redshift/DescribeResize.hs b/gen/Network/AWS/Redshift/DescribeResize.hs
--- a/gen/Network/AWS/Redshift/DescribeResize.hs
+++ b/gen/Network/AWS/Redshift/DescribeResize.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DescribeResize
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -24,10 +24,8 @@
 -- was initiated and completed, the status of the resize remains as
 -- 'SUCCEEDED' until the next resize.
 --
--- A resize operation can be requested using ModifyCluster and specifying a
--- different number or type of nodes for the cluster.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeResize.html AWS API Reference> for DescribeResize.
+-- A resize operation can be requested using < ModifyCluster> and
+-- specifying a different number or type of nodes for the cluster.
 module Network.AWS.Redshift.DescribeResize
     (
     -- * Creating a Request
@@ -115,6 +113,8 @@
                      <*> (x .@? "TargetClusterType")
                      <*> (x .@? "ElapsedTimeInSeconds")
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeResize
 
 instance ToHeaders DescribeResize where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/DescribeSnapshotCopyGrants.hs b/gen/Network/AWS/Redshift/DescribeSnapshotCopyGrants.hs
--- a/gen/Network/AWS/Redshift/DescribeSnapshotCopyGrants.hs
+++ b/gen/Network/AWS/Redshift/DescribeSnapshotCopyGrants.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DescribeSnapshotCopyGrants
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -24,8 +24,6 @@
 -- For more information about managing snapshot copy grants, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-db-encryption.html Amazon Redshift Database Encryption>
 -- in the /Amazon Redshift Cluster Management Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeSnapshotCopyGrants.html AWS API Reference> for DescribeSnapshotCopyGrants.
 module Network.AWS.Redshift.DescribeSnapshotCopyGrants
     (
     -- * Creating a Request
@@ -149,6 +147,8 @@
                      <*> (x .@? "Marker")
                      <*> (pure (fromEnum s)))
 
+instance Hashable DescribeSnapshotCopyGrants
+
 instance ToHeaders DescribeSnapshotCopyGrants where
         toHeaders = const mempty
 
@@ -170,7 +170,7 @@
                "SnapshotCopyGrantName" =:
                  _dscgsSnapshotCopyGrantName]
 
--- | The result of the snapshot copy grant.
+-- |
 --
 -- /See:/ 'describeSnapshotCopyGrantsResponse' smart constructor.
 data DescribeSnapshotCopyGrantsResponse = DescribeSnapshotCopyGrantsResponse'
@@ -198,7 +198,7 @@
     , _dscgrsResponseStatus = pResponseStatus_
     }
 
--- | The list of snapshot copy grants.
+-- | The list of 'SnapshotCopyGrant' objects.
 dscgrsSnapshotCopyGrants :: Lens' DescribeSnapshotCopyGrantsResponse [SnapshotCopyGrant]
 dscgrsSnapshotCopyGrants = lens _dscgrsSnapshotCopyGrants (\ s a -> s{_dscgrsSnapshotCopyGrants = a}) . _Default . _Coerce;
 
diff --git a/gen/Network/AWS/Redshift/DescribeTableRestoreStatus.hs b/gen/Network/AWS/Redshift/DescribeTableRestoreStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Redshift/DescribeTableRestoreStatus.hs
@@ -0,0 +1,179 @@
+{-# 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.Redshift.DescribeTableRestoreStatus
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the status of one or more table restore requests made using the
+-- < RestoreTableFromClusterSnapshot> API action. If you don\'t specify a
+-- value for the 'TableRestoreRequestId' parameter, then
+-- 'DescribeTableRestoreStatus' returns the status of all in-progress table
+-- restore requests. Otherwise 'DescribeTableRestoreStatus' returns the
+-- status of the table specified by 'TableRestoreRequestId'.
+module Network.AWS.Redshift.DescribeTableRestoreStatus
+    (
+    -- * Creating a Request
+      describeTableRestoreStatus
+    , DescribeTableRestoreStatus
+    -- * Request Lenses
+    , dtrssTableRestoreRequestId
+    , dtrssClusterIdentifier
+    , dtrssMarker
+    , dtrssMaxRecords
+
+    -- * Destructuring the Response
+    , describeTableRestoreStatusResponse
+    , DescribeTableRestoreStatusResponse
+    -- * Response Lenses
+    , dtrsrsMarker
+    , dtrsrsTableRestoreStatusDetails
+    , dtrsrsResponseStatus
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Redshift.Types
+import           Network.AWS.Redshift.Types.Product
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'describeTableRestoreStatus' smart constructor.
+data DescribeTableRestoreStatus = DescribeTableRestoreStatus'
+    { _dtrssTableRestoreRequestId :: !(Maybe Text)
+    , _dtrssClusterIdentifier     :: !(Maybe Text)
+    , _dtrssMarker                :: !(Maybe Text)
+    , _dtrssMaxRecords            :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeTableRestoreStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtrssTableRestoreRequestId'
+--
+-- * 'dtrssClusterIdentifier'
+--
+-- * 'dtrssMarker'
+--
+-- * 'dtrssMaxRecords'
+describeTableRestoreStatus
+    :: DescribeTableRestoreStatus
+describeTableRestoreStatus =
+    DescribeTableRestoreStatus'
+    { _dtrssTableRestoreRequestId = Nothing
+    , _dtrssClusterIdentifier = Nothing
+    , _dtrssMarker = Nothing
+    , _dtrssMaxRecords = Nothing
+    }
+
+-- | The identifier of the table restore request to return status for. If you
+-- don\'t specify a 'TableRestoreRequestId' value, then
+-- 'DescribeTableRestoreStatus' returns the status of all in-progress table
+-- restore requests.
+dtrssTableRestoreRequestId :: Lens' DescribeTableRestoreStatus (Maybe Text)
+dtrssTableRestoreRequestId = lens _dtrssTableRestoreRequestId (\ s a -> s{_dtrssTableRestoreRequestId = a});
+
+-- | The Amazon Redshift cluster that the table is being restored to.
+dtrssClusterIdentifier :: Lens' DescribeTableRestoreStatus (Maybe Text)
+dtrssClusterIdentifier = lens _dtrssClusterIdentifier (\ s a -> s{_dtrssClusterIdentifier = a});
+
+-- | An optional pagination token provided by a previous
+-- 'DescribeTableRestoreStatus' request. If this parameter is specified,
+-- the response includes only records beyond the marker, up to the value
+-- specified by the 'MaxRecords' parameter.
+dtrssMarker :: Lens' DescribeTableRestoreStatus (Maybe Text)
+dtrssMarker = lens _dtrssMarker (\ s a -> s{_dtrssMarker = a});
+
+-- | The maximum number of records to include in the response. If more
+-- records exist than the specified 'MaxRecords' value, a pagination token
+-- called a marker is included in the response so that the remaining
+-- results can be retrieved.
+dtrssMaxRecords :: Lens' DescribeTableRestoreStatus (Maybe Int)
+dtrssMaxRecords = lens _dtrssMaxRecords (\ s a -> s{_dtrssMaxRecords = a});
+
+instance AWSRequest DescribeTableRestoreStatus where
+        type Rs DescribeTableRestoreStatus =
+             DescribeTableRestoreStatusResponse
+        request = postQuery redshift
+        response
+          = receiveXMLWrapper
+              "DescribeTableRestoreStatusResult"
+              (\ s h x ->
+                 DescribeTableRestoreStatusResponse' <$>
+                   (x .@? "Marker") <*>
+                     (x .@? "TableRestoreStatusDetails" .!@ mempty >>=
+                        may (parseXMLList "TableRestoreStatus"))
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeTableRestoreStatus
+
+instance ToHeaders DescribeTableRestoreStatus where
+        toHeaders = const mempty
+
+instance ToPath DescribeTableRestoreStatus where
+        toPath = const "/"
+
+instance ToQuery DescribeTableRestoreStatus where
+        toQuery DescribeTableRestoreStatus'{..}
+          = mconcat
+              ["Action" =:
+                 ("DescribeTableRestoreStatus" :: ByteString),
+               "Version" =: ("2012-12-01" :: ByteString),
+               "TableRestoreRequestId" =:
+                 _dtrssTableRestoreRequestId,
+               "ClusterIdentifier" =: _dtrssClusterIdentifier,
+               "Marker" =: _dtrssMarker,
+               "MaxRecords" =: _dtrssMaxRecords]
+
+-- | /See:/ 'describeTableRestoreStatusResponse' smart constructor.
+data DescribeTableRestoreStatusResponse = DescribeTableRestoreStatusResponse'
+    { _dtrsrsMarker                    :: !(Maybe Text)
+    , _dtrsrsTableRestoreStatusDetails :: !(Maybe [TableRestoreStatus])
+    , _dtrsrsResponseStatus            :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeTableRestoreStatusResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtrsrsMarker'
+--
+-- * 'dtrsrsTableRestoreStatusDetails'
+--
+-- * 'dtrsrsResponseStatus'
+describeTableRestoreStatusResponse
+    :: Int -- ^ 'dtrsrsResponseStatus'
+    -> DescribeTableRestoreStatusResponse
+describeTableRestoreStatusResponse pResponseStatus_ =
+    DescribeTableRestoreStatusResponse'
+    { _dtrsrsMarker = Nothing
+    , _dtrsrsTableRestoreStatusDetails = Nothing
+    , _dtrsrsResponseStatus = pResponseStatus_
+    }
+
+-- | A pagination token that can be used in a subsequent
+-- < DescribeTableRestoreStatus> request.
+dtrsrsMarker :: Lens' DescribeTableRestoreStatusResponse (Maybe Text)
+dtrsrsMarker = lens _dtrsrsMarker (\ s a -> s{_dtrsrsMarker = a});
+
+-- | A list of status details for one or more table restore requests.
+dtrsrsTableRestoreStatusDetails :: Lens' DescribeTableRestoreStatusResponse [TableRestoreStatus]
+dtrsrsTableRestoreStatusDetails = lens _dtrsrsTableRestoreStatusDetails (\ s a -> s{_dtrsrsTableRestoreStatusDetails = a}) . _Default . _Coerce;
+
+-- | The response status code.
+dtrsrsResponseStatus :: Lens' DescribeTableRestoreStatusResponse Int
+dtrsrsResponseStatus = lens _dtrsrsResponseStatus (\ s a -> s{_dtrsrsResponseStatus = a});
diff --git a/gen/Network/AWS/Redshift/DescribeTags.hs b/gen/Network/AWS/Redshift/DescribeTags.hs
--- a/gen/Network/AWS/Redshift/DescribeTags.hs
+++ b/gen/Network/AWS/Redshift/DescribeTags.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DescribeTags
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -40,8 +40,6 @@
 -- If both tag keys and values are omitted from the request, resources are
 -- returned regardless of whether they have tag keys or values associated
 -- with them.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeTags.html AWS API Reference> for DescribeTags.
 module Network.AWS.Redshift.DescribeTags
     (
     -- * Creating a Request
@@ -71,7 +69,7 @@
 import           Network.AWS.Request
 import           Network.AWS.Response
 
--- | Contains the output from the 'DescribeTags' action.
+-- |
 --
 -- /See:/ 'describeTags' smart constructor.
 data DescribeTags = DescribeTags'
@@ -183,6 +181,8 @@
                         may (parseXMLList "TaggedResource"))
                      <*> (pure (fromEnum s)))
 
+instance Hashable DescribeTags
+
 instance ToHeaders DescribeTags where
         toHeaders = const mempty
 
@@ -202,7 +202,7 @@
                  toQuery (toQueryList "TagKey" <$> _dtTagKeys),
                "Marker" =: _dtMarker, "MaxRecords" =: _dtMaxRecords]
 
--- | Contains the output from the 'DescribeTags' action.
+-- |
 --
 -- /See:/ 'describeTagsResponse' smart constructor.
 data DescribeTagsResponse = DescribeTagsResponse'
diff --git a/gen/Network/AWS/Redshift/DisableLogging.hs b/gen/Network/AWS/Redshift/DisableLogging.hs
--- a/gen/Network/AWS/Redshift/DisableLogging.hs
+++ b/gen/Network/AWS/Redshift/DisableLogging.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DisableLogging
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Stops logging information, such as queries and connection attempts, for
 -- the specified Amazon Redshift cluster.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DisableLogging.html AWS API Reference> for DisableLogging.
 module Network.AWS.Redshift.DisableLogging
     (
     -- * Creating a Request
@@ -81,6 +79,8 @@
         response
           = receiveXMLWrapper "DisableLoggingResult"
               (\ s h x -> parseXML x)
+
+instance Hashable DisableLogging
 
 instance ToHeaders DisableLogging where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/DisableSnapshotCopy.hs b/gen/Network/AWS/Redshift/DisableSnapshotCopy.hs
--- a/gen/Network/AWS/Redshift/DisableSnapshotCopy.hs
+++ b/gen/Network/AWS/Redshift/DisableSnapshotCopy.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.DisableSnapshotCopy
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -22,11 +22,9 @@
 -- region for a specified cluster.
 --
 -- If your cluster and its snapshots are encrypted using a customer master
--- key (CMK) from AWS KMS, use DeleteSnapshotCopyGrant to delete the grant
--- that grants Amazon Redshift permission to the CMK in the destination
--- region.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_DisableSnapshotCopy.html AWS API Reference> for DisableSnapshotCopy.
+-- key (CMK) from AWS KMS, use < DeleteSnapshotCopyGrant> to delete the
+-- grant that grants Amazon Redshift permission to the CMK in the
+-- destination region.
 module Network.AWS.Redshift.DisableSnapshotCopy
     (
     -- * Creating a Request
@@ -87,6 +85,8 @@
               (\ s h x ->
                  DisableSnapshotCopyResponse' <$>
                    (x .@? "Cluster") <*> (pure (fromEnum s)))
+
+instance Hashable DisableSnapshotCopy
 
 instance ToHeaders DisableSnapshotCopy where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/EnableLogging.hs b/gen/Network/AWS/Redshift/EnableLogging.hs
--- a/gen/Network/AWS/Redshift/EnableLogging.hs
+++ b/gen/Network/AWS/Redshift/EnableLogging.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.EnableLogging
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Starts logging information, such as queries and connection attempts, for
 -- the specified Amazon Redshift cluster.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_EnableLogging.html AWS API Reference> for EnableLogging.
 module Network.AWS.Redshift.EnableLogging
     (
     -- * Creating a Request
@@ -117,6 +115,8 @@
         response
           = receiveXMLWrapper "EnableLoggingResult"
               (\ s h x -> parseXML x)
+
+instance Hashable EnableLogging
 
 instance ToHeaders EnableLogging where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/EnableSnapshotCopy.hs b/gen/Network/AWS/Redshift/EnableSnapshotCopy.hs
--- a/gen/Network/AWS/Redshift/EnableSnapshotCopy.hs
+++ b/gen/Network/AWS/Redshift/EnableSnapshotCopy.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.EnableSnapshotCopy
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Enables the automatic copy of snapshots from one region to another
 -- region for a specified cluster.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_EnableSnapshotCopy.html AWS API Reference> for EnableSnapshotCopy.
 module Network.AWS.Redshift.EnableSnapshotCopy
     (
     -- * Creating a Request
@@ -120,6 +118,8 @@
               (\ s h x ->
                  EnableSnapshotCopyResponse' <$>
                    (x .@? "Cluster") <*> (pure (fromEnum s)))
+
+instance Hashable EnableSnapshotCopy
 
 instance ToHeaders EnableSnapshotCopy where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/ModifyCluster.hs b/gen/Network/AWS/Redshift/ModifyCluster.hs
--- a/gen/Network/AWS/Redshift/ModifyCluster.hs
+++ b/gen/Network/AWS/Redshift/ModifyCluster.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.ModifyCluster
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -32,8 +32,6 @@
 -- down the cluster. When resizing a cluster, you must specify both the
 -- number of nodes and the node type even if one of the parameters does not
 -- change.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_ModifyCluster.html AWS API Reference> for ModifyCluster.
 module Network.AWS.Redshift.ModifyCluster
     (
     -- * Creating a Request
@@ -41,11 +39,13 @@
     , ModifyCluster
     -- * Request Lenses
     , mcMasterUserPassword
+    , mcPubliclyAccessible
     , mcHSMConfigurationIdentifier
     , mcClusterSecurityGroups
     , mcAutomatedSnapshotRetentionPeriod
     , mcHSMClientCertificateIdentifier
     , mcNumberOfNodes
+    , mcElasticIP
     , mcPreferredMaintenanceWindow
     , mcVPCSecurityGroupIds
     , mcClusterType
@@ -76,11 +76,13 @@
 -- /See:/ 'modifyCluster' smart constructor.
 data ModifyCluster = ModifyCluster'
     { _mcMasterUserPassword               :: !(Maybe Text)
+    , _mcPubliclyAccessible               :: !(Maybe Bool)
     , _mcHSMConfigurationIdentifier       :: !(Maybe Text)
     , _mcClusterSecurityGroups            :: !(Maybe [Text])
     , _mcAutomatedSnapshotRetentionPeriod :: !(Maybe Int)
     , _mcHSMClientCertificateIdentifier   :: !(Maybe Text)
     , _mcNumberOfNodes                    :: !(Maybe Int)
+    , _mcElasticIP                        :: !(Maybe Text)
     , _mcPreferredMaintenanceWindow       :: !(Maybe Text)
     , _mcVPCSecurityGroupIds              :: !(Maybe [Text])
     , _mcClusterType                      :: !(Maybe Text)
@@ -98,6 +100,8 @@
 --
 -- * 'mcMasterUserPassword'
 --
+-- * 'mcPubliclyAccessible'
+--
 -- * 'mcHSMConfigurationIdentifier'
 --
 -- * 'mcClusterSecurityGroups'
@@ -108,6 +112,8 @@
 --
 -- * 'mcNumberOfNodes'
 --
+-- * 'mcElasticIP'
+--
 -- * 'mcPreferredMaintenanceWindow'
 --
 -- * 'mcVPCSecurityGroupIds'
@@ -131,11 +137,13 @@
 modifyCluster pClusterIdentifier_ =
     ModifyCluster'
     { _mcMasterUserPassword = Nothing
+    , _mcPubliclyAccessible = Nothing
     , _mcHSMConfigurationIdentifier = Nothing
     , _mcClusterSecurityGroups = Nothing
     , _mcAutomatedSnapshotRetentionPeriod = Nothing
     , _mcHSMClientCertificateIdentifier = Nothing
     , _mcNumberOfNodes = Nothing
+    , _mcElasticIP = Nothing
     , _mcPreferredMaintenanceWindow = Nothing
     , _mcVPCSecurityGroupIds = Nothing
     , _mcClusterType = Nothing
@@ -170,6 +178,11 @@
 mcMasterUserPassword :: Lens' ModifyCluster (Maybe Text)
 mcMasterUserPassword = lens _mcMasterUserPassword (\ s a -> s{_mcMasterUserPassword = a});
 
+-- | If 'true', the cluster can be accessed from a public network. Only
+-- clusters in VPCs can be set to be publicly available.
+mcPubliclyAccessible :: Lens' ModifyCluster (Maybe Bool)
+mcPubliclyAccessible = lens _mcPubliclyAccessible (\ s a -> s{_mcPubliclyAccessible = a});
+
 -- | Specifies the name of the HSM configuration that contains the
 -- information the Amazon Redshift cluster can use to retrieve and store
 -- keys in an HSM.
@@ -193,7 +206,7 @@
 -- | The number of days that automated snapshots are retained. If the value
 -- is 0, automated snapshots are disabled. Even if automated snapshots are
 -- disabled, you can still create manual snapshots when you want with
--- CreateClusterSnapshot.
+-- < CreateClusterSnapshot>.
 --
 -- If you decrease the automated snapshot retention period from its current
 -- value, existing automated snapshots that fall outside of the new
@@ -219,12 +232,23 @@
 -- will be a temporary outage while the old cluster is deleted and your
 -- connection is switched to the new cluster. When the new connection is
 -- complete, the original access permissions for the cluster are restored.
--- You can use DescribeResize to track the progress of the resize request.
+-- You can use < DescribeResize> to track the progress of the resize
+-- request.
 --
 -- Valid Values: Integer greater than '0'.
 mcNumberOfNodes :: Lens' ModifyCluster (Maybe Int)
 mcNumberOfNodes = lens _mcNumberOfNodes (\ s a -> s{_mcNumberOfNodes = a});
 
+-- | The Elastic IP (EIP) address for the cluster.
+--
+-- Constraints: The cluster must be provisioned in EC2-VPC and
+-- publicly-accessible through an Internet gateway. For more information
+-- about provisioning clusters in EC2-VPC, go to
+-- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#cluster-platforms Supported Platforms to Launch Your Cluster>
+-- in the Amazon Redshift Cluster Management Guide.
+mcElasticIP :: Lens' ModifyCluster (Maybe Text)
+mcElasticIP = lens _mcElasticIP (\ s a -> s{_mcElasticIP = a});
+
 -- | The weekly time range (in UTC) during which system maintenance can
 -- occur, if necessary. If system maintenance is necessary during the
 -- window, it may result in an outage.
@@ -255,7 +279,7 @@
 -- into a read-only mode. After Amazon Redshift provisions a new cluster
 -- based on your resize requirements, there will be outage for a period
 -- while the old cluster is deleted and your connection is switched to the
--- new cluster. You can use DescribeResize to track the progress of the
+-- new cluster. You can use < DescribeResize> to track the progress of the
 -- resize request.
 --
 -- Valid Values: ' multi-node | single-node '
@@ -300,7 +324,8 @@
 -- will be a temporary outage while the old cluster is deleted and your
 -- connection is switched to the new cluster. When the new connection is
 -- complete, the original access permissions for the cluster are restored.
--- You can use DescribeResize to track the progress of the resize request.
+-- You can use < DescribeResize> to track the progress of the resize
+-- request.
 --
 -- Valid Values: ' ds1.xlarge' | 'ds1.8xlarge' | ' ds2.xlarge' |
 -- 'ds2.8xlarge' | 'dc1.large' | 'dc1.8xlarge'.
@@ -316,7 +341,7 @@
 
 -- | The name of the cluster parameter group to apply to this cluster. This
 -- change is applied only after the cluster is rebooted. To reboot a
--- cluster use RebootCluster.
+-- cluster use < RebootCluster>.
 --
 -- Default: Uses existing setting.
 --
@@ -340,6 +365,8 @@
                  ModifyClusterResponse' <$>
                    (x .@? "Cluster") <*> (pure (fromEnum s)))
 
+instance Hashable ModifyCluster
+
 instance ToHeaders ModifyCluster where
         toHeaders = const mempty
 
@@ -352,6 +379,7 @@
               ["Action" =: ("ModifyCluster" :: ByteString),
                "Version" =: ("2012-12-01" :: ByteString),
                "MasterUserPassword" =: _mcMasterUserPassword,
+               "PubliclyAccessible" =: _mcPubliclyAccessible,
                "HsmConfigurationIdentifier" =:
                  _mcHSMConfigurationIdentifier,
                "ClusterSecurityGroups" =:
@@ -363,6 +391,7 @@
                "HsmClientCertificateIdentifier" =:
                  _mcHSMClientCertificateIdentifier,
                "NumberOfNodes" =: _mcNumberOfNodes,
+               "ElasticIp" =: _mcElasticIP,
                "PreferredMaintenanceWindow" =:
                  _mcPreferredMaintenanceWindow,
                "VpcSecurityGroupIds" =:
diff --git a/gen/Network/AWS/Redshift/ModifyClusterParameterGroup.hs b/gen/Network/AWS/Redshift/ModifyClusterParameterGroup.hs
--- a/gen/Network/AWS/Redshift/ModifyClusterParameterGroup.hs
+++ b/gen/Network/AWS/Redshift/ModifyClusterParameterGroup.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.ModifyClusterParameterGroup
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,8 +23,6 @@
 -- For more information about parameters and parameter groups, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html Amazon Redshift Parameter Groups>
 -- in the /Amazon Redshift Cluster Management Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_ModifyClusterParameterGroup.html AWS API Reference> for ModifyClusterParameterGroup.
 module Network.AWS.Redshift.ModifyClusterParameterGroup
     (
     -- * Creating a Request
@@ -97,6 +95,8 @@
           = receiveXMLWrapper
               "ModifyClusterParameterGroupResult"
               (\ s h x -> parseXML x)
+
+instance Hashable ModifyClusterParameterGroup
 
 instance ToHeaders ModifyClusterParameterGroup where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/ModifyClusterSubnetGroup.hs b/gen/Network/AWS/Redshift/ModifyClusterSubnetGroup.hs
--- a/gen/Network/AWS/Redshift/ModifyClusterSubnetGroup.hs
+++ b/gen/Network/AWS/Redshift/ModifyClusterSubnetGroup.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.ModifyClusterSubnetGroup
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -21,8 +21,6 @@
 -- Modifies a cluster subnet group to include the specified list of VPC
 -- subnets. The operation replaces the existing list of subnets with the
 -- new list of subnets.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_ModifyClusterSubnetGroup.html AWS API Reference> for ModifyClusterSubnetGroup.
 module Network.AWS.Redshift.ModifyClusterSubnetGroup
     (
     -- * Creating a Request
@@ -98,6 +96,8 @@
               (\ s h x ->
                  ModifyClusterSubnetGroupResponse' <$>
                    (x .@? "ClusterSubnetGroup") <*> (pure (fromEnum s)))
+
+instance Hashable ModifyClusterSubnetGroup
 
 instance ToHeaders ModifyClusterSubnetGroup where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/ModifyEventSubscription.hs b/gen/Network/AWS/Redshift/ModifyEventSubscription.hs
--- a/gen/Network/AWS/Redshift/ModifyEventSubscription.hs
+++ b/gen/Network/AWS/Redshift/ModifyEventSubscription.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.ModifyEventSubscription
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Modifies an existing Amazon Redshift event notification subscription.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_ModifyEventSubscription.html AWS API Reference> for ModifyEventSubscription.
 module Network.AWS.Redshift.ModifyEventSubscription
     (
     -- * Creating a Request
@@ -155,6 +153,8 @@
               (\ s h x ->
                  ModifyEventSubscriptionResponse' <$>
                    (x .@? "EventSubscription") <*> (pure (fromEnum s)))
+
+instance Hashable ModifyEventSubscription
 
 instance ToHeaders ModifyEventSubscription where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/ModifySnapshotCopyRetentionPeriod.hs b/gen/Network/AWS/Redshift/ModifySnapshotCopyRetentionPeriod.hs
--- a/gen/Network/AWS/Redshift/ModifySnapshotCopyRetentionPeriod.hs
+++ b/gen/Network/AWS/Redshift/ModifySnapshotCopyRetentionPeriod.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.ModifySnapshotCopyRetentionPeriod
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Modifies the number of days to retain automated snapshots in the
 -- destination region after they are copied from the source region.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_ModifySnapshotCopyRetentionPeriod.html AWS API Reference> for ModifySnapshotCopyRetentionPeriod.
 module Network.AWS.Redshift.ModifySnapshotCopyRetentionPeriod
     (
     -- * Creating a Request
@@ -103,6 +101,8 @@
               (\ s h x ->
                  ModifySnapshotCopyRetentionPeriodResponse' <$>
                    (x .@? "Cluster") <*> (pure (fromEnum s)))
+
+instance Hashable ModifySnapshotCopyRetentionPeriod
 
 instance ToHeaders ModifySnapshotCopyRetentionPeriod
          where
diff --git a/gen/Network/AWS/Redshift/PurchaseReservedNodeOffering.hs b/gen/Network/AWS/Redshift/PurchaseReservedNodeOffering.hs
--- a/gen/Network/AWS/Redshift/PurchaseReservedNodeOffering.hs
+++ b/gen/Network/AWS/Redshift/PurchaseReservedNodeOffering.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.PurchaseReservedNodeOffering
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,16 +20,14 @@
 --
 -- Allows you to purchase reserved nodes. Amazon Redshift offers a
 -- predefined set of reserved node offerings. You can purchase one or more
--- of the offerings. You can call the DescribeReservedNodeOfferings API to
--- obtain the available reserved node offerings. You can call this API by
--- providing a specific reserved node offering and the number of nodes you
--- want to reserve.
+-- of the offerings. You can call the < DescribeReservedNodeOfferings> API
+-- to obtain the available reserved node offerings. You can call this API
+-- by providing a specific reserved node offering and the number of nodes
+-- you want to reserve.
 --
 -- For more information about reserved node offerings, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/purchase-reserved-node-instance.html Purchasing Reserved Nodes>
 -- in the /Amazon Redshift Cluster Management Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_PurchaseReservedNodeOffering.html AWS API Reference> for PurchaseReservedNodeOffering.
 module Network.AWS.Redshift.PurchaseReservedNodeOffering
     (
     -- * Creating a Request
@@ -78,7 +76,7 @@
     , _prnoReservedNodeOfferingId = pReservedNodeOfferingId_
     }
 
--- | The number of reserved nodes you want to purchase.
+-- | The number of reserved nodes that you want to purchase.
 --
 -- Default: '1'
 prnoNodeCount :: Lens' PurchaseReservedNodeOffering (Maybe Int)
@@ -100,6 +98,8 @@
               (\ s h x ->
                  PurchaseReservedNodeOfferingResponse' <$>
                    (x .@? "ReservedNode") <*> (pure (fromEnum s)))
+
+instance Hashable PurchaseReservedNodeOffering
 
 instance ToHeaders PurchaseReservedNodeOffering where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/RebootCluster.hs b/gen/Network/AWS/Redshift/RebootCluster.hs
--- a/gen/Network/AWS/Redshift/RebootCluster.hs
+++ b/gen/Network/AWS/Redshift/RebootCluster.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.RebootCluster
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -21,13 +21,11 @@
 -- Reboots a cluster. This action is taken as soon as possible. It results
 -- in a momentary outage to the cluster, during which the cluster status is
 -- set to 'rebooting'. A cluster event is created when the reboot is
--- completed. Any pending cluster modifications (see ModifyCluster) are
+-- completed. Any pending cluster modifications (see < ModifyCluster>) are
 -- applied at this reboot. For more information about managing clusters, go
 -- to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html Amazon Redshift Clusters>
 -- in the /Amazon Redshift Cluster Management Guide/
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_RebootCluster.html AWS API Reference> for RebootCluster.
 module Network.AWS.Redshift.RebootCluster
     (
     -- * Creating a Request
@@ -83,6 +81,8 @@
               (\ s h x ->
                  RebootClusterResponse' <$>
                    (x .@? "Cluster") <*> (pure (fromEnum s)))
+
+instance Hashable RebootCluster
 
 instance ToHeaders RebootCluster where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/ResetClusterParameterGroup.hs b/gen/Network/AWS/Redshift/ResetClusterParameterGroup.hs
--- a/gen/Network/AWS/Redshift/ResetClusterParameterGroup.hs
+++ b/gen/Network/AWS/Redshift/ResetClusterParameterGroup.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.ResetClusterParameterGroup
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,8 +23,6 @@
 -- \"engine-default\". To reset the entire parameter group specify the
 -- /ResetAllParameters/ parameter. For parameter changes to take effect you
 -- must reboot any associated clusters.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_ResetClusterParameterGroup.html AWS API Reference> for ResetClusterParameterGroup.
 module Network.AWS.Redshift.ResetClusterParameterGroup
     (
     -- * Creating a Request
@@ -105,6 +103,8 @@
           = receiveXMLWrapper
               "ResetClusterParameterGroupResult"
               (\ s h x -> parseXML x)
+
+instance Hashable ResetClusterParameterGroup
 
 instance ToHeaders ResetClusterParameterGroup where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/RestoreFromClusterSnapshot.hs b/gen/Network/AWS/Redshift/RestoreFromClusterSnapshot.hs
--- a/gen/Network/AWS/Redshift/RestoreFromClusterSnapshot.hs
+++ b/gen/Network/AWS/Redshift/RestoreFromClusterSnapshot.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.RestoreFromClusterSnapshot
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,10 +23,10 @@
 -- original cluster from which the snapshot was created, except that the
 -- new cluster is created with the default cluster security and parameter
 -- groups. After Amazon Redshift creates the cluster, you can use the
--- ModifyCluster API to associate a different security group and different
--- parameter group with the restored cluster. If you are using a DS node
--- type, you can also choose to change to another DS node type of the same
--- size during restore.
+-- < ModifyCluster> API to associate a different security group and
+-- different parameter group with the restored cluster. If you are using a
+-- DS node type, you can also choose to change to another DS node type of
+-- the same size during restore.
 --
 -- If you restore a cluster into a VPC, you must provide a cluster subnet
 -- group where you want the cluster restored.
@@ -34,14 +34,13 @@
 -- For more information about working with snapshots, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-snapshots.html Amazon Redshift Snapshots>
 -- in the /Amazon Redshift Cluster Management Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_RestoreFromClusterSnapshot.html AWS API Reference> for RestoreFromClusterSnapshot.
 module Network.AWS.Redshift.RestoreFromClusterSnapshot
     (
     -- * Creating a Request
       restoreFromClusterSnapshot
     , RestoreFromClusterSnapshot
     -- * Request Lenses
+    , rfcsAdditionalInfo
     , rfcsPubliclyAccessible
     , rfcsSnapshotClusterIdentifier
     , rfcsHSMConfigurationIdentifier
@@ -81,7 +80,8 @@
 --
 -- /See:/ 'restoreFromClusterSnapshot' smart constructor.
 data RestoreFromClusterSnapshot = RestoreFromClusterSnapshot'
-    { _rfcsPubliclyAccessible               :: !(Maybe Bool)
+    { _rfcsAdditionalInfo                   :: !(Maybe Text)
+    , _rfcsPubliclyAccessible               :: !(Maybe Bool)
     , _rfcsSnapshotClusterIdentifier        :: !(Maybe Text)
     , _rfcsHSMConfigurationIdentifier       :: !(Maybe Text)
     , _rfcsClusterSecurityGroups            :: !(Maybe [Text])
@@ -106,6 +106,8 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'rfcsAdditionalInfo'
+--
 -- * 'rfcsPubliclyAccessible'
 --
 -- * 'rfcsSnapshotClusterIdentifier'
@@ -149,7 +151,8 @@
     -> RestoreFromClusterSnapshot
 restoreFromClusterSnapshot pClusterIdentifier_ pSnapshotIdentifier_ =
     RestoreFromClusterSnapshot'
-    { _rfcsPubliclyAccessible = Nothing
+    { _rfcsAdditionalInfo = Nothing
+    , _rfcsPubliclyAccessible = Nothing
     , _rfcsSnapshotClusterIdentifier = Nothing
     , _rfcsHSMConfigurationIdentifier = Nothing
     , _rfcsClusterSecurityGroups = Nothing
@@ -170,6 +173,10 @@
     , _rfcsSnapshotIdentifier = pSnapshotIdentifier_
     }
 
+-- | Reserved.
+rfcsAdditionalInfo :: Lens' RestoreFromClusterSnapshot (Maybe Text)
+rfcsAdditionalInfo = lens _rfcsAdditionalInfo (\ s a -> s{_rfcsAdditionalInfo = a});
+
 -- | If 'true', the cluster can be accessed from a public network.
 rfcsPubliclyAccessible :: Lens' RestoreFromClusterSnapshot (Maybe Bool)
 rfcsPubliclyAccessible = lens _rfcsPubliclyAccessible (\ s a -> s{_rfcsPubliclyAccessible = a});
@@ -198,7 +205,7 @@
 -- | The number of days that automated snapshots are retained. If the value
 -- is 0, automated snapshots are disabled. Even if automated snapshots are
 -- disabled, you can still create manual snapshots when you want with
--- CreateClusterSnapshot.
+-- < CreateClusterSnapshot>.
 --
 -- Default: The value selected for the cluster from which the snapshot was
 -- taken.
@@ -343,6 +350,8 @@
                  RestoreFromClusterSnapshotResponse' <$>
                    (x .@? "Cluster") <*> (pure (fromEnum s)))
 
+instance Hashable RestoreFromClusterSnapshot
+
 instance ToHeaders RestoreFromClusterSnapshot where
         toHeaders = const mempty
 
@@ -355,6 +364,7 @@
               ["Action" =:
                  ("RestoreFromClusterSnapshot" :: ByteString),
                "Version" =: ("2012-12-01" :: ByteString),
+               "AdditionalInfo" =: _rfcsAdditionalInfo,
                "PubliclyAccessible" =: _rfcsPubliclyAccessible,
                "SnapshotClusterIdentifier" =:
                  _rfcsSnapshotClusterIdentifier,
diff --git a/gen/Network/AWS/Redshift/RestoreTableFromClusterSnapshot.hs b/gen/Network/AWS/Redshift/RestoreTableFromClusterSnapshot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Redshift/RestoreTableFromClusterSnapshot.hs
@@ -0,0 +1,214 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Redshift.RestoreTableFromClusterSnapshot
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new table from a table in an Amazon Redshift cluster snapshot.
+-- You must create the new table within the Amazon Redshift cluster that
+-- the snapshot was taken from.
+--
+-- You cannot use 'RestoreTableFromClusterSnapshot' to restore a table with
+-- the same name as an existing table in an Amazon Redshift cluster. That
+-- is, you cannot overwrite an existing table in a cluster with a restored
+-- table. If you want to replace your original table with a new, restored
+-- table, then rename or drop your original table before you call
+-- 'RestoreTableFromClusterSnapshot'. When you have renamed your original
+-- table, then you can pass the original name of the table as the
+-- 'NewTableName' parameter value in the call to
+-- 'RestoreTableFromClusterSnapshot'. This way, you can replace the
+-- original table with the table created from the snapshot.
+module Network.AWS.Redshift.RestoreTableFromClusterSnapshot
+    (
+    -- * Creating a Request
+      restoreTableFromClusterSnapshot
+    , RestoreTableFromClusterSnapshot
+    -- * Request Lenses
+    , rtfcsTargetSchemaName
+    , rtfcsTargetDatabaseName
+    , rtfcsSourceSchemaName
+    , rtfcsClusterIdentifier
+    , rtfcsSnapshotIdentifier
+    , rtfcsSourceDatabaseName
+    , rtfcsSourceTableName
+    , rtfcsNewTableName
+
+    -- * Destructuring the Response
+    , restoreTableFromClusterSnapshotResponse
+    , RestoreTableFromClusterSnapshotResponse
+    -- * Response Lenses
+    , rtfcsrsTableRestoreStatus
+    , rtfcsrsResponseStatus
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Redshift.Types
+import           Network.AWS.Redshift.Types.Product
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'restoreTableFromClusterSnapshot' smart constructor.
+data RestoreTableFromClusterSnapshot = RestoreTableFromClusterSnapshot'
+    { _rtfcsTargetSchemaName   :: !(Maybe Text)
+    , _rtfcsTargetDatabaseName :: !(Maybe Text)
+    , _rtfcsSourceSchemaName   :: !(Maybe Text)
+    , _rtfcsClusterIdentifier  :: !Text
+    , _rtfcsSnapshotIdentifier :: !Text
+    , _rtfcsSourceDatabaseName :: !Text
+    , _rtfcsSourceTableName    :: !Text
+    , _rtfcsNewTableName       :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RestoreTableFromClusterSnapshot' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rtfcsTargetSchemaName'
+--
+-- * 'rtfcsTargetDatabaseName'
+--
+-- * 'rtfcsSourceSchemaName'
+--
+-- * 'rtfcsClusterIdentifier'
+--
+-- * 'rtfcsSnapshotIdentifier'
+--
+-- * 'rtfcsSourceDatabaseName'
+--
+-- * 'rtfcsSourceTableName'
+--
+-- * 'rtfcsNewTableName'
+restoreTableFromClusterSnapshot
+    :: Text -- ^ 'rtfcsClusterIdentifier'
+    -> Text -- ^ 'rtfcsSnapshotIdentifier'
+    -> Text -- ^ 'rtfcsSourceDatabaseName'
+    -> Text -- ^ 'rtfcsSourceTableName'
+    -> Text -- ^ 'rtfcsNewTableName'
+    -> RestoreTableFromClusterSnapshot
+restoreTableFromClusterSnapshot pClusterIdentifier_ pSnapshotIdentifier_ pSourceDatabaseName_ pSourceTableName_ pNewTableName_ =
+    RestoreTableFromClusterSnapshot'
+    { _rtfcsTargetSchemaName = Nothing
+    , _rtfcsTargetDatabaseName = Nothing
+    , _rtfcsSourceSchemaName = Nothing
+    , _rtfcsClusterIdentifier = pClusterIdentifier_
+    , _rtfcsSnapshotIdentifier = pSnapshotIdentifier_
+    , _rtfcsSourceDatabaseName = pSourceDatabaseName_
+    , _rtfcsSourceTableName = pSourceTableName_
+    , _rtfcsNewTableName = pNewTableName_
+    }
+
+-- | The name of the schema to restore the table to.
+rtfcsTargetSchemaName :: Lens' RestoreTableFromClusterSnapshot (Maybe Text)
+rtfcsTargetSchemaName = lens _rtfcsTargetSchemaName (\ s a -> s{_rtfcsTargetSchemaName = a});
+
+-- | The name of the database to restore the table to.
+rtfcsTargetDatabaseName :: Lens' RestoreTableFromClusterSnapshot (Maybe Text)
+rtfcsTargetDatabaseName = lens _rtfcsTargetDatabaseName (\ s a -> s{_rtfcsTargetDatabaseName = a});
+
+-- | The name of the source schema that contains the table to restore from.
+rtfcsSourceSchemaName :: Lens' RestoreTableFromClusterSnapshot (Maybe Text)
+rtfcsSourceSchemaName = lens _rtfcsSourceSchemaName (\ s a -> s{_rtfcsSourceSchemaName = a});
+
+-- | The identifier of the Amazon Redshift cluster to restore the table to.
+rtfcsClusterIdentifier :: Lens' RestoreTableFromClusterSnapshot Text
+rtfcsClusterIdentifier = lens _rtfcsClusterIdentifier (\ s a -> s{_rtfcsClusterIdentifier = a});
+
+-- | The identifier of the snapshot to restore the table from. This snapshot
+-- must have been created from the Amazon Redshift cluster specified by the
+-- 'ClusterIdentifier' parameter.
+rtfcsSnapshotIdentifier :: Lens' RestoreTableFromClusterSnapshot Text
+rtfcsSnapshotIdentifier = lens _rtfcsSnapshotIdentifier (\ s a -> s{_rtfcsSnapshotIdentifier = a});
+
+-- | The name of the source database that contains the table to restore from.
+rtfcsSourceDatabaseName :: Lens' RestoreTableFromClusterSnapshot Text
+rtfcsSourceDatabaseName = lens _rtfcsSourceDatabaseName (\ s a -> s{_rtfcsSourceDatabaseName = a});
+
+-- | The name of the source table to restore from.
+rtfcsSourceTableName :: Lens' RestoreTableFromClusterSnapshot Text
+rtfcsSourceTableName = lens _rtfcsSourceTableName (\ s a -> s{_rtfcsSourceTableName = a});
+
+-- | The name of the table to create as a result of the current request.
+rtfcsNewTableName :: Lens' RestoreTableFromClusterSnapshot Text
+rtfcsNewTableName = lens _rtfcsNewTableName (\ s a -> s{_rtfcsNewTableName = a});
+
+instance AWSRequest RestoreTableFromClusterSnapshot
+         where
+        type Rs RestoreTableFromClusterSnapshot =
+             RestoreTableFromClusterSnapshotResponse
+        request = postQuery redshift
+        response
+          = receiveXMLWrapper
+              "RestoreTableFromClusterSnapshotResult"
+              (\ s h x ->
+                 RestoreTableFromClusterSnapshotResponse' <$>
+                   (x .@? "TableRestoreStatus") <*> (pure (fromEnum s)))
+
+instance Hashable RestoreTableFromClusterSnapshot
+
+instance ToHeaders RestoreTableFromClusterSnapshot
+         where
+        toHeaders = const mempty
+
+instance ToPath RestoreTableFromClusterSnapshot where
+        toPath = const "/"
+
+instance ToQuery RestoreTableFromClusterSnapshot
+         where
+        toQuery RestoreTableFromClusterSnapshot'{..}
+          = mconcat
+              ["Action" =:
+                 ("RestoreTableFromClusterSnapshot" :: ByteString),
+               "Version" =: ("2012-12-01" :: ByteString),
+               "TargetSchemaName" =: _rtfcsTargetSchemaName,
+               "TargetDatabaseName" =: _rtfcsTargetDatabaseName,
+               "SourceSchemaName" =: _rtfcsSourceSchemaName,
+               "ClusterIdentifier" =: _rtfcsClusterIdentifier,
+               "SnapshotIdentifier" =: _rtfcsSnapshotIdentifier,
+               "SourceDatabaseName" =: _rtfcsSourceDatabaseName,
+               "SourceTableName" =: _rtfcsSourceTableName,
+               "NewTableName" =: _rtfcsNewTableName]
+
+-- | /See:/ 'restoreTableFromClusterSnapshotResponse' smart constructor.
+data RestoreTableFromClusterSnapshotResponse = RestoreTableFromClusterSnapshotResponse'
+    { _rtfcsrsTableRestoreStatus :: !(Maybe TableRestoreStatus)
+    , _rtfcsrsResponseStatus     :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RestoreTableFromClusterSnapshotResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rtfcsrsTableRestoreStatus'
+--
+-- * 'rtfcsrsResponseStatus'
+restoreTableFromClusterSnapshotResponse
+    :: Int -- ^ 'rtfcsrsResponseStatus'
+    -> RestoreTableFromClusterSnapshotResponse
+restoreTableFromClusterSnapshotResponse pResponseStatus_ =
+    RestoreTableFromClusterSnapshotResponse'
+    { _rtfcsrsTableRestoreStatus = Nothing
+    , _rtfcsrsResponseStatus = pResponseStatus_
+    }
+
+-- | Undocumented member.
+rtfcsrsTableRestoreStatus :: Lens' RestoreTableFromClusterSnapshotResponse (Maybe TableRestoreStatus)
+rtfcsrsTableRestoreStatus = lens _rtfcsrsTableRestoreStatus (\ s a -> s{_rtfcsrsTableRestoreStatus = a});
+
+-- | The response status code.
+rtfcsrsResponseStatus :: Lens' RestoreTableFromClusterSnapshotResponse Int
+rtfcsrsResponseStatus = lens _rtfcsrsResponseStatus (\ s a -> s{_rtfcsrsResponseStatus = a});
diff --git a/gen/Network/AWS/Redshift/RevokeClusterSecurityGroupIngress.hs b/gen/Network/AWS/Redshift/RevokeClusterSecurityGroupIngress.hs
--- a/gen/Network/AWS/Redshift/RevokeClusterSecurityGroupIngress.hs
+++ b/gen/Network/AWS/Redshift/RevokeClusterSecurityGroupIngress.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.RevokeClusterSecurityGroupIngress
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,12 +20,10 @@
 --
 -- Revokes an ingress rule in an Amazon Redshift security group for a
 -- previously authorized IP range or Amazon EC2 security group. To add an
--- ingress rule, see AuthorizeClusterSecurityGroupIngress. For information
--- about managing security groups, go to
+-- ingress rule, see < AuthorizeClusterSecurityGroupIngress>. For
+-- information about managing security groups, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-security-groups.html Amazon Redshift Cluster Security Groups>
 -- in the /Amazon Redshift Cluster Management Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_RevokeClusterSecurityGroupIngress.html AWS API Reference> for RevokeClusterSecurityGroupIngress.
 module Network.AWS.Redshift.RevokeClusterSecurityGroupIngress
     (
     -- * Creating a Request
@@ -52,7 +50,7 @@
 import           Network.AWS.Request
 import           Network.AWS.Response
 
--- | ???
+-- |
 --
 -- /See:/ 'revokeClusterSecurityGroupIngress' smart constructor.
 data RevokeClusterSecurityGroupIngress = RevokeClusterSecurityGroupIngress'
@@ -123,6 +121,8 @@
                  RevokeClusterSecurityGroupIngressResponse' <$>
                    (x .@? "ClusterSecurityGroup") <*>
                      (pure (fromEnum s)))
+
+instance Hashable RevokeClusterSecurityGroupIngress
 
 instance ToHeaders RevokeClusterSecurityGroupIngress
          where
diff --git a/gen/Network/AWS/Redshift/RevokeSnapshotAccess.hs b/gen/Network/AWS/Redshift/RevokeSnapshotAccess.hs
--- a/gen/Network/AWS/Redshift/RevokeSnapshotAccess.hs
+++ b/gen/Network/AWS/Redshift/RevokeSnapshotAccess.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.RevokeSnapshotAccess
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -25,8 +25,6 @@
 -- For more information about working with snapshots, go to
 -- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-snapshots.html Amazon Redshift Snapshots>
 -- in the /Amazon Redshift Cluster Management Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_RevokeSnapshotAccess.html AWS API Reference> for RevokeSnapshotAccess.
 module Network.AWS.Redshift.RevokeSnapshotAccess
     (
     -- * Creating a Request
@@ -106,6 +104,8 @@
               (\ s h x ->
                  RevokeSnapshotAccessResponse' <$>
                    (x .@? "Snapshot") <*> (pure (fromEnum s)))
+
+instance Hashable RevokeSnapshotAccess
 
 instance ToHeaders RevokeSnapshotAccess where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/RotateEncryptionKey.hs b/gen/Network/AWS/Redshift/RotateEncryptionKey.hs
--- a/gen/Network/AWS/Redshift/RotateEncryptionKey.hs
+++ b/gen/Network/AWS/Redshift/RotateEncryptionKey.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.RotateEncryptionKey
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Rotates the encryption keys for a cluster.
---
--- /See:/ <http://docs.aws.amazon.com/redshift/latest/APIReference/API_RotateEncryptionKey.html AWS API Reference> for RotateEncryptionKey.
 module Network.AWS.Redshift.RotateEncryptionKey
     (
     -- * Creating a Request
@@ -81,6 +79,8 @@
               (\ s h x ->
                  RotateEncryptionKeyResponse' <$>
                    (x .@? "Cluster") <*> (pure (fromEnum s)))
+
+instance Hashable RotateEncryptionKey
 
 instance ToHeaders RotateEncryptionKey where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/Redshift/Types.hs b/gen/Network/AWS/Redshift/Types.hs
--- a/gen/Network/AWS/Redshift/Types.hs
+++ b/gen/Network/AWS/Redshift/Types.hs
@@ -4,7 +4,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.Types
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -26,6 +26,7 @@
     , _ClusterSecurityGroupAlreadyExistsFault
     , _ClusterSnapshotNotFoundFault
     , _InvalidElasticIPFault
+    , _TableRestoreNotFoundFault
     , _HSMConfigurationNotFoundFault
     , _AuthorizationAlreadyExistsFault
     , _SubscriptionCategoryNotFoundFault
@@ -52,6 +53,7 @@
     , _SnapshotCopyGrantAlreadyExistsFault
     , _SNSNoAuthorizationFault
     , _InvalidClusterStateFault
+    , _InvalidTableRestoreArgumentFault
     , _SnapshotCopyGrantNotFoundFault
     , _HSMConfigurationQuotaExceededFault
     , _ClusterSnapshotQuotaExceededFault
@@ -63,6 +65,7 @@
     , _ClusterSubnetGroupNotFoundFault
     , _BucketNotFoundFault
     , _InvalidSubscriptionStateFault
+    , _DependentServiceRequestThrottlingFault
     , _AuthorizationNotFoundFault
     , _InvalidClusterSubnetGroupStateFault
     , _UnsupportedOperationFault
@@ -76,6 +79,7 @@
     , _EventSubscriptionQuotaExceededFault
     , _InvalidClusterParameterGroupStateFault
     , _ReservedNodeAlreadyExistsFault
+    , _InProgressTableRestoreQuotaExceededFault
     , _InvalidRestoreFault
     , _ResourceNotFoundFault
     , _SubscriptionEventIdNotFoundFault
@@ -102,6 +106,9 @@
     -- * SourceType
     , SourceType (..)
 
+    -- * TableRestoreStatusType
+    , TableRestoreStatusType (..)
+
     -- * AccountWithRestoreAccess
     , AccountWithRestoreAccess
     , accountWithRestoreAccess
@@ -353,6 +360,7 @@
     , PendingModifiedValues
     , pendingModifiedValues
     , pmvMasterUserPassword
+    , pmvPubliclyAccessible
     , pmvAutomatedSnapshotRetentionPeriod
     , pmvClusterIdentifier
     , pmvNumberOfNodes
@@ -450,6 +458,24 @@
     , sSubnetIdentifier
     , sSubnetAvailabilityZone
 
+    -- * TableRestoreStatus
+    , TableRestoreStatus
+    , tableRestoreStatus
+    , trsStatus
+    , trsTargetSchemaName
+    , trsSnapshotIdentifier
+    , trsSourceDatabaseName
+    , trsTableRestoreRequestId
+    , trsNewTableName
+    , trsTargetDatabaseName
+    , trsSourceSchemaName
+    , trsClusterIdentifier
+    , trsRequestTime
+    , trsSourceTableName
+    , trsTotalDataInMegaBytes
+    , trsProgressInMegaBytes
+    , trsMessage
+
     -- * Tag
     , Tag
     , tag
@@ -499,6 +525,7 @@
         , _retryCheck = check
         }
     check e
+      | has (hasStatus 429) e = Just "too_many_requests"
       | has (hasCode "ThrottlingException" . hasStatus 400) e =
           Just "throttling_exception"
       | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
@@ -563,6 +590,11 @@
 _InvalidElasticIPFault =
     _ServiceError . hasStatus 400 . hasCode "InvalidElasticIpFault"
 
+-- | The specified 'TableRestoreRequestId' value was not found.
+_TableRestoreNotFoundFault :: AsError a => Getting (First ServiceError) a ServiceError
+_TableRestoreNotFoundFault =
+    _ServiceError . hasStatus 400 . hasCode "TableRestoreNotFoundFault"
+
 -- | There is no Amazon Redshift HSM configuration with the specified
 -- identifier.
 _HSMConfigurationNotFoundFault :: AsError a => Getting (First ServiceError) a ServiceError
@@ -694,7 +726,7 @@
 _SNSTopicARNNotFoundFault =
     _ServiceError . hasStatus 404 . hasCode "SNSTopicArnNotFound"
 
--- | The /ClusterIdentifier/ parameter does not refer to an existing cluster.
+-- | The 'ClusterIdentifier' parameter does not refer to an existing cluster.
 _ClusterNotFoundFault :: AsError a => Getting (First ServiceError) a ServiceError
 _ClusterNotFoundFault =
     _ServiceError . hasStatus 404 . hasCode "ClusterNotFound"
@@ -726,6 +758,13 @@
 _InvalidClusterStateFault =
     _ServiceError . hasStatus 400 . hasCode "InvalidClusterState"
 
+-- | The value specified for the 'sourceDatabaseName', 'sourceSchemaName', or
+-- 'sourceTableName' parameter, or a combination of these, doesn\'t exist
+-- in the snapshot.
+_InvalidTableRestoreArgumentFault :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidTableRestoreArgumentFault =
+    _ServiceError . hasStatus 400 . hasCode "InvalidTableRestoreArgument"
+
 -- | The specified snapshot copy grant can\'t be found. Make sure that the
 -- name is typed correctly and that the grant exists in the destination
 -- region.
@@ -793,6 +832,14 @@
 _InvalidSubscriptionStateFault =
     _ServiceError . hasStatus 400 . hasCode "InvalidSubscriptionStateFault"
 
+-- | The request cannot be completed because a dependent service is
+-- throttling requests made by Amazon Redshift on your behalf. Wait and
+-- retry the request.
+_DependentServiceRequestThrottlingFault :: AsError a => Getting (First ServiceError) a ServiceError
+_DependentServiceRequestThrottlingFault =
+    _ServiceError .
+    hasStatus 400 . hasCode "DependentServiceRequestThrottlingFault"
+
 -- | The specified CIDR IP range or EC2 security group is not authorized for
 -- the specified cluster security group.
 _AuthorizationNotFoundFault :: AsError a => Getting (First ServiceError) a ServiceError
@@ -816,8 +863,8 @@
 _ClusterSubnetGroupAlreadyExistsFault =
     _ServiceError . hasStatus 400 . hasCode "ClusterSubnetGroupAlreadyExists"
 
--- | The state of the cluster snapshot is not 'available', or other accounts
--- are authorized to access the snapshot.
+-- | The specified cluster snapshot is not in the 'available' state, or other
+-- accounts are authorized to access the snapshot.
 _InvalidClusterSnapshotStateFault :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidClusterSnapshotStateFault =
     _ServiceError . hasStatus 400 . hasCode "InvalidClusterSnapshotState"
@@ -867,6 +914,14 @@
 _ReservedNodeAlreadyExistsFault :: AsError a => Getting (First ServiceError) a ServiceError
 _ReservedNodeAlreadyExistsFault =
     _ServiceError . hasStatus 404 . hasCode "ReservedNodeAlreadyExists"
+
+-- | You have exceeded the allowed number of table restore requests. Wait for
+-- your current table restore requests to complete before making a new
+-- request.
+_InProgressTableRestoreQuotaExceededFault :: AsError a => Getting (First ServiceError) a ServiceError
+_InProgressTableRestoreQuotaExceededFault =
+    _ServiceError .
+    hasStatus 400 . hasCode "InProgressTableRestoreQuotaExceededFault"
 
 -- | The restore is invalid.
 _InvalidRestoreFault :: AsError a => Getting (First ServiceError) a ServiceError
diff --git a/gen/Network/AWS/Redshift/Types/Product.hs b/gen/Network/AWS/Redshift/Types/Product.hs
--- a/gen/Network/AWS/Redshift/Types/Product.hs
+++ b/gen/Network/AWS/Redshift/Types/Product.hs
@@ -9,7 +9,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.Types.Product
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -49,6 +49,8 @@
         parseXML x
           = AccountWithRestoreAccess' <$> (x .@? "AccountId")
 
+instance Hashable AccountWithRestoreAccess
+
 -- | Describes an availability zone.
 --
 -- /See:/ 'availabilityZone' smart constructor.
@@ -75,6 +77,8 @@
 instance FromXML AvailabilityZone where
         parseXML x = AvailabilityZone' <$> (x .@? "Name")
 
+instance Hashable AvailabilityZone
+
 -- | Describes a cluster.
 --
 -- /See:/ 'cluster' smart constructor.
@@ -313,7 +317,7 @@
 cHSMStatus :: Lens' Cluster (Maybe HSMStatus)
 cHSMStatus = lens _cHSMStatus (\ s a -> s{_cHSMStatus = a});
 
--- | Describes the status of the elastic IP (EIP) address.
+-- | The status of the elastic IP (EIP) address.
 cElasticIPStatus :: Lens' Cluster (Maybe ElasticIPStatus)
 cElasticIPStatus = lens _cElasticIPStatus (\ s a -> s{_cElasticIPStatus = a});
 
@@ -339,8 +343,24 @@
 cAllowVersionUpgrade :: Lens' Cluster (Maybe Bool)
 cAllowVersionUpgrade = lens _cAllowVersionUpgrade (\ s a -> s{_cAllowVersionUpgrade = a});
 
--- | The current state of this cluster. Possible values include 'available',
--- 'creating', 'deleting', 'rebooting', 'renaming', and 'resizing'.
+-- | The current state of the cluster. Possible values are:
+--
+-- -   'available'
+-- -   'creating'
+-- -   'deleting'
+-- -   'final-snapshot'
+-- -   'hardware-failure'
+-- -   'incompatible-hsm'
+-- -   'incompatible-network'
+-- -   'incompatible-parameters'
+-- -   'incompatible-restore'
+-- -   'modifying'
+-- -   'rebooting'
+-- -   'renaming'
+-- -   'resizing'
+-- -   'rotating-keys'
+-- -   'storage-full'
+-- -   'updating-hsm'
 cClusterStatus :: Lens' Cluster (Maybe Text)
 cClusterStatus = lens _cClusterStatus (\ s a -> s{_cClusterStatus = a});
 
@@ -409,6 +429,8 @@
                    may (parseXMLList "member"))
                 <*> (x .@? "DBName")
 
+instance Hashable Cluster
+
 -- | The identifier of a node in a cluster.
 --
 -- /See:/ 'clusterNode' smart constructor.
@@ -454,6 +476,8 @@
               (x .@? "NodeRole") <*> (x .@? "PrivateIPAddress") <*>
                 (x .@? "PublicIPAddress")
 
+instance Hashable ClusterNode
+
 -- | Describes a parameter group.
 --
 -- /See:/ 'clusterParameterGroup' smart constructor.
@@ -512,9 +536,9 @@
                    may (parseXMLList "Tag"))
                 <*> (x .@? "ParameterGroupName")
 
--- | Contains the output from the ModifyClusterParameterGroup and
--- ResetClusterParameterGroup actions and indicate the parameter group
--- involved and the status of the operation on the parameter group.
+instance Hashable ClusterParameterGroup
+
+-- |
 --
 -- /See:/ 'clusterParameterGroupNameMessage' smart constructor.
 data ClusterParameterGroupNameMessage = ClusterParameterGroupNameMessage'
@@ -554,6 +578,8 @@
               (x .@? "ParameterGroupStatus") <*>
                 (x .@? "ParameterGroupName")
 
+instance Hashable ClusterParameterGroupNameMessage
+
 -- | Describes the status of a parameter group.
 --
 -- /See:/ 'clusterParameterGroupStatus' smart constructor.
@@ -605,6 +631,8 @@
                 <*> (x .@? "ParameterApplyStatus")
                 <*> (x .@? "ParameterGroupName")
 
+instance Hashable ClusterParameterGroupStatus
+
 -- | Describes the status of a parameter group.
 --
 -- /See:/ 'clusterParameterStatus' smart constructor.
@@ -669,6 +697,8 @@
                 (x .@? "ParameterName")
                 <*> (x .@? "ParameterApplyStatus")
 
+instance Hashable ClusterParameterStatus
+
 -- | Describes a security group.
 --
 -- /See:/ 'clusterSecurityGroup' smart constructor.
@@ -741,7 +771,9 @@
                 (x .@? "Tags" .!@ mempty >>=
                    may (parseXMLList "Tag"))
 
--- | Describes a security group.
+instance Hashable ClusterSecurityGroup
+
+-- | Describes a cluster security group.
 --
 -- /See:/ 'clusterSecurityGroupMembership' smart constructor.
 data ClusterSecurityGroupMembership = ClusterSecurityGroupMembership'
@@ -778,6 +810,8 @@
               (x .@? "Status") <*>
                 (x .@? "ClusterSecurityGroupName")
 
+instance Hashable ClusterSecurityGroupMembership
+
 -- | Returns the destination region and retention period that are configured
 -- for cross-region snapshot copy.
 --
@@ -827,6 +861,8 @@
                 (x .@? "DestinationRegion")
                 <*> (x .@? "SnapshotCopyGrantName")
 
+instance Hashable ClusterSnapshotCopyStatus
+
 -- | Describes a subnet group.
 --
 -- /See:/ 'clusterSubnetGroup' smart constructor.
@@ -870,7 +906,7 @@
 csgVPCId :: Lens' ClusterSubnetGroup (Maybe Text)
 csgVPCId = lens _csgVPCId (\ s a -> s{_csgVPCId = a});
 
--- | A list of the VPC Subnet elements.
+-- | A list of the VPC < Subnet> elements.
 csgSubnets :: Lens' ClusterSubnetGroup [Subnet]
 csgSubnets = lens _csgSubnets (\ s a -> s{_csgSubnets = a}) . _Default . _Coerce;
 
@@ -904,6 +940,8 @@
                 (x .@? "Tags" .!@ mempty >>=
                    may (parseXMLList "Tag"))
 
+instance Hashable ClusterSubnetGroup
+
 -- | Describes a cluster version, including the parameter group family and
 -- description of the version.
 --
@@ -951,6 +989,8 @@
                 (x .@? "ClusterVersion")
                 <*> (x .@? "Description")
 
+instance Hashable ClusterVersion
+
 -- | Describes the default cluster parameters for a parameter group family.
 --
 -- /See:/ 'defaultClusterParameters' smart constructor.
@@ -1004,6 +1044,8 @@
                    may (parseXMLList "Parameter"))
                 <*> (x .@? "ParameterGroupFamily")
 
+instance Hashable DefaultClusterParameters
+
 -- | Describes an Amazon EC2 security group.
 --
 -- /See:/ 'ec2SecurityGroup' smart constructor.
@@ -1062,6 +1104,8 @@
                 (x .@? "Tags" .!@ mempty >>=
                    may (parseXMLList "Tag"))
 
+instance Hashable EC2SecurityGroup
+
 -- | Describes the status of the elastic IP (EIP) address.
 --
 -- /See:/ 'elasticIPStatus' smart constructor.
@@ -1085,7 +1129,7 @@
     , _eisElasticIP = Nothing
     }
 
--- | Describes the status of the elastic IP (EIP) address.
+-- | The status of the elastic IP (EIP) address.
 eisStatus :: Lens' ElasticIPStatus (Maybe Text)
 eisStatus = lens _eisStatus (\ s a -> s{_eisStatus = a});
 
@@ -1098,6 +1142,8 @@
           = ElasticIPStatus' <$>
               (x .@? "Status") <*> (x .@? "ElasticIp")
 
+instance Hashable ElasticIPStatus
+
 -- | Describes a connection endpoint.
 --
 -- /See:/ 'endpoint' smart constructor.
@@ -1133,6 +1179,8 @@
         parseXML x
           = Endpoint' <$> (x .@? "Address") <*> (x .@? "Port")
 
+instance Hashable Endpoint
+
 -- | Describes an event.
 --
 -- /See:/ 'event' smart constructor.
@@ -1220,7 +1268,11 @@
                 <*> (x .@? "Message")
                 <*> (x .@? "EventId")
 
--- | /See:/ 'eventCategoriesMap' smart constructor.
+instance Hashable Event
+
+-- | Describes event categories.
+--
+-- /See:/ 'eventCategoriesMap' smart constructor.
 data EventCategoriesMap = EventCategoriesMap'
     { _ecmSourceType :: !(Maybe Text)
     , _ecmEvents     :: !(Maybe [EventInfoMap])
@@ -1241,8 +1293,8 @@
     , _ecmEvents = Nothing
     }
 
--- | The Amazon Redshift source type, such as cluster or cluster-snapshot,
--- that the returned categories belong to.
+-- | The source type, such as cluster or cluster-snapshot, that the returned
+-- categories belong to.
 ecmSourceType :: Lens' EventCategoriesMap (Maybe Text)
 ecmSourceType = lens _ecmSourceType (\ s a -> s{_ecmSourceType = a});
 
@@ -1257,7 +1309,11 @@
                 (x .@? "Events" .!@ mempty >>=
                    may (parseXMLList "EventInfoMap"))
 
--- | /See:/ 'eventInfoMap' smart constructor.
+instance Hashable EventCategoriesMap
+
+-- | Describes event information.
+--
+-- /See:/ 'eventInfoMap' smart constructor.
 data EventInfoMap = EventInfoMap'
     { _eimEventDescription :: !(Maybe Text)
     , _eimSeverity         :: !(Maybe Text)
@@ -1312,7 +1368,11 @@
                    may (parseXMLList "EventCategory"))
                 <*> (x .@? "EventId")
 
--- | /See:/ 'eventSubscription' smart constructor.
+instance Hashable EventInfoMap
+
+-- | Describes event subscriptions.
+--
+-- /See:/ 'eventSubscription' smart constructor.
 data EventSubscription = EventSubscription'
     { _esStatus                   :: !(Maybe Text)
     , _esCustomerAWSId            :: !(Maybe Text)
@@ -1454,6 +1514,8 @@
                 (x .@? "SourceIdsList" .!@ mempty >>=
                    may (parseXMLList "SourceId"))
 
+instance Hashable EventSubscription
+
 -- | Returns information about an HSM client certificate. The certificate is
 -- stored in a secure Hardware Storage Module (HSM), and used by the Amazon
 -- Redshift cluster to encrypt data files.
@@ -1505,6 +1567,8 @@
                 (x .@? "Tags" .!@ mempty >>=
                    may (parseXMLList "Tag"))
 
+instance Hashable HSMClientCertificate
+
 -- | Returns information about an HSM configuration, which is an object that
 -- describes to Amazon Redshift clusters the information they require to
 -- connect to an HSM where they can store database encryption keys.
@@ -1575,7 +1639,9 @@
                    may (parseXMLList "Tag"))
                 <*> (x .@? "HsmIpAddress")
 
--- |
+instance Hashable HSMConfiguration
+
+-- | Describes the status of changes to HSM settings.
 --
 -- /See:/ 'hsmStatus' smart constructor.
 data HSMStatus = HSMStatus'
@@ -1627,6 +1693,8 @@
                 (x .@? "HsmConfigurationIdentifier")
                 <*> (x .@? "HsmClientCertificateIdentifier")
 
+instance Hashable HSMStatus
+
 -- | Describes an IP range used in a security group.
 --
 -- /See:/ 'ipRange' smart constructor.
@@ -1673,6 +1741,8 @@
                 (x .@? "Tags" .!@ mempty >>=
                    may (parseXMLList "Tag"))
 
+instance Hashable IPRange
+
 -- | Describes the status of logging for a cluster.
 --
 -- /See:/ 'loggingStatus' smart constructor.
@@ -1716,7 +1786,7 @@
 lsLastFailureTime :: Lens' LoggingStatus (Maybe UTCTime)
 lsLastFailureTime = lens _lsLastFailureTime (\ s a -> s{_lsLastFailureTime = a}) . mapping _Time;
 
--- | The last time when logs were delivered.
+-- | The last time that logs were delivered.
 lsLastSuccessfulDeliveryTime :: Lens' LoggingStatus (Maybe UTCTime)
 lsLastSuccessfulDeliveryTime = lens _lsLastSuccessfulDeliveryTime (\ s a -> s{_lsLastSuccessfulDeliveryTime = a}) . mapping _Time;
 
@@ -1746,6 +1816,8 @@
                 <*> (x .@? "LoggingEnabled")
                 <*> (x .@? "LastFailureMessage")
 
+instance Hashable LoggingStatus
+
 -- | Describes an orderable cluster option.
 --
 -- /See:/ 'orderableClusterOption' smart constructor.
@@ -1802,6 +1874,8 @@
                 <*> (x .@? "ClusterVersion")
                 <*> (x .@? "NodeType")
 
+instance Hashable OrderableClusterOption
+
 -- | Describes a parameter in a cluster parameter group.
 --
 -- /See:/ 'parameter' smart constructor.
@@ -1853,7 +1927,13 @@
     , _pDescription = Nothing
     }
 
--- | Specifies how to apply the parameter. Supported value: 'static'.
+-- | Specifies how to apply the WLM configuration parameter. Some properties
+-- can be applied dynamically, while other properties require that any
+-- associated clusters be rebooted for the configuration changes to be
+-- applied. For more information about parameters and parameter groups, go
+-- to
+-- <http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html Amazon Redshift Parameter Groups>
+-- in the /Amazon Redshift Cluster Management Guide/.
 pApplyType :: Lens' Parameter (Maybe ParameterApplyType)
 pApplyType = lens _pApplyType (\ s a -> s{_pApplyType = a});
 
@@ -1903,6 +1983,8 @@
                 <*> (x .@? "ParameterName")
                 <*> (x .@? "Description")
 
+instance Hashable Parameter
+
 instance ToQuery Parameter where
         toQuery Parameter'{..}
           = mconcat
@@ -1923,6 +2005,7 @@
 -- /See:/ 'pendingModifiedValues' smart constructor.
 data PendingModifiedValues = PendingModifiedValues'
     { _pmvMasterUserPassword               :: !(Maybe Text)
+    , _pmvPubliclyAccessible               :: !(Maybe Bool)
     , _pmvAutomatedSnapshotRetentionPeriod :: !(Maybe Int)
     , _pmvClusterIdentifier                :: !(Maybe Text)
     , _pmvNumberOfNodes                    :: !(Maybe Int)
@@ -1937,6 +2020,8 @@
 --
 -- * 'pmvMasterUserPassword'
 --
+-- * 'pmvPubliclyAccessible'
+--
 -- * 'pmvAutomatedSnapshotRetentionPeriod'
 --
 -- * 'pmvClusterIdentifier'
@@ -1953,6 +2038,7 @@
 pendingModifiedValues =
     PendingModifiedValues'
     { _pmvMasterUserPassword = Nothing
+    , _pmvPubliclyAccessible = Nothing
     , _pmvAutomatedSnapshotRetentionPeriod = Nothing
     , _pmvClusterIdentifier = Nothing
     , _pmvNumberOfNodes = Nothing
@@ -1966,6 +2052,11 @@
 pmvMasterUserPassword :: Lens' PendingModifiedValues (Maybe Text)
 pmvMasterUserPassword = lens _pmvMasterUserPassword (\ s a -> s{_pmvMasterUserPassword = a});
 
+-- | The pending or in-progress change of the ability to connect to the
+-- cluster from the public network.
+pmvPubliclyAccessible :: Lens' PendingModifiedValues (Maybe Bool)
+pmvPubliclyAccessible = lens _pmvPubliclyAccessible (\ s a -> s{_pmvPubliclyAccessible = a});
+
 -- | The pending or in-progress change of the automated snapshot retention
 -- period.
 pmvAutomatedSnapshotRetentionPeriod :: Lens' PendingModifiedValues (Maybe Int)
@@ -1995,13 +2086,16 @@
         parseXML x
           = PendingModifiedValues' <$>
               (x .@? "MasterUserPassword") <*>
-                (x .@? "AutomatedSnapshotRetentionPeriod")
+                (x .@? "PubliclyAccessible")
+                <*> (x .@? "AutomatedSnapshotRetentionPeriod")
                 <*> (x .@? "ClusterIdentifier")
                 <*> (x .@? "NumberOfNodes")
                 <*> (x .@? "ClusterType")
                 <*> (x .@? "ClusterVersion")
                 <*> (x .@? "NodeType")
 
+instance Hashable PendingModifiedValues
+
 -- | Describes a recurring charge.
 --
 -- /See:/ 'recurringCharge' smart constructor.
@@ -2040,9 +2134,11 @@
               (x .@? "RecurringChargeFrequency") <*>
                 (x .@? "RecurringChargeAmount")
 
+instance Hashable RecurringCharge
+
 -- | Describes a reserved node. You can call the
--- DescribeReservedNodeOfferings API to obtain the available reserved node
--- offerings.
+-- < DescribeReservedNodeOfferings> API to obtain the available reserved
+-- node offerings.
 --
 -- /See:/ 'reservedNode' smart constructor.
 data ReservedNode = ReservedNode'
@@ -2180,6 +2276,8 @@
                 <*> (x .@? "FixedPrice")
                 <*> (x .@? "Duration")
 
+instance Hashable ReservedNode
+
 -- | Describes a reserved node offering.
 --
 -- /See:/ 'reservedNodeOffering' smart constructor.
@@ -2278,6 +2376,8 @@
                 <*> (x .@? "FixedPrice")
                 <*> (x .@? "Duration")
 
+instance Hashable ReservedNodeOffering
+
 -- | Describes the status of a cluster restore action. Returns null if the
 -- cluster was not created by restoring a snapshot.
 --
@@ -2357,6 +2457,8 @@
                 <*> (x .@? "ElapsedTimeInSeconds")
                 <*> (x .@? "SnapshotSizeInMegaBytes")
 
+instance Hashable RestoreStatus
+
 -- | Describes a snapshot.
 --
 -- /See:/ 'snapshot' smart constructor.
@@ -2487,11 +2589,11 @@
 -- | The snapshot status. The value of the status depends on the API
 -- operation used.
 --
--- -   CreateClusterSnapshot and CopyClusterSnapshot returns status as
---     \"creating\".
--- -   DescribeClusterSnapshots returns status as \"creating\",
+-- -   < CreateClusterSnapshot> and < CopyClusterSnapshot> returns status
+--     as \"creating\".
+-- -   < DescribeClusterSnapshots> returns status as \"creating\",
 --     \"available\", \"final snapshot\", or \"failed\".
--- -   DeleteClusterSnapshot returns status as \"deleted\".
+-- -   < DeleteClusterSnapshot> returns status as \"deleted\".
 sStatus :: Lens' Snapshot (Maybe Text)
 sStatus = lens _sStatus (\ s a -> s{_sStatus = a});
 
@@ -2546,8 +2648,8 @@
 sNumberOfNodes :: Lens' Snapshot (Maybe Int)
 sNumberOfNodes = lens _sNumberOfNodes (\ s a -> s{_sNumberOfNodes = a});
 
--- | The snapshot type. Snapshots created using CreateClusterSnapshot and
--- CopyClusterSnapshot will be of type \"manual\".
+-- | The snapshot type. Snapshots created using < CreateClusterSnapshot> and
+-- < CopyClusterSnapshot> will be of type \"manual\".
 sSnapshotType :: Lens' Snapshot (Maybe Text)
 sSnapshotType = lens _sSnapshotType (\ s a -> s{_sSnapshotType = a});
 
@@ -2659,6 +2761,8 @@
                 <*> (x .@? "TotalBackupSizeInMegaBytes")
                 <*> (x .@? "DBName")
 
+instance Hashable Snapshot
+
 -- | The snapshot copy grant that grants Amazon Redshift permission to
 -- encrypt copied snapshots with the specified customer master key (CMK)
 -- from AWS KMS in the destination region.
@@ -2714,6 +2818,8 @@
                 (x .@? "Tags" .!@ mempty >>=
                    may (parseXMLList "Tag"))
 
+instance Hashable SnapshotCopyGrant
+
 -- | Describes a subnet.
 --
 -- /See:/ 'subnet' smart constructor.
@@ -2759,6 +2865,161 @@
               (x .@? "SubnetStatus") <*> (x .@? "SubnetIdentifier")
                 <*> (x .@? "SubnetAvailabilityZone")
 
+instance Hashable Subnet
+
+-- | Describes the status of a < RestoreTableFromClusterSnapshot> operation.
+--
+-- /See:/ 'tableRestoreStatus' smart constructor.
+data TableRestoreStatus = TableRestoreStatus'
+    { _trsStatus                :: !(Maybe TableRestoreStatusType)
+    , _trsTargetSchemaName      :: !(Maybe Text)
+    , _trsSnapshotIdentifier    :: !(Maybe Text)
+    , _trsSourceDatabaseName    :: !(Maybe Text)
+    , _trsTableRestoreRequestId :: !(Maybe Text)
+    , _trsNewTableName          :: !(Maybe Text)
+    , _trsTargetDatabaseName    :: !(Maybe Text)
+    , _trsSourceSchemaName      :: !(Maybe Text)
+    , _trsClusterIdentifier     :: !(Maybe Text)
+    , _trsRequestTime           :: !(Maybe ISO8601)
+    , _trsSourceTableName       :: !(Maybe Text)
+    , _trsTotalDataInMegaBytes  :: !(Maybe Integer)
+    , _trsProgressInMegaBytes   :: !(Maybe Integer)
+    , _trsMessage               :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TableRestoreStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'trsStatus'
+--
+-- * 'trsTargetSchemaName'
+--
+-- * 'trsSnapshotIdentifier'
+--
+-- * 'trsSourceDatabaseName'
+--
+-- * 'trsTableRestoreRequestId'
+--
+-- * 'trsNewTableName'
+--
+-- * 'trsTargetDatabaseName'
+--
+-- * 'trsSourceSchemaName'
+--
+-- * 'trsClusterIdentifier'
+--
+-- * 'trsRequestTime'
+--
+-- * 'trsSourceTableName'
+--
+-- * 'trsTotalDataInMegaBytes'
+--
+-- * 'trsProgressInMegaBytes'
+--
+-- * 'trsMessage'
+tableRestoreStatus
+    :: TableRestoreStatus
+tableRestoreStatus =
+    TableRestoreStatus'
+    { _trsStatus = Nothing
+    , _trsTargetSchemaName = Nothing
+    , _trsSnapshotIdentifier = Nothing
+    , _trsSourceDatabaseName = Nothing
+    , _trsTableRestoreRequestId = Nothing
+    , _trsNewTableName = Nothing
+    , _trsTargetDatabaseName = Nothing
+    , _trsSourceSchemaName = Nothing
+    , _trsClusterIdentifier = Nothing
+    , _trsRequestTime = Nothing
+    , _trsSourceTableName = Nothing
+    , _trsTotalDataInMegaBytes = Nothing
+    , _trsProgressInMegaBytes = Nothing
+    , _trsMessage = Nothing
+    }
+
+-- | A value that describes the current state of the table restore request.
+--
+-- Valid Values: 'SUCCEEDED', 'FAILED', 'CANCELLED', 'PENDING',
+-- 'IN_PROGRESS'
+trsStatus :: Lens' TableRestoreStatus (Maybe TableRestoreStatusType)
+trsStatus = lens _trsStatus (\ s a -> s{_trsStatus = a});
+
+-- | The name of the schema to restore the table to.
+trsTargetSchemaName :: Lens' TableRestoreStatus (Maybe Text)
+trsTargetSchemaName = lens _trsTargetSchemaName (\ s a -> s{_trsTargetSchemaName = a});
+
+-- | The identifier of the snapshot that the table is being restored from.
+trsSnapshotIdentifier :: Lens' TableRestoreStatus (Maybe Text)
+trsSnapshotIdentifier = lens _trsSnapshotIdentifier (\ s a -> s{_trsSnapshotIdentifier = a});
+
+-- | The name of the source database that contains the table being restored.
+trsSourceDatabaseName :: Lens' TableRestoreStatus (Maybe Text)
+trsSourceDatabaseName = lens _trsSourceDatabaseName (\ s a -> s{_trsSourceDatabaseName = a});
+
+-- | The unique identifier for the table restore request.
+trsTableRestoreRequestId :: Lens' TableRestoreStatus (Maybe Text)
+trsTableRestoreRequestId = lens _trsTableRestoreRequestId (\ s a -> s{_trsTableRestoreRequestId = a});
+
+-- | The name of the table to create as a result of the table restore
+-- request.
+trsNewTableName :: Lens' TableRestoreStatus (Maybe Text)
+trsNewTableName = lens _trsNewTableName (\ s a -> s{_trsNewTableName = a});
+
+-- | The name of the database to restore the table to.
+trsTargetDatabaseName :: Lens' TableRestoreStatus (Maybe Text)
+trsTargetDatabaseName = lens _trsTargetDatabaseName (\ s a -> s{_trsTargetDatabaseName = a});
+
+-- | The name of the source schema that contains the table being restored.
+trsSourceSchemaName :: Lens' TableRestoreStatus (Maybe Text)
+trsSourceSchemaName = lens _trsSourceSchemaName (\ s a -> s{_trsSourceSchemaName = a});
+
+-- | The identifier of the Amazon Redshift cluster that the table is being
+-- restored to.
+trsClusterIdentifier :: Lens' TableRestoreStatus (Maybe Text)
+trsClusterIdentifier = lens _trsClusterIdentifier (\ s a -> s{_trsClusterIdentifier = a});
+
+-- | The time that the table restore request was made, in Universal
+-- Coordinated Time (UTC).
+trsRequestTime :: Lens' TableRestoreStatus (Maybe UTCTime)
+trsRequestTime = lens _trsRequestTime (\ s a -> s{_trsRequestTime = a}) . mapping _Time;
+
+-- | The name of the source table being restored.
+trsSourceTableName :: Lens' TableRestoreStatus (Maybe Text)
+trsSourceTableName = lens _trsSourceTableName (\ s a -> s{_trsSourceTableName = a});
+
+-- | The total amount of data to restore to the new table, in megabytes (MB).
+trsTotalDataInMegaBytes :: Lens' TableRestoreStatus (Maybe Integer)
+trsTotalDataInMegaBytes = lens _trsTotalDataInMegaBytes (\ s a -> s{_trsTotalDataInMegaBytes = a});
+
+-- | The amount of data restored to the new table so far, in megabytes (MB).
+trsProgressInMegaBytes :: Lens' TableRestoreStatus (Maybe Integer)
+trsProgressInMegaBytes = lens _trsProgressInMegaBytes (\ s a -> s{_trsProgressInMegaBytes = a});
+
+-- | A description of the status of the table restore request. Status values
+-- include 'SUCCEEDED', 'FAILED', 'CANCELLED', 'PENDING', 'IN_PROGRESS'.
+trsMessage :: Lens' TableRestoreStatus (Maybe Text)
+trsMessage = lens _trsMessage (\ s a -> s{_trsMessage = a});
+
+instance FromXML TableRestoreStatus where
+        parseXML x
+          = TableRestoreStatus' <$>
+              (x .@? "Status") <*> (x .@? "TargetSchemaName") <*>
+                (x .@? "SnapshotIdentifier")
+                <*> (x .@? "SourceDatabaseName")
+                <*> (x .@? "TableRestoreRequestId")
+                <*> (x .@? "NewTableName")
+                <*> (x .@? "TargetDatabaseName")
+                <*> (x .@? "SourceSchemaName")
+                <*> (x .@? "ClusterIdentifier")
+                <*> (x .@? "RequestTime")
+                <*> (x .@? "SourceTableName")
+                <*> (x .@? "TotalDataInMegaBytes")
+                <*> (x .@? "ProgressInMegaBytes")
+                <*> (x .@? "Message")
+
+instance Hashable TableRestoreStatus
+
 -- | A tag consisting of a name\/value pair for a resource.
 --
 -- /See:/ 'tag' smart constructor.
@@ -2794,6 +3055,8 @@
         parseXML x
           = Tag' <$> (x .@? "Value") <*> (x .@? "Key")
 
+instance Hashable Tag
+
 instance ToQuery Tag where
         toQuery Tag'{..}
           = mconcat ["Value" =: _tagValue, "Key" =: _tagKey]
@@ -2860,6 +3123,8 @@
               (x .@? "Tag") <*> (x .@? "ResourceType") <*>
                 (x .@? "ResourceName")
 
+instance Hashable TaggedResource
+
 -- | Describes the members of a VPC security group.
 --
 -- /See:/ 'vpcSecurityGroupMembership' smart constructor.
@@ -2883,11 +3148,11 @@
     , _vsgmVPCSecurityGroupId = Nothing
     }
 
--- | Undocumented member.
+-- | The status of the VPC security group.
 vsgmStatus :: Lens' VPCSecurityGroupMembership (Maybe Text)
 vsgmStatus = lens _vsgmStatus (\ s a -> s{_vsgmStatus = a});
 
--- | Undocumented member.
+-- | The identifier of the VPC security group.
 vsgmVPCSecurityGroupId :: Lens' VPCSecurityGroupMembership (Maybe Text)
 vsgmVPCSecurityGroupId = lens _vsgmVPCSecurityGroupId (\ s a -> s{_vsgmVPCSecurityGroupId = a});
 
@@ -2895,3 +3160,5 @@
         parseXML x
           = VPCSecurityGroupMembership' <$>
               (x .@? "Status") <*> (x .@? "VpcSecurityGroupId")
+
+instance Hashable VPCSecurityGroupMembership
diff --git a/gen/Network/AWS/Redshift/Types/Sum.hs b/gen/Network/AWS/Redshift/Types/Sum.hs
--- a/gen/Network/AWS/Redshift/Types/Sum.hs
+++ b/gen/Network/AWS/Redshift/Types/Sum.hs
@@ -9,7 +9,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.Types.Sum
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -74,3 +74,37 @@
 
 instance FromXML SourceType where
     parseXML = parseXMLText "SourceType"
+
+data TableRestoreStatusType
+    = Canceled
+    | Failed
+    | InProgress
+    | Pending
+    | Succeeded
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText TableRestoreStatusType where
+    parser = takeLowerText >>= \case
+        "canceled" -> pure Canceled
+        "failed" -> pure Failed
+        "in_progress" -> pure InProgress
+        "pending" -> pure Pending
+        "succeeded" -> pure Succeeded
+        e -> fromTextError $ "Failure parsing TableRestoreStatusType from value: '" <> e
+           <> "'. Accepted values: CANCELED, FAILED, IN_PROGRESS, PENDING, SUCCEEDED"
+
+instance ToText TableRestoreStatusType where
+    toText = \case
+        Canceled -> "CANCELED"
+        Failed -> "FAILED"
+        InProgress -> "IN_PROGRESS"
+        Pending -> "PENDING"
+        Succeeded -> "SUCCEEDED"
+
+instance Hashable     TableRestoreStatusType
+instance ToByteString TableRestoreStatusType
+instance ToQuery      TableRestoreStatusType
+instance ToHeader     TableRestoreStatusType
+
+instance FromXML TableRestoreStatusType where
+    parseXML = parseXMLText "TableRestoreStatusType"
diff --git a/gen/Network/AWS/Redshift/Waiters.hs b/gen/Network/AWS/Redshift/Waiters.hs
--- a/gen/Network/AWS/Redshift/Waiters.hs
+++ b/gen/Network/AWS/Redshift/Waiters.hs
@@ -7,7 +7,7 @@
 
 -- |
 -- Module      : Network.AWS.Redshift.Waiters
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -2,7 +2,7 @@
 
 -- |
 -- Module      : Main
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
diff --git a/test/Test/AWS/Gen/Redshift.hs b/test/Test/AWS/Gen/Redshift.hs
--- a/test/Test/AWS/Gen/Redshift.hs
+++ b/test/Test/AWS/Gen/Redshift.hs
@@ -5,7 +5,7 @@
 
 -- |
 -- Module      : Test.AWS.Gen.Redshift
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -112,6 +112,9 @@
 --         , testCreateHSMClientCertificate $
 --             createHSMClientCertificate
 --
+--         , testRestoreTableFromClusterSnapshot $
+--             restoreTableFromClusterSnapshot
+--
 --         , testDescribeDefaultClusterParameters $
 --             describeDefaultClusterParameters
 --
@@ -148,6 +151,9 @@
 --         , testAuthorizeClusterSecurityGroupIngress $
 --             authorizeClusterSecurityGroupIngress
 --
+--         , testDescribeTableRestoreStatus $
+--             describeTableRestoreStatus
+--
 --         , testCreateClusterSnapshot $
 --             createClusterSnapshot
 --
@@ -292,6 +298,9 @@
 --         , testCreateHSMClientCertificateResponse $
 --             createHSMClientCertificateResponse
 --
+--         , testRestoreTableFromClusterSnapshotResponse $
+--             restoreTableFromClusterSnapshotResponse
+--
 --         , testDescribeDefaultClusterParametersResponse $
 --             describeDefaultClusterParametersResponse
 --
@@ -328,6 +337,9 @@
 --         , testAuthorizeClusterSecurityGroupIngressResponse $
 --             authorizeClusterSecurityGroupIngressResponse
 --
+--         , testDescribeTableRestoreStatusResponse $
+--             describeTableRestoreStatusResponse
+--
 --         , testCreateClusterSnapshotResponse $
 --             createClusterSnapshotResponse
 --
@@ -530,6 +542,11 @@
     "CreateHSMClientCertificate"
     "fixture/CreateHSMClientCertificate.yaml"
 
+testRestoreTableFromClusterSnapshot :: RestoreTableFromClusterSnapshot -> TestTree
+testRestoreTableFromClusterSnapshot = req
+    "RestoreTableFromClusterSnapshot"
+    "fixture/RestoreTableFromClusterSnapshot.yaml"
+
 testDescribeDefaultClusterParameters :: DescribeDefaultClusterParameters -> TestTree
 testDescribeDefaultClusterParameters = req
     "DescribeDefaultClusterParameters"
@@ -590,6 +607,11 @@
     "AuthorizeClusterSecurityGroupIngress"
     "fixture/AuthorizeClusterSecurityGroupIngress.yaml"
 
+testDescribeTableRestoreStatus :: DescribeTableRestoreStatus -> TestTree
+testDescribeTableRestoreStatus = req
+    "DescribeTableRestoreStatus"
+    "fixture/DescribeTableRestoreStatus.yaml"
+
 testCreateClusterSnapshot :: CreateClusterSnapshot -> TestTree
 testCreateClusterSnapshot = req
     "CreateClusterSnapshot"
@@ -883,6 +905,13 @@
     redshift
     (Proxy :: Proxy CreateHSMClientCertificate)
 
+testRestoreTableFromClusterSnapshotResponse :: RestoreTableFromClusterSnapshotResponse -> TestTree
+testRestoreTableFromClusterSnapshotResponse = res
+    "RestoreTableFromClusterSnapshotResponse"
+    "fixture/RestoreTableFromClusterSnapshotResponse.proto"
+    redshift
+    (Proxy :: Proxy RestoreTableFromClusterSnapshot)
+
 testDescribeDefaultClusterParametersResponse :: DescribeDefaultClusterParametersResponse -> TestTree
 testDescribeDefaultClusterParametersResponse = res
     "DescribeDefaultClusterParametersResponse"
@@ -966,6 +995,13 @@
     "fixture/AuthorizeClusterSecurityGroupIngressResponse.proto"
     redshift
     (Proxy :: Proxy AuthorizeClusterSecurityGroupIngress)
+
+testDescribeTableRestoreStatusResponse :: DescribeTableRestoreStatusResponse -> TestTree
+testDescribeTableRestoreStatusResponse = res
+    "DescribeTableRestoreStatusResponse"
+    "fixture/DescribeTableRestoreStatusResponse.proto"
+    redshift
+    (Proxy :: Proxy DescribeTableRestoreStatus)
 
 testCreateClusterSnapshotResponse :: CreateClusterSnapshotResponse -> TestTree
 testCreateClusterSnapshotResponse = res
diff --git a/test/Test/AWS/Redshift.hs b/test/Test/AWS/Redshift.hs
--- a/test/Test/AWS/Redshift.hs
+++ b/test/Test/AWS/Redshift.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE OverloadedStrings #-}
 
 -- Module      : Test.AWS.Redshift
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : This Source Code Form is subject to the terms of
 --               the Mozilla Public License, v. 2.0.
 --               A copy of the MPL can be found in the LICENSE file or
diff --git a/test/Test/AWS/Redshift/Internal.hs b/test/Test/AWS/Redshift/Internal.hs
--- a/test/Test/AWS/Redshift/Internal.hs
+++ b/test/Test/AWS/Redshift/Internal.hs
@@ -2,7 +2,7 @@
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
 
 -- Module      : Test.AWS.Redshift.Internal
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : This Source Code Form is subject to the terms of
 --               the Mozilla Public License, v. 2.0.
 --               A copy of the MPL can be found in the LICENSE file or
