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-iot.cabal b/amazonka-iot.cabal
--- a/amazonka-iot.cabal
+++ b/amazonka-iot.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-iot
-version:               1.4.0
+version:               1.4.1
 synopsis:              Amazon IoT SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -62,11 +62,14 @@
         , Network.AWS.IoT.CreatePolicyVersion
         , Network.AWS.IoT.CreateThing
         , Network.AWS.IoT.CreateTopicRule
+        , Network.AWS.IoT.DeleteCACertificate
         , Network.AWS.IoT.DeleteCertificate
         , Network.AWS.IoT.DeletePolicy
         , Network.AWS.IoT.DeletePolicyVersion
+        , Network.AWS.IoT.DeleteRegistrationCode
         , Network.AWS.IoT.DeleteThing
         , Network.AWS.IoT.DeleteTopicRule
+        , Network.AWS.IoT.DescribeCACertificate
         , Network.AWS.IoT.DescribeCertificate
         , Network.AWS.IoT.DescribeEndpoint
         , Network.AWS.IoT.DescribeThing
@@ -77,8 +80,11 @@
         , Network.AWS.IoT.GetLoggingOptions
         , Network.AWS.IoT.GetPolicy
         , Network.AWS.IoT.GetPolicyVersion
+        , Network.AWS.IoT.GetRegistrationCode
         , Network.AWS.IoT.GetTopicRule
+        , Network.AWS.IoT.ListCACertificates
         , Network.AWS.IoT.ListCertificates
+        , Network.AWS.IoT.ListCertificatesByCA
         , Network.AWS.IoT.ListPolicies
         , Network.AWS.IoT.ListPolicyVersions
         , Network.AWS.IoT.ListPrincipalPolicies
@@ -86,12 +92,15 @@
         , Network.AWS.IoT.ListThingPrincipals
         , Network.AWS.IoT.ListThings
         , Network.AWS.IoT.ListTopicRules
+        , Network.AWS.IoT.RegisterCACertificate
+        , Network.AWS.IoT.RegisterCertificate
         , Network.AWS.IoT.RejectCertificateTransfer
         , Network.AWS.IoT.ReplaceTopicRule
         , Network.AWS.IoT.SetDefaultPolicyVersion
         , Network.AWS.IoT.SetLoggingOptions
         , Network.AWS.IoT.TransferCertificate
         , Network.AWS.IoT.Types
+        , Network.AWS.IoT.UpdateCACertificate
         , Network.AWS.IoT.UpdateCertificate
         , Network.AWS.IoT.UpdateThing
         , Network.AWS.IoT.Waiters
@@ -101,7 +110,7 @@
         , Network.AWS.IoT.Types.Sum
 
     build-depends:
-          amazonka-core == 1.4.0.*
+          amazonka-core == 1.4.1.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-iot-test
@@ -121,9 +130,9 @@
         , Test.AWS.IoT.Internal
 
     build-depends:
-          amazonka-core == 1.4.0.*
-        , amazonka-test == 1.4.0.*
-        , amazonka-iot == 1.4.0.*
+          amazonka-core == 1.4.1.*
+        , amazonka-test == 1.4.1.*
+        , amazonka-iot == 1.4.1.*
         , base
         , bytestring
         , tasty
diff --git a/fixture/DeleteCACertificate.yaml b/fixture/DeleteCACertificate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCACertificate.yaml
diff --git a/fixture/DeleteCACertificateResponse.proto b/fixture/DeleteCACertificateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCACertificateResponse.proto
diff --git a/fixture/DeleteRegistrationCode.yaml b/fixture/DeleteRegistrationCode.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRegistrationCode.yaml
diff --git a/fixture/DeleteRegistrationCodeResponse.proto b/fixture/DeleteRegistrationCodeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRegistrationCodeResponse.proto
diff --git a/fixture/DescribeCACertificate.yaml b/fixture/DescribeCACertificate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCACertificate.yaml
diff --git a/fixture/DescribeCACertificateResponse.proto b/fixture/DescribeCACertificateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCACertificateResponse.proto
diff --git a/fixture/GetRegistrationCode.yaml b/fixture/GetRegistrationCode.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetRegistrationCode.yaml
diff --git a/fixture/GetRegistrationCodeResponse.proto b/fixture/GetRegistrationCodeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetRegistrationCodeResponse.proto
diff --git a/fixture/ListCACertificates.yaml b/fixture/ListCACertificates.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListCACertificates.yaml
diff --git a/fixture/ListCACertificatesResponse.proto b/fixture/ListCACertificatesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListCACertificatesResponse.proto
diff --git a/fixture/ListCertificatesByCA.yaml b/fixture/ListCertificatesByCA.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListCertificatesByCA.yaml
diff --git a/fixture/ListCertificatesByCAResponse.proto b/fixture/ListCertificatesByCAResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListCertificatesByCAResponse.proto
diff --git a/fixture/RegisterCACertificate.yaml b/fixture/RegisterCACertificate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterCACertificate.yaml
diff --git a/fixture/RegisterCACertificateResponse.proto b/fixture/RegisterCACertificateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterCACertificateResponse.proto
diff --git a/fixture/RegisterCertificate.yaml b/fixture/RegisterCertificate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterCertificate.yaml
diff --git a/fixture/RegisterCertificateResponse.proto b/fixture/RegisterCertificateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterCertificateResponse.proto
diff --git a/fixture/UpdateCACertificate.yaml b/fixture/UpdateCACertificate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCACertificate.yaml
diff --git a/fixture/UpdateCACertificateResponse.proto b/fixture/UpdateCACertificateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCACertificateResponse.proto
diff --git a/gen/Network/AWS/IoT.hs b/gen/Network/AWS/IoT.hs
--- a/gen/Network/AWS/IoT.hs
+++ b/gen/Network/AWS/IoT.hs
@@ -31,6 +31,9 @@
     -- * Errors
     -- $errors
 
+    -- ** CertificateConflictException
+    , _CertificateConflictException
+
     -- ** SqlParseException
     , _SqlParseException
 
@@ -43,6 +46,9 @@
     -- ** CertificateStateException
     , _CertificateStateException
 
+    -- ** RegistrationCodeValidationException
+    , _RegistrationCodeValidationException
+
     -- ** MalformedPolicyException
     , _MalformedPolicyException
 
@@ -52,6 +58,9 @@
     -- ** ResourceAlreadyExistsException
     , _ResourceAlreadyExistsException
 
+    -- ** CertificateValidationException
+    , _CertificateValidationException
+
     -- ** TransferAlreadyCompletedException
     , _TransferAlreadyCompletedException
 
@@ -91,6 +100,9 @@
     -- ** CreatePolicy
     , module Network.AWS.IoT.CreatePolicy
 
+    -- ** RegisterCertificate
+    , module Network.AWS.IoT.RegisterCertificate
+
     -- ** ListThingPrincipals
     , module Network.AWS.IoT.ListThingPrincipals
 
@@ -124,12 +136,21 @@
     -- ** CreatePolicyVersion
     , module Network.AWS.IoT.CreatePolicyVersion
 
+    -- ** ListCACertificates
+    , module Network.AWS.IoT.ListCACertificates
+
     -- ** DeleteTopicRule
     , module Network.AWS.IoT.DeleteTopicRule
 
     -- ** ListPrincipalPolicies
     , module Network.AWS.IoT.ListPrincipalPolicies
 
+    -- ** DeleteCACertificate
+    , module Network.AWS.IoT.DeleteCACertificate
+
+    -- ** UpdateCACertificate
+    , module Network.AWS.IoT.UpdateCACertificate
+
     -- ** ListTopicRules
     , module Network.AWS.IoT.ListTopicRules
 
@@ -157,6 +178,15 @@
     -- ** UpdateCertificate
     , module Network.AWS.IoT.UpdateCertificate
 
+    -- ** DescribeCACertificate
+    , module Network.AWS.IoT.DescribeCACertificate
+
+    -- ** GetRegistrationCode
+    , module Network.AWS.IoT.GetRegistrationCode
+
+    -- ** ListCertificatesByCA
+    , module Network.AWS.IoT.ListCertificatesByCA
+
     -- ** AttachThingPrincipal
     , module Network.AWS.IoT.AttachThingPrincipal
 
@@ -166,6 +196,9 @@
     -- ** DetachPrincipalPolicy
     , module Network.AWS.IoT.DetachPrincipalPolicy
 
+    -- ** DeleteRegistrationCode
+    , module Network.AWS.IoT.DeleteRegistrationCode
+
     -- ** CreateThing
     , module Network.AWS.IoT.CreateThing
 
@@ -196,6 +229,9 @@
     -- ** DescribeEndpoint
     , module Network.AWS.IoT.DescribeEndpoint
 
+    -- ** RegisterCACertificate
+    , module Network.AWS.IoT.RegisterCACertificate
+
     -- ** SetLoggingOptions
     , module Network.AWS.IoT.SetLoggingOptions
 
@@ -210,6 +246,9 @@
 
     -- * Types
 
+    -- ** CACertificateStatus
+    , CACertificateStatus (..)
+
     -- ** CertificateStatus
     , CertificateStatus (..)
 
@@ -239,6 +278,24 @@
     , attributePayload
     , apAttributes
 
+    -- ** CACertificate
+    , CACertificate
+    , cACertificate
+    , cacStatus
+    , cacCertificateARN
+    , cacCertificateId
+    , cacCreationDate
+
+    -- ** CACertificateDescription
+    , CACertificateDescription
+    , cACertificateDescription
+    , cacdStatus
+    , cacdOwnedBy
+    , cacdCertificatePem
+    , cacdCertificateARN
+    , cacdCertificateId
+    , cacdCreationDate
+
     -- ** Certificate
     , Certificate
     , certificate
@@ -253,10 +310,13 @@
     , cdStatus
     , cdOwnedBy
     , cdLastModifiedDate
+    , cdCaCertificateId
+    , cdPreviousOwnedBy
     , cdCertificatePem
     , cdCertificateARN
     , cdCertificateId
     , cdCreationDate
+    , cdTransferData
 
     -- ** CloudwatchAlarmAction
     , CloudwatchAlarmAction
@@ -377,6 +437,7 @@
     , topicRule
     , trCreatedAt
     , trActions
+    , trAwsIotSqlVersion
     , trRuleDisabled
     , trRuleName
     , trSql
@@ -394,10 +455,20 @@
     -- ** TopicRulePayload
     , TopicRulePayload
     , topicRulePayload
+    , trpAwsIotSqlVersion
     , trpRuleDisabled
     , trpDescription
     , trpSql
     , trpActions
+
+    -- ** TransferData
+    , TransferData
+    , transferData
+    , tdTransferDate
+    , tdAcceptDate
+    , tdTransferMessage
+    , tdRejectDate
+    , tdRejectReason
     ) where
 
 import           Network.AWS.IoT.AcceptCertificateTransfer
@@ -410,11 +481,14 @@
 import           Network.AWS.IoT.CreatePolicyVersion
 import           Network.AWS.IoT.CreateThing
 import           Network.AWS.IoT.CreateTopicRule
+import           Network.AWS.IoT.DeleteCACertificate
 import           Network.AWS.IoT.DeleteCertificate
 import           Network.AWS.IoT.DeletePolicy
 import           Network.AWS.IoT.DeletePolicyVersion
+import           Network.AWS.IoT.DeleteRegistrationCode
 import           Network.AWS.IoT.DeleteThing
 import           Network.AWS.IoT.DeleteTopicRule
+import           Network.AWS.IoT.DescribeCACertificate
 import           Network.AWS.IoT.DescribeCertificate
 import           Network.AWS.IoT.DescribeEndpoint
 import           Network.AWS.IoT.DescribeThing
@@ -425,8 +499,11 @@
 import           Network.AWS.IoT.GetLoggingOptions
 import           Network.AWS.IoT.GetPolicy
 import           Network.AWS.IoT.GetPolicyVersion
+import           Network.AWS.IoT.GetRegistrationCode
 import           Network.AWS.IoT.GetTopicRule
+import           Network.AWS.IoT.ListCACertificates
 import           Network.AWS.IoT.ListCertificates
+import           Network.AWS.IoT.ListCertificatesByCA
 import           Network.AWS.IoT.ListPolicies
 import           Network.AWS.IoT.ListPolicyVersions
 import           Network.AWS.IoT.ListPrincipalPolicies
@@ -434,12 +511,15 @@
 import           Network.AWS.IoT.ListThingPrincipals
 import           Network.AWS.IoT.ListThings
 import           Network.AWS.IoT.ListTopicRules
+import           Network.AWS.IoT.RegisterCACertificate
+import           Network.AWS.IoT.RegisterCertificate
 import           Network.AWS.IoT.RejectCertificateTransfer
 import           Network.AWS.IoT.ReplaceTopicRule
 import           Network.AWS.IoT.SetDefaultPolicyVersion
 import           Network.AWS.IoT.SetLoggingOptions
 import           Network.AWS.IoT.TransferCertificate
 import           Network.AWS.IoT.Types
+import           Network.AWS.IoT.UpdateCACertificate
 import           Network.AWS.IoT.UpdateCertificate
 import           Network.AWS.IoT.UpdateThing
 import           Network.AWS.IoT.Waiters
diff --git a/gen/Network/AWS/IoT/AcceptCertificateTransfer.hs b/gen/Network/AWS/IoT/AcceptCertificateTransfer.hs
--- a/gen/Network/AWS/IoT/AcceptCertificateTransfer.hs
+++ b/gen/Network/AWS/IoT/AcceptCertificateTransfer.hs
@@ -85,6 +85,8 @@
 
 instance Hashable AcceptCertificateTransfer
 
+instance NFData AcceptCertificateTransfer
+
 instance ToHeaders AcceptCertificateTransfer where
         toHeaders = const mempty
 
@@ -111,3 +113,5 @@
 acceptCertificateTransferResponse
     :: AcceptCertificateTransferResponse
 acceptCertificateTransferResponse = AcceptCertificateTransferResponse'
+
+instance NFData AcceptCertificateTransferResponse
diff --git a/gen/Network/AWS/IoT/AttachPrincipalPolicy.hs b/gen/Network/AWS/IoT/AttachPrincipalPolicy.hs
--- a/gen/Network/AWS/IoT/AttachPrincipalPolicy.hs
+++ b/gen/Network/AWS/IoT/AttachPrincipalPolicy.hs
@@ -83,6 +83,8 @@
 
 instance Hashable AttachPrincipalPolicy
 
+instance NFData AttachPrincipalPolicy
+
 instance ToHeaders AttachPrincipalPolicy where
         toHeaders AttachPrincipalPolicy'{..}
           = mconcat ["x-amzn-iot-principal" =# _appPrincipal]
@@ -108,3 +110,5 @@
 attachPrincipalPolicyResponse
     :: AttachPrincipalPolicyResponse
 attachPrincipalPolicyResponse = AttachPrincipalPolicyResponse'
+
+instance NFData AttachPrincipalPolicyResponse
diff --git a/gen/Network/AWS/IoT/AttachThingPrincipal.hs b/gen/Network/AWS/IoT/AttachThingPrincipal.hs
--- a/gen/Network/AWS/IoT/AttachThingPrincipal.hs
+++ b/gen/Network/AWS/IoT/AttachThingPrincipal.hs
@@ -87,6 +87,8 @@
 
 instance Hashable AttachThingPrincipal
 
+instance NFData AttachThingPrincipal
+
 instance ToHeaders AttachThingPrincipal where
         toHeaders AttachThingPrincipal'{..}
           = mconcat ["x-amzn-principal" =# _atpPrincipal]
@@ -125,3 +127,5 @@
 -- | The response status code.
 atprsResponseStatus :: Lens' AttachThingPrincipalResponse Int
 atprsResponseStatus = lens _atprsResponseStatus (\ s a -> s{_atprsResponseStatus = a});
+
+instance NFData AttachThingPrincipalResponse
diff --git a/gen/Network/AWS/IoT/CancelCertificateTransfer.hs b/gen/Network/AWS/IoT/CancelCertificateTransfer.hs
--- a/gen/Network/AWS/IoT/CancelCertificateTransfer.hs
+++ b/gen/Network/AWS/IoT/CancelCertificateTransfer.hs
@@ -82,6 +82,8 @@
 
 instance Hashable CancelCertificateTransfer
 
+instance NFData CancelCertificateTransfer
+
 instance ToHeaders CancelCertificateTransfer where
         toHeaders = const mempty
 
@@ -107,3 +109,5 @@
 cancelCertificateTransferResponse
     :: CancelCertificateTransferResponse
 cancelCertificateTransferResponse = CancelCertificateTransferResponse'
+
+instance NFData CancelCertificateTransferResponse
diff --git a/gen/Network/AWS/IoT/CreateCertificateFromCsr.hs b/gen/Network/AWS/IoT/CreateCertificateFromCsr.hs
--- a/gen/Network/AWS/IoT/CreateCertificateFromCsr.hs
+++ b/gen/Network/AWS/IoT/CreateCertificateFromCsr.hs
@@ -135,6 +135,8 @@
 
 instance Hashable CreateCertificateFromCsr
 
+instance NFData CreateCertificateFromCsr
+
 instance ToHeaders CreateCertificateFromCsr where
         toHeaders = const mempty
 
@@ -202,3 +204,5 @@
 -- | The response status code.
 ccfcrsResponseStatus :: Lens' CreateCertificateFromCsrResponse Int
 ccfcrsResponseStatus = lens _ccfcrsResponseStatus (\ s a -> s{_ccfcrsResponseStatus = a});
+
+instance NFData CreateCertificateFromCsrResponse
diff --git a/gen/Network/AWS/IoT/CreateKeysAndCertificate.hs b/gen/Network/AWS/IoT/CreateKeysAndCertificate.hs
--- a/gen/Network/AWS/IoT/CreateKeysAndCertificate.hs
+++ b/gen/Network/AWS/IoT/CreateKeysAndCertificate.hs
@@ -87,6 +87,8 @@
 
 instance Hashable CreateKeysAndCertificate
 
+instance NFData CreateKeysAndCertificate
+
 instance ToHeaders CreateKeysAndCertificate where
         toHeaders = const mempty
 
@@ -156,3 +158,5 @@
 -- | The response status code.
 ckacrsResponseStatus :: Lens' CreateKeysAndCertificateResponse Int
 ckacrsResponseStatus = lens _ckacrsResponseStatus (\ s a -> s{_ckacrsResponseStatus = a});
+
+instance NFData CreateKeysAndCertificateResponse
diff --git a/gen/Network/AWS/IoT/CreatePolicy.hs b/gen/Network/AWS/IoT/CreatePolicy.hs
--- a/gen/Network/AWS/IoT/CreatePolicy.hs
+++ b/gen/Network/AWS/IoT/CreatePolicy.hs
@@ -99,6 +99,8 @@
 
 instance Hashable CreatePolicy
 
+instance NFData CreatePolicy
+
 instance ToHeaders CreatePolicy where
         toHeaders = const mempty
 
@@ -170,3 +172,5 @@
 -- | The response status code.
 cprsResponseStatus :: Lens' CreatePolicyResponse Int
 cprsResponseStatus = lens _cprsResponseStatus (\ s a -> s{_cprsResponseStatus = a});
+
+instance NFData CreatePolicyResponse
diff --git a/gen/Network/AWS/IoT/CreatePolicyVersion.hs b/gen/Network/AWS/IoT/CreatePolicyVersion.hs
--- a/gen/Network/AWS/IoT/CreatePolicyVersion.hs
+++ b/gen/Network/AWS/IoT/CreatePolicyVersion.hs
@@ -117,6 +117,8 @@
 
 instance Hashable CreatePolicyVersion
 
+instance NFData CreatePolicyVersion
+
 instance ToHeaders CreatePolicyVersion where
         toHeaders = const mempty
 
@@ -190,3 +192,5 @@
 -- | The response status code.
 cpvrsResponseStatus :: Lens' CreatePolicyVersionResponse Int
 cpvrsResponseStatus = lens _cpvrsResponseStatus (\ s a -> s{_cpvrsResponseStatus = a});
+
+instance NFData CreatePolicyVersionResponse
diff --git a/gen/Network/AWS/IoT/CreateThing.hs b/gen/Network/AWS/IoT/CreateThing.hs
--- a/gen/Network/AWS/IoT/CreateThing.hs
+++ b/gen/Network/AWS/IoT/CreateThing.hs
@@ -90,6 +90,8 @@
 
 instance Hashable CreateThing
 
+instance NFData CreateThing
+
 instance ToHeaders CreateThing where
         toHeaders = const mempty
 
@@ -145,3 +147,5 @@
 -- | The response status code.
 ctrsResponseStatus :: Lens' CreateThingResponse Int
 ctrsResponseStatus = lens _ctrsResponseStatus (\ s a -> s{_ctrsResponseStatus = a});
+
+instance NFData CreateThingResponse
diff --git a/gen/Network/AWS/IoT/CreateTopicRule.hs b/gen/Network/AWS/IoT/CreateTopicRule.hs
--- a/gen/Network/AWS/IoT/CreateTopicRule.hs
+++ b/gen/Network/AWS/IoT/CreateTopicRule.hs
@@ -82,6 +82,8 @@
 
 instance Hashable CreateTopicRule
 
+instance NFData CreateTopicRule
+
 instance ToHeaders CreateTopicRule where
         toHeaders = const mempty
 
@@ -108,3 +110,5 @@
 createTopicRuleResponse
     :: CreateTopicRuleResponse
 createTopicRuleResponse = CreateTopicRuleResponse'
+
+instance NFData CreateTopicRuleResponse
diff --git a/gen/Network/AWS/IoT/DeleteCACertificate.hs b/gen/Network/AWS/IoT/DeleteCACertificate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/IoT/DeleteCACertificate.hs
@@ -0,0 +1,116 @@
+{-# 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.IoT.DeleteCACertificate
+-- 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 a registered CA certificate.
+module Network.AWS.IoT.DeleteCACertificate
+    (
+    -- * Creating a Request
+      deleteCACertificate
+    , DeleteCACertificate
+    -- * Request Lenses
+    , dcacCertificateId
+
+    -- * Destructuring the Response
+    , deleteCACertificateResponse
+    , DeleteCACertificateResponse
+    -- * Response Lenses
+    , dcacrsResponseStatus
+    ) where
+
+import           Network.AWS.IoT.Types
+import           Network.AWS.IoT.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Input for the DeleteCACertificate operation.
+--
+-- /See:/ 'deleteCACertificate' smart constructor.
+newtype DeleteCACertificate = DeleteCACertificate'
+    { _dcacCertificateId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteCACertificate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcacCertificateId'
+deleteCACertificate
+    :: Text -- ^ 'dcacCertificateId'
+    -> DeleteCACertificate
+deleteCACertificate pCertificateId_ =
+    DeleteCACertificate'
+    { _dcacCertificateId = pCertificateId_
+    }
+
+-- | The ID of the certificate to delete.
+dcacCertificateId :: Lens' DeleteCACertificate Text
+dcacCertificateId = lens _dcacCertificateId (\ s a -> s{_dcacCertificateId = a});
+
+instance AWSRequest DeleteCACertificate where
+        type Rs DeleteCACertificate =
+             DeleteCACertificateResponse
+        request = delete ioT
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteCACertificateResponse' <$> (pure (fromEnum s)))
+
+instance Hashable DeleteCACertificate
+
+instance NFData DeleteCACertificate
+
+instance ToHeaders DeleteCACertificate where
+        toHeaders = const mempty
+
+instance ToPath DeleteCACertificate where
+        toPath DeleteCACertificate'{..}
+          = mconcat
+              ["/cacertificate/", toBS _dcacCertificateId]
+
+instance ToQuery DeleteCACertificate where
+        toQuery = const mempty
+
+-- | The output for the DeleteCACertificate operation.
+--
+-- /See:/ 'deleteCACertificateResponse' smart constructor.
+newtype DeleteCACertificateResponse = DeleteCACertificateResponse'
+    { _dcacrsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteCACertificateResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcacrsResponseStatus'
+deleteCACertificateResponse
+    :: Int -- ^ 'dcacrsResponseStatus'
+    -> DeleteCACertificateResponse
+deleteCACertificateResponse pResponseStatus_ =
+    DeleteCACertificateResponse'
+    { _dcacrsResponseStatus = pResponseStatus_
+    }
+
+-- | The response status code.
+dcacrsResponseStatus :: Lens' DeleteCACertificateResponse Int
+dcacrsResponseStatus = lens _dcacrsResponseStatus (\ s a -> s{_dcacrsResponseStatus = a});
+
+instance NFData DeleteCACertificateResponse
diff --git a/gen/Network/AWS/IoT/DeleteCertificate.hs b/gen/Network/AWS/IoT/DeleteCertificate.hs
--- a/gen/Network/AWS/IoT/DeleteCertificate.hs
+++ b/gen/Network/AWS/IoT/DeleteCertificate.hs
@@ -75,6 +75,8 @@
 
 instance Hashable DeleteCertificate
 
+instance NFData DeleteCertificate
+
 instance ToHeaders DeleteCertificate where
         toHeaders = const mempty
 
@@ -95,3 +97,5 @@
 deleteCertificateResponse
     :: DeleteCertificateResponse
 deleteCertificateResponse = DeleteCertificateResponse'
+
+instance NFData DeleteCertificateResponse
diff --git a/gen/Network/AWS/IoT/DeletePolicy.hs b/gen/Network/AWS/IoT/DeletePolicy.hs
--- a/gen/Network/AWS/IoT/DeletePolicy.hs
+++ b/gen/Network/AWS/IoT/DeletePolicy.hs
@@ -81,6 +81,8 @@
 
 instance Hashable DeletePolicy
 
+instance NFData DeletePolicy
+
 instance ToHeaders DeletePolicy where
         toHeaders = const mempty
 
@@ -101,3 +103,5 @@
 deletePolicyResponse
     :: DeletePolicyResponse
 deletePolicyResponse = DeletePolicyResponse'
+
+instance NFData DeletePolicyResponse
diff --git a/gen/Network/AWS/IoT/DeletePolicyVersion.hs b/gen/Network/AWS/IoT/DeletePolicyVersion.hs
--- a/gen/Network/AWS/IoT/DeletePolicyVersion.hs
+++ b/gen/Network/AWS/IoT/DeletePolicyVersion.hs
@@ -84,6 +84,8 @@
 
 instance Hashable DeletePolicyVersion
 
+instance NFData DeletePolicyVersion
+
 instance ToHeaders DeletePolicyVersion where
         toHeaders = const mempty
 
@@ -106,3 +108,5 @@
 deletePolicyVersionResponse
     :: DeletePolicyVersionResponse
 deletePolicyVersionResponse = DeletePolicyVersionResponse'
+
+instance NFData DeletePolicyVersionResponse
diff --git a/gen/Network/AWS/IoT/DeleteRegistrationCode.hs b/gen/Network/AWS/IoT/DeleteRegistrationCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/IoT/DeleteRegistrationCode.hs
@@ -0,0 +1,102 @@
+{-# 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.IoT.DeleteRegistrationCode
+-- 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 a CA certificate registration code.
+module Network.AWS.IoT.DeleteRegistrationCode
+    (
+    -- * Creating a Request
+      deleteRegistrationCode
+    , DeleteRegistrationCode
+
+    -- * Destructuring the Response
+    , deleteRegistrationCodeResponse
+    , DeleteRegistrationCodeResponse
+    -- * Response Lenses
+    , drcrsResponseStatus
+    ) where
+
+import           Network.AWS.IoT.Types
+import           Network.AWS.IoT.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | The input for the DeleteRegistrationCode operation.
+--
+-- /See:/ 'deleteRegistrationCode' smart constructor.
+data DeleteRegistrationCode =
+    DeleteRegistrationCode'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteRegistrationCode' with the minimum fields required to make a request.
+--
+deleteRegistrationCode
+    :: DeleteRegistrationCode
+deleteRegistrationCode = DeleteRegistrationCode'
+
+instance AWSRequest DeleteRegistrationCode where
+        type Rs DeleteRegistrationCode =
+             DeleteRegistrationCodeResponse
+        request = delete ioT
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteRegistrationCodeResponse' <$>
+                   (pure (fromEnum s)))
+
+instance Hashable DeleteRegistrationCode
+
+instance NFData DeleteRegistrationCode
+
+instance ToHeaders DeleteRegistrationCode where
+        toHeaders = const mempty
+
+instance ToPath DeleteRegistrationCode where
+        toPath = const "/registrationcode"
+
+instance ToQuery DeleteRegistrationCode where
+        toQuery = const mempty
+
+-- | The output for the DeleteRegistrationCode operation.
+--
+-- /See:/ 'deleteRegistrationCodeResponse' smart constructor.
+newtype DeleteRegistrationCodeResponse = DeleteRegistrationCodeResponse'
+    { _drcrsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteRegistrationCodeResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drcrsResponseStatus'
+deleteRegistrationCodeResponse
+    :: Int -- ^ 'drcrsResponseStatus'
+    -> DeleteRegistrationCodeResponse
+deleteRegistrationCodeResponse pResponseStatus_ =
+    DeleteRegistrationCodeResponse'
+    { _drcrsResponseStatus = pResponseStatus_
+    }
+
+-- | The response status code.
+drcrsResponseStatus :: Lens' DeleteRegistrationCodeResponse Int
+drcrsResponseStatus = lens _drcrsResponseStatus (\ s a -> s{_drcrsResponseStatus = a});
+
+instance NFData DeleteRegistrationCodeResponse
diff --git a/gen/Network/AWS/IoT/DeleteThing.hs b/gen/Network/AWS/IoT/DeleteThing.hs
--- a/gen/Network/AWS/IoT/DeleteThing.hs
+++ b/gen/Network/AWS/IoT/DeleteThing.hs
@@ -75,6 +75,8 @@
 
 instance Hashable DeleteThing
 
+instance NFData DeleteThing
+
 instance ToHeaders DeleteThing where
         toHeaders = const mempty
 
@@ -108,3 +110,5 @@
 -- | The response status code.
 drsResponseStatus :: Lens' DeleteThingResponse Int
 drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a});
+
+instance NFData DeleteThingResponse
diff --git a/gen/Network/AWS/IoT/DeleteTopicRule.hs b/gen/Network/AWS/IoT/DeleteTopicRule.hs
--- a/gen/Network/AWS/IoT/DeleteTopicRule.hs
+++ b/gen/Network/AWS/IoT/DeleteTopicRule.hs
@@ -70,6 +70,8 @@
 
 instance Hashable DeleteTopicRule
 
+instance NFData DeleteTopicRule
+
 instance ToHeaders DeleteTopicRule where
         toHeaders = const mempty
 
@@ -90,3 +92,5 @@
 deleteTopicRuleResponse
     :: DeleteTopicRuleResponse
 deleteTopicRuleResponse = DeleteTopicRuleResponse'
+
+instance NFData DeleteTopicRuleResponse
diff --git a/gen/Network/AWS/IoT/DescribeCACertificate.hs b/gen/Network/AWS/IoT/DescribeCACertificate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/IoT/DescribeCACertificate.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.IoT.DescribeCACertificate
+-- 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)
+--
+-- Describes a registered CA certificate.
+module Network.AWS.IoT.DescribeCACertificate
+    (
+    -- * Creating a Request
+      describeCACertificate
+    , DescribeCACertificate
+    -- * Request Lenses
+    , dCertificateId
+
+    -- * Destructuring the Response
+    , describeCACertificateResponse
+    , DescribeCACertificateResponse
+    -- * Response Lenses
+    , desrsCertificateDescription
+    , desrsResponseStatus
+    ) where
+
+import           Network.AWS.IoT.Types
+import           Network.AWS.IoT.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | The input for the DescribeCACertificate operation.
+--
+-- /See:/ 'describeCACertificate' smart constructor.
+newtype DescribeCACertificate = DescribeCACertificate'
+    { _dCertificateId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeCACertificate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dCertificateId'
+describeCACertificate
+    :: Text -- ^ 'dCertificateId'
+    -> DescribeCACertificate
+describeCACertificate pCertificateId_ =
+    DescribeCACertificate'
+    { _dCertificateId = pCertificateId_
+    }
+
+-- | The CA certificate identifier.
+dCertificateId :: Lens' DescribeCACertificate Text
+dCertificateId = lens _dCertificateId (\ s a -> s{_dCertificateId = a});
+
+instance AWSRequest DescribeCACertificate where
+        type Rs DescribeCACertificate =
+             DescribeCACertificateResponse
+        request = get ioT
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeCACertificateResponse' <$>
+                   (x .?> "certificateDescription") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable DescribeCACertificate
+
+instance NFData DescribeCACertificate
+
+instance ToHeaders DescribeCACertificate where
+        toHeaders = const mempty
+
+instance ToPath DescribeCACertificate where
+        toPath DescribeCACertificate'{..}
+          = mconcat ["/cacertificate/", toBS _dCertificateId]
+
+instance ToQuery DescribeCACertificate where
+        toQuery = const mempty
+
+-- | The output from the DescribeCACertificate operation.
+--
+-- /See:/ 'describeCACertificateResponse' smart constructor.
+data DescribeCACertificateResponse = DescribeCACertificateResponse'
+    { _desrsCertificateDescription :: !(Maybe CACertificateDescription)
+    , _desrsResponseStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeCACertificateResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'desrsCertificateDescription'
+--
+-- * 'desrsResponseStatus'
+describeCACertificateResponse
+    :: Int -- ^ 'desrsResponseStatus'
+    -> DescribeCACertificateResponse
+describeCACertificateResponse pResponseStatus_ =
+    DescribeCACertificateResponse'
+    { _desrsCertificateDescription = Nothing
+    , _desrsResponseStatus = pResponseStatus_
+    }
+
+-- | The CA certificate description.
+desrsCertificateDescription :: Lens' DescribeCACertificateResponse (Maybe CACertificateDescription)
+desrsCertificateDescription = lens _desrsCertificateDescription (\ s a -> s{_desrsCertificateDescription = a});
+
+-- | The response status code.
+desrsResponseStatus :: Lens' DescribeCACertificateResponse Int
+desrsResponseStatus = lens _desrsResponseStatus (\ s a -> s{_desrsResponseStatus = a});
+
+instance NFData DescribeCACertificateResponse
diff --git a/gen/Network/AWS/IoT/DescribeCertificate.hs b/gen/Network/AWS/IoT/DescribeCertificate.hs
--- a/gen/Network/AWS/IoT/DescribeCertificate.hs
+++ b/gen/Network/AWS/IoT/DescribeCertificate.hs
@@ -25,7 +25,7 @@
       describeCertificate
     , DescribeCertificate
     -- * Request Lenses
-    , dCertificateId
+    , desCertificateId
 
     -- * Destructuring the Response
     , describeCertificateResponse
@@ -46,25 +46,25 @@
 --
 -- /See:/ 'describeCertificate' smart constructor.
 newtype DescribeCertificate = DescribeCertificate'
-    { _dCertificateId :: Text
+    { _desCertificateId :: Text
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'DescribeCertificate' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dCertificateId'
+-- * 'desCertificateId'
 describeCertificate
-    :: Text -- ^ 'dCertificateId'
+    :: Text -- ^ 'desCertificateId'
     -> DescribeCertificate
 describeCertificate pCertificateId_ =
     DescribeCertificate'
-    { _dCertificateId = pCertificateId_
+    { _desCertificateId = pCertificateId_
     }
 
 -- | The ID of the certificate.
-dCertificateId :: Lens' DescribeCertificate Text
-dCertificateId = lens _dCertificateId (\ s a -> s{_dCertificateId = a});
+desCertificateId :: Lens' DescribeCertificate Text
+desCertificateId = lens _desCertificateId (\ s a -> s{_desCertificateId = a});
 
 instance AWSRequest DescribeCertificate where
         type Rs DescribeCertificate =
@@ -79,12 +79,14 @@
 
 instance Hashable DescribeCertificate
 
+instance NFData DescribeCertificate
+
 instance ToHeaders DescribeCertificate where
         toHeaders = const mempty
 
 instance ToPath DescribeCertificate where
         toPath DescribeCertificate'{..}
-          = mconcat ["/certificates/", toBS _dCertificateId]
+          = mconcat ["/certificates/", toBS _desCertificateId]
 
 instance ToQuery DescribeCertificate where
         toQuery = const mempty
@@ -120,3 +122,5 @@
 -- | The response status code.
 dcrsResponseStatus :: Lens' DescribeCertificateResponse Int
 dcrsResponseStatus = lens _dcrsResponseStatus (\ s a -> s{_dcrsResponseStatus = a});
+
+instance NFData DescribeCertificateResponse
diff --git a/gen/Network/AWS/IoT/DescribeEndpoint.hs b/gen/Network/AWS/IoT/DescribeEndpoint.hs
--- a/gen/Network/AWS/IoT/DescribeEndpoint.hs
+++ b/gen/Network/AWS/IoT/DescribeEndpoint.hs
@@ -66,6 +66,8 @@
 
 instance Hashable DescribeEndpoint
 
+instance NFData DescribeEndpoint
+
 instance ToHeaders DescribeEndpoint where
         toHeaders = const mempty
 
@@ -107,3 +109,5 @@
 -- | The response status code.
 dersResponseStatus :: Lens' DescribeEndpointResponse Int
 dersResponseStatus = lens _dersResponseStatus (\ s a -> s{_dersResponseStatus = a});
+
+instance NFData DescribeEndpointResponse
diff --git a/gen/Network/AWS/IoT/DescribeThing.hs b/gen/Network/AWS/IoT/DescribeThing.hs
--- a/gen/Network/AWS/IoT/DescribeThing.hs
+++ b/gen/Network/AWS/IoT/DescribeThing.hs
@@ -82,6 +82,8 @@
 
 instance Hashable DescribeThing
 
+instance NFData DescribeThing
+
 instance ToHeaders DescribeThing where
         toHeaders = const mempty
 
@@ -142,3 +144,5 @@
 -- | The response status code.
 dtrsResponseStatus :: Lens' DescribeThingResponse Int
 dtrsResponseStatus = lens _dtrsResponseStatus (\ s a -> s{_dtrsResponseStatus = a});
+
+instance NFData DescribeThingResponse
diff --git a/gen/Network/AWS/IoT/DetachPrincipalPolicy.hs b/gen/Network/AWS/IoT/DetachPrincipalPolicy.hs
--- a/gen/Network/AWS/IoT/DetachPrincipalPolicy.hs
+++ b/gen/Network/AWS/IoT/DetachPrincipalPolicy.hs
@@ -84,6 +84,8 @@
 
 instance Hashable DetachPrincipalPolicy
 
+instance NFData DetachPrincipalPolicy
+
 instance ToHeaders DetachPrincipalPolicy where
         toHeaders DetachPrincipalPolicy'{..}
           = mconcat ["x-amzn-iot-principal" =# _dppPrincipal]
@@ -106,3 +108,5 @@
 detachPrincipalPolicyResponse
     :: DetachPrincipalPolicyResponse
 detachPrincipalPolicyResponse = DetachPrincipalPolicyResponse'
+
+instance NFData DetachPrincipalPolicyResponse
diff --git a/gen/Network/AWS/IoT/DetachThingPrincipal.hs b/gen/Network/AWS/IoT/DetachThingPrincipal.hs
--- a/gen/Network/AWS/IoT/DetachThingPrincipal.hs
+++ b/gen/Network/AWS/IoT/DetachThingPrincipal.hs
@@ -87,6 +87,8 @@
 
 instance Hashable DetachThingPrincipal
 
+instance NFData DetachThingPrincipal
+
 instance ToHeaders DetachThingPrincipal where
         toHeaders DetachThingPrincipal'{..}
           = mconcat ["x-amzn-principal" =# _dtpPrincipal]
@@ -122,3 +124,5 @@
 -- | The response status code.
 dtprsResponseStatus :: Lens' DetachThingPrincipalResponse Int
 dtprsResponseStatus = lens _dtprsResponseStatus (\ s a -> s{_dtprsResponseStatus = a});
+
+instance NFData DetachThingPrincipalResponse
diff --git a/gen/Network/AWS/IoT/DisableTopicRule.hs b/gen/Network/AWS/IoT/DisableTopicRule.hs
--- a/gen/Network/AWS/IoT/DisableTopicRule.hs
+++ b/gen/Network/AWS/IoT/DisableTopicRule.hs
@@ -70,6 +70,8 @@
 
 instance Hashable DisableTopicRule
 
+instance NFData DisableTopicRule
+
 instance ToHeaders DisableTopicRule where
         toHeaders = const mempty
 
@@ -93,3 +95,5 @@
 disableTopicRuleResponse
     :: DisableTopicRuleResponse
 disableTopicRuleResponse = DisableTopicRuleResponse'
+
+instance NFData DisableTopicRuleResponse
diff --git a/gen/Network/AWS/IoT/EnableTopicRule.hs b/gen/Network/AWS/IoT/EnableTopicRule.hs
--- a/gen/Network/AWS/IoT/EnableTopicRule.hs
+++ b/gen/Network/AWS/IoT/EnableTopicRule.hs
@@ -70,6 +70,8 @@
 
 instance Hashable EnableTopicRule
 
+instance NFData EnableTopicRule
+
 instance ToHeaders EnableTopicRule where
         toHeaders = const mempty
 
@@ -93,3 +95,5 @@
 enableTopicRuleResponse
     :: EnableTopicRuleResponse
 enableTopicRuleResponse = EnableTopicRuleResponse'
+
+instance NFData EnableTopicRuleResponse
diff --git a/gen/Network/AWS/IoT/GetLoggingOptions.hs b/gen/Network/AWS/IoT/GetLoggingOptions.hs
--- a/gen/Network/AWS/IoT/GetLoggingOptions.hs
+++ b/gen/Network/AWS/IoT/GetLoggingOptions.hs
@@ -66,6 +66,8 @@
 
 instance Hashable GetLoggingOptions
 
+instance NFData GetLoggingOptions
+
 instance ToHeaders GetLoggingOptions where
         toHeaders = const mempty
 
@@ -114,3 +116,5 @@
 -- | The response status code.
 glorsResponseStatus :: Lens' GetLoggingOptionsResponse Int
 glorsResponseStatus = lens _glorsResponseStatus (\ s a -> s{_glorsResponseStatus = a});
+
+instance NFData GetLoggingOptionsResponse
diff --git a/gen/Network/AWS/IoT/GetPolicy.hs b/gen/Network/AWS/IoT/GetPolicy.hs
--- a/gen/Network/AWS/IoT/GetPolicy.hs
+++ b/gen/Network/AWS/IoT/GetPolicy.hs
@@ -84,6 +84,8 @@
 
 instance Hashable GetPolicy
 
+instance NFData GetPolicy
+
 instance ToHeaders GetPolicy where
         toHeaders = const mempty
 
@@ -149,3 +151,5 @@
 -- | The response status code.
 gprsResponseStatus :: Lens' GetPolicyResponse Int
 gprsResponseStatus = lens _gprsResponseStatus (\ s a -> s{_gprsResponseStatus = a});
+
+instance NFData GetPolicyResponse
diff --git a/gen/Network/AWS/IoT/GetPolicyVersion.hs b/gen/Network/AWS/IoT/GetPolicyVersion.hs
--- a/gen/Network/AWS/IoT/GetPolicyVersion.hs
+++ b/gen/Network/AWS/IoT/GetPolicyVersion.hs
@@ -95,6 +95,8 @@
 
 instance Hashable GetPolicyVersion
 
+instance NFData GetPolicyVersion
+
 instance ToHeaders GetPolicyVersion where
         toHeaders = const mempty
 
@@ -170,3 +172,5 @@
 -- | The response status code.
 gpvrsResponseStatus :: Lens' GetPolicyVersionResponse Int
 gpvrsResponseStatus = lens _gpvrsResponseStatus (\ s a -> s{_gpvrsResponseStatus = a});
+
+instance NFData GetPolicyVersionResponse
diff --git a/gen/Network/AWS/IoT/GetRegistrationCode.hs b/gen/Network/AWS/IoT/GetRegistrationCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/IoT/GetRegistrationCode.hs
@@ -0,0 +1,111 @@
+{-# 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.IoT.GetRegistrationCode
+-- 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)
+--
+-- Gets a registration code used to register a CA certificate with AWS IoT.
+module Network.AWS.IoT.GetRegistrationCode
+    (
+    -- * Creating a Request
+      getRegistrationCode
+    , GetRegistrationCode
+
+    -- * Destructuring the Response
+    , getRegistrationCodeResponse
+    , GetRegistrationCodeResponse
+    -- * Response Lenses
+    , grcrsRegistrationCode
+    , grcrsResponseStatus
+    ) where
+
+import           Network.AWS.IoT.Types
+import           Network.AWS.IoT.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | The input to the GetRegistrationCode operation.
+--
+-- /See:/ 'getRegistrationCode' smart constructor.
+data GetRegistrationCode =
+    GetRegistrationCode'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetRegistrationCode' with the minimum fields required to make a request.
+--
+getRegistrationCode
+    :: GetRegistrationCode
+getRegistrationCode = GetRegistrationCode'
+
+instance AWSRequest GetRegistrationCode where
+        type Rs GetRegistrationCode =
+             GetRegistrationCodeResponse
+        request = get ioT
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetRegistrationCodeResponse' <$>
+                   (x .?> "registrationCode") <*> (pure (fromEnum s)))
+
+instance Hashable GetRegistrationCode
+
+instance NFData GetRegistrationCode
+
+instance ToHeaders GetRegistrationCode where
+        toHeaders = const mempty
+
+instance ToPath GetRegistrationCode where
+        toPath = const "/registrationcode"
+
+instance ToQuery GetRegistrationCode where
+        toQuery = const mempty
+
+-- | The output from the GetRegistrationCode operation.
+--
+-- /See:/ 'getRegistrationCodeResponse' smart constructor.
+data GetRegistrationCodeResponse = GetRegistrationCodeResponse'
+    { _grcrsRegistrationCode :: !(Maybe Text)
+    , _grcrsResponseStatus   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetRegistrationCodeResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'grcrsRegistrationCode'
+--
+-- * 'grcrsResponseStatus'
+getRegistrationCodeResponse
+    :: Int -- ^ 'grcrsResponseStatus'
+    -> GetRegistrationCodeResponse
+getRegistrationCodeResponse pResponseStatus_ =
+    GetRegistrationCodeResponse'
+    { _grcrsRegistrationCode = Nothing
+    , _grcrsResponseStatus = pResponseStatus_
+    }
+
+-- | The CA certificate registration code.
+grcrsRegistrationCode :: Lens' GetRegistrationCodeResponse (Maybe Text)
+grcrsRegistrationCode = lens _grcrsRegistrationCode (\ s a -> s{_grcrsRegistrationCode = a});
+
+-- | The response status code.
+grcrsResponseStatus :: Lens' GetRegistrationCodeResponse Int
+grcrsResponseStatus = lens _grcrsResponseStatus (\ s a -> s{_grcrsResponseStatus = a});
+
+instance NFData GetRegistrationCodeResponse
diff --git a/gen/Network/AWS/IoT/GetTopicRule.hs b/gen/Network/AWS/IoT/GetTopicRule.hs
--- a/gen/Network/AWS/IoT/GetTopicRule.hs
+++ b/gen/Network/AWS/IoT/GetTopicRule.hs
@@ -79,6 +79,8 @@
 
 instance Hashable GetTopicRule
 
+instance NFData GetTopicRule
+
 instance ToHeaders GetTopicRule where
         toHeaders = const mempty
 
@@ -128,3 +130,5 @@
 -- | The response status code.
 gtrrsResponseStatus :: Lens' GetTopicRuleResponse Int
 gtrrsResponseStatus = lens _gtrrsResponseStatus (\ s a -> s{_gtrrsResponseStatus = a});
+
+instance NFData GetTopicRuleResponse
diff --git a/gen/Network/AWS/IoT/ListCACertificates.hs b/gen/Network/AWS/IoT/ListCACertificates.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/IoT/ListCACertificates.hs
@@ -0,0 +1,159 @@
+{-# 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.IoT.ListCACertificates
+-- 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 CA certificates registered for your AWS account.
+--
+-- The results are paginated with a default page size of 25. You can use
+-- the returned marker to retrieve additional results.
+module Network.AWS.IoT.ListCACertificates
+    (
+    -- * Creating a Request
+      listCACertificates
+    , ListCACertificates
+    -- * Request Lenses
+    , lcacMarker
+    , lcacAscendingOrder
+    , lcacPageSize
+
+    -- * Destructuring the Response
+    , listCACertificatesResponse
+    , ListCACertificatesResponse
+    -- * Response Lenses
+    , lcacrsCertificates
+    , lcacrsNextMarker
+    , lcacrsResponseStatus
+    ) where
+
+import           Network.AWS.IoT.Types
+import           Network.AWS.IoT.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Input for the ListCACertificates operation.
+--
+-- /See:/ 'listCACertificates' smart constructor.
+data ListCACertificates = ListCACertificates'
+    { _lcacMarker         :: !(Maybe Text)
+    , _lcacAscendingOrder :: !(Maybe Bool)
+    , _lcacPageSize       :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListCACertificates' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcacMarker'
+--
+-- * 'lcacAscendingOrder'
+--
+-- * 'lcacPageSize'
+listCACertificates
+    :: ListCACertificates
+listCACertificates =
+    ListCACertificates'
+    { _lcacMarker = Nothing
+    , _lcacAscendingOrder = Nothing
+    , _lcacPageSize = Nothing
+    }
+
+-- | The marker for the next set of results.
+lcacMarker :: Lens' ListCACertificates (Maybe Text)
+lcacMarker = lens _lcacMarker (\ s a -> s{_lcacMarker = a});
+
+-- | Determines the order of the results.
+lcacAscendingOrder :: Lens' ListCACertificates (Maybe Bool)
+lcacAscendingOrder = lens _lcacAscendingOrder (\ s a -> s{_lcacAscendingOrder = a});
+
+-- | The result page size.
+lcacPageSize :: Lens' ListCACertificates (Maybe Natural)
+lcacPageSize = lens _lcacPageSize (\ s a -> s{_lcacPageSize = a}) . mapping _Nat;
+
+instance AWSRequest ListCACertificates where
+        type Rs ListCACertificates =
+             ListCACertificatesResponse
+        request = get ioT
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListCACertificatesResponse' <$>
+                   (x .?> "certificates" .!@ mempty) <*>
+                     (x .?> "nextMarker")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable ListCACertificates
+
+instance NFData ListCACertificates
+
+instance ToHeaders ListCACertificates where
+        toHeaders = const mempty
+
+instance ToPath ListCACertificates where
+        toPath = const "/cacertificates"
+
+instance ToQuery ListCACertificates where
+        toQuery ListCACertificates'{..}
+          = mconcat
+              ["marker" =: _lcacMarker,
+               "isAscendingOrder" =: _lcacAscendingOrder,
+               "pageSize" =: _lcacPageSize]
+
+-- | The output from the ListCACertificates operation.
+--
+-- /See:/ 'listCACertificatesResponse' smart constructor.
+data ListCACertificatesResponse = ListCACertificatesResponse'
+    { _lcacrsCertificates   :: !(Maybe [CACertificate])
+    , _lcacrsNextMarker     :: !(Maybe Text)
+    , _lcacrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListCACertificatesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcacrsCertificates'
+--
+-- * 'lcacrsNextMarker'
+--
+-- * 'lcacrsResponseStatus'
+listCACertificatesResponse
+    :: Int -- ^ 'lcacrsResponseStatus'
+    -> ListCACertificatesResponse
+listCACertificatesResponse pResponseStatus_ =
+    ListCACertificatesResponse'
+    { _lcacrsCertificates = Nothing
+    , _lcacrsNextMarker = Nothing
+    , _lcacrsResponseStatus = pResponseStatus_
+    }
+
+-- | The CA certificates registered in your AWS account.
+lcacrsCertificates :: Lens' ListCACertificatesResponse [CACertificate]
+lcacrsCertificates = lens _lcacrsCertificates (\ s a -> s{_lcacrsCertificates = a}) . _Default . _Coerce;
+
+-- | The current position within the list of CA certificates.
+lcacrsNextMarker :: Lens' ListCACertificatesResponse (Maybe Text)
+lcacrsNextMarker = lens _lcacrsNextMarker (\ s a -> s{_lcacrsNextMarker = a});
+
+-- | The response status code.
+lcacrsResponseStatus :: Lens' ListCACertificatesResponse Int
+lcacrsResponseStatus = lens _lcacrsResponseStatus (\ s a -> s{_lcacrsResponseStatus = a});
+
+instance NFData ListCACertificatesResponse
diff --git a/gen/Network/AWS/IoT/ListCertificates.hs b/gen/Network/AWS/IoT/ListCertificates.hs
--- a/gen/Network/AWS/IoT/ListCertificates.hs
+++ b/gen/Network/AWS/IoT/ListCertificates.hs
@@ -18,7 +18,7 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Lists your certificates.
+-- Lists the certificates registered in your AWS account.
 --
 -- The results are paginated with a default page size of 25. You can use
 -- the returned marker to retrieve additional results.
@@ -101,6 +101,8 @@
 
 instance Hashable ListCertificates
 
+instance NFData ListCertificates
+
 instance ToHeaders ListCertificates where
         toHeaders = const mempty
 
@@ -154,3 +156,5 @@
 -- | The response status code.
 lcrsResponseStatus :: Lens' ListCertificatesResponse Int
 lcrsResponseStatus = lens _lcrsResponseStatus (\ s a -> s{_lcrsResponseStatus = a});
+
+instance NFData ListCertificatesResponse
diff --git a/gen/Network/AWS/IoT/ListCertificatesByCA.hs b/gen/Network/AWS/IoT/ListCertificatesByCA.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/IoT/ListCertificatesByCA.hs
@@ -0,0 +1,171 @@
+{-# 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.IoT.ListCertificatesByCA
+-- 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)
+--
+-- List the device certificates signed by the specified CA certificate.
+module Network.AWS.IoT.ListCertificatesByCA
+    (
+    -- * Creating a Request
+      listCertificatesByCA
+    , ListCertificatesByCA
+    -- * Request Lenses
+    , lcbcaMarker
+    , lcbcaAscendingOrder
+    , lcbcaPageSize
+    , lcbcaCaCertificateId
+
+    -- * Destructuring the Response
+    , listCertificatesByCAResponse
+    , ListCertificatesByCAResponse
+    -- * Response Lenses
+    , lcbcarsCertificates
+    , lcbcarsNextMarker
+    , lcbcarsResponseStatus
+    ) where
+
+import           Network.AWS.IoT.Types
+import           Network.AWS.IoT.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | The input to the ListCertificatesByCA operation.
+--
+-- /See:/ 'listCertificatesByCA' smart constructor.
+data ListCertificatesByCA = ListCertificatesByCA'
+    { _lcbcaMarker          :: !(Maybe Text)
+    , _lcbcaAscendingOrder  :: !(Maybe Bool)
+    , _lcbcaPageSize        :: !(Maybe Nat)
+    , _lcbcaCaCertificateId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListCertificatesByCA' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcbcaMarker'
+--
+-- * 'lcbcaAscendingOrder'
+--
+-- * 'lcbcaPageSize'
+--
+-- * 'lcbcaCaCertificateId'
+listCertificatesByCA
+    :: Text -- ^ 'lcbcaCaCertificateId'
+    -> ListCertificatesByCA
+listCertificatesByCA pCaCertificateId_ =
+    ListCertificatesByCA'
+    { _lcbcaMarker = Nothing
+    , _lcbcaAscendingOrder = Nothing
+    , _lcbcaPageSize = Nothing
+    , _lcbcaCaCertificateId = pCaCertificateId_
+    }
+
+-- | The marker for the next set of results.
+lcbcaMarker :: Lens' ListCertificatesByCA (Maybe Text)
+lcbcaMarker = lens _lcbcaMarker (\ s a -> s{_lcbcaMarker = a});
+
+-- | Specifies the order for results. If True, the results are returned in
+-- ascending order, based on the creation date.
+lcbcaAscendingOrder :: Lens' ListCertificatesByCA (Maybe Bool)
+lcbcaAscendingOrder = lens _lcbcaAscendingOrder (\ s a -> s{_lcbcaAscendingOrder = a});
+
+-- | The result page size.
+lcbcaPageSize :: Lens' ListCertificatesByCA (Maybe Natural)
+lcbcaPageSize = lens _lcbcaPageSize (\ s a -> s{_lcbcaPageSize = a}) . mapping _Nat;
+
+-- | The ID of the CA certificate. This operation will list all registered
+-- device certificate that were signed by this CA certificate.
+lcbcaCaCertificateId :: Lens' ListCertificatesByCA Text
+lcbcaCaCertificateId = lens _lcbcaCaCertificateId (\ s a -> s{_lcbcaCaCertificateId = a});
+
+instance AWSRequest ListCertificatesByCA where
+        type Rs ListCertificatesByCA =
+             ListCertificatesByCAResponse
+        request = get ioT
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListCertificatesByCAResponse' <$>
+                   (x .?> "certificates" .!@ mempty) <*>
+                     (x .?> "nextMarker")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable ListCertificatesByCA
+
+instance NFData ListCertificatesByCA
+
+instance ToHeaders ListCertificatesByCA where
+        toHeaders = const mempty
+
+instance ToPath ListCertificatesByCA where
+        toPath ListCertificatesByCA'{..}
+          = mconcat
+              ["/certificates-by-ca/", toBS _lcbcaCaCertificateId]
+
+instance ToQuery ListCertificatesByCA where
+        toQuery ListCertificatesByCA'{..}
+          = mconcat
+              ["marker" =: _lcbcaMarker,
+               "isAscendingOrder" =: _lcbcaAscendingOrder,
+               "pageSize" =: _lcbcaPageSize]
+
+-- | The output of the ListCertificatesByCA operation.
+--
+-- /See:/ 'listCertificatesByCAResponse' smart constructor.
+data ListCertificatesByCAResponse = ListCertificatesByCAResponse'
+    { _lcbcarsCertificates   :: !(Maybe [Certificate])
+    , _lcbcarsNextMarker     :: !(Maybe Text)
+    , _lcbcarsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListCertificatesByCAResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcbcarsCertificates'
+--
+-- * 'lcbcarsNextMarker'
+--
+-- * 'lcbcarsResponseStatus'
+listCertificatesByCAResponse
+    :: Int -- ^ 'lcbcarsResponseStatus'
+    -> ListCertificatesByCAResponse
+listCertificatesByCAResponse pResponseStatus_ =
+    ListCertificatesByCAResponse'
+    { _lcbcarsCertificates = Nothing
+    , _lcbcarsNextMarker = Nothing
+    , _lcbcarsResponseStatus = pResponseStatus_
+    }
+
+-- | The device certificates signed by the specified CA certificate.
+lcbcarsCertificates :: Lens' ListCertificatesByCAResponse [Certificate]
+lcbcarsCertificates = lens _lcbcarsCertificates (\ s a -> s{_lcbcarsCertificates = a}) . _Default . _Coerce;
+
+-- | The marker for the next set of results, or null if there are no
+-- additional results.
+lcbcarsNextMarker :: Lens' ListCertificatesByCAResponse (Maybe Text)
+lcbcarsNextMarker = lens _lcbcarsNextMarker (\ s a -> s{_lcbcarsNextMarker = a});
+
+-- | The response status code.
+lcbcarsResponseStatus :: Lens' ListCertificatesByCAResponse Int
+lcbcarsResponseStatus = lens _lcbcarsResponseStatus (\ s a -> s{_lcbcarsResponseStatus = a});
+
+instance NFData ListCertificatesByCAResponse
diff --git a/gen/Network/AWS/IoT/ListPolicies.hs b/gen/Network/AWS/IoT/ListPolicies.hs
--- a/gen/Network/AWS/IoT/ListPolicies.hs
+++ b/gen/Network/AWS/IoT/ListPolicies.hs
@@ -98,6 +98,8 @@
 
 instance Hashable ListPolicies
 
+instance NFData ListPolicies
+
 instance ToHeaders ListPolicies where
         toHeaders = const mempty
 
@@ -151,3 +153,5 @@
 -- | The response status code.
 lprsResponseStatus :: Lens' ListPoliciesResponse Int
 lprsResponseStatus = lens _lprsResponseStatus (\ s a -> s{_lprsResponseStatus = a});
+
+instance NFData ListPoliciesResponse
diff --git a/gen/Network/AWS/IoT/ListPolicyVersions.hs b/gen/Network/AWS/IoT/ListPolicyVersions.hs
--- a/gen/Network/AWS/IoT/ListPolicyVersions.hs
+++ b/gen/Network/AWS/IoT/ListPolicyVersions.hs
@@ -80,6 +80,8 @@
 
 instance Hashable ListPolicyVersions
 
+instance NFData ListPolicyVersions
+
 instance ToHeaders ListPolicyVersions where
         toHeaders = const mempty
 
@@ -122,3 +124,5 @@
 -- | The response status code.
 lpvrsResponseStatus :: Lens' ListPolicyVersionsResponse Int
 lpvrsResponseStatus = lens _lpvrsResponseStatus (\ s a -> s{_lpvrsResponseStatus = a});
+
+instance NFData ListPolicyVersionsResponse
diff --git a/gen/Network/AWS/IoT/ListPrincipalPolicies.hs b/gen/Network/AWS/IoT/ListPrincipalPolicies.hs
--- a/gen/Network/AWS/IoT/ListPrincipalPolicies.hs
+++ b/gen/Network/AWS/IoT/ListPrincipalPolicies.hs
@@ -111,6 +111,8 @@
 
 instance Hashable ListPrincipalPolicies
 
+instance NFData ListPrincipalPolicies
+
 instance ToHeaders ListPrincipalPolicies where
         toHeaders ListPrincipalPolicies'{..}
           = mconcat ["x-amzn-iot-principal" =# _lppPrincipal]
@@ -165,3 +167,5 @@
 -- | The response status code.
 lpprsResponseStatus :: Lens' ListPrincipalPoliciesResponse Int
 lpprsResponseStatus = lens _lpprsResponseStatus (\ s a -> s{_lpprsResponseStatus = a});
+
+instance NFData ListPrincipalPoliciesResponse
diff --git a/gen/Network/AWS/IoT/ListPrincipalThings.hs b/gen/Network/AWS/IoT/ListPrincipalThings.hs
--- a/gen/Network/AWS/IoT/ListPrincipalThings.hs
+++ b/gen/Network/AWS/IoT/ListPrincipalThings.hs
@@ -98,6 +98,8 @@
 
 instance Hashable ListPrincipalThings
 
+instance NFData ListPrincipalThings
+
 instance ToHeaders ListPrincipalThings where
         toHeaders ListPrincipalThings'{..}
           = mconcat ["x-amzn-principal" =# _lptPrincipal]
@@ -150,3 +152,5 @@
 -- | The response status code.
 lptrsResponseStatus :: Lens' ListPrincipalThingsResponse Int
 lptrsResponseStatus = lens _lptrsResponseStatus (\ s a -> s{_lptrsResponseStatus = a});
+
+instance NFData ListPrincipalThingsResponse
diff --git a/gen/Network/AWS/IoT/ListThingPrincipals.hs b/gen/Network/AWS/IoT/ListThingPrincipals.hs
--- a/gen/Network/AWS/IoT/ListThingPrincipals.hs
+++ b/gen/Network/AWS/IoT/ListThingPrincipals.hs
@@ -79,6 +79,8 @@
 
 instance Hashable ListThingPrincipals
 
+instance NFData ListThingPrincipals
+
 instance ToHeaders ListThingPrincipals where
         toHeaders = const mempty
 
@@ -121,3 +123,5 @@
 -- | The response status code.
 ltprsResponseStatus :: Lens' ListThingPrincipalsResponse Int
 ltprsResponseStatus = lens _ltprsResponseStatus (\ s a -> s{_ltprsResponseStatus = a});
+
+instance NFData ListThingPrincipalsResponse
diff --git a/gen/Network/AWS/IoT/ListThings.hs b/gen/Network/AWS/IoT/ListThings.hs
--- a/gen/Network/AWS/IoT/ListThings.hs
+++ b/gen/Network/AWS/IoT/ListThings.hs
@@ -107,6 +107,8 @@
 
 instance Hashable ListThings
 
+instance NFData ListThings
+
 instance ToHeaders ListThings where
         toHeaders = const mempty
 
@@ -160,3 +162,5 @@
 -- | The response status code.
 ltrsResponseStatus :: Lens' ListThingsResponse Int
 ltrsResponseStatus = lens _ltrsResponseStatus (\ s a -> s{_ltrsResponseStatus = a});
+
+instance NFData ListThingsResponse
diff --git a/gen/Network/AWS/IoT/ListTopicRules.hs b/gen/Network/AWS/IoT/ListTopicRules.hs
--- a/gen/Network/AWS/IoT/ListTopicRules.hs
+++ b/gen/Network/AWS/IoT/ListTopicRules.hs
@@ -105,6 +105,8 @@
 
 instance Hashable ListTopicRules
 
+instance NFData ListTopicRules
+
 instance ToHeaders ListTopicRules where
         toHeaders = const mempty
 
@@ -157,3 +159,5 @@
 -- | The response status code.
 ltrrsResponseStatus :: Lens' ListTopicRulesResponse Int
 ltrrsResponseStatus = lens _ltrrsResponseStatus (\ s a -> s{_ltrrsResponseStatus = a});
+
+instance NFData ListTopicRulesResponse
diff --git a/gen/Network/AWS/IoT/RegisterCACertificate.hs b/gen/Network/AWS/IoT/RegisterCACertificate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/IoT/RegisterCACertificate.hs
@@ -0,0 +1,170 @@
+{-# 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.IoT.RegisterCACertificate
+-- 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)
+--
+-- Registers a CA certificate with AWS IoT. This CA certificate can then be
+-- used to sign device certificates, which can be then registered with AWS
+-- IoT. You can register up to 10 CA certificates per AWS account that have
+-- the same subject field and public key. This enables you to have up to 10
+-- certificate authorities sign your device certificates. If you have more
+-- than one CA certificate registered, make sure you pass the CA
+-- certificate when you register your device certificates with the
+-- RegisterCertificate API.
+module Network.AWS.IoT.RegisterCACertificate
+    (
+    -- * Creating a Request
+      registerCACertificate
+    , RegisterCACertificate
+    -- * Request Lenses
+    , rcacSetAsActive
+    , rcacCaCertificate
+    , rcacVerificationCertificate
+
+    -- * Destructuring the Response
+    , registerCACertificateResponse
+    , RegisterCACertificateResponse
+    -- * Response Lenses
+    , rcacrsCertificateARN
+    , rcacrsCertificateId
+    , rcacrsResponseStatus
+    ) where
+
+import           Network.AWS.IoT.Types
+import           Network.AWS.IoT.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | The input to the RegisterCACertificate operation.
+--
+-- /See:/ 'registerCACertificate' smart constructor.
+data RegisterCACertificate = RegisterCACertificate'
+    { _rcacSetAsActive             :: !(Maybe Bool)
+    , _rcacCaCertificate           :: !Text
+    , _rcacVerificationCertificate :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RegisterCACertificate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rcacSetAsActive'
+--
+-- * 'rcacCaCertificate'
+--
+-- * 'rcacVerificationCertificate'
+registerCACertificate
+    :: Text -- ^ 'rcacCaCertificate'
+    -> Text -- ^ 'rcacVerificationCertificate'
+    -> RegisterCACertificate
+registerCACertificate pCaCertificate_ pVerificationCertificate_ =
+    RegisterCACertificate'
+    { _rcacSetAsActive = Nothing
+    , _rcacCaCertificate = pCaCertificate_
+    , _rcacVerificationCertificate = pVerificationCertificate_
+    }
+
+-- | A boolean value that specifies if the CA certificate is set to active.
+rcacSetAsActive :: Lens' RegisterCACertificate (Maybe Bool)
+rcacSetAsActive = lens _rcacSetAsActive (\ s a -> s{_rcacSetAsActive = a});
+
+-- | The CA certificate.
+rcacCaCertificate :: Lens' RegisterCACertificate Text
+rcacCaCertificate = lens _rcacCaCertificate (\ s a -> s{_rcacCaCertificate = a});
+
+-- | The private key verification certificate.
+rcacVerificationCertificate :: Lens' RegisterCACertificate Text
+rcacVerificationCertificate = lens _rcacVerificationCertificate (\ s a -> s{_rcacVerificationCertificate = a});
+
+instance AWSRequest RegisterCACertificate where
+        type Rs RegisterCACertificate =
+             RegisterCACertificateResponse
+        request = postJSON ioT
+        response
+          = receiveJSON
+              (\ s h x ->
+                 RegisterCACertificateResponse' <$>
+                   (x .?> "certificateArn") <*> (x .?> "certificateId")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable RegisterCACertificate
+
+instance NFData RegisterCACertificate
+
+instance ToHeaders RegisterCACertificate where
+        toHeaders = const mempty
+
+instance ToJSON RegisterCACertificate where
+        toJSON RegisterCACertificate'{..}
+          = object
+              (catMaybes
+                 [Just ("caCertificate" .= _rcacCaCertificate),
+                  Just
+                    ("verificationCertificate" .=
+                       _rcacVerificationCertificate)])
+
+instance ToPath RegisterCACertificate where
+        toPath = const "/cacertificate"
+
+instance ToQuery RegisterCACertificate where
+        toQuery RegisterCACertificate'{..}
+          = mconcat ["setAsActive" =: _rcacSetAsActive]
+
+-- | The output from the RegisterCACertificateResponse operation.
+--
+-- /See:/ 'registerCACertificateResponse' smart constructor.
+data RegisterCACertificateResponse = RegisterCACertificateResponse'
+    { _rcacrsCertificateARN :: !(Maybe Text)
+    , _rcacrsCertificateId  :: !(Maybe Text)
+    , _rcacrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RegisterCACertificateResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rcacrsCertificateARN'
+--
+-- * 'rcacrsCertificateId'
+--
+-- * 'rcacrsResponseStatus'
+registerCACertificateResponse
+    :: Int -- ^ 'rcacrsResponseStatus'
+    -> RegisterCACertificateResponse
+registerCACertificateResponse pResponseStatus_ =
+    RegisterCACertificateResponse'
+    { _rcacrsCertificateARN = Nothing
+    , _rcacrsCertificateId = Nothing
+    , _rcacrsResponseStatus = pResponseStatus_
+    }
+
+-- | The CA certificate ARN.
+rcacrsCertificateARN :: Lens' RegisterCACertificateResponse (Maybe Text)
+rcacrsCertificateARN = lens _rcacrsCertificateARN (\ s a -> s{_rcacrsCertificateARN = a});
+
+-- | The CA certificate identifier.
+rcacrsCertificateId :: Lens' RegisterCACertificateResponse (Maybe Text)
+rcacrsCertificateId = lens _rcacrsCertificateId (\ s a -> s{_rcacrsCertificateId = a});
+
+-- | The response status code.
+rcacrsResponseStatus :: Lens' RegisterCACertificateResponse Int
+rcacrsResponseStatus = lens _rcacrsResponseStatus (\ s a -> s{_rcacrsResponseStatus = a});
+
+instance NFData RegisterCACertificateResponse
diff --git a/gen/Network/AWS/IoT/RegisterCertificate.hs b/gen/Network/AWS/IoT/RegisterCertificate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/IoT/RegisterCertificate.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.IoT.RegisterCertificate
+-- 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)
+--
+-- Registers a device certificate with AWS IoT. If you have more than one
+-- CA certificate that has the same subject field, you must specify the CA
+-- certificate that was used to sign the device certificate being
+-- registered.
+module Network.AWS.IoT.RegisterCertificate
+    (
+    -- * Creating a Request
+      registerCertificate
+    , RegisterCertificate
+    -- * Request Lenses
+    , rcCaCertificatePem
+    , rcSetAsActive
+    , rcCertificatePem
+
+    -- * Destructuring the Response
+    , registerCertificateResponse
+    , RegisterCertificateResponse
+    -- * Response Lenses
+    , rcrsCertificateARN
+    , rcrsCertificateId
+    , rcrsResponseStatus
+    ) where
+
+import           Network.AWS.IoT.Types
+import           Network.AWS.IoT.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | The input to the RegisterCertificate operation.
+--
+-- /See:/ 'registerCertificate' smart constructor.
+data RegisterCertificate = RegisterCertificate'
+    { _rcCaCertificatePem :: !(Maybe Text)
+    , _rcSetAsActive      :: !(Maybe Bool)
+    , _rcCertificatePem   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RegisterCertificate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rcCaCertificatePem'
+--
+-- * 'rcSetAsActive'
+--
+-- * 'rcCertificatePem'
+registerCertificate
+    :: Text -- ^ 'rcCertificatePem'
+    -> RegisterCertificate
+registerCertificate pCertificatePem_ =
+    RegisterCertificate'
+    { _rcCaCertificatePem = Nothing
+    , _rcSetAsActive = Nothing
+    , _rcCertificatePem = pCertificatePem_
+    }
+
+-- | The CA certificate used to sign the device certificate being registered.
+rcCaCertificatePem :: Lens' RegisterCertificate (Maybe Text)
+rcCaCertificatePem = lens _rcCaCertificatePem (\ s a -> s{_rcCaCertificatePem = a});
+
+-- | A boolean value that specifies if the CA certificate is set to active.
+rcSetAsActive :: Lens' RegisterCertificate (Maybe Bool)
+rcSetAsActive = lens _rcSetAsActive (\ s a -> s{_rcSetAsActive = a});
+
+-- | The certificate data, in PEM format.
+rcCertificatePem :: Lens' RegisterCertificate Text
+rcCertificatePem = lens _rcCertificatePem (\ s a -> s{_rcCertificatePem = a});
+
+instance AWSRequest RegisterCertificate where
+        type Rs RegisterCertificate =
+             RegisterCertificateResponse
+        request = postJSON ioT
+        response
+          = receiveJSON
+              (\ s h x ->
+                 RegisterCertificateResponse' <$>
+                   (x .?> "certificateArn") <*> (x .?> "certificateId")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable RegisterCertificate
+
+instance NFData RegisterCertificate
+
+instance ToHeaders RegisterCertificate where
+        toHeaders = const mempty
+
+instance ToJSON RegisterCertificate where
+        toJSON RegisterCertificate'{..}
+          = object
+              (catMaybes
+                 [("caCertificatePem" .=) <$> _rcCaCertificatePem,
+                  Just ("certificatePem" .= _rcCertificatePem)])
+
+instance ToPath RegisterCertificate where
+        toPath = const "/certificate/register"
+
+instance ToQuery RegisterCertificate where
+        toQuery RegisterCertificate'{..}
+          = mconcat ["setAsActive" =: _rcSetAsActive]
+
+-- | The output from the RegisterCertificate operation.
+--
+-- /See:/ 'registerCertificateResponse' smart constructor.
+data RegisterCertificateResponse = RegisterCertificateResponse'
+    { _rcrsCertificateARN :: !(Maybe Text)
+    , _rcrsCertificateId  :: !(Maybe Text)
+    , _rcrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RegisterCertificateResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rcrsCertificateARN'
+--
+-- * 'rcrsCertificateId'
+--
+-- * 'rcrsResponseStatus'
+registerCertificateResponse
+    :: Int -- ^ 'rcrsResponseStatus'
+    -> RegisterCertificateResponse
+registerCertificateResponse pResponseStatus_ =
+    RegisterCertificateResponse'
+    { _rcrsCertificateARN = Nothing
+    , _rcrsCertificateId = Nothing
+    , _rcrsResponseStatus = pResponseStatus_
+    }
+
+-- | The certificate ARN.
+rcrsCertificateARN :: Lens' RegisterCertificateResponse (Maybe Text)
+rcrsCertificateARN = lens _rcrsCertificateARN (\ s a -> s{_rcrsCertificateARN = a});
+
+-- | The certificate identifier.
+rcrsCertificateId :: Lens' RegisterCertificateResponse (Maybe Text)
+rcrsCertificateId = lens _rcrsCertificateId (\ s a -> s{_rcrsCertificateId = a});
+
+-- | The response status code.
+rcrsResponseStatus :: Lens' RegisterCertificateResponse Int
+rcrsResponseStatus = lens _rcrsResponseStatus (\ s a -> s{_rcrsResponseStatus = a});
+
+instance NFData RegisterCertificateResponse
diff --git a/gen/Network/AWS/IoT/RejectCertificateTransfer.hs b/gen/Network/AWS/IoT/RejectCertificateTransfer.hs
--- a/gen/Network/AWS/IoT/RejectCertificateTransfer.hs
+++ b/gen/Network/AWS/IoT/RejectCertificateTransfer.hs
@@ -20,7 +20,7 @@
 --
 -- Rejects a pending certificate transfer. After AWS IoT rejects a
 -- certificate transfer, the certificate status changes from
--- __PENDING_TRANFER__ to __INACTIVE__.
+-- __PENDING_TRANSFER__ to __INACTIVE__.
 --
 -- To check for pending certificate transfers, call < ListCertificates> to
 -- enumerate your certificates.
@@ -34,6 +34,7 @@
       rejectCertificateTransfer
     , RejectCertificateTransfer
     -- * Request Lenses
+    , rctRejectReason
     , rctCertificateId
 
     -- * Destructuring the Response
@@ -51,23 +52,31 @@
 -- | The input for the RejectCertificateTransfer operation.
 --
 -- /See:/ 'rejectCertificateTransfer' smart constructor.
-newtype RejectCertificateTransfer = RejectCertificateTransfer'
-    { _rctCertificateId :: Text
+data RejectCertificateTransfer = RejectCertificateTransfer'
+    { _rctRejectReason  :: !(Maybe Text)
+    , _rctCertificateId :: !Text
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'RejectCertificateTransfer' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'rctRejectReason'
+--
 -- * 'rctCertificateId'
 rejectCertificateTransfer
     :: Text -- ^ 'rctCertificateId'
     -> RejectCertificateTransfer
 rejectCertificateTransfer pCertificateId_ =
     RejectCertificateTransfer'
-    { _rctCertificateId = pCertificateId_
+    { _rctRejectReason = Nothing
+    , _rctCertificateId = pCertificateId_
     }
 
+-- | The reason the certificate transfer was rejected.
+rctRejectReason :: Lens' RejectCertificateTransfer (Maybe Text)
+rctRejectReason = lens _rctRejectReason (\ s a -> s{_rctRejectReason = a});
+
 -- | The ID of the certificate.
 rctCertificateId :: Lens' RejectCertificateTransfer Text
 rctCertificateId = lens _rctCertificateId (\ s a -> s{_rctCertificateId = a});
@@ -81,11 +90,16 @@
 
 instance Hashable RejectCertificateTransfer
 
+instance NFData RejectCertificateTransfer
+
 instance ToHeaders RejectCertificateTransfer where
         toHeaders = const mempty
 
 instance ToJSON RejectCertificateTransfer where
-        toJSON = const (Object mempty)
+        toJSON RejectCertificateTransfer'{..}
+          = object
+              (catMaybes
+                 [("rejectReason" .=) <$> _rctRejectReason])
 
 instance ToPath RejectCertificateTransfer where
         toPath RejectCertificateTransfer'{..}
@@ -106,3 +120,5 @@
 rejectCertificateTransferResponse
     :: RejectCertificateTransferResponse
 rejectCertificateTransferResponse = RejectCertificateTransferResponse'
+
+instance NFData RejectCertificateTransferResponse
diff --git a/gen/Network/AWS/IoT/ReplaceTopicRule.hs b/gen/Network/AWS/IoT/ReplaceTopicRule.hs
--- a/gen/Network/AWS/IoT/ReplaceTopicRule.hs
+++ b/gen/Network/AWS/IoT/ReplaceTopicRule.hs
@@ -83,6 +83,8 @@
 
 instance Hashable ReplaceTopicRule
 
+instance NFData ReplaceTopicRule
+
 instance ToHeaders ReplaceTopicRule where
         toHeaders = const mempty
 
@@ -109,3 +111,5 @@
 replaceTopicRuleResponse
     :: ReplaceTopicRuleResponse
 replaceTopicRuleResponse = ReplaceTopicRuleResponse'
+
+instance NFData ReplaceTopicRuleResponse
diff --git a/gen/Network/AWS/IoT/SetDefaultPolicyVersion.hs b/gen/Network/AWS/IoT/SetDefaultPolicyVersion.hs
--- a/gen/Network/AWS/IoT/SetDefaultPolicyVersion.hs
+++ b/gen/Network/AWS/IoT/SetDefaultPolicyVersion.hs
@@ -85,6 +85,8 @@
 
 instance Hashable SetDefaultPolicyVersion
 
+instance NFData SetDefaultPolicyVersion
+
 instance ToHeaders SetDefaultPolicyVersion where
         toHeaders = const mempty
 
@@ -110,3 +112,5 @@
 setDefaultPolicyVersionResponse
     :: SetDefaultPolicyVersionResponse
 setDefaultPolicyVersionResponse = SetDefaultPolicyVersionResponse'
+
+instance NFData SetDefaultPolicyVersionResponse
diff --git a/gen/Network/AWS/IoT/SetLoggingOptions.hs b/gen/Network/AWS/IoT/SetLoggingOptions.hs
--- a/gen/Network/AWS/IoT/SetLoggingOptions.hs
+++ b/gen/Network/AWS/IoT/SetLoggingOptions.hs
@@ -70,6 +70,8 @@
 
 instance Hashable SetLoggingOptions
 
+instance NFData SetLoggingOptions
+
 instance ToHeaders SetLoggingOptions where
         toHeaders = const mempty
 
@@ -97,3 +99,5 @@
 setLoggingOptionsResponse
     :: SetLoggingOptionsResponse
 setLoggingOptionsResponse = SetLoggingOptionsResponse'
+
+instance NFData SetLoggingOptionsResponse
diff --git a/gen/Network/AWS/IoT/TransferCertificate.hs b/gen/Network/AWS/IoT/TransferCertificate.hs
--- a/gen/Network/AWS/IoT/TransferCertificate.hs
+++ b/gen/Network/AWS/IoT/TransferCertificate.hs
@@ -36,6 +36,7 @@
       transferCertificate
     , TransferCertificate
     -- * Request Lenses
+    , tcTransferMessage
     , tcCertificateId
     , tcTargetAWSAccount
 
@@ -58,7 +59,8 @@
 --
 -- /See:/ 'transferCertificate' smart constructor.
 data TransferCertificate = TransferCertificate'
-    { _tcCertificateId    :: !Text
+    { _tcTransferMessage  :: !(Maybe Text)
+    , _tcCertificateId    :: !Text
     , _tcTargetAWSAccount :: !Text
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
@@ -66,6 +68,8 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'tcTransferMessage'
+--
 -- * 'tcCertificateId'
 --
 -- * 'tcTargetAWSAccount'
@@ -75,10 +79,15 @@
     -> TransferCertificate
 transferCertificate pCertificateId_ pTargetAWSAccount_ =
     TransferCertificate'
-    { _tcCertificateId = pCertificateId_
+    { _tcTransferMessage = Nothing
+    , _tcCertificateId = pCertificateId_
     , _tcTargetAWSAccount = pTargetAWSAccount_
     }
 
+-- | The transfer message.
+tcTransferMessage :: Lens' TransferCertificate (Maybe Text)
+tcTransferMessage = lens _tcTransferMessage (\ s a -> s{_tcTransferMessage = a});
+
 -- | The ID of the certificate.
 tcCertificateId :: Lens' TransferCertificate Text
 tcCertificateId = lens _tcCertificateId (\ s a -> s{_tcCertificateId = a});
@@ -100,11 +109,16 @@
 
 instance Hashable TransferCertificate
 
+instance NFData TransferCertificate
+
 instance ToHeaders TransferCertificate where
         toHeaders = const mempty
 
 instance ToJSON TransferCertificate where
-        toJSON = const (Object mempty)
+        toJSON TransferCertificate'{..}
+          = object
+              (catMaybes
+                 [("transferMessage" .=) <$> _tcTransferMessage])
 
 instance ToPath TransferCertificate where
         toPath TransferCertificate'{..}
@@ -146,3 +160,5 @@
 -- | The response status code.
 tcrsResponseStatus :: Lens' TransferCertificateResponse Int
 tcrsResponseStatus = lens _tcrsResponseStatus (\ s a -> s{_tcrsResponseStatus = a});
+
+instance NFData TransferCertificateResponse
diff --git a/gen/Network/AWS/IoT/Types.hs b/gen/Network/AWS/IoT/Types.hs
--- a/gen/Network/AWS/IoT/Types.hs
+++ b/gen/Network/AWS/IoT/Types.hs
@@ -16,13 +16,16 @@
       ioT
 
     -- * Errors
+    , _CertificateConflictException
     , _SqlParseException
     , _InvalidRequestException
     , _TransferConflictException
     , _CertificateStateException
+    , _RegistrationCodeValidationException
     , _MalformedPolicyException
     , _DeleteConflictException
     , _ResourceAlreadyExistsException
+    , _CertificateValidationException
     , _TransferAlreadyCompletedException
     , _ThrottlingException
     , _InternalFailureException
@@ -33,6 +36,9 @@
     , _ResourceNotFoundException
     , _LimitExceededException
 
+    -- * CACertificateStatus
+    , CACertificateStatus (..)
+
     -- * CertificateStatus
     , CertificateStatus (..)
 
@@ -62,6 +68,24 @@
     , attributePayload
     , apAttributes
 
+    -- * CACertificate
+    , CACertificate
+    , cACertificate
+    , cacStatus
+    , cacCertificateARN
+    , cacCertificateId
+    , cacCreationDate
+
+    -- * CACertificateDescription
+    , CACertificateDescription
+    , cACertificateDescription
+    , cacdStatus
+    , cacdOwnedBy
+    , cacdCertificatePem
+    , cacdCertificateARN
+    , cacdCertificateId
+    , cacdCreationDate
+
     -- * Certificate
     , Certificate
     , certificate
@@ -76,10 +100,13 @@
     , cdStatus
     , cdOwnedBy
     , cdLastModifiedDate
+    , cdCaCertificateId
+    , cdPreviousOwnedBy
     , cdCertificatePem
     , cdCertificateARN
     , cdCertificateId
     , cdCreationDate
+    , cdTransferData
 
     -- * CloudwatchAlarmAction
     , CloudwatchAlarmAction
@@ -200,6 +227,7 @@
     , topicRule
     , trCreatedAt
     , trActions
+    , trAwsIotSqlVersion
     , trRuleDisabled
     , trRuleName
     , trSql
@@ -217,10 +245,20 @@
     -- * TopicRulePayload
     , TopicRulePayload
     , topicRulePayload
+    , trpAwsIotSqlVersion
     , trpRuleDisabled
     , trpDescription
     , trpSql
     , trpActions
+
+    -- * TransferData
+    , TransferData
+    , transferData
+    , tdTransferDate
+    , tdAcceptDate
+    , tdTransferMessage
+    , tdRejectDate
+    , tdRejectReason
     ) where
 
 import           Network.AWS.IoT.Types.Product
@@ -256,15 +294,25 @@
       | 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"
       | otherwise = Nothing
 
+-- | Unable to verify the CA certificate used to sign the device certificate
+-- you are attempting to register. This is happens when you have registered
+-- more than one CA certificate that has the same subject field and public
+-- key.
+_CertificateConflictException :: AsError a => Getting (First ServiceError) a ServiceError
+_CertificateConflictException =
+    _ServiceError . hasStatus 409 . hasCode "CertificateConflictException"
+
 -- | The Rule-SQL expression can\'t be parsed correctly.
 _SqlParseException :: AsError a => Getting (First ServiceError) a ServiceError
 _SqlParseException =
-    _ServiceError . hasStatus 406 . hasCode "SqlParseException"
+    _ServiceError . hasStatus 400 . hasCode "SqlParseException"
 
 -- | The request is not valid.
 _InvalidRequestException :: AsError a => Getting (First ServiceError) a ServiceError
@@ -282,6 +330,12 @@
 _CertificateStateException =
     _ServiceError . hasStatus 406 . hasCode "CertificateStateException"
 
+-- | The registration code is invalid.
+_RegistrationCodeValidationException :: AsError a => Getting (First ServiceError) a ServiceError
+_RegistrationCodeValidationException =
+    _ServiceError .
+    hasStatus 400 . hasCode "RegistrationCodeValidationException"
+
 -- | The policy documentation is not valid.
 _MalformedPolicyException :: AsError a => Getting (First ServiceError) a ServiceError
 _MalformedPolicyException =
@@ -297,6 +351,11 @@
 _ResourceAlreadyExistsException :: AsError a => Getting (First ServiceError) a ServiceError
 _ResourceAlreadyExistsException =
     _ServiceError . hasStatus 409 . hasCode "ResourceAlreadyExistsException"
+
+-- | The certificate is invalid.
+_CertificateValidationException :: AsError a => Getting (First ServiceError) a ServiceError
+_CertificateValidationException =
+    _ServiceError . hasStatus 400 . hasCode "CertificateValidationException"
 
 -- | You can\'t revert the certificate transfer because the transfer is
 -- already complete.
diff --git a/gen/Network/AWS/IoT/Types/Product.hs b/gen/Network/AWS/IoT/Types/Product.hs
--- a/gen/Network/AWS/IoT/Types/Product.hs
+++ b/gen/Network/AWS/IoT/Types/Product.hs
@@ -143,6 +143,8 @@
 
 instance Hashable Action
 
+instance NFData Action
+
 instance ToJSON Action where
         toJSON Action'{..}
           = object
@@ -185,11 +187,151 @@
 
 instance Hashable AttributePayload
 
+instance NFData AttributePayload
+
 instance ToJSON AttributePayload where
         toJSON AttributePayload'{..}
           = object
               (catMaybes [("attributes" .=) <$> _apAttributes])
 
+-- | A CA certificate.
+--
+-- /See:/ 'cACertificate' smart constructor.
+data CACertificate = CACertificate'
+    { _cacStatus         :: !(Maybe CACertificateStatus)
+    , _cacCertificateARN :: !(Maybe Text)
+    , _cacCertificateId  :: !(Maybe Text)
+    , _cacCreationDate   :: !(Maybe POSIX)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CACertificate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cacStatus'
+--
+-- * 'cacCertificateARN'
+--
+-- * 'cacCertificateId'
+--
+-- * 'cacCreationDate'
+cACertificate
+    :: CACertificate
+cACertificate =
+    CACertificate'
+    { _cacStatus = Nothing
+    , _cacCertificateARN = Nothing
+    , _cacCertificateId = Nothing
+    , _cacCreationDate = Nothing
+    }
+
+-- | The status of the CA certificate.
+cacStatus :: Lens' CACertificate (Maybe CACertificateStatus)
+cacStatus = lens _cacStatus (\ s a -> s{_cacStatus = a});
+
+-- | The ARN of the CA certificate.
+cacCertificateARN :: Lens' CACertificate (Maybe Text)
+cacCertificateARN = lens _cacCertificateARN (\ s a -> s{_cacCertificateARN = a});
+
+-- | The ID of the CA certificate.
+cacCertificateId :: Lens' CACertificate (Maybe Text)
+cacCertificateId = lens _cacCertificateId (\ s a -> s{_cacCertificateId = a});
+
+-- | The date the CA certificate was created.
+cacCreationDate :: Lens' CACertificate (Maybe UTCTime)
+cacCreationDate = lens _cacCreationDate (\ s a -> s{_cacCreationDate = a}) . mapping _Time;
+
+instance FromJSON CACertificate where
+        parseJSON
+          = withObject "CACertificate"
+              (\ x ->
+                 CACertificate' <$>
+                   (x .:? "status") <*> (x .:? "certificateArn") <*>
+                     (x .:? "certificateId")
+                     <*> (x .:? "creationDate"))
+
+instance Hashable CACertificate
+
+instance NFData CACertificate
+
+-- | Describes a CA certificate.
+--
+-- /See:/ 'cACertificateDescription' smart constructor.
+data CACertificateDescription = CACertificateDescription'
+    { _cacdStatus         :: !(Maybe CACertificateStatus)
+    , _cacdOwnedBy        :: !(Maybe Text)
+    , _cacdCertificatePem :: !(Maybe Text)
+    , _cacdCertificateARN :: !(Maybe Text)
+    , _cacdCertificateId  :: !(Maybe Text)
+    , _cacdCreationDate   :: !(Maybe POSIX)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CACertificateDescription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cacdStatus'
+--
+-- * 'cacdOwnedBy'
+--
+-- * 'cacdCertificatePem'
+--
+-- * 'cacdCertificateARN'
+--
+-- * 'cacdCertificateId'
+--
+-- * 'cacdCreationDate'
+cACertificateDescription
+    :: CACertificateDescription
+cACertificateDescription =
+    CACertificateDescription'
+    { _cacdStatus = Nothing
+    , _cacdOwnedBy = Nothing
+    , _cacdCertificatePem = Nothing
+    , _cacdCertificateARN = Nothing
+    , _cacdCertificateId = Nothing
+    , _cacdCreationDate = Nothing
+    }
+
+-- | The status of a CA certificate.
+cacdStatus :: Lens' CACertificateDescription (Maybe CACertificateStatus)
+cacdStatus = lens _cacdStatus (\ s a -> s{_cacdStatus = a});
+
+-- | The owner of the CA certificate.
+cacdOwnedBy :: Lens' CACertificateDescription (Maybe Text)
+cacdOwnedBy = lens _cacdOwnedBy (\ s a -> s{_cacdOwnedBy = a});
+
+-- | The CA certificate data, in PEM format.
+cacdCertificatePem :: Lens' CACertificateDescription (Maybe Text)
+cacdCertificatePem = lens _cacdCertificatePem (\ s a -> s{_cacdCertificatePem = a});
+
+-- | The CA certificate ARN.
+cacdCertificateARN :: Lens' CACertificateDescription (Maybe Text)
+cacdCertificateARN = lens _cacdCertificateARN (\ s a -> s{_cacdCertificateARN = a});
+
+-- | The CA certificate ID.
+cacdCertificateId :: Lens' CACertificateDescription (Maybe Text)
+cacdCertificateId = lens _cacdCertificateId (\ s a -> s{_cacdCertificateId = a});
+
+-- | The date the CA certificate was created.
+cacdCreationDate :: Lens' CACertificateDescription (Maybe UTCTime)
+cacdCreationDate = lens _cacdCreationDate (\ s a -> s{_cacdCreationDate = a}) . mapping _Time;
+
+instance FromJSON CACertificateDescription where
+        parseJSON
+          = withObject "CACertificateDescription"
+              (\ x ->
+                 CACertificateDescription' <$>
+                   (x .:? "status") <*> (x .:? "ownedBy") <*>
+                     (x .:? "certificatePem")
+                     <*> (x .:? "certificateArn")
+                     <*> (x .:? "certificateId")
+                     <*> (x .:? "creationDate"))
+
+instance Hashable CACertificateDescription
+
+instance NFData CACertificateDescription
+
 -- | Information about a certificate.
 --
 -- /See:/ 'certificate' smart constructor.
@@ -248,6 +390,8 @@
 
 instance Hashable Certificate
 
+instance NFData Certificate
+
 -- | Describes a certificate.
 --
 -- /See:/ 'certificateDescription' smart constructor.
@@ -255,10 +399,13 @@
     { _cdStatus           :: !(Maybe CertificateStatus)
     , _cdOwnedBy          :: !(Maybe Text)
     , _cdLastModifiedDate :: !(Maybe POSIX)
+    , _cdCaCertificateId  :: !(Maybe Text)
+    , _cdPreviousOwnedBy  :: !(Maybe Text)
     , _cdCertificatePem   :: !(Maybe Text)
     , _cdCertificateARN   :: !(Maybe Text)
     , _cdCertificateId    :: !(Maybe Text)
     , _cdCreationDate     :: !(Maybe POSIX)
+    , _cdTransferData     :: !(Maybe TransferData)
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'CertificateDescription' with the minimum fields required to make a request.
@@ -271,6 +418,10 @@
 --
 -- * 'cdLastModifiedDate'
 --
+-- * 'cdCaCertificateId'
+--
+-- * 'cdPreviousOwnedBy'
+--
 -- * 'cdCertificatePem'
 --
 -- * 'cdCertificateARN'
@@ -278,6 +429,8 @@
 -- * 'cdCertificateId'
 --
 -- * 'cdCreationDate'
+--
+-- * 'cdTransferData'
 certificateDescription
     :: CertificateDescription
 certificateDescription =
@@ -285,10 +438,13 @@
     { _cdStatus = Nothing
     , _cdOwnedBy = Nothing
     , _cdLastModifiedDate = Nothing
+    , _cdCaCertificateId = Nothing
+    , _cdPreviousOwnedBy = Nothing
     , _cdCertificatePem = Nothing
     , _cdCertificateARN = Nothing
     , _cdCertificateId = Nothing
     , _cdCreationDate = Nothing
+    , _cdTransferData = Nothing
     }
 
 -- | The status of the certificate.
@@ -303,6 +459,14 @@
 cdLastModifiedDate :: Lens' CertificateDescription (Maybe UTCTime)
 cdLastModifiedDate = lens _cdLastModifiedDate (\ s a -> s{_cdLastModifiedDate = a}) . mapping _Time;
 
+-- | The certificate ID of the CA certificate used to sign this certificate.
+cdCaCertificateId :: Lens' CertificateDescription (Maybe Text)
+cdCaCertificateId = lens _cdCaCertificateId (\ s a -> s{_cdCaCertificateId = a});
+
+-- | The ID of the AWS account of the previous owner of the certificate.
+cdPreviousOwnedBy :: Lens' CertificateDescription (Maybe Text)
+cdPreviousOwnedBy = lens _cdPreviousOwnedBy (\ s a -> s{_cdPreviousOwnedBy = a});
+
 -- | The certificate data, in PEM format.
 cdCertificatePem :: Lens' CertificateDescription (Maybe Text)
 cdCertificatePem = lens _cdCertificatePem (\ s a -> s{_cdCertificatePem = a});
@@ -319,6 +483,10 @@
 cdCreationDate :: Lens' CertificateDescription (Maybe UTCTime)
 cdCreationDate = lens _cdCreationDate (\ s a -> s{_cdCreationDate = a}) . mapping _Time;
 
+-- | The transfer data.
+cdTransferData :: Lens' CertificateDescription (Maybe TransferData)
+cdTransferData = lens _cdTransferData (\ s a -> s{_cdTransferData = a});
+
 instance FromJSON CertificateDescription where
         parseJSON
           = withObject "CertificateDescription"
@@ -326,13 +494,18 @@
                  CertificateDescription' <$>
                    (x .:? "status") <*> (x .:? "ownedBy") <*>
                      (x .:? "lastModifiedDate")
+                     <*> (x .:? "caCertificateId")
+                     <*> (x .:? "previousOwnedBy")
                      <*> (x .:? "certificatePem")
                      <*> (x .:? "certificateArn")
                      <*> (x .:? "certificateId")
-                     <*> (x .:? "creationDate"))
+                     <*> (x .:? "creationDate")
+                     <*> (x .:? "transferData"))
 
 instance Hashable CertificateDescription
 
+instance NFData CertificateDescription
+
 -- | Describes an action that updates a CloudWatch alarm.
 --
 -- /See:/ 'cloudwatchAlarmAction' smart constructor.
@@ -396,6 +569,8 @@
 
 instance Hashable CloudwatchAlarmAction
 
+instance NFData CloudwatchAlarmAction
+
 instance ToJSON CloudwatchAlarmAction where
         toJSON CloudwatchAlarmAction'{..}
           = object
@@ -489,6 +664,8 @@
 
 instance Hashable CloudwatchMetricAction
 
+instance NFData CloudwatchMetricAction
+
 instance ToJSON CloudwatchMetricAction where
         toJSON CloudwatchMetricAction'{..}
           = object
@@ -608,6 +785,8 @@
 
 instance Hashable DynamoDBAction
 
+instance NFData DynamoDBAction
+
 instance ToJSON DynamoDBAction where
         toJSON DynamoDBAction'{..}
           = object
@@ -693,6 +872,8 @@
 
 instance Hashable ElasticsearchAction
 
+instance NFData ElasticsearchAction
+
 instance ToJSON ElasticsearchAction where
         toJSON ElasticsearchAction'{..}
           = object
@@ -745,6 +926,8 @@
 
 instance Hashable FirehoseAction
 
+instance NFData FirehoseAction
+
 instance ToJSON FirehoseAction where
         toJSON FirehoseAction'{..}
           = object
@@ -793,6 +976,8 @@
 
 instance Hashable KeyPair
 
+instance NFData KeyPair
+
 -- | Describes an action to write data to an Amazon Kinesis stream.
 --
 -- /See:/ 'kinesisAction' smart constructor.
@@ -844,6 +1029,8 @@
 
 instance Hashable KinesisAction
 
+instance NFData KinesisAction
+
 instance ToJSON KinesisAction where
         toJSON KinesisAction'{..}
           = object
@@ -883,6 +1070,8 @@
 
 instance Hashable LambdaAction
 
+instance NFData LambdaAction
+
 instance ToJSON LambdaAction where
         toJSON LambdaAction'{..}
           = object
@@ -922,6 +1111,8 @@
 
 instance Hashable LoggingOptionsPayload
 
+instance NFData LoggingOptionsPayload
+
 instance ToJSON LoggingOptionsPayload where
         toJSON LoggingOptionsPayload'{..}
           = object
@@ -969,6 +1160,8 @@
 
 instance Hashable Policy
 
+instance NFData Policy
+
 -- | Describes a policy version.
 --
 -- /See:/ 'policyVersion' smart constructor.
@@ -1018,6 +1211,8 @@
 
 instance Hashable PolicyVersion
 
+instance NFData PolicyVersion
+
 -- | Describes an action to republish to another topic.
 --
 -- /See:/ 'republishAction' smart constructor.
@@ -1060,6 +1255,8 @@
 
 instance Hashable RepublishAction
 
+instance NFData RepublishAction
+
 instance ToJSON RepublishAction where
         toJSON RepublishAction'{..}
           = object
@@ -1119,6 +1316,8 @@
 
 instance Hashable S3Action
 
+instance NFData S3Action
+
 instance ToJSON S3Action where
         toJSON S3Action'{..}
           = object
@@ -1184,6 +1383,8 @@
 
 instance Hashable SNSAction
 
+instance NFData SNSAction
+
 instance ToJSON SNSAction where
         toJSON SNSAction'{..}
           = object
@@ -1243,6 +1444,8 @@
 
 instance Hashable SqsAction
 
+instance NFData SqsAction
+
 instance ToJSON SqsAction where
         toJSON SqsAction'{..}
           = object
@@ -1292,16 +1495,19 @@
 
 instance Hashable ThingAttribute
 
+instance NFData ThingAttribute
+
 -- | Describes a rule.
 --
 -- /See:/ 'topicRule' smart constructor.
 data TopicRule = TopicRule'
-    { _trCreatedAt    :: !(Maybe POSIX)
-    , _trActions      :: !(Maybe [Action])
-    , _trRuleDisabled :: !(Maybe Bool)
-    , _trRuleName     :: !(Maybe Text)
-    , _trSql          :: !(Maybe Text)
-    , _trDescription  :: !(Maybe Text)
+    { _trCreatedAt        :: !(Maybe POSIX)
+    , _trActions          :: !(Maybe [Action])
+    , _trAwsIotSqlVersion :: !(Maybe Text)
+    , _trRuleDisabled     :: !(Maybe Bool)
+    , _trRuleName         :: !(Maybe Text)
+    , _trSql              :: !(Maybe Text)
+    , _trDescription      :: !(Maybe Text)
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'TopicRule' with the minimum fields required to make a request.
@@ -1312,6 +1518,8 @@
 --
 -- * 'trActions'
 --
+-- * 'trAwsIotSqlVersion'
+--
 -- * 'trRuleDisabled'
 --
 -- * 'trRuleName'
@@ -1325,6 +1533,7 @@
     TopicRule'
     { _trCreatedAt = Nothing
     , _trActions = Nothing
+    , _trAwsIotSqlVersion = Nothing
     , _trRuleDisabled = Nothing
     , _trRuleName = Nothing
     , _trSql = Nothing
@@ -1339,6 +1548,10 @@
 trActions :: Lens' TopicRule [Action]
 trActions = lens _trActions (\ s a -> s{_trActions = a}) . _Default . _Coerce;
 
+-- | The version of the SQL rules engine to use when evaluating the rule.
+trAwsIotSqlVersion :: Lens' TopicRule (Maybe Text)
+trAwsIotSqlVersion = lens _trAwsIotSqlVersion (\ s a -> s{_trAwsIotSqlVersion = a});
+
 -- | Specifies whether the rule is disabled.
 trRuleDisabled :: Lens' TopicRule (Maybe Bool)
 trRuleDisabled = lens _trRuleDisabled (\ s a -> s{_trRuleDisabled = a});
@@ -1362,6 +1575,7 @@
               (\ x ->
                  TopicRule' <$>
                    (x .:? "createdAt") <*> (x .:? "actions" .!= mempty)
+                     <*> (x .:? "awsIotSqlVersion")
                      <*> (x .:? "ruleDisabled")
                      <*> (x .:? "ruleName")
                      <*> (x .:? "sql")
@@ -1369,6 +1583,8 @@
 
 instance Hashable TopicRule
 
+instance NFData TopicRule
+
 -- | Describes a rule.
 --
 -- /See:/ 'topicRuleListItem' smart constructor.
@@ -1436,20 +1652,25 @@
 
 instance Hashable TopicRuleListItem
 
+instance NFData TopicRuleListItem
+
 -- | Describes a rule.
 --
 -- /See:/ 'topicRulePayload' smart constructor.
 data TopicRulePayload = TopicRulePayload'
-    { _trpRuleDisabled :: !(Maybe Bool)
-    , _trpDescription  :: !(Maybe Text)
-    , _trpSql          :: !Text
-    , _trpActions      :: ![Action]
+    { _trpAwsIotSqlVersion :: !(Maybe Text)
+    , _trpRuleDisabled     :: !(Maybe Bool)
+    , _trpDescription      :: !(Maybe Text)
+    , _trpSql              :: !Text
+    , _trpActions          :: ![Action]
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'TopicRulePayload' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'trpAwsIotSqlVersion'
+--
 -- * 'trpRuleDisabled'
 --
 -- * 'trpDescription'
@@ -1462,12 +1683,17 @@
     -> TopicRulePayload
 topicRulePayload pSql_ =
     TopicRulePayload'
-    { _trpRuleDisabled = Nothing
+    { _trpAwsIotSqlVersion = Nothing
+    , _trpRuleDisabled = Nothing
     , _trpDescription = Nothing
     , _trpSql = pSql_
     , _trpActions = mempty
     }
 
+-- | The version of the SQL rules engine to use when evaluating the rule.
+trpAwsIotSqlVersion :: Lens' TopicRulePayload (Maybe Text)
+trpAwsIotSqlVersion = lens _trpAwsIotSqlVersion (\ s a -> s{_trpAwsIotSqlVersion = a});
+
 -- | Specifies whether the rule is disabled.
 trpRuleDisabled :: Lens' TopicRulePayload (Maybe Bool)
 trpRuleDisabled = lens _trpRuleDisabled (\ s a -> s{_trpRuleDisabled = a});
@@ -1488,11 +1714,83 @@
 
 instance Hashable TopicRulePayload
 
+instance NFData TopicRulePayload
+
 instance ToJSON TopicRulePayload where
         toJSON TopicRulePayload'{..}
           = object
               (catMaybes
-                 [("ruleDisabled" .=) <$> _trpRuleDisabled,
+                 [("awsIotSqlVersion" .=) <$> _trpAwsIotSqlVersion,
+                  ("ruleDisabled" .=) <$> _trpRuleDisabled,
                   ("description" .=) <$> _trpDescription,
                   Just ("sql" .= _trpSql),
                   Just ("actions" .= _trpActions)])
+
+-- | Data used to transfer a certificate to an AWS account.
+--
+-- /See:/ 'transferData' smart constructor.
+data TransferData = TransferData'
+    { _tdTransferDate    :: !(Maybe POSIX)
+    , _tdAcceptDate      :: !(Maybe POSIX)
+    , _tdTransferMessage :: !(Maybe Text)
+    , _tdRejectDate      :: !(Maybe POSIX)
+    , _tdRejectReason    :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TransferData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdTransferDate'
+--
+-- * 'tdAcceptDate'
+--
+-- * 'tdTransferMessage'
+--
+-- * 'tdRejectDate'
+--
+-- * 'tdRejectReason'
+transferData
+    :: TransferData
+transferData =
+    TransferData'
+    { _tdTransferDate = Nothing
+    , _tdAcceptDate = Nothing
+    , _tdTransferMessage = Nothing
+    , _tdRejectDate = Nothing
+    , _tdRejectReason = Nothing
+    }
+
+-- | The date the transfer took place.
+tdTransferDate :: Lens' TransferData (Maybe UTCTime)
+tdTransferDate = lens _tdTransferDate (\ s a -> s{_tdTransferDate = a}) . mapping _Time;
+
+-- | The date the transfer was accepted.
+tdAcceptDate :: Lens' TransferData (Maybe UTCTime)
+tdAcceptDate = lens _tdAcceptDate (\ s a -> s{_tdAcceptDate = a}) . mapping _Time;
+
+-- | The transfer message.
+tdTransferMessage :: Lens' TransferData (Maybe Text)
+tdTransferMessage = lens _tdTransferMessage (\ s a -> s{_tdTransferMessage = a});
+
+-- | The date the transfer was rejected.
+tdRejectDate :: Lens' TransferData (Maybe UTCTime)
+tdRejectDate = lens _tdRejectDate (\ s a -> s{_tdRejectDate = a}) . mapping _Time;
+
+-- | The reason why the transfer was rejected.
+tdRejectReason :: Lens' TransferData (Maybe Text)
+tdRejectReason = lens _tdRejectReason (\ s a -> s{_tdRejectReason = a});
+
+instance FromJSON TransferData where
+        parseJSON
+          = withObject "TransferData"
+              (\ x ->
+                 TransferData' <$>
+                   (x .:? "transferDate") <*> (x .:? "acceptDate") <*>
+                     (x .:? "transferMessage")
+                     <*> (x .:? "rejectDate")
+                     <*> (x .:? "rejectReason"))
+
+instance Hashable TransferData
+
+instance NFData TransferData
diff --git a/gen/Network/AWS/IoT/Types/Sum.hs b/gen/Network/AWS/IoT/Types/Sum.hs
--- a/gen/Network/AWS/IoT/Types/Sum.hs
+++ b/gen/Network/AWS/IoT/Types/Sum.hs
@@ -19,10 +19,40 @@
 
 import           Network.AWS.Prelude
 
+data CACertificateStatus
+    = CACSActive
+    | CACSInactive
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText CACertificateStatus where
+    parser = takeLowerText >>= \case
+        "active" -> pure CACSActive
+        "inactive" -> pure CACSInactive
+        e -> fromTextError $ "Failure parsing CACertificateStatus from value: '" <> e
+           <> "'. Accepted values: ACTIVE, INACTIVE"
+
+instance ToText CACertificateStatus where
+    toText = \case
+        CACSActive -> "ACTIVE"
+        CACSInactive -> "INACTIVE"
+
+instance Hashable     CACertificateStatus
+instance NFData       CACertificateStatus
+instance ToByteString CACertificateStatus
+instance ToQuery      CACertificateStatus
+instance ToHeader     CACertificateStatus
+
+instance ToJSON CACertificateStatus where
+    toJSON = toJSONText
+
+instance FromJSON CACertificateStatus where
+    parseJSON = parseJSONText "CACertificateStatus"
+
 data CertificateStatus
     = Active
     | Inactive
     | PendingTransfer
+    | RegisterInactive
     | Revoked
     deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
 
@@ -31,18 +61,21 @@
         "active" -> pure Active
         "inactive" -> pure Inactive
         "pending_transfer" -> pure PendingTransfer
+        "register_inactive" -> pure RegisterInactive
         "revoked" -> pure Revoked
         e -> fromTextError $ "Failure parsing CertificateStatus from value: '" <> e
-           <> "'. Accepted values: ACTIVE, INACTIVE, PENDING_TRANSFER, REVOKED"
+           <> "'. Accepted values: ACTIVE, INACTIVE, PENDING_TRANSFER, REGISTER_INACTIVE, REVOKED"
 
 instance ToText CertificateStatus where
     toText = \case
         Active -> "ACTIVE"
         Inactive -> "INACTIVE"
         PendingTransfer -> "PENDING_TRANSFER"
+        RegisterInactive -> "REGISTER_INACTIVE"
         Revoked -> "REVOKED"
 
 instance Hashable     CertificateStatus
+instance NFData       CertificateStatus
 instance ToByteString CertificateStatus
 instance ToQuery      CertificateStatus
 instance ToHeader     CertificateStatus
@@ -80,6 +113,7 @@
         Warn -> "WARN"
 
 instance Hashable     LogLevel
+instance NFData       LogLevel
 instance ToByteString LogLevel
 instance ToQuery      LogLevel
 instance ToHeader     LogLevel
@@ -108,6 +142,7 @@
         Raw -> "RAW"
 
 instance Hashable     MessageFormat
+instance NFData       MessageFormat
 instance ToByteString MessageFormat
 instance ToQuery      MessageFormat
 instance ToHeader     MessageFormat
diff --git a/gen/Network/AWS/IoT/UpdateCACertificate.hs b/gen/Network/AWS/IoT/UpdateCACertificate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/IoT/UpdateCACertificate.hs
@@ -0,0 +1,112 @@
+{-# 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.IoT.UpdateCACertificate
+-- 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)
+--
+-- Updates a registered CA certificate.
+module Network.AWS.IoT.UpdateCACertificate
+    (
+    -- * Creating a Request
+      updateCACertificate
+    , UpdateCACertificate
+    -- * Request Lenses
+    , ucacCertificateId
+    , ucacNewStatus
+
+    -- * Destructuring the Response
+    , updateCACertificateResponse
+    , UpdateCACertificateResponse
+    ) where
+
+import           Network.AWS.IoT.Types
+import           Network.AWS.IoT.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | The input to the UpdateCACertificate operation.
+--
+-- /See:/ 'updateCACertificate' smart constructor.
+data UpdateCACertificate = UpdateCACertificate'
+    { _ucacCertificateId :: !Text
+    , _ucacNewStatus     :: !CACertificateStatus
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateCACertificate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ucacCertificateId'
+--
+-- * 'ucacNewStatus'
+updateCACertificate
+    :: Text -- ^ 'ucacCertificateId'
+    -> CACertificateStatus -- ^ 'ucacNewStatus'
+    -> UpdateCACertificate
+updateCACertificate pCertificateId_ pNewStatus_ =
+    UpdateCACertificate'
+    { _ucacCertificateId = pCertificateId_
+    , _ucacNewStatus = pNewStatus_
+    }
+
+-- | The CA certificate identifier.
+ucacCertificateId :: Lens' UpdateCACertificate Text
+ucacCertificateId = lens _ucacCertificateId (\ s a -> s{_ucacCertificateId = a});
+
+-- | The updated status of the CA certificate.
+ucacNewStatus :: Lens' UpdateCACertificate CACertificateStatus
+ucacNewStatus = lens _ucacNewStatus (\ s a -> s{_ucacNewStatus = a});
+
+instance AWSRequest UpdateCACertificate where
+        type Rs UpdateCACertificate =
+             UpdateCACertificateResponse
+        request = putJSON ioT
+        response = receiveNull UpdateCACertificateResponse'
+
+instance Hashable UpdateCACertificate
+
+instance NFData UpdateCACertificate
+
+instance ToHeaders UpdateCACertificate where
+        toHeaders = const mempty
+
+instance ToJSON UpdateCACertificate where
+        toJSON = const (Object mempty)
+
+instance ToPath UpdateCACertificate where
+        toPath UpdateCACertificate'{..}
+          = mconcat
+              ["/cacertificate/", toBS _ucacCertificateId]
+
+instance ToQuery UpdateCACertificate where
+        toQuery UpdateCACertificate'{..}
+          = mconcat ["newStatus" =: _ucacNewStatus]
+
+-- | /See:/ 'updateCACertificateResponse' smart constructor.
+data UpdateCACertificateResponse =
+    UpdateCACertificateResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateCACertificateResponse' with the minimum fields required to make a request.
+--
+updateCACertificateResponse
+    :: UpdateCACertificateResponse
+updateCACertificateResponse = UpdateCACertificateResponse'
+
+instance NFData UpdateCACertificateResponse
diff --git a/gen/Network/AWS/IoT/UpdateCertificate.hs b/gen/Network/AWS/IoT/UpdateCertificate.hs
--- a/gen/Network/AWS/IoT/UpdateCertificate.hs
+++ b/gen/Network/AWS/IoT/UpdateCertificate.hs
@@ -92,6 +92,8 @@
 
 instance Hashable UpdateCertificate
 
+instance NFData UpdateCertificate
+
 instance ToHeaders UpdateCertificate where
         toHeaders = const mempty
 
@@ -116,3 +118,5 @@
 updateCertificateResponse
     :: UpdateCertificateResponse
 updateCertificateResponse = UpdateCertificateResponse'
+
+instance NFData UpdateCertificateResponse
diff --git a/gen/Network/AWS/IoT/UpdateThing.hs b/gen/Network/AWS/IoT/UpdateThing.hs
--- a/gen/Network/AWS/IoT/UpdateThing.hs
+++ b/gen/Network/AWS/IoT/UpdateThing.hs
@@ -87,6 +87,8 @@
 
 instance Hashable UpdateThing
 
+instance NFData UpdateThing
+
 instance ToHeaders UpdateThing where
         toHeaders = const mempty
 
@@ -126,3 +128,5 @@
 -- | The response status code.
 utrsResponseStatus :: Lens' UpdateThingResponse Int
 utrsResponseStatus = lens _utrsResponseStatus (\ s a -> s{_utrsResponseStatus = a});
+
+instance NFData UpdateThingResponse
diff --git a/test/Test/AWS/Gen/IoT.hs b/test/Test/AWS/Gen/IoT.hs
--- a/test/Test/AWS/Gen/IoT.hs
+++ b/test/Test/AWS/Gen/IoT.hs
@@ -34,6 +34,9 @@
 --         , testCreatePolicy $
 --             createPolicy
 --
+--         , testRegisterCertificate $
+--             registerCertificate
+--
 --         , testListThingPrincipals $
 --             listThingPrincipals
 --
@@ -67,12 +70,21 @@
 --         , testCreatePolicyVersion $
 --             createPolicyVersion
 --
+--         , testListCACertificates $
+--             listCACertificates
+--
 --         , testDeleteTopicRule $
 --             deleteTopicRule
 --
 --         , testListPrincipalPolicies $
 --             listPrincipalPolicies
 --
+--         , testDeleteCACertificate $
+--             deleteCACertificate
+--
+--         , testUpdateCACertificate $
+--             updateCACertificate
+--
 --         , testListTopicRules $
 --             listTopicRules
 --
@@ -100,6 +112,15 @@
 --         , testUpdateCertificate $
 --             updateCertificate
 --
+--         , testDescribeCACertificate $
+--             describeCACertificate
+--
+--         , testGetRegistrationCode $
+--             getRegistrationCode
+--
+--         , testListCertificatesByCA $
+--             listCertificatesByCA
+--
 --         , testAttachThingPrincipal $
 --             attachThingPrincipal
 --
@@ -109,6 +130,9 @@
 --         , testDetachPrincipalPolicy $
 --             detachPrincipalPolicy
 --
+--         , testDeleteRegistrationCode $
+--             deleteRegistrationCode
+--
 --         , testCreateThing $
 --             createThing
 --
@@ -139,6 +163,9 @@
 --         , testDescribeEndpoint $
 --             describeEndpoint
 --
+--         , testRegisterCACertificate $
+--             registerCACertificate
+--
 --         , testSetLoggingOptions $
 --             setLoggingOptions
 --
@@ -160,6 +187,9 @@
 --         , testCreatePolicyResponse $
 --             createPolicyResponse
 --
+--         , testRegisterCertificateResponse $
+--             registerCertificateResponse
+--
 --         , testListThingPrincipalsResponse $
 --             listThingPrincipalsResponse
 --
@@ -193,12 +223,21 @@
 --         , testCreatePolicyVersionResponse $
 --             createPolicyVersionResponse
 --
+--         , testListCACertificatesResponse $
+--             listCACertificatesResponse
+--
 --         , testDeleteTopicRuleResponse $
 --             deleteTopicRuleResponse
 --
 --         , testListPrincipalPoliciesResponse $
 --             listPrincipalPoliciesResponse
 --
+--         , testDeleteCACertificateResponse $
+--             deleteCACertificateResponse
+--
+--         , testUpdateCACertificateResponse $
+--             updateCACertificateResponse
+--
 --         , testListTopicRulesResponse $
 --             listTopicRulesResponse
 --
@@ -226,6 +265,15 @@
 --         , testUpdateCertificateResponse $
 --             updateCertificateResponse
 --
+--         , testDescribeCACertificateResponse $
+--             describeCACertificateResponse
+--
+--         , testGetRegistrationCodeResponse $
+--             getRegistrationCodeResponse
+--
+--         , testListCertificatesByCAResponse $
+--             listCertificatesByCAResponse
+--
 --         , testAttachThingPrincipalResponse $
 --             attachThingPrincipalResponse
 --
@@ -235,6 +283,9 @@
 --         , testDetachPrincipalPolicyResponse $
 --             detachPrincipalPolicyResponse
 --
+--         , testDeleteRegistrationCodeResponse $
+--             deleteRegistrationCodeResponse
+--
 --         , testCreateThingResponse $
 --             createThingResponse
 --
@@ -265,6 +316,9 @@
 --         , testDescribeEndpointResponse $
 --             describeEndpointResponse
 --
+--         , testRegisterCACertificateResponse $
+--             registerCACertificateResponse
+--
 --         , testSetLoggingOptionsResponse $
 --             setLoggingOptionsResponse
 --
@@ -292,6 +346,11 @@
     "CreatePolicy"
     "fixture/CreatePolicy.yaml"
 
+testRegisterCertificate :: RegisterCertificate -> TestTree
+testRegisterCertificate = req
+    "RegisterCertificate"
+    "fixture/RegisterCertificate.yaml"
+
 testListThingPrincipals :: ListThingPrincipals -> TestTree
 testListThingPrincipals = req
     "ListThingPrincipals"
@@ -347,6 +406,11 @@
     "CreatePolicyVersion"
     "fixture/CreatePolicyVersion.yaml"
 
+testListCACertificates :: ListCACertificates -> TestTree
+testListCACertificates = req
+    "ListCACertificates"
+    "fixture/ListCACertificates.yaml"
+
 testDeleteTopicRule :: DeleteTopicRule -> TestTree
 testDeleteTopicRule = req
     "DeleteTopicRule"
@@ -357,6 +421,16 @@
     "ListPrincipalPolicies"
     "fixture/ListPrincipalPolicies.yaml"
 
+testDeleteCACertificate :: DeleteCACertificate -> TestTree
+testDeleteCACertificate = req
+    "DeleteCACertificate"
+    "fixture/DeleteCACertificate.yaml"
+
+testUpdateCACertificate :: UpdateCACertificate -> TestTree
+testUpdateCACertificate = req
+    "UpdateCACertificate"
+    "fixture/UpdateCACertificate.yaml"
+
 testListTopicRules :: ListTopicRules -> TestTree
 testListTopicRules = req
     "ListTopicRules"
@@ -402,6 +476,21 @@
     "UpdateCertificate"
     "fixture/UpdateCertificate.yaml"
 
+testDescribeCACertificate :: DescribeCACertificate -> TestTree
+testDescribeCACertificate = req
+    "DescribeCACertificate"
+    "fixture/DescribeCACertificate.yaml"
+
+testGetRegistrationCode :: GetRegistrationCode -> TestTree
+testGetRegistrationCode = req
+    "GetRegistrationCode"
+    "fixture/GetRegistrationCode.yaml"
+
+testListCertificatesByCA :: ListCertificatesByCA -> TestTree
+testListCertificatesByCA = req
+    "ListCertificatesByCA"
+    "fixture/ListCertificatesByCA.yaml"
+
 testAttachThingPrincipal :: AttachThingPrincipal -> TestTree
 testAttachThingPrincipal = req
     "AttachThingPrincipal"
@@ -417,6 +506,11 @@
     "DetachPrincipalPolicy"
     "fixture/DetachPrincipalPolicy.yaml"
 
+testDeleteRegistrationCode :: DeleteRegistrationCode -> TestTree
+testDeleteRegistrationCode = req
+    "DeleteRegistrationCode"
+    "fixture/DeleteRegistrationCode.yaml"
+
 testCreateThing :: CreateThing -> TestTree
 testCreateThing = req
     "CreateThing"
@@ -467,6 +561,11 @@
     "DescribeEndpoint"
     "fixture/DescribeEndpoint.yaml"
 
+testRegisterCACertificate :: RegisterCACertificate -> TestTree
+testRegisterCACertificate = req
+    "RegisterCACertificate"
+    "fixture/RegisterCACertificate.yaml"
+
 testSetLoggingOptions :: SetLoggingOptions -> TestTree
 testSetLoggingOptions = req
     "SetLoggingOptions"
@@ -503,6 +602,13 @@
     ioT
     (Proxy :: Proxy CreatePolicy)
 
+testRegisterCertificateResponse :: RegisterCertificateResponse -> TestTree
+testRegisterCertificateResponse = res
+    "RegisterCertificateResponse"
+    "fixture/RegisterCertificateResponse.proto"
+    ioT
+    (Proxy :: Proxy RegisterCertificate)
+
 testListThingPrincipalsResponse :: ListThingPrincipalsResponse -> TestTree
 testListThingPrincipalsResponse = res
     "ListThingPrincipalsResponse"
@@ -580,6 +686,13 @@
     ioT
     (Proxy :: Proxy CreatePolicyVersion)
 
+testListCACertificatesResponse :: ListCACertificatesResponse -> TestTree
+testListCACertificatesResponse = res
+    "ListCACertificatesResponse"
+    "fixture/ListCACertificatesResponse.proto"
+    ioT
+    (Proxy :: Proxy ListCACertificates)
+
 testDeleteTopicRuleResponse :: DeleteTopicRuleResponse -> TestTree
 testDeleteTopicRuleResponse = res
     "DeleteTopicRuleResponse"
@@ -594,6 +707,20 @@
     ioT
     (Proxy :: Proxy ListPrincipalPolicies)
 
+testDeleteCACertificateResponse :: DeleteCACertificateResponse -> TestTree
+testDeleteCACertificateResponse = res
+    "DeleteCACertificateResponse"
+    "fixture/DeleteCACertificateResponse.proto"
+    ioT
+    (Proxy :: Proxy DeleteCACertificate)
+
+testUpdateCACertificateResponse :: UpdateCACertificateResponse -> TestTree
+testUpdateCACertificateResponse = res
+    "UpdateCACertificateResponse"
+    "fixture/UpdateCACertificateResponse.proto"
+    ioT
+    (Proxy :: Proxy UpdateCACertificate)
+
 testListTopicRulesResponse :: ListTopicRulesResponse -> TestTree
 testListTopicRulesResponse = res
     "ListTopicRulesResponse"
@@ -657,6 +784,27 @@
     ioT
     (Proxy :: Proxy UpdateCertificate)
 
+testDescribeCACertificateResponse :: DescribeCACertificateResponse -> TestTree
+testDescribeCACertificateResponse = res
+    "DescribeCACertificateResponse"
+    "fixture/DescribeCACertificateResponse.proto"
+    ioT
+    (Proxy :: Proxy DescribeCACertificate)
+
+testGetRegistrationCodeResponse :: GetRegistrationCodeResponse -> TestTree
+testGetRegistrationCodeResponse = res
+    "GetRegistrationCodeResponse"
+    "fixture/GetRegistrationCodeResponse.proto"
+    ioT
+    (Proxy :: Proxy GetRegistrationCode)
+
+testListCertificatesByCAResponse :: ListCertificatesByCAResponse -> TestTree
+testListCertificatesByCAResponse = res
+    "ListCertificatesByCAResponse"
+    "fixture/ListCertificatesByCAResponse.proto"
+    ioT
+    (Proxy :: Proxy ListCertificatesByCA)
+
 testAttachThingPrincipalResponse :: AttachThingPrincipalResponse -> TestTree
 testAttachThingPrincipalResponse = res
     "AttachThingPrincipalResponse"
@@ -678,6 +826,13 @@
     ioT
     (Proxy :: Proxy DetachPrincipalPolicy)
 
+testDeleteRegistrationCodeResponse :: DeleteRegistrationCodeResponse -> TestTree
+testDeleteRegistrationCodeResponse = res
+    "DeleteRegistrationCodeResponse"
+    "fixture/DeleteRegistrationCodeResponse.proto"
+    ioT
+    (Proxy :: Proxy DeleteRegistrationCode)
+
 testCreateThingResponse :: CreateThingResponse -> TestTree
 testCreateThingResponse = res
     "CreateThingResponse"
@@ -747,6 +902,13 @@
     "fixture/DescribeEndpointResponse.proto"
     ioT
     (Proxy :: Proxy DescribeEndpoint)
+
+testRegisterCACertificateResponse :: RegisterCACertificateResponse -> TestTree
+testRegisterCACertificateResponse = res
+    "RegisterCACertificateResponse"
+    "fixture/RegisterCACertificateResponse.proto"
+    ioT
+    (Proxy :: Proxy RegisterCACertificate)
 
 testSetLoggingOptionsResponse :: SetLoggingOptionsResponse -> TestTree
 testSetLoggingOptionsResponse = res
