diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.4.0`
+`1.4.1`
 
 
 ## Description
diff --git a/amazonka-cognito-identity.cabal b/amazonka-cognito-identity.cabal
--- a/amazonka-cognito-identity.cabal
+++ b/amazonka-cognito-identity.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-cognito-identity
-version:               1.4.0
+version:               1.4.1
 synopsis:              Amazon Cognito Identity SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -103,7 +103,7 @@
         , Network.AWS.CognitoIdentity.Types.Sum
 
     build-depends:
-          amazonka-core == 1.4.0.*
+          amazonka-core == 1.4.1.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-cognito-identity-test
@@ -123,9 +123,9 @@
         , Test.AWS.CognitoIdentity.Internal
 
     build-depends:
-          amazonka-core == 1.4.0.*
-        , amazonka-test == 1.4.0.*
-        , amazonka-cognito-identity == 1.4.0.*
+          amazonka-core == 1.4.1.*
+        , amazonka-test == 1.4.1.*
+        , amazonka-cognito-identity == 1.4.1.*
         , base
         , bytestring
         , tasty
diff --git a/gen/Network/AWS/CognitoIdentity.hs b/gen/Network/AWS/CognitoIdentity.hs
--- a/gen/Network/AWS/CognitoIdentity.hs
+++ b/gen/Network/AWS/CognitoIdentity.hs
@@ -154,6 +154,12 @@
     -- ** CognitoErrorCode
     , CognitoErrorCode (..)
 
+    -- ** CognitoIdentityProvider
+    , CognitoIdentityProvider
+    , cognitoIdentityProvider
+    , cipClientId
+    , cipProviderName
+
     -- ** Credentials
     , Credentials
     , credentials
@@ -176,6 +182,7 @@
     , ipSupportedLoginProviders
     , ipDeveloperProviderName
     , ipOpenIdConnectProviderARNs
+    , ipCognitoIdentityProviders
     , ipIdentityPoolId
     , ipIdentityPoolName
     , ipAllowUnauthenticatedIdentities
diff --git a/gen/Network/AWS/CognitoIdentity/CreateIdentityPool.hs b/gen/Network/AWS/CognitoIdentity/CreateIdentityPool.hs
--- a/gen/Network/AWS/CognitoIdentity/CreateIdentityPool.hs
+++ b/gen/Network/AWS/CognitoIdentity/CreateIdentityPool.hs
@@ -39,6 +39,7 @@
     , cipSupportedLoginProviders
     , cipDeveloperProviderName
     , cipOpenIdConnectProviderARNs
+    , cipCognitoIdentityProviders
     , cipIdentityPoolName
     , cipAllowUnauthenticatedIdentities
 
@@ -49,6 +50,7 @@
     , ipSupportedLoginProviders
     , ipDeveloperProviderName
     , ipOpenIdConnectProviderARNs
+    , ipCognitoIdentityProviders
     , ipIdentityPoolId
     , ipIdentityPoolName
     , ipAllowUnauthenticatedIdentities
@@ -68,6 +70,7 @@
     { _cipSupportedLoginProviders        :: !(Maybe (Map Text Text))
     , _cipDeveloperProviderName          :: !(Maybe Text)
     , _cipOpenIdConnectProviderARNs      :: !(Maybe [Text])
+    , _cipCognitoIdentityProviders       :: !(Maybe [CognitoIdentityProvider])
     , _cipIdentityPoolName               :: !Text
     , _cipAllowUnauthenticatedIdentities :: !Bool
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
@@ -82,6 +85,8 @@
 --
 -- * 'cipOpenIdConnectProviderARNs'
 --
+-- * 'cipCognitoIdentityProviders'
+--
 -- * 'cipIdentityPoolName'
 --
 -- * 'cipAllowUnauthenticatedIdentities'
@@ -94,6 +99,7 @@
     { _cipSupportedLoginProviders = Nothing
     , _cipDeveloperProviderName = Nothing
     , _cipOpenIdConnectProviderARNs = Nothing
+    , _cipCognitoIdentityProviders = Nothing
     , _cipIdentityPoolName = pIdentityPoolName_
     , _cipAllowUnauthenticatedIdentities = pAllowUnauthenticatedIdentities_
     }
@@ -117,6 +123,10 @@
 cipOpenIdConnectProviderARNs :: Lens' CreateIdentityPool [Text]
 cipOpenIdConnectProviderARNs = lens _cipOpenIdConnectProviderARNs (\ s a -> s{_cipOpenIdConnectProviderARNs = a}) . _Default . _Coerce;
 
+-- | A list representing a Cognito User Identity Pool and its client ID.
+cipCognitoIdentityProviders :: Lens' CreateIdentityPool [CognitoIdentityProvider]
+cipCognitoIdentityProviders = lens _cipCognitoIdentityProviders (\ s a -> s{_cipCognitoIdentityProviders = a}) . _Default . _Coerce;
+
 -- | A string that you provide.
 cipIdentityPoolName :: Lens' CreateIdentityPool Text
 cipIdentityPoolName = lens _cipIdentityPoolName (\ s a -> s{_cipIdentityPoolName = a});
@@ -132,6 +142,8 @@
 
 instance Hashable CreateIdentityPool
 
+instance NFData CreateIdentityPool
+
 instance ToHeaders CreateIdentityPool where
         toHeaders
           = const
@@ -152,6 +164,8 @@
                     _cipDeveloperProviderName,
                   ("OpenIdConnectProviderARNs" .=) <$>
                     _cipOpenIdConnectProviderARNs,
+                  ("CognitoIdentityProviders" .=) <$>
+                    _cipCognitoIdentityProviders,
                   Just ("IdentityPoolName" .= _cipIdentityPoolName),
                   Just
                     ("AllowUnauthenticatedIdentities" .=
diff --git a/gen/Network/AWS/CognitoIdentity/DeleteIdentities.hs b/gen/Network/AWS/CognitoIdentity/DeleteIdentities.hs
--- a/gen/Network/AWS/CognitoIdentity/DeleteIdentities.hs
+++ b/gen/Network/AWS/CognitoIdentity/DeleteIdentities.hs
@@ -81,6 +81,8 @@
 
 instance Hashable DeleteIdentities
 
+instance NFData DeleteIdentities
+
 instance ToHeaders DeleteIdentities where
         toHeaders
           = const
@@ -136,3 +138,5 @@
 -- | The response status code.
 dirsResponseStatus :: Lens' DeleteIdentitiesResponse Int
 dirsResponseStatus = lens _dirsResponseStatus (\ s a -> s{_dirsResponseStatus = a});
+
+instance NFData DeleteIdentitiesResponse
diff --git a/gen/Network/AWS/CognitoIdentity/DeleteIdentityPool.hs b/gen/Network/AWS/CognitoIdentity/DeleteIdentityPool.hs
--- a/gen/Network/AWS/CognitoIdentity/DeleteIdentityPool.hs
+++ b/gen/Network/AWS/CognitoIdentity/DeleteIdentityPool.hs
@@ -74,6 +74,8 @@
 
 instance Hashable DeleteIdentityPool
 
+instance NFData DeleteIdentityPool
+
 instance ToHeaders DeleteIdentityPool where
         toHeaders
           = const
@@ -106,3 +108,5 @@
 deleteIdentityPoolResponse
     :: DeleteIdentityPoolResponse
 deleteIdentityPoolResponse = DeleteIdentityPoolResponse'
+
+instance NFData DeleteIdentityPoolResponse
diff --git a/gen/Network/AWS/CognitoIdentity/DescribeIdentity.hs b/gen/Network/AWS/CognitoIdentity/DescribeIdentity.hs
--- a/gen/Network/AWS/CognitoIdentity/DescribeIdentity.hs
+++ b/gen/Network/AWS/CognitoIdentity/DescribeIdentity.hs
@@ -78,6 +78,8 @@
 
 instance Hashable DescribeIdentity
 
+instance NFData DescribeIdentity
+
 instance ToHeaders DescribeIdentity where
         toHeaders
           = const
diff --git a/gen/Network/AWS/CognitoIdentity/DescribeIdentityPool.hs b/gen/Network/AWS/CognitoIdentity/DescribeIdentityPool.hs
--- a/gen/Network/AWS/CognitoIdentity/DescribeIdentityPool.hs
+++ b/gen/Network/AWS/CognitoIdentity/DescribeIdentityPool.hs
@@ -37,6 +37,7 @@
     , ipSupportedLoginProviders
     , ipDeveloperProviderName
     , ipOpenIdConnectProviderARNs
+    , ipCognitoIdentityProviders
     , ipIdentityPoolId
     , ipIdentityPoolName
     , ipAllowUnauthenticatedIdentities
@@ -79,6 +80,8 @@
         response = receiveJSON (\ s h x -> eitherParseJSON x)
 
 instance Hashable DescribeIdentityPool
+
+instance NFData DescribeIdentityPool
 
 instance ToHeaders DescribeIdentityPool where
         toHeaders
diff --git a/gen/Network/AWS/CognitoIdentity/GetCredentialsForIdentity.hs b/gen/Network/AWS/CognitoIdentity/GetCredentialsForIdentity.hs
--- a/gen/Network/AWS/CognitoIdentity/GetCredentialsForIdentity.hs
+++ b/gen/Network/AWS/CognitoIdentity/GetCredentialsForIdentity.hs
@@ -95,6 +95,8 @@
 
 instance Hashable GetCredentialsForIdentity
 
+instance NFData GetCredentialsForIdentity
+
 instance ToHeaders GetCredentialsForIdentity where
         toHeaders
           = const
@@ -158,3 +160,5 @@
 -- | The response status code.
 gcfirsResponseStatus :: Lens' GetCredentialsForIdentityResponse Int
 gcfirsResponseStatus = lens _gcfirsResponseStatus (\ s a -> s{_gcfirsResponseStatus = a});
+
+instance NFData GetCredentialsForIdentityResponse
diff --git a/gen/Network/AWS/CognitoIdentity/GetId.hs b/gen/Network/AWS/CognitoIdentity/GetId.hs
--- a/gen/Network/AWS/CognitoIdentity/GetId.hs
+++ b/gen/Network/AWS/CognitoIdentity/GetId.hs
@@ -85,6 +85,8 @@
 -- The available provider names for 'Logins' are as follows:
 --
 -- -   Facebook: 'graph.facebook.com'
+-- -   Amazon Cognito Identity Provider:
+--     'cognito-idp.us-east-1.amazonaws.com\/us-east-1_123456789'
 -- -   Google: 'accounts.google.com'
 -- -   Amazon: 'www.amazon.com'
 -- -   Twitter: 'api.twitter.com'
@@ -107,6 +109,8 @@
 
 instance Hashable GetId
 
+instance NFData GetId
+
 instance ToHeaders GetId where
         toHeaders
           = const
@@ -161,3 +165,5 @@
 -- | The response status code.
 girsResponseStatus :: Lens' GetIdResponse Int
 girsResponseStatus = lens _girsResponseStatus (\ s a -> s{_girsResponseStatus = a});
+
+instance NFData GetIdResponse
diff --git a/gen/Network/AWS/CognitoIdentity/GetIdentityPoolRoles.hs b/gen/Network/AWS/CognitoIdentity/GetIdentityPoolRoles.hs
--- a/gen/Network/AWS/CognitoIdentity/GetIdentityPoolRoles.hs
+++ b/gen/Network/AWS/CognitoIdentity/GetIdentityPoolRoles.hs
@@ -83,6 +83,8 @@
 
 instance Hashable GetIdentityPoolRoles
 
+instance NFData GetIdentityPoolRoles
+
 instance ToHeaders GetIdentityPoolRoles where
         toHeaders
           = const
@@ -145,3 +147,5 @@
 -- | The response status code.
 giprrsResponseStatus :: Lens' GetIdentityPoolRolesResponse Int
 giprrsResponseStatus = lens _giprrsResponseStatus (\ s a -> s{_giprrsResponseStatus = a});
+
+instance NFData GetIdentityPoolRolesResponse
diff --git a/gen/Network/AWS/CognitoIdentity/GetOpenIdToken.hs b/gen/Network/AWS/CognitoIdentity/GetOpenIdToken.hs
--- a/gen/Network/AWS/CognitoIdentity/GetOpenIdToken.hs
+++ b/gen/Network/AWS/CognitoIdentity/GetOpenIdToken.hs
@@ -77,8 +77,8 @@
 -- | A set of optional name-value pairs that map provider names to provider
 -- tokens. When using graph.facebook.com and www.amazon.com, supply the
 -- access_token returned from the provider\'s authflow. For
--- accounts.google.com or any other OpenId Connect provider, always include
--- the id_token.
+-- accounts.google.com, an Amazon Cognito Identity Provider, or any other
+-- OpenId Connect provider, always include the 'id_token'.
 goitLogins :: Lens' GetOpenIdToken (HashMap Text Text)
 goitLogins = lens _goitLogins (\ s a -> s{_goitLogins = a}) . _Default . _Map;
 
@@ -98,6 +98,8 @@
 
 instance Hashable GetOpenIdToken
 
+instance NFData GetOpenIdToken
+
 instance ToHeaders GetOpenIdToken where
         toHeaders
           = const
@@ -161,3 +163,5 @@
 -- | The response status code.
 goitrsResponseStatus :: Lens' GetOpenIdTokenResponse Int
 goitrsResponseStatus = lens _goitrsResponseStatus (\ s a -> s{_goitrsResponseStatus = a});
+
+instance NFData GetOpenIdTokenResponse
diff --git a/gen/Network/AWS/CognitoIdentity/GetOpenIdTokenForDeveloperIdentity.hs b/gen/Network/AWS/CognitoIdentity/GetOpenIdTokenForDeveloperIdentity.hs
--- a/gen/Network/AWS/CognitoIdentity/GetOpenIdTokenForDeveloperIdentity.hs
+++ b/gen/Network/AWS/CognitoIdentity/GetOpenIdTokenForDeveloperIdentity.hs
@@ -141,6 +141,8 @@
 
 instance Hashable GetOpenIdTokenForDeveloperIdentity
 
+instance NFData GetOpenIdTokenForDeveloperIdentity
+
 instance ToHeaders GetOpenIdTokenForDeveloperIdentity
          where
         toHeaders
@@ -210,3 +212,6 @@
 -- | The response status code.
 goitfdirsResponseStatus :: Lens' GetOpenIdTokenForDeveloperIdentityResponse Int
 goitfdirsResponseStatus = lens _goitfdirsResponseStatus (\ s a -> s{_goitfdirsResponseStatus = a});
+
+instance NFData
+         GetOpenIdTokenForDeveloperIdentityResponse
diff --git a/gen/Network/AWS/CognitoIdentity/ListIdentities.hs b/gen/Network/AWS/CognitoIdentity/ListIdentities.hs
--- a/gen/Network/AWS/CognitoIdentity/ListIdentities.hs
+++ b/gen/Network/AWS/CognitoIdentity/ListIdentities.hs
@@ -113,6 +113,8 @@
 
 instance Hashable ListIdentities
 
+instance NFData ListIdentities
+
 instance ToHeaders ListIdentities where
         toHeaders
           = const
@@ -185,3 +187,5 @@
 -- | The response status code.
 lirsResponseStatus :: Lens' ListIdentitiesResponse Int
 lirsResponseStatus = lens _lirsResponseStatus (\ s a -> s{_lirsResponseStatus = a});
+
+instance NFData ListIdentitiesResponse
diff --git a/gen/Network/AWS/CognitoIdentity/ListIdentityPools.hs b/gen/Network/AWS/CognitoIdentity/ListIdentityPools.hs
--- a/gen/Network/AWS/CognitoIdentity/ListIdentityPools.hs
+++ b/gen/Network/AWS/CognitoIdentity/ListIdentityPools.hs
@@ -91,6 +91,8 @@
 
 instance Hashable ListIdentityPools
 
+instance NFData ListIdentityPools
+
 instance ToHeaders ListIdentityPools where
         toHeaders
           = const
@@ -153,3 +155,5 @@
 -- | The response status code.
 liprsResponseStatus :: Lens' ListIdentityPoolsResponse Int
 liprsResponseStatus = lens _liprsResponseStatus (\ s a -> s{_liprsResponseStatus = a});
+
+instance NFData ListIdentityPoolsResponse
diff --git a/gen/Network/AWS/CognitoIdentity/LookupDeveloperIdentity.hs b/gen/Network/AWS/CognitoIdentity/LookupDeveloperIdentity.hs
--- a/gen/Network/AWS/CognitoIdentity/LookupDeveloperIdentity.hs
+++ b/gen/Network/AWS/CognitoIdentity/LookupDeveloperIdentity.hs
@@ -136,6 +136,8 @@
 
 instance Hashable LookupDeveloperIdentity
 
+instance NFData LookupDeveloperIdentity
+
 instance ToHeaders LookupDeveloperIdentity where
         toHeaders
           = const
@@ -217,3 +219,5 @@
 -- | The response status code.
 ldirsResponseStatus :: Lens' LookupDeveloperIdentityResponse Int
 ldirsResponseStatus = lens _ldirsResponseStatus (\ s a -> s{_ldirsResponseStatus = a});
+
+instance NFData LookupDeveloperIdentityResponse
diff --git a/gen/Network/AWS/CognitoIdentity/MergeDeveloperIdentities.hs b/gen/Network/AWS/CognitoIdentity/MergeDeveloperIdentities.hs
--- a/gen/Network/AWS/CognitoIdentity/MergeDeveloperIdentities.hs
+++ b/gen/Network/AWS/CognitoIdentity/MergeDeveloperIdentities.hs
@@ -124,6 +124,8 @@
 
 instance Hashable MergeDeveloperIdentities
 
+instance NFData MergeDeveloperIdentities
+
 instance ToHeaders MergeDeveloperIdentities where
         toHeaders
           = const
@@ -185,3 +187,5 @@
 -- | The response status code.
 mdirsResponseStatus :: Lens' MergeDeveloperIdentitiesResponse Int
 mdirsResponseStatus = lens _mdirsResponseStatus (\ s a -> s{_mdirsResponseStatus = a});
+
+instance NFData MergeDeveloperIdentitiesResponse
diff --git a/gen/Network/AWS/CognitoIdentity/SetIdentityPoolRoles.hs b/gen/Network/AWS/CognitoIdentity/SetIdentityPoolRoles.hs
--- a/gen/Network/AWS/CognitoIdentity/SetIdentityPoolRoles.hs
+++ b/gen/Network/AWS/CognitoIdentity/SetIdentityPoolRoles.hs
@@ -85,6 +85,8 @@
 
 instance Hashable SetIdentityPoolRoles
 
+instance NFData SetIdentityPoolRoles
+
 instance ToHeaders SetIdentityPoolRoles where
         toHeaders
           = const
@@ -118,3 +120,5 @@
 setIdentityPoolRolesResponse
     :: SetIdentityPoolRolesResponse
 setIdentityPoolRolesResponse = SetIdentityPoolRolesResponse'
+
+instance NFData SetIdentityPoolRolesResponse
diff --git a/gen/Network/AWS/CognitoIdentity/Types.hs b/gen/Network/AWS/CognitoIdentity/Types.hs
--- a/gen/Network/AWS/CognitoIdentity/Types.hs
+++ b/gen/Network/AWS/CognitoIdentity/Types.hs
@@ -31,6 +31,12 @@
     -- * CognitoErrorCode
     , CognitoErrorCode (..)
 
+    -- * CognitoIdentityProvider
+    , CognitoIdentityProvider
+    , cognitoIdentityProvider
+    , cipClientId
+    , cipProviderName
+
     -- * Credentials
     , Credentials
     , credentials
@@ -53,6 +59,7 @@
     , ipSupportedLoginProviders
     , ipDeveloperProviderName
     , ipOpenIdConnectProviderARNs
+    , ipCognitoIdentityProviders
     , ipIdentityPoolId
     , ipIdentityPoolName
     , ipAllowUnauthenticatedIdentities
@@ -103,6 +110,8 @@
       | has (hasCode "ThrottlingException" . hasStatus 400) e =
           Just "throttling_exception"
       | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
+      | has (hasStatus 504) e = Just "gateway_timeout"
+      | has (hasStatus 502) e = Just "bad_gateway"
       | has (hasStatus 503) e = Just "service_unavailable"
       | has (hasStatus 500) e = Just "general_server_error"
       | has (hasStatus 509) e = Just "limit_exceeded"
@@ -112,18 +121,16 @@
 -- type (auth\/unauth) or if the AssumeRole fails.
 _InvalidIdentityPoolConfigurationException :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidIdentityPoolConfigurationException =
-    _ServiceError .
-    hasStatus 400 . hasCode "InvalidIdentityPoolConfigurationException"
+    _ServiceError . hasCode "InvalidIdentityPoolConfigurationException"
 
 -- | Thrown for missing or bad input parameter(s).
 _InvalidParameterException :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidParameterException =
-    _ServiceError . hasStatus 400 . hasCode "InvalidParameterException"
+    _ServiceError . hasCode "InvalidParameterException"
 
 -- | Thrown when a user is not authorized to access the requested resource.
 _NotAuthorizedException :: AsError a => Getting (First ServiceError) a ServiceError
-_NotAuthorizedException =
-    _ServiceError . hasStatus 403 . hasCode "NotAuthorizedException"
+_NotAuthorizedException = _ServiceError . hasCode "NotAuthorizedException"
 
 -- | Thrown when the service encounters an error during processing the
 -- request.
@@ -133,39 +140,35 @@
 -- | An exception thrown when a dependent service such as Facebook or Twitter
 -- is not responding
 _ExternalServiceException :: AsError a => Getting (First ServiceError) a ServiceError
-_ExternalServiceException =
-    _ServiceError . hasStatus 400 . hasCode "ExternalServiceException"
+_ExternalServiceException = _ServiceError . hasCode "ExternalServiceException"
 
 -- | Thrown when a request is throttled.
 _TooManyRequestsException :: AsError a => Getting (First ServiceError) a ServiceError
-_TooManyRequestsException =
-    _ServiceError . hasStatus 429 . hasCode "TooManyRequestsException"
+_TooManyRequestsException = _ServiceError . hasCode "TooManyRequestsException"
 
 -- | Thrown if there are parallel requests to modify a resource.
 _ConcurrentModificationException :: AsError a => Getting (First ServiceError) a ServiceError
 _ConcurrentModificationException =
-    _ServiceError . hasStatus 400 . hasCode "ConcurrentModificationException"
+    _ServiceError . hasCode "ConcurrentModificationException"
 
 -- | Thrown when a user tries to use a login which is already linked to
 -- another account.
 _ResourceConflictException :: AsError a => Getting (First ServiceError) a ServiceError
 _ResourceConflictException =
-    _ServiceError . hasStatus 409 . hasCode "ResourceConflictException"
+    _ServiceError . hasCode "ResourceConflictException"
 
 -- | The provided developer user identifier is already registered with
 -- Cognito under a different identity ID.
 _DeveloperUserAlreadyRegisteredException :: AsError a => Getting (First ServiceError) a ServiceError
 _DeveloperUserAlreadyRegisteredException =
-    _ServiceError .
-    hasStatus 400 . hasCode "DeveloperUserAlreadyRegisteredException"
+    _ServiceError . hasCode "DeveloperUserAlreadyRegisteredException"
 
 -- | Thrown when the requested resource (for example, a dataset or record)
 -- does not exist.
 _ResourceNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
 _ResourceNotFoundException =
-    _ServiceError . hasStatus 404 . hasCode "ResourceNotFoundException"
+    _ServiceError . hasCode "ResourceNotFoundException"
 
 -- | Thrown when the total number of user pools has exceeded a preset limit.
 _LimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
-_LimitExceededException =
-    _ServiceError . hasStatus 400 . hasCode "LimitExceededException"
+_LimitExceededException = _ServiceError . hasCode "LimitExceededException"
diff --git a/gen/Network/AWS/CognitoIdentity/Types/Product.hs b/gen/Network/AWS/CognitoIdentity/Types/Product.hs
--- a/gen/Network/AWS/CognitoIdentity/Types/Product.hs
+++ b/gen/Network/AWS/CognitoIdentity/Types/Product.hs
@@ -21,6 +21,56 @@
 import           Network.AWS.Lens
 import           Network.AWS.Prelude
 
+-- | A provider representing a Cognito User Identity Pool and its client ID.
+--
+-- /See:/ 'cognitoIdentityProvider' smart constructor.
+data CognitoIdentityProvider = CognitoIdentityProvider'
+    { _cipClientId     :: !(Maybe Text)
+    , _cipProviderName :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CognitoIdentityProvider' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cipClientId'
+--
+-- * 'cipProviderName'
+cognitoIdentityProvider
+    :: CognitoIdentityProvider
+cognitoIdentityProvider =
+    CognitoIdentityProvider'
+    { _cipClientId = Nothing
+    , _cipProviderName = Nothing
+    }
+
+-- | The client ID for the Cognito User Identity Pool.
+cipClientId :: Lens' CognitoIdentityProvider (Maybe Text)
+cipClientId = lens _cipClientId (\ s a -> s{_cipClientId = a});
+
+-- | The provider name for a Cognito User Identity Pool. For example,
+-- 'cognito-idp.us-east-1.amazonaws.com\/us-east-1_123456789'.
+cipProviderName :: Lens' CognitoIdentityProvider (Maybe Text)
+cipProviderName = lens _cipProviderName (\ s a -> s{_cipProviderName = a});
+
+instance FromJSON CognitoIdentityProvider where
+        parseJSON
+          = withObject "CognitoIdentityProvider"
+              (\ x ->
+                 CognitoIdentityProvider' <$>
+                   (x .:? "ClientId") <*> (x .:? "ProviderName"))
+
+instance Hashable CognitoIdentityProvider
+
+instance NFData CognitoIdentityProvider
+
+instance ToJSON CognitoIdentityProvider where
+        toJSON CognitoIdentityProvider'{..}
+          = object
+              (catMaybes
+                 [("ClientId" .=) <$> _cipClientId,
+                  ("ProviderName" .=) <$> _cipProviderName])
+
 -- | Credentials for the provided identity ID.
 --
 -- /See:/ 'credentials' smart constructor.
@@ -79,6 +129,8 @@
 
 instance Hashable Credentials
 
+instance NFData Credentials
+
 -- | A description of the identity.
 --
 -- /See:/ 'identityDescription' smart constructor.
@@ -138,6 +190,8 @@
 
 instance Hashable IdentityDescription
 
+instance NFData IdentityDescription
+
 -- | An object representing a Cognito identity pool.
 --
 -- /See:/ 'identityPool' smart constructor.
@@ -145,6 +199,7 @@
     { _ipSupportedLoginProviders        :: !(Maybe (Map Text Text))
     , _ipDeveloperProviderName          :: !(Maybe Text)
     , _ipOpenIdConnectProviderARNs      :: !(Maybe [Text])
+    , _ipCognitoIdentityProviders       :: !(Maybe [CognitoIdentityProvider])
     , _ipIdentityPoolId                 :: !Text
     , _ipIdentityPoolName               :: !Text
     , _ipAllowUnauthenticatedIdentities :: !Bool
@@ -160,6 +215,8 @@
 --
 -- * 'ipOpenIdConnectProviderARNs'
 --
+-- * 'ipCognitoIdentityProviders'
+--
 -- * 'ipIdentityPoolId'
 --
 -- * 'ipIdentityPoolName'
@@ -175,6 +232,7 @@
     { _ipSupportedLoginProviders = Nothing
     , _ipDeveloperProviderName = Nothing
     , _ipOpenIdConnectProviderARNs = Nothing
+    , _ipCognitoIdentityProviders = Nothing
     , _ipIdentityPoolId = pIdentityPoolId_
     , _ipIdentityPoolName = pIdentityPoolName_
     , _ipAllowUnauthenticatedIdentities = pAllowUnauthenticatedIdentities_
@@ -192,6 +250,10 @@
 ipOpenIdConnectProviderARNs :: Lens' IdentityPool [Text]
 ipOpenIdConnectProviderARNs = lens _ipOpenIdConnectProviderARNs (\ s a -> s{_ipOpenIdConnectProviderARNs = a}) . _Default . _Coerce;
 
+-- | A list representing a Cognito User Identity Pool and its client ID.
+ipCognitoIdentityProviders :: Lens' IdentityPool [CognitoIdentityProvider]
+ipCognitoIdentityProviders = lens _ipCognitoIdentityProviders (\ s a -> s{_ipCognitoIdentityProviders = a}) . _Default . _Coerce;
+
 -- | An identity pool ID in the format REGION:GUID.
 ipIdentityPoolId :: Lens' IdentityPool Text
 ipIdentityPoolId = lens _ipIdentityPoolId (\ s a -> s{_ipIdentityPoolId = a});
@@ -212,12 +274,15 @@
                    (x .:? "SupportedLoginProviders" .!= mempty) <*>
                      (x .:? "DeveloperProviderName")
                      <*> (x .:? "OpenIdConnectProviderARNs" .!= mempty)
+                     <*> (x .:? "CognitoIdentityProviders" .!= mempty)
                      <*> (x .: "IdentityPoolId")
                      <*> (x .: "IdentityPoolName")
                      <*> (x .: "AllowUnauthenticatedIdentities"))
 
 instance Hashable IdentityPool
 
+instance NFData IdentityPool
+
 instance ToJSON IdentityPool where
         toJSON IdentityPool'{..}
           = object
@@ -228,6 +293,8 @@
                     _ipDeveloperProviderName,
                   ("OpenIdConnectProviderARNs" .=) <$>
                     _ipOpenIdConnectProviderARNs,
+                  ("CognitoIdentityProviders" .=) <$>
+                    _ipCognitoIdentityProviders,
                   Just ("IdentityPoolId" .= _ipIdentityPoolId),
                   Just ("IdentityPoolName" .= _ipIdentityPoolName),
                   Just
@@ -275,6 +342,8 @@
 
 instance Hashable IdentityPoolShortDescription
 
+instance NFData IdentityPoolShortDescription
+
 -- | An array of UnprocessedIdentityId objects, each of which contains an
 -- ErrorCode and IdentityId.
 --
@@ -315,3 +384,5 @@
                    (x .:? "ErrorCode") <*> (x .:? "IdentityId"))
 
 instance Hashable UnprocessedIdentityId
+
+instance NFData UnprocessedIdentityId
diff --git a/gen/Network/AWS/CognitoIdentity/Types/Sum.hs b/gen/Network/AWS/CognitoIdentity/Types/Sum.hs
--- a/gen/Network/AWS/CognitoIdentity/Types/Sum.hs
+++ b/gen/Network/AWS/CognitoIdentity/Types/Sum.hs
@@ -37,6 +37,7 @@
         InternalServerError -> "InternalServerError"
 
 instance Hashable     CognitoErrorCode
+instance NFData       CognitoErrorCode
 instance ToByteString CognitoErrorCode
 instance ToQuery      CognitoErrorCode
 instance ToHeader     CognitoErrorCode
diff --git a/gen/Network/AWS/CognitoIdentity/UnlinkDeveloperIdentity.hs b/gen/Network/AWS/CognitoIdentity/UnlinkDeveloperIdentity.hs
--- a/gen/Network/AWS/CognitoIdentity/UnlinkDeveloperIdentity.hs
+++ b/gen/Network/AWS/CognitoIdentity/UnlinkDeveloperIdentity.hs
@@ -109,6 +109,8 @@
 
 instance Hashable UnlinkDeveloperIdentity
 
+instance NFData UnlinkDeveloperIdentity
+
 instance ToHeaders UnlinkDeveloperIdentity where
         toHeaders
           = const
@@ -148,3 +150,5 @@
 unlinkDeveloperIdentityResponse
     :: UnlinkDeveloperIdentityResponse
 unlinkDeveloperIdentityResponse = UnlinkDeveloperIdentityResponse'
+
+instance NFData UnlinkDeveloperIdentityResponse
diff --git a/gen/Network/AWS/CognitoIdentity/UnlinkIdentity.hs b/gen/Network/AWS/CognitoIdentity/UnlinkIdentity.hs
--- a/gen/Network/AWS/CognitoIdentity/UnlinkIdentity.hs
+++ b/gen/Network/AWS/CognitoIdentity/UnlinkIdentity.hs
@@ -93,6 +93,8 @@
 
 instance Hashable UnlinkIdentity
 
+instance NFData UnlinkIdentity
+
 instance ToHeaders UnlinkIdentity where
         toHeaders
           = const
@@ -127,3 +129,5 @@
 unlinkIdentityResponse
     :: UnlinkIdentityResponse
 unlinkIdentityResponse = UnlinkIdentityResponse'
+
+instance NFData UnlinkIdentityResponse
diff --git a/gen/Network/AWS/CognitoIdentity/UpdateIdentityPool.hs b/gen/Network/AWS/CognitoIdentity/UpdateIdentityPool.hs
--- a/gen/Network/AWS/CognitoIdentity/UpdateIdentityPool.hs
+++ b/gen/Network/AWS/CognitoIdentity/UpdateIdentityPool.hs
@@ -30,6 +30,7 @@
     , uipSupportedLoginProviders
     , uipDeveloperProviderName
     , uipOpenIdConnectProviderARNs
+    , uipCognitoIdentityProviders
     , uipIdentityPoolId
     , uipIdentityPoolName
     , uipAllowUnauthenticatedIdentities
@@ -41,6 +42,7 @@
     , ipSupportedLoginProviders
     , ipDeveloperProviderName
     , ipOpenIdConnectProviderARNs
+    , ipCognitoIdentityProviders
     , ipIdentityPoolId
     , ipIdentityPoolName
     , ipAllowUnauthenticatedIdentities
@@ -60,6 +62,7 @@
     { _uipSupportedLoginProviders        :: !(Maybe (Map Text Text))
     , _uipDeveloperProviderName          :: !(Maybe Text)
     , _uipOpenIdConnectProviderARNs      :: !(Maybe [Text])
+    , _uipCognitoIdentityProviders       :: !(Maybe [CognitoIdentityProvider])
     , _uipIdentityPoolId                 :: !Text
     , _uipIdentityPoolName               :: !Text
     , _uipAllowUnauthenticatedIdentities :: !Bool
@@ -75,6 +78,8 @@
 --
 -- * 'uipOpenIdConnectProviderARNs'
 --
+-- * 'uipCognitoIdentityProviders'
+--
 -- * 'uipIdentityPoolId'
 --
 -- * 'uipIdentityPoolName'
@@ -90,6 +95,7 @@
     { _uipSupportedLoginProviders = Nothing
     , _uipDeveloperProviderName = Nothing
     , _uipOpenIdConnectProviderARNs = Nothing
+    , _uipCognitoIdentityProviders = Nothing
     , _uipIdentityPoolId = pIdentityPoolId_
     , _uipIdentityPoolName = pIdentityPoolName_
     , _uipAllowUnauthenticatedIdentities = pAllowUnauthenticatedIdentities_
@@ -107,6 +113,10 @@
 uipOpenIdConnectProviderARNs :: Lens' UpdateIdentityPool [Text]
 uipOpenIdConnectProviderARNs = lens _uipOpenIdConnectProviderARNs (\ s a -> s{_uipOpenIdConnectProviderARNs = a}) . _Default . _Coerce;
 
+-- | A list representing a Cognito User Identity Pool and its client ID.
+uipCognitoIdentityProviders :: Lens' UpdateIdentityPool [CognitoIdentityProvider]
+uipCognitoIdentityProviders = lens _uipCognitoIdentityProviders (\ s a -> s{_uipCognitoIdentityProviders = a}) . _Default . _Coerce;
+
 -- | An identity pool ID in the format REGION:GUID.
 uipIdentityPoolId :: Lens' UpdateIdentityPool Text
 uipIdentityPoolId = lens _uipIdentityPoolId (\ s a -> s{_uipIdentityPoolId = a});
@@ -126,6 +136,8 @@
 
 instance Hashable UpdateIdentityPool
 
+instance NFData UpdateIdentityPool
+
 instance ToHeaders UpdateIdentityPool where
         toHeaders
           = const
@@ -146,6 +158,8 @@
                     _uipDeveloperProviderName,
                   ("OpenIdConnectProviderARNs" .=) <$>
                     _uipOpenIdConnectProviderARNs,
+                  ("CognitoIdentityProviders" .=) <$>
+                    _uipCognitoIdentityProviders,
                   Just ("IdentityPoolId" .= _uipIdentityPoolId),
                   Just ("IdentityPoolName" .= _uipIdentityPoolName),
                   Just
