diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.5.0`
+`1.6.0`
 
 
 ## Description
@@ -26,7 +26,7 @@
 The provided lenses should be compatible with any of the major lens libraries
 [lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
 
-See [Network.AWS.IoTDataPlane](http://hackage.haskell.org/package/amazonka-iot-dataplane/docs/Network-AWS-IoTDataPlane.html)
+See [Network.AWS.IoTData](http://hackage.haskell.org/package/amazonka-iot-dataplane/docs/Network-AWS-IoTData.html)
 or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
 
 
diff --git a/amazonka-iot-dataplane.cabal b/amazonka-iot-dataplane.cabal
--- a/amazonka-iot-dataplane.cabal
+++ b/amazonka-iot-dataplane.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-iot-dataplane
-version:               1.5.0
+version:               1.6.0
 synopsis:              Amazon IoT Data Plane SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -7,7 +7,7 @@
 license-file:          LICENSE
 author:                Brendan Hay
 maintainer:            Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-copyright:             Copyright (c) 2013-2017 Brendan Hay
+copyright:             Copyright (c) 2013-2018 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 cabal-version:         >= 1.10
@@ -25,7 +25,7 @@
     such as <http://hackage.haskell.org/package/lens lens> or
     <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
     .
-    See "Network.AWS.IoTDataPlane" or <https://aws.amazon.com/documentation/ the AWS documentation>
+    See "Network.AWS.IoTData" or <https://aws.amazon.com/documentation/ the AWS documentation>
     to get started.
 
 source-repository head
@@ -44,20 +44,20 @@
         -funbox-strict-fields
 
     exposed-modules:
-          Network.AWS.IoTDataPlane
-        , Network.AWS.IoTDataPlane.DeleteThingShadow
-        , Network.AWS.IoTDataPlane.GetThingShadow
-        , Network.AWS.IoTDataPlane.Publish
-        , Network.AWS.IoTDataPlane.Types
-        , Network.AWS.IoTDataPlane.UpdateThingShadow
-        , Network.AWS.IoTDataPlane.Waiters
+          Network.AWS.IoTData
+        , Network.AWS.IoTData.DeleteThingShadow
+        , Network.AWS.IoTData.GetThingShadow
+        , Network.AWS.IoTData.Publish
+        , Network.AWS.IoTData.Types
+        , Network.AWS.IoTData.UpdateThingShadow
+        , Network.AWS.IoTData.Waiters
 
     other-modules:
-          Network.AWS.IoTDataPlane.Types.Product
-        , Network.AWS.IoTDataPlane.Types.Sum
+          Network.AWS.IoTData.Types.Product
+        , Network.AWS.IoTData.Types.Sum
 
     build-depends:
-          amazonka-core == 1.5.0.*
+          amazonka-core == 1.6.0.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-iot-dataplane-test
@@ -72,13 +72,13 @@
     -- hand outside these namespaces will not correctly be added to the
     -- distribution package.
     other-modules:
-          Test.AWS.IoTDataPlane
-        , Test.AWS.Gen.IoTDataPlane
-        , Test.AWS.IoTDataPlane.Internal
+          Test.AWS.IoTData
+        , Test.AWS.Gen.IoTData
+        , Test.AWS.IoTData.Internal
 
     build-depends:
-          amazonka-core == 1.5.0.*
-        , amazonka-test == 1.5.0.*
+          amazonka-core == 1.6.0.*
+        , amazonka-test == 1.6.0.*
         , amazonka-iot-dataplane
         , base
         , bytestring
diff --git a/gen/Network/AWS/IoTData.hs b/gen/Network/AWS/IoTData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/IoTData.hs
@@ -0,0 +1,112 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.IoTData
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- __AWS IoT__
+--
+-- AWS IoT-Data enables secure, bi-directional communication between Internet-connected things (such as sensors, actuators, embedded devices, or smart appliances) and the AWS cloud. It implements a broker for applications and things to publish messages over HTTP (Publish) and retrieve, update, and delete thing shadows. A thing shadow is a persistent representation of your things and their state in the AWS cloud.
+--
+module Network.AWS.IoTData
+    (
+    -- * Service Configuration
+      ioTData
+
+    -- * Errors
+    -- $errors
+
+    -- ** InvalidRequestException
+    , _InvalidRequestException
+
+    -- ** ConflictException
+    , _ConflictException
+
+    -- ** RequestEntityTooLargeException
+    , _RequestEntityTooLargeException
+
+    -- ** ThrottlingException
+    , _ThrottlingException
+
+    -- ** MethodNotAllowedException
+    , _MethodNotAllowedException
+
+    -- ** InternalFailureException
+    , _InternalFailureException
+
+    -- ** ServiceUnavailableException
+    , _ServiceUnavailableException
+
+    -- ** UnauthorizedException
+    , _UnauthorizedException
+
+    -- ** ResourceNotFoundException
+    , _ResourceNotFoundException
+
+    -- ** UnsupportedDocumentEncodingException
+    , _UnsupportedDocumentEncodingException
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** GetThingShadow
+    , module Network.AWS.IoTData.GetThingShadow
+
+    -- ** DeleteThingShadow
+    , module Network.AWS.IoTData.DeleteThingShadow
+
+    -- ** UpdateThingShadow
+    , module Network.AWS.IoTData.UpdateThingShadow
+
+    -- ** Publish
+    , module Network.AWS.IoTData.Publish
+
+    -- * Types
+    ) where
+
+import Network.AWS.IoTData.DeleteThingShadow
+import Network.AWS.IoTData.GetThingShadow
+import Network.AWS.IoTData.Publish
+import Network.AWS.IoTData.Types
+import Network.AWS.IoTData.UpdateThingShadow
+import Network.AWS.IoTData.Waiters
+
+{- $errors
+Error matchers are designed for use with the functions provided by
+<http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+This allows catching (and rethrowing) service specific errors returned
+by 'IoTData'.
+-}
+
+{- $operations
+Some AWS operations return results that are incomplete and require subsequent
+requests in order to obtain the entire result set. The process of sending
+subsequent requests to continue where a previous request left off is called
+pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+1000 objects at a time, and you must send subsequent requests with the
+appropriate Marker in order to retrieve the next page of results.
+
+Operations that have an 'AWSPager' instance can transparently perform subsequent
+requests, correctly setting Markers and other request facets to iterate through
+the entire result set of a truncated API operation. Operations which support
+this have an additional note in the documentation.
+
+Many operations have the ability to filter results on the server side. See the
+individual operation parameters for details.
+-}
+
+{- $waiters
+Waiters poll by repeatedly sending a request until some remote success condition
+configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+determines how many attempts should be made, in addition to delay and retry strategies.
+-}
diff --git a/gen/Network/AWS/IoTData/DeleteThingShadow.hs b/gen/Network/AWS/IoTData/DeleteThingShadow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/IoTData/DeleteThingShadow.hs
@@ -0,0 +1,132 @@
+{-# 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.IoTData.DeleteThingShadow
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the thing shadow for the specified thing.
+--
+--
+-- For more information, see <http://docs.aws.amazon.com/iot/latest/developerguide/API_DeleteThingShadow.html DeleteThingShadow> in the /AWS IoT Developer Guide/ .
+--
+module Network.AWS.IoTData.DeleteThingShadow
+    (
+    -- * Creating a Request
+      deleteThingShadow
+    , DeleteThingShadow
+    -- * Request Lenses
+    , dtsThingName
+
+    -- * Destructuring the Response
+    , deleteThingShadowResponse
+    , DeleteThingShadowResponse
+    -- * Response Lenses
+    , dtsrsResponseStatus
+    , dtsrsPayload
+    ) where
+
+import Network.AWS.IoTData.Types
+import Network.AWS.IoTData.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | The input for the DeleteThingShadow operation.
+--
+--
+--
+-- /See:/ 'deleteThingShadow' smart constructor.
+newtype DeleteThingShadow = DeleteThingShadow'
+  { _dtsThingName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteThingShadow' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtsThingName' - The name of the thing.
+deleteThingShadow
+    :: Text -- ^ 'dtsThingName'
+    -> DeleteThingShadow
+deleteThingShadow pThingName_ = DeleteThingShadow' {_dtsThingName = pThingName_}
+
+
+-- | The name of the thing.
+dtsThingName :: Lens' DeleteThingShadow Text
+dtsThingName = lens _dtsThingName (\ s a -> s{_dtsThingName = a})
+
+instance AWSRequest DeleteThingShadow where
+        type Rs DeleteThingShadow = DeleteThingShadowResponse
+        request = delete ioTData
+        response
+          = receiveBytes
+              (\ s h x ->
+                 DeleteThingShadowResponse' <$>
+                   (pure (fromEnum s)) <*> (pure x))
+
+instance Hashable DeleteThingShadow where
+
+instance NFData DeleteThingShadow where
+
+instance ToHeaders DeleteThingShadow where
+        toHeaders = const mempty
+
+instance ToPath DeleteThingShadow where
+        toPath DeleteThingShadow'{..}
+          = mconcat ["/things/", toBS _dtsThingName, "/shadow"]
+
+instance ToQuery DeleteThingShadow where
+        toQuery = const mempty
+
+-- | The output from the DeleteThingShadow operation.
+--
+--
+--
+-- /See:/ 'deleteThingShadowResponse' smart constructor.
+data DeleteThingShadowResponse = DeleteThingShadowResponse'
+  { _dtsrsResponseStatus :: !Int
+  , _dtsrsPayload        :: !ByteString
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteThingShadowResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtsrsResponseStatus' - -- | The response status code.
+--
+-- * 'dtsrsPayload' - The state information, in JSON format.
+deleteThingShadowResponse
+    :: Int -- ^ 'dtsrsResponseStatus'
+    -> ByteString -- ^ 'dtsrsPayload'
+    -> DeleteThingShadowResponse
+deleteThingShadowResponse pResponseStatus_ pPayload_ =
+  DeleteThingShadowResponse'
+    {_dtsrsResponseStatus = pResponseStatus_, _dtsrsPayload = pPayload_}
+
+
+-- | -- | The response status code.
+dtsrsResponseStatus :: Lens' DeleteThingShadowResponse Int
+dtsrsResponseStatus = lens _dtsrsResponseStatus (\ s a -> s{_dtsrsResponseStatus = a})
+
+-- | The state information, in JSON format.
+dtsrsPayload :: Lens' DeleteThingShadowResponse ByteString
+dtsrsPayload = lens _dtsrsPayload (\ s a -> s{_dtsrsPayload = a})
+
+instance NFData DeleteThingShadowResponse where
diff --git a/gen/Network/AWS/IoTData/GetThingShadow.hs b/gen/Network/AWS/IoTData/GetThingShadow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/IoTData/GetThingShadow.hs
@@ -0,0 +1,131 @@
+{-# 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.IoTData.GetThingShadow
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the thing shadow for the specified thing.
+--
+--
+-- For more information, see <http://docs.aws.amazon.com/iot/latest/developerguide/API_GetThingShadow.html GetThingShadow> in the /AWS IoT Developer Guide/ .
+--
+module Network.AWS.IoTData.GetThingShadow
+    (
+    -- * Creating a Request
+      getThingShadow
+    , GetThingShadow
+    -- * Request Lenses
+    , gtsThingName
+
+    -- * Destructuring the Response
+    , getThingShadowResponse
+    , GetThingShadowResponse
+    -- * Response Lenses
+    , gtsrsPayload
+    , gtsrsResponseStatus
+    ) where
+
+import Network.AWS.IoTData.Types
+import Network.AWS.IoTData.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | The input for the GetThingShadow operation.
+--
+--
+--
+-- /See:/ 'getThingShadow' smart constructor.
+newtype GetThingShadow = GetThingShadow'
+  { _gtsThingName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetThingShadow' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gtsThingName' - The name of the thing.
+getThingShadow
+    :: Text -- ^ 'gtsThingName'
+    -> GetThingShadow
+getThingShadow pThingName_ = GetThingShadow' {_gtsThingName = pThingName_}
+
+
+-- | The name of the thing.
+gtsThingName :: Lens' GetThingShadow Text
+gtsThingName = lens _gtsThingName (\ s a -> s{_gtsThingName = a})
+
+instance AWSRequest GetThingShadow where
+        type Rs GetThingShadow = GetThingShadowResponse
+        request = get ioTData
+        response
+          = receiveBytes
+              (\ s h x ->
+                 GetThingShadowResponse' <$>
+                   (pure (Just x)) <*> (pure (fromEnum s)))
+
+instance Hashable GetThingShadow where
+
+instance NFData GetThingShadow where
+
+instance ToHeaders GetThingShadow where
+        toHeaders = const mempty
+
+instance ToPath GetThingShadow where
+        toPath GetThingShadow'{..}
+          = mconcat ["/things/", toBS _gtsThingName, "/shadow"]
+
+instance ToQuery GetThingShadow where
+        toQuery = const mempty
+
+-- | The output from the GetThingShadow operation.
+--
+--
+--
+-- /See:/ 'getThingShadowResponse' smart constructor.
+data GetThingShadowResponse = GetThingShadowResponse'
+  { _gtsrsPayload        :: !(Maybe ByteString)
+  , _gtsrsResponseStatus :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetThingShadowResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gtsrsPayload' - The state information, in JSON format.
+--
+-- * 'gtsrsResponseStatus' - -- | The response status code.
+getThingShadowResponse
+    :: Int -- ^ 'gtsrsResponseStatus'
+    -> GetThingShadowResponse
+getThingShadowResponse pResponseStatus_ =
+  GetThingShadowResponse'
+    {_gtsrsPayload = Nothing, _gtsrsResponseStatus = pResponseStatus_}
+
+
+-- | The state information, in JSON format.
+gtsrsPayload :: Lens' GetThingShadowResponse (Maybe ByteString)
+gtsrsPayload = lens _gtsrsPayload (\ s a -> s{_gtsrsPayload = a})
+
+-- | -- | The response status code.
+gtsrsResponseStatus :: Lens' GetThingShadowResponse Int
+gtsrsResponseStatus = lens _gtsrsResponseStatus (\ s a -> s{_gtsrsResponseStatus = a})
+
+instance NFData GetThingShadowResponse where
diff --git a/gen/Network/AWS/IoTData/Publish.hs b/gen/Network/AWS/IoTData/Publish.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/IoTData/Publish.hs
@@ -0,0 +1,123 @@
+{-# 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.IoTData.Publish
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Publishes state information.
+--
+--
+-- For more information, see <http://docs.aws.amazon.com/iot/latest/developerguide/protocols.html#http HTTP Protocol> in the /AWS IoT Developer Guide/ .
+--
+module Network.AWS.IoTData.Publish
+    (
+    -- * Creating a Request
+      publish
+    , Publish
+    -- * Request Lenses
+    , pPayload
+    , pQos
+    , pTopic
+
+    -- * Destructuring the Response
+    , publishResponse
+    , PublishResponse
+    ) where
+
+import Network.AWS.IoTData.Types
+import Network.AWS.IoTData.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | The input for the Publish operation.
+--
+--
+--
+-- /See:/ 'publish' smart constructor.
+data Publish = Publish'
+  { _pPayload :: !(Maybe ByteString)
+  , _pQos     :: !(Maybe Nat)
+  , _pTopic   :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Publish' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pPayload' - The state information, in JSON format.
+--
+-- * 'pQos' - The Quality of Service (QoS) level.
+--
+-- * 'pTopic' - The name of the MQTT topic.
+publish
+    :: Text -- ^ 'pTopic'
+    -> Publish
+publish pTopic_ =
+  Publish' {_pPayload = Nothing, _pQos = Nothing, _pTopic = pTopic_}
+
+
+-- | The state information, in JSON format.
+pPayload :: Lens' Publish (Maybe ByteString)
+pPayload = lens _pPayload (\ s a -> s{_pPayload = a})
+
+-- | The Quality of Service (QoS) level.
+pQos :: Lens' Publish (Maybe Natural)
+pQos = lens _pQos (\ s a -> s{_pQos = a}) . mapping _Nat
+
+-- | The name of the MQTT topic.
+pTopic :: Lens' Publish Text
+pTopic = lens _pTopic (\ s a -> s{_pTopic = a})
+
+instance AWSRequest Publish where
+        type Rs Publish = PublishResponse
+        request = postBody ioTData
+        response = receiveNull PublishResponse'
+
+instance Hashable Publish where
+
+instance NFData Publish where
+
+instance ToBody Publish where
+        toBody = toBody . _pPayload
+
+instance ToHeaders Publish where
+        toHeaders = const mempty
+
+instance ToPath Publish where
+        toPath Publish'{..}
+          = mconcat ["/topics/", toBS _pTopic]
+
+instance ToQuery Publish where
+        toQuery Publish'{..} = mconcat ["qos" =: _pQos]
+
+-- | /See:/ 'publishResponse' smart constructor.
+data PublishResponse =
+  PublishResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PublishResponse' with the minimum fields required to make a request.
+--
+publishResponse
+    :: PublishResponse
+publishResponse = PublishResponse'
+
+
+instance NFData PublishResponse where
diff --git a/gen/Network/AWS/IoTData/Types.hs b/gen/Network/AWS/IoTData/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/IoTData/Types.hs
@@ -0,0 +1,155 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.IoTData.Types
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.IoTData.Types
+    (
+    -- * Service Configuration
+      ioTData
+
+    -- * Errors
+    , _InvalidRequestException
+    , _ConflictException
+    , _RequestEntityTooLargeException
+    , _ThrottlingException
+    , _MethodNotAllowedException
+    , _InternalFailureException
+    , _ServiceUnavailableException
+    , _UnauthorizedException
+    , _ResourceNotFoundException
+    , _UnsupportedDocumentEncodingException
+    ) where
+
+import Network.AWS.IoTData.Types.Product
+import Network.AWS.IoTData.Types.Sum
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Sign.V4
+
+-- | API version @2015-05-28@ of the Amazon IoT Data Plane SDK configuration.
+ioTData :: Service
+ioTData =
+  Service
+    { _svcAbbrev = "IoTData"
+    , _svcSigner = v4
+    , _svcPrefix = "data.iot"
+    , _svcVersion = "2015-05-28"
+    , _svcEndpoint = defaultEndpoint ioTData
+    , _svcTimeout = Just 70
+    , _svcCheck = statusSuccess
+    , _svcError = parseJSONError "IoTData"
+    , _svcRetry = retry
+    }
+  where
+    retry =
+      Exponential
+        { _retryBase = 5.0e-2
+        , _retryGrowth = 2
+        , _retryAttempts = 5
+        , _retryCheck = check
+        }
+    check e
+      | has (hasCode "ThrottledException" . hasStatus 400) e =
+        Just "throttled_exception"
+      | has (hasStatus 429) e = Just "too_many_requests"
+      | has (hasCode "ThrottlingException" . hasStatus 400) e =
+        Just "throttling_exception"
+      | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
+      | has (hasStatus 504) e = Just "gateway_timeout"
+      | has (hasCode "RequestThrottledException" . hasStatus 400) e =
+        Just "request_throttled_exception"
+      | 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
+
+
+-- | The request is not valid.
+--
+--
+_InvalidRequestException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidRequestException =
+  _MatchServiceError ioTData "InvalidRequestException" . hasStatus 400
+
+
+-- | The specified version does not match the version of the document.
+--
+--
+_ConflictException :: AsError a => Getting (First ServiceError) a ServiceError
+_ConflictException =
+  _MatchServiceError ioTData "ConflictException" . hasStatus 409
+
+
+-- | The payload exceeds the maximum size allowed.
+--
+--
+_RequestEntityTooLargeException :: AsError a => Getting (First ServiceError) a ServiceError
+_RequestEntityTooLargeException =
+  _MatchServiceError ioTData "RequestEntityTooLargeException" . hasStatus 413
+
+
+-- | The rate exceeds the limit.
+--
+--
+_ThrottlingException :: AsError a => Getting (First ServiceError) a ServiceError
+_ThrottlingException =
+  _MatchServiceError ioTData "ThrottlingException" . hasStatus 429
+
+
+-- | The specified combination of HTTP verb and URI is not supported.
+--
+--
+_MethodNotAllowedException :: AsError a => Getting (First ServiceError) a ServiceError
+_MethodNotAllowedException =
+  _MatchServiceError ioTData "MethodNotAllowedException" . hasStatus 405
+
+
+-- | An unexpected error has occurred.
+--
+--
+_InternalFailureException :: AsError a => Getting (First ServiceError) a ServiceError
+_InternalFailureException =
+  _MatchServiceError ioTData "InternalFailureException" . hasStatus 500
+
+
+-- | The service is temporarily unavailable.
+--
+--
+_ServiceUnavailableException :: AsError a => Getting (First ServiceError) a ServiceError
+_ServiceUnavailableException =
+  _MatchServiceError ioTData "ServiceUnavailableException" . hasStatus 503
+
+
+-- | You are not authorized to perform this operation.
+--
+--
+_UnauthorizedException :: AsError a => Getting (First ServiceError) a ServiceError
+_UnauthorizedException =
+  _MatchServiceError ioTData "UnauthorizedException" . hasStatus 401
+
+
+-- | The specified resource does not exist.
+--
+--
+_ResourceNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceNotFoundException =
+  _MatchServiceError ioTData "ResourceNotFoundException" . hasStatus 404
+
+
+-- | The document encoding is not supported.
+--
+--
+_UnsupportedDocumentEncodingException :: AsError a => Getting (First ServiceError) a ServiceError
+_UnsupportedDocumentEncodingException =
+  _MatchServiceError ioTData "UnsupportedDocumentEncodingException" .
+  hasStatus 415
+
diff --git a/gen/Network/AWS/IoTData/Types/Product.hs b/gen/Network/AWS/IoTData/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/IoTData/Types/Product.hs
@@ -0,0 +1,22 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.IoTData.Types.Product
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.IoTData.Types.Product where
+
+import Network.AWS.IoTData.Types.Sum
+import Network.AWS.Lens
+import Network.AWS.Prelude
diff --git a/gen/Network/AWS/IoTData/Types/Sum.hs b/gen/Network/AWS/IoTData/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/IoTData/Types/Sum.hs
@@ -0,0 +1,20 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.IoTData.Types.Sum
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.IoTData.Types.Sum where
+
+import Network.AWS.Prelude
diff --git a/gen/Network/AWS/IoTData/UpdateThingShadow.hs b/gen/Network/AWS/IoTData/UpdateThingShadow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/IoTData/UpdateThingShadow.hs
@@ -0,0 +1,144 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.IoTData.UpdateThingShadow
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the thing shadow for the specified thing.
+--
+--
+-- For more information, see <http://docs.aws.amazon.com/iot/latest/developerguide/API_UpdateThingShadow.html UpdateThingShadow> in the /AWS IoT Developer Guide/ .
+--
+module Network.AWS.IoTData.UpdateThingShadow
+    (
+    -- * Creating a Request
+      updateThingShadow
+    , UpdateThingShadow
+    -- * Request Lenses
+    , utsThingName
+    , utsPayload
+
+    -- * Destructuring the Response
+    , updateThingShadowResponse
+    , UpdateThingShadowResponse
+    -- * Response Lenses
+    , utsrsPayload
+    , utsrsResponseStatus
+    ) where
+
+import Network.AWS.IoTData.Types
+import Network.AWS.IoTData.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | The input for the UpdateThingShadow operation.
+--
+--
+--
+-- /See:/ 'updateThingShadow' smart constructor.
+data UpdateThingShadow = UpdateThingShadow'
+  { _utsThingName :: !Text
+  , _utsPayload   :: !ByteString
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateThingShadow' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'utsThingName' - The name of the thing.
+--
+-- * 'utsPayload' - The state information, in JSON format.
+updateThingShadow
+    :: Text -- ^ 'utsThingName'
+    -> ByteString -- ^ 'utsPayload'
+    -> UpdateThingShadow
+updateThingShadow pThingName_ pPayload_ =
+  UpdateThingShadow' {_utsThingName = pThingName_, _utsPayload = pPayload_}
+
+
+-- | The name of the thing.
+utsThingName :: Lens' UpdateThingShadow Text
+utsThingName = lens _utsThingName (\ s a -> s{_utsThingName = a})
+
+-- | The state information, in JSON format.
+utsPayload :: Lens' UpdateThingShadow ByteString
+utsPayload = lens _utsPayload (\ s a -> s{_utsPayload = a})
+
+instance AWSRequest UpdateThingShadow where
+        type Rs UpdateThingShadow = UpdateThingShadowResponse
+        request = postBody ioTData
+        response
+          = receiveBytes
+              (\ s h x ->
+                 UpdateThingShadowResponse' <$>
+                   (pure (Just x)) <*> (pure (fromEnum s)))
+
+instance Hashable UpdateThingShadow where
+
+instance NFData UpdateThingShadow where
+
+instance ToBody UpdateThingShadow where
+        toBody = toBody . _utsPayload
+
+instance ToHeaders UpdateThingShadow where
+        toHeaders = const mempty
+
+instance ToPath UpdateThingShadow where
+        toPath UpdateThingShadow'{..}
+          = mconcat ["/things/", toBS _utsThingName, "/shadow"]
+
+instance ToQuery UpdateThingShadow where
+        toQuery = const mempty
+
+-- | The output from the UpdateThingShadow operation.
+--
+--
+--
+-- /See:/ 'updateThingShadowResponse' smart constructor.
+data UpdateThingShadowResponse = UpdateThingShadowResponse'
+  { _utsrsPayload        :: !(Maybe ByteString)
+  , _utsrsResponseStatus :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateThingShadowResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'utsrsPayload' - The state information, in JSON format.
+--
+-- * 'utsrsResponseStatus' - -- | The response status code.
+updateThingShadowResponse
+    :: Int -- ^ 'utsrsResponseStatus'
+    -> UpdateThingShadowResponse
+updateThingShadowResponse pResponseStatus_ =
+  UpdateThingShadowResponse'
+    {_utsrsPayload = Nothing, _utsrsResponseStatus = pResponseStatus_}
+
+
+-- | The state information, in JSON format.
+utsrsPayload :: Lens' UpdateThingShadowResponse (Maybe ByteString)
+utsrsPayload = lens _utsrsPayload (\ s a -> s{_utsrsPayload = a})
+
+-- | -- | The response status code.
+utsrsResponseStatus :: Lens' UpdateThingShadowResponse Int
+utsrsResponseStatus = lens _utsrsResponseStatus (\ s a -> s{_utsrsResponseStatus = a})
+
+instance NFData UpdateThingShadowResponse where
diff --git a/gen/Network/AWS/IoTData/Waiters.hs b/gen/Network/AWS/IoTData/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/IoTData/Waiters.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.IoTData.Waiters
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.IoTData.Waiters where
+
+import Network.AWS.IoTData.Types
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Waiter
diff --git a/gen/Network/AWS/IoTDataPlane.hs b/gen/Network/AWS/IoTDataPlane.hs
deleted file mode 100644
--- a/gen/Network/AWS/IoTDataPlane.hs
+++ /dev/null
@@ -1,112 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.IoTDataPlane
--- Copyright   : (c) 2013-2017 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- __AWS IoT__
---
--- AWS IoT-Data enables secure, bi-directional communication between Internet-connected things (such as sensors, actuators, embedded devices, or smart appliances) and the AWS cloud. It implements a broker for applications and things to publish messages over HTTP (Publish) and retrieve, update, and delete thing shadows. A thing shadow is a persistent representation of your things and their state in the AWS cloud.
---
-module Network.AWS.IoTDataPlane
-    (
-    -- * Service Configuration
-      ioTDataPlane
-
-    -- * Errors
-    -- $errors
-
-    -- ** InvalidRequestException
-    , _InvalidRequestException
-
-    -- ** ConflictException
-    , _ConflictException
-
-    -- ** RequestEntityTooLargeException
-    , _RequestEntityTooLargeException
-
-    -- ** ThrottlingException
-    , _ThrottlingException
-
-    -- ** MethodNotAllowedException
-    , _MethodNotAllowedException
-
-    -- ** InternalFailureException
-    , _InternalFailureException
-
-    -- ** ServiceUnavailableException
-    , _ServiceUnavailableException
-
-    -- ** UnauthorizedException
-    , _UnauthorizedException
-
-    -- ** ResourceNotFoundException
-    , _ResourceNotFoundException
-
-    -- ** UnsupportedDocumentEncodingException
-    , _UnsupportedDocumentEncodingException
-
-    -- * Waiters
-    -- $waiters
-
-    -- * Operations
-    -- $operations
-
-    -- ** GetThingShadow
-    , module Network.AWS.IoTDataPlane.GetThingShadow
-
-    -- ** DeleteThingShadow
-    , module Network.AWS.IoTDataPlane.DeleteThingShadow
-
-    -- ** UpdateThingShadow
-    , module Network.AWS.IoTDataPlane.UpdateThingShadow
-
-    -- ** Publish
-    , module Network.AWS.IoTDataPlane.Publish
-
-    -- * Types
-    ) where
-
-import Network.AWS.IoTDataPlane.DeleteThingShadow
-import Network.AWS.IoTDataPlane.GetThingShadow
-import Network.AWS.IoTDataPlane.Publish
-import Network.AWS.IoTDataPlane.Types
-import Network.AWS.IoTDataPlane.UpdateThingShadow
-import Network.AWS.IoTDataPlane.Waiters
-
-{- $errors
-Error matchers are designed for use with the functions provided by
-<http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
-This allows catching (and rethrowing) service specific errors returned
-by 'IoTDataPlane'.
--}
-
-{- $operations
-Some AWS operations return results that are incomplete and require subsequent
-requests in order to obtain the entire result set. The process of sending
-subsequent requests to continue where a previous request left off is called
-pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
-1000 objects at a time, and you must send subsequent requests with the
-appropriate Marker in order to retrieve the next page of results.
-
-Operations that have an 'AWSPager' instance can transparently perform subsequent
-requests, correctly setting Markers and other request facets to iterate through
-the entire result set of a truncated API operation. Operations which support
-this have an additional note in the documentation.
-
-Many operations have the ability to filter results on the server side. See the
-individual operation parameters for details.
--}
-
-{- $waiters
-Waiters poll by repeatedly sending a request until some remote success condition
-configured by the 'Wait' specification is fulfilled. The 'Wait' specification
-determines how many attempts should be made, in addition to delay and retry strategies.
--}
diff --git a/gen/Network/AWS/IoTDataPlane/DeleteThingShadow.hs b/gen/Network/AWS/IoTDataPlane/DeleteThingShadow.hs
deleted file mode 100644
--- a/gen/Network/AWS/IoTDataPlane/DeleteThingShadow.hs
+++ /dev/null
@@ -1,132 +0,0 @@
-{-# 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.IoTDataPlane.DeleteThingShadow
--- Copyright   : (c) 2013-2017 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the thing shadow for the specified thing.
---
---
--- For more information, see <http://docs.aws.amazon.com/iot/latest/developerguide/API_DeleteThingShadow.html DeleteThingShadow> in the /AWS IoT Developer Guide/ .
---
-module Network.AWS.IoTDataPlane.DeleteThingShadow
-    (
-    -- * Creating a Request
-      deleteThingShadow
-    , DeleteThingShadow
-    -- * Request Lenses
-    , dtsThingName
-
-    -- * Destructuring the Response
-    , deleteThingShadowResponse
-    , DeleteThingShadowResponse
-    -- * Response Lenses
-    , dtsrsResponseStatus
-    , dtsrsPayload
-    ) where
-
-import Network.AWS.IoTDataPlane.Types
-import Network.AWS.IoTDataPlane.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | The input for the DeleteThingShadow operation.
---
---
---
--- /See:/ 'deleteThingShadow' smart constructor.
-newtype DeleteThingShadow = DeleteThingShadow'
-  { _dtsThingName :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteThingShadow' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dtsThingName' - The name of the thing.
-deleteThingShadow
-    :: Text -- ^ 'dtsThingName'
-    -> DeleteThingShadow
-deleteThingShadow pThingName_ = DeleteThingShadow' {_dtsThingName = pThingName_}
-
-
--- | The name of the thing.
-dtsThingName :: Lens' DeleteThingShadow Text
-dtsThingName = lens _dtsThingName (\ s a -> s{_dtsThingName = a});
-
-instance AWSRequest DeleteThingShadow where
-        type Rs DeleteThingShadow = DeleteThingShadowResponse
-        request = delete ioTDataPlane
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DeleteThingShadowResponse' <$>
-                   (pure (fromEnum s)) <*> (pure x))
-
-instance Hashable DeleteThingShadow where
-
-instance NFData DeleteThingShadow where
-
-instance ToHeaders DeleteThingShadow where
-        toHeaders = const mempty
-
-instance ToPath DeleteThingShadow where
-        toPath DeleteThingShadow'{..}
-          = mconcat ["/things/", toBS _dtsThingName, "/shadow"]
-
-instance ToQuery DeleteThingShadow where
-        toQuery = const mempty
-
--- | The output from the DeleteThingShadow operation.
---
---
---
--- /See:/ 'deleteThingShadowResponse' smart constructor.
-data DeleteThingShadowResponse = DeleteThingShadowResponse'
-  { _dtsrsResponseStatus :: !Int
-  , _dtsrsPayload        :: !(HashMap Text Value)
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteThingShadowResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dtsrsResponseStatus' - -- | The response status code.
---
--- * 'dtsrsPayload' - The state information, in JSON format.
-deleteThingShadowResponse
-    :: Int -- ^ 'dtsrsResponseStatus'
-    -> HashMap Text Value -- ^ 'dtsrsPayload'
-    -> DeleteThingShadowResponse
-deleteThingShadowResponse pResponseStatus_ pPayload_ =
-  DeleteThingShadowResponse'
-  {_dtsrsResponseStatus = pResponseStatus_, _dtsrsPayload = pPayload_}
-
-
--- | -- | The response status code.
-dtsrsResponseStatus :: Lens' DeleteThingShadowResponse Int
-dtsrsResponseStatus = lens _dtsrsResponseStatus (\ s a -> s{_dtsrsResponseStatus = a});
-
--- | The state information, in JSON format.
-dtsrsPayload :: Lens' DeleteThingShadowResponse (HashMap Text Value)
-dtsrsPayload = lens _dtsrsPayload (\ s a -> s{_dtsrsPayload = a});
-
-instance NFData DeleteThingShadowResponse where
diff --git a/gen/Network/AWS/IoTDataPlane/GetThingShadow.hs b/gen/Network/AWS/IoTDataPlane/GetThingShadow.hs
deleted file mode 100644
--- a/gen/Network/AWS/IoTDataPlane/GetThingShadow.hs
+++ /dev/null
@@ -1,131 +0,0 @@
-{-# 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.IoTDataPlane.GetThingShadow
--- Copyright   : (c) 2013-2017 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Gets the thing shadow for the specified thing.
---
---
--- For more information, see <http://docs.aws.amazon.com/iot/latest/developerguide/API_GetThingShadow.html GetThingShadow> in the /AWS IoT Developer Guide/ .
---
-module Network.AWS.IoTDataPlane.GetThingShadow
-    (
-    -- * Creating a Request
-      getThingShadow
-    , GetThingShadow
-    -- * Request Lenses
-    , gtsThingName
-
-    -- * Destructuring the Response
-    , getThingShadowResponse
-    , GetThingShadowResponse
-    -- * Response Lenses
-    , gtsrsPayload
-    , gtsrsResponseStatus
-    ) where
-
-import Network.AWS.IoTDataPlane.Types
-import Network.AWS.IoTDataPlane.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | The input for the GetThingShadow operation.
---
---
---
--- /See:/ 'getThingShadow' smart constructor.
-newtype GetThingShadow = GetThingShadow'
-  { _gtsThingName :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetThingShadow' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gtsThingName' - The name of the thing.
-getThingShadow
-    :: Text -- ^ 'gtsThingName'
-    -> GetThingShadow
-getThingShadow pThingName_ = GetThingShadow' {_gtsThingName = pThingName_}
-
-
--- | The name of the thing.
-gtsThingName :: Lens' GetThingShadow Text
-gtsThingName = lens _gtsThingName (\ s a -> s{_gtsThingName = a});
-
-instance AWSRequest GetThingShadow where
-        type Rs GetThingShadow = GetThingShadowResponse
-        request = get ioTDataPlane
-        response
-          = receiveJSON
-              (\ s h x ->
-                 GetThingShadowResponse' <$>
-                   (pure (Just x)) <*> (pure (fromEnum s)))
-
-instance Hashable GetThingShadow where
-
-instance NFData GetThingShadow where
-
-instance ToHeaders GetThingShadow where
-        toHeaders = const mempty
-
-instance ToPath GetThingShadow where
-        toPath GetThingShadow'{..}
-          = mconcat ["/things/", toBS _gtsThingName, "/shadow"]
-
-instance ToQuery GetThingShadow where
-        toQuery = const mempty
-
--- | The output from the GetThingShadow operation.
---
---
---
--- /See:/ 'getThingShadowResponse' smart constructor.
-data GetThingShadowResponse = GetThingShadowResponse'
-  { _gtsrsPayload        :: !(Maybe (HashMap Text Value))
-  , _gtsrsResponseStatus :: !Int
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetThingShadowResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gtsrsPayload' - The state information, in JSON format.
---
--- * 'gtsrsResponseStatus' - -- | The response status code.
-getThingShadowResponse
-    :: Int -- ^ 'gtsrsResponseStatus'
-    -> GetThingShadowResponse
-getThingShadowResponse pResponseStatus_ =
-  GetThingShadowResponse'
-  {_gtsrsPayload = Nothing, _gtsrsResponseStatus = pResponseStatus_}
-
-
--- | The state information, in JSON format.
-gtsrsPayload :: Lens' GetThingShadowResponse (Maybe (HashMap Text Value))
-gtsrsPayload = lens _gtsrsPayload (\ s a -> s{_gtsrsPayload = a});
-
--- | -- | The response status code.
-gtsrsResponseStatus :: Lens' GetThingShadowResponse Int
-gtsrsResponseStatus = lens _gtsrsResponseStatus (\ s a -> s{_gtsrsResponseStatus = a});
-
-instance NFData GetThingShadowResponse where
diff --git a/gen/Network/AWS/IoTDataPlane/Publish.hs b/gen/Network/AWS/IoTDataPlane/Publish.hs
deleted file mode 100644
--- a/gen/Network/AWS/IoTDataPlane/Publish.hs
+++ /dev/null
@@ -1,123 +0,0 @@
-{-# 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.IoTDataPlane.Publish
--- Copyright   : (c) 2013-2017 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Publishes state information.
---
---
--- For more information, see <http://docs.aws.amazon.com/iot/latest/developerguide/protocols.html#http HTTP Protocol> in the /AWS IoT Developer Guide/ .
---
-module Network.AWS.IoTDataPlane.Publish
-    (
-    -- * Creating a Request
-      publish
-    , Publish
-    -- * Request Lenses
-    , pPayload
-    , pQos
-    , pTopic
-
-    -- * Destructuring the Response
-    , publishResponse
-    , PublishResponse
-    ) where
-
-import Network.AWS.IoTDataPlane.Types
-import Network.AWS.IoTDataPlane.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | The input for the Publish operation.
---
---
---
--- /See:/ 'publish' smart constructor.
-data Publish = Publish'
-  { _pPayload :: !(Maybe (HashMap Text Value))
-  , _pQos     :: !(Maybe Nat)
-  , _pTopic   :: !Text
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Publish' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pPayload' - The state information, in JSON format.
---
--- * 'pQos' - The Quality of Service (QoS) level.
---
--- * 'pTopic' - The name of the MQTT topic.
-publish
-    :: Text -- ^ 'pTopic'
-    -> Publish
-publish pTopic_ =
-  Publish' {_pPayload = Nothing, _pQos = Nothing, _pTopic = pTopic_}
-
-
--- | The state information, in JSON format.
-pPayload :: Lens' Publish (Maybe (HashMap Text Value))
-pPayload = lens _pPayload (\ s a -> s{_pPayload = a});
-
--- | The Quality of Service (QoS) level.
-pQos :: Lens' Publish (Maybe Natural)
-pQos = lens _pQos (\ s a -> s{_pQos = a}) . mapping _Nat;
-
--- | The name of the MQTT topic.
-pTopic :: Lens' Publish Text
-pTopic = lens _pTopic (\ s a -> s{_pTopic = a});
-
-instance AWSRequest Publish where
-        type Rs Publish = PublishResponse
-        request = postBody ioTDataPlane
-        response = receiveNull PublishResponse'
-
-instance Hashable Publish where
-
-instance NFData Publish where
-
-instance ToBody Publish where
-        toBody = toBody . _pPayload
-
-instance ToHeaders Publish where
-        toHeaders = const mempty
-
-instance ToPath Publish where
-        toPath Publish'{..}
-          = mconcat ["/topics/", toBS _pTopic]
-
-instance ToQuery Publish where
-        toQuery Publish'{..} = mconcat ["qos" =: _pQos]
-
--- | /See:/ 'publishResponse' smart constructor.
-data PublishResponse =
-  PublishResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PublishResponse' with the minimum fields required to make a request.
---
-publishResponse
-    :: PublishResponse
-publishResponse = PublishResponse'
-
-
-instance NFData PublishResponse where
diff --git a/gen/Network/AWS/IoTDataPlane/Types.hs b/gen/Network/AWS/IoTDataPlane/Types.hs
deleted file mode 100644
--- a/gen/Network/AWS/IoTDataPlane/Types.hs
+++ /dev/null
@@ -1,154 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.IoTDataPlane.Types
--- Copyright   : (c) 2013-2017 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.IoTDataPlane.Types
-    (
-    -- * Service Configuration
-      ioTDataPlane
-
-    -- * Errors
-    , _InvalidRequestException
-    , _ConflictException
-    , _RequestEntityTooLargeException
-    , _ThrottlingException
-    , _MethodNotAllowedException
-    , _InternalFailureException
-    , _ServiceUnavailableException
-    , _UnauthorizedException
-    , _ResourceNotFoundException
-    , _UnsupportedDocumentEncodingException
-    ) where
-
-import Network.AWS.IoTDataPlane.Types.Product
-import Network.AWS.IoTDataPlane.Types.Sum
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Sign.V4
-
--- | API version @2015-05-28@ of the Amazon IoT Data Plane SDK configuration.
-ioTDataPlane :: Service
-ioTDataPlane =
-  Service
-  { _svcAbbrev = "IoTDataPlane"
-  , _svcSigner = v4
-  , _svcPrefix = "data.iot"
-  , _svcVersion = "2015-05-28"
-  , _svcEndpoint = defaultEndpoint ioTDataPlane
-  , _svcTimeout = Just 70
-  , _svcCheck = statusSuccess
-  , _svcError = parseJSONError "IoTDataPlane"
-  , _svcRetry = retry
-  }
-  where
-    retry =
-      Exponential
-      { _retryBase = 5.0e-2
-      , _retryGrowth = 2
-      , _retryAttempts = 5
-      , _retryCheck = check
-      }
-    check e
-      | has (hasCode "ThrottledException" . hasStatus 400) e =
-        Just "throttled_exception"
-      | has (hasStatus 429) e = Just "too_many_requests"
-      | has (hasCode "ThrottlingException" . hasStatus 400) e =
-        Just "throttling_exception"
-      | 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
-
-
--- | The request is not valid.
---
---
-_InvalidRequestException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidRequestException =
-  _MatchServiceError ioTDataPlane "InvalidRequestException" . hasStatus 400
-
-
--- | The specified version does not match the version of the document.
---
---
-_ConflictException :: AsError a => Getting (First ServiceError) a ServiceError
-_ConflictException =
-  _MatchServiceError ioTDataPlane "ConflictException" . hasStatus 409
-
-
--- | The payload exceeds the maximum size allowed.
---
---
-_RequestEntityTooLargeException :: AsError a => Getting (First ServiceError) a ServiceError
-_RequestEntityTooLargeException =
-  _MatchServiceError ioTDataPlane "RequestEntityTooLargeException" .
-  hasStatus 413
-
-
--- | The rate exceeds the limit.
---
---
-_ThrottlingException :: AsError a => Getting (First ServiceError) a ServiceError
-_ThrottlingException =
-  _MatchServiceError ioTDataPlane "ThrottlingException" . hasStatus 429
-
-
--- | The specified combination of HTTP verb and URI is not supported.
---
---
-_MethodNotAllowedException :: AsError a => Getting (First ServiceError) a ServiceError
-_MethodNotAllowedException =
-  _MatchServiceError ioTDataPlane "MethodNotAllowedException" . hasStatus 405
-
-
--- | An unexpected error has occurred.
---
---
-_InternalFailureException :: AsError a => Getting (First ServiceError) a ServiceError
-_InternalFailureException =
-  _MatchServiceError ioTDataPlane "InternalFailureException" . hasStatus 500
-
-
--- | The service is temporarily unavailable.
---
---
-_ServiceUnavailableException :: AsError a => Getting (First ServiceError) a ServiceError
-_ServiceUnavailableException =
-  _MatchServiceError ioTDataPlane "ServiceUnavailableException" . hasStatus 503
-
-
--- | You are not authorized to perform this operation.
---
---
-_UnauthorizedException :: AsError a => Getting (First ServiceError) a ServiceError
-_UnauthorizedException =
-  _MatchServiceError ioTDataPlane "UnauthorizedException" . hasStatus 401
-
-
--- | The specified resource does not exist.
---
---
-_ResourceNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
-_ResourceNotFoundException =
-  _MatchServiceError ioTDataPlane "ResourceNotFoundException" . hasStatus 404
-
-
--- | The document encoding is not supported.
---
---
-_UnsupportedDocumentEncodingException :: AsError a => Getting (First ServiceError) a ServiceError
-_UnsupportedDocumentEncodingException =
-  _MatchServiceError ioTDataPlane "UnsupportedDocumentEncodingException" .
-  hasStatus 415
-
diff --git a/gen/Network/AWS/IoTDataPlane/Types/Product.hs b/gen/Network/AWS/IoTDataPlane/Types/Product.hs
deleted file mode 100644
--- a/gen/Network/AWS/IoTDataPlane/Types/Product.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.IoTDataPlane.Types.Product
--- Copyright   : (c) 2013-2017 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.IoTDataPlane.Types.Product where
-
-import Network.AWS.IoTDataPlane.Types.Sum
-import Network.AWS.Lens
-import Network.AWS.Prelude
diff --git a/gen/Network/AWS/IoTDataPlane/Types/Sum.hs b/gen/Network/AWS/IoTDataPlane/Types/Sum.hs
deleted file mode 100644
--- a/gen/Network/AWS/IoTDataPlane/Types/Sum.hs
+++ /dev/null
@@ -1,20 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE LambdaCase         #-}
-{-# LANGUAGE OverloadedStrings  #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.IoTDataPlane.Types.Sum
--- Copyright   : (c) 2013-2017 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.IoTDataPlane.Types.Sum where
-
-import Network.AWS.Prelude
diff --git a/gen/Network/AWS/IoTDataPlane/UpdateThingShadow.hs b/gen/Network/AWS/IoTDataPlane/UpdateThingShadow.hs
deleted file mode 100644
--- a/gen/Network/AWS/IoTDataPlane/UpdateThingShadow.hs
+++ /dev/null
@@ -1,144 +0,0 @@
-{-# 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.IoTDataPlane.UpdateThingShadow
--- Copyright   : (c) 2013-2017 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Updates the thing shadow for the specified thing.
---
---
--- For more information, see <http://docs.aws.amazon.com/iot/latest/developerguide/API_UpdateThingShadow.html UpdateThingShadow> in the /AWS IoT Developer Guide/ .
---
-module Network.AWS.IoTDataPlane.UpdateThingShadow
-    (
-    -- * Creating a Request
-      updateThingShadow
-    , UpdateThingShadow
-    -- * Request Lenses
-    , utsThingName
-    , utsPayload
-
-    -- * Destructuring the Response
-    , updateThingShadowResponse
-    , UpdateThingShadowResponse
-    -- * Response Lenses
-    , utsrsPayload
-    , utsrsResponseStatus
-    ) where
-
-import Network.AWS.IoTDataPlane.Types
-import Network.AWS.IoTDataPlane.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | The input for the UpdateThingShadow operation.
---
---
---
--- /See:/ 'updateThingShadow' smart constructor.
-data UpdateThingShadow = UpdateThingShadow'
-  { _utsThingName :: !Text
-  , _utsPayload   :: !(HashMap Text Value)
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateThingShadow' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'utsThingName' - The name of the thing.
---
--- * 'utsPayload' - The state information, in JSON format.
-updateThingShadow
-    :: Text -- ^ 'utsThingName'
-    -> HashMap Text Value -- ^ 'utsPayload'
-    -> UpdateThingShadow
-updateThingShadow pThingName_ pPayload_ =
-  UpdateThingShadow' {_utsThingName = pThingName_, _utsPayload = pPayload_}
-
-
--- | The name of the thing.
-utsThingName :: Lens' UpdateThingShadow Text
-utsThingName = lens _utsThingName (\ s a -> s{_utsThingName = a});
-
--- | The state information, in JSON format.
-utsPayload :: Lens' UpdateThingShadow (HashMap Text Value)
-utsPayload = lens _utsPayload (\ s a -> s{_utsPayload = a});
-
-instance AWSRequest UpdateThingShadow where
-        type Rs UpdateThingShadow = UpdateThingShadowResponse
-        request = postBody ioTDataPlane
-        response
-          = receiveJSON
-              (\ s h x ->
-                 UpdateThingShadowResponse' <$>
-                   (pure (Just x)) <*> (pure (fromEnum s)))
-
-instance Hashable UpdateThingShadow where
-
-instance NFData UpdateThingShadow where
-
-instance ToBody UpdateThingShadow where
-        toBody = toBody . _utsPayload
-
-instance ToHeaders UpdateThingShadow where
-        toHeaders = const mempty
-
-instance ToPath UpdateThingShadow where
-        toPath UpdateThingShadow'{..}
-          = mconcat ["/things/", toBS _utsThingName, "/shadow"]
-
-instance ToQuery UpdateThingShadow where
-        toQuery = const mempty
-
--- | The output from the UpdateThingShadow operation.
---
---
---
--- /See:/ 'updateThingShadowResponse' smart constructor.
-data UpdateThingShadowResponse = UpdateThingShadowResponse'
-  { _utsrsPayload        :: !(Maybe (HashMap Text Value))
-  , _utsrsResponseStatus :: !Int
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateThingShadowResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'utsrsPayload' - The state information, in JSON format.
---
--- * 'utsrsResponseStatus' - -- | The response status code.
-updateThingShadowResponse
-    :: Int -- ^ 'utsrsResponseStatus'
-    -> UpdateThingShadowResponse
-updateThingShadowResponse pResponseStatus_ =
-  UpdateThingShadowResponse'
-  {_utsrsPayload = Nothing, _utsrsResponseStatus = pResponseStatus_}
-
-
--- | The state information, in JSON format.
-utsrsPayload :: Lens' UpdateThingShadowResponse (Maybe (HashMap Text Value))
-utsrsPayload = lens _utsrsPayload (\ s a -> s{_utsrsPayload = a});
-
--- | -- | The response status code.
-utsrsResponseStatus :: Lens' UpdateThingShadowResponse Int
-utsrsResponseStatus = lens _utsrsResponseStatus (\ s a -> s{_utsrsResponseStatus = a});
-
-instance NFData UpdateThingShadowResponse where
diff --git a/gen/Network/AWS/IoTDataPlane/Waiters.hs b/gen/Network/AWS/IoTDataPlane/Waiters.hs
deleted file mode 100644
--- a/gen/Network/AWS/IoTDataPlane/Waiters.hs
+++ /dev/null
@@ -1,21 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies      #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.IoTDataPlane.Waiters
--- Copyright   : (c) 2013-2017 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.IoTDataPlane.Waiters where
-
-import Network.AWS.IoTDataPlane.Types
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Waiter
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -2,7 +2,7 @@
 
 -- |
 -- Module      : Main
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -11,11 +11,11 @@
 module Main (main) where
 
 import Test.Tasty
-import Test.AWS.IoTDataPlane
-import Test.AWS.IoTDataPlane.Internal
+import Test.AWS.IoTData
+import Test.AWS.IoTData.Internal
 
 main :: IO ()
-main = defaultMain $ testGroup "IoTDataPlane"
+main = defaultMain $ testGroup "IoTData"
     [ testGroup "tests"    tests
     , testGroup "fixtures" fixtures
     ]
diff --git a/test/Test/AWS/Gen/IoTData.hs b/test/Test/AWS/Gen/IoTData.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/IoTData.hs
@@ -0,0 +1,111 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-orphans        #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.AWS.Gen.IoTData
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.Gen.IoTData where
+
+import Data.Proxy
+import Network.AWS.IoTData
+import Test.AWS.Fixture
+import Test.AWS.IoTData.Internal
+import Test.AWS.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestGetThingShadow $
+--             getThingShadow
+--
+--         , requestDeleteThingShadow $
+--             deleteThingShadow
+--
+--         , requestUpdateThingShadow $
+--             updateThingShadow
+--
+--         , requestPublish $
+--             publish
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseGetThingShadow $
+--             getThingShadowResponse
+--
+--         , responseDeleteThingShadow $
+--             deleteThingShadowResponse
+--
+--         , responseUpdateThingShadow $
+--             updateThingShadowResponse
+--
+--         , responsePublish $
+--             publishResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestGetThingShadow :: GetThingShadow -> TestTree
+requestGetThingShadow = req
+    "GetThingShadow"
+    "fixture/GetThingShadow.yaml"
+
+requestDeleteThingShadow :: DeleteThingShadow -> TestTree
+requestDeleteThingShadow = req
+    "DeleteThingShadow"
+    "fixture/DeleteThingShadow.yaml"
+
+requestUpdateThingShadow :: UpdateThingShadow -> TestTree
+requestUpdateThingShadow = req
+    "UpdateThingShadow"
+    "fixture/UpdateThingShadow.yaml"
+
+requestPublish :: Publish -> TestTree
+requestPublish = req
+    "Publish"
+    "fixture/Publish.yaml"
+
+-- Responses
+
+responseGetThingShadow :: GetThingShadowResponse -> TestTree
+responseGetThingShadow = res
+    "GetThingShadowResponse"
+    "fixture/GetThingShadowResponse.proto"
+    ioTData
+    (Proxy :: Proxy GetThingShadow)
+
+responseDeleteThingShadow :: DeleteThingShadowResponse -> TestTree
+responseDeleteThingShadow = res
+    "DeleteThingShadowResponse"
+    "fixture/DeleteThingShadowResponse.proto"
+    ioTData
+    (Proxy :: Proxy DeleteThingShadow)
+
+responseUpdateThingShadow :: UpdateThingShadowResponse -> TestTree
+responseUpdateThingShadow = res
+    "UpdateThingShadowResponse"
+    "fixture/UpdateThingShadowResponse.proto"
+    ioTData
+    (Proxy :: Proxy UpdateThingShadow)
+
+responsePublish :: PublishResponse -> TestTree
+responsePublish = res
+    "PublishResponse"
+    "fixture/PublishResponse.proto"
+    ioTData
+    (Proxy :: Proxy Publish)
diff --git a/test/Test/AWS/Gen/IoTDataPlane.hs b/test/Test/AWS/Gen/IoTDataPlane.hs
deleted file mode 100644
--- a/test/Test/AWS/Gen/IoTDataPlane.hs
+++ /dev/null
@@ -1,111 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-orphans        #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Test.AWS.Gen.IoTDataPlane
--- Copyright   : (c) 2013-2017 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Test.AWS.Gen.IoTDataPlane where
-
-import Data.Proxy
-import Network.AWS.IoTDataPlane
-import Test.AWS.Fixture
-import Test.AWS.IoTDataPlane.Internal
-import Test.AWS.Prelude
-import Test.Tasty
-
--- Auto-generated: the actual test selection needs to be manually placed into
--- the top-level so that real test data can be incrementally added.
---
--- This commented snippet is what the entire set should look like:
-
--- fixtures :: TestTree
--- fixtures =
---     [ testGroup "request"
---         [ requestGetThingShadow $
---             getThingShadow
---
---         , requestDeleteThingShadow $
---             deleteThingShadow
---
---         , requestUpdateThingShadow $
---             updateThingShadow
---
---         , requestPublish $
---             publish
---
---           ]
-
---     , testGroup "response"
---         [ responseGetThingShadow $
---             getThingShadowResponse
---
---         , responseDeleteThingShadow $
---             deleteThingShadowResponse
---
---         , responseUpdateThingShadow $
---             updateThingShadowResponse
---
---         , responsePublish $
---             publishResponse
---
---           ]
---     ]
-
--- Requests
-
-requestGetThingShadow :: GetThingShadow -> TestTree
-requestGetThingShadow = req
-    "GetThingShadow"
-    "fixture/GetThingShadow.yaml"
-
-requestDeleteThingShadow :: DeleteThingShadow -> TestTree
-requestDeleteThingShadow = req
-    "DeleteThingShadow"
-    "fixture/DeleteThingShadow.yaml"
-
-requestUpdateThingShadow :: UpdateThingShadow -> TestTree
-requestUpdateThingShadow = req
-    "UpdateThingShadow"
-    "fixture/UpdateThingShadow.yaml"
-
-requestPublish :: Publish -> TestTree
-requestPublish = req
-    "Publish"
-    "fixture/Publish.yaml"
-
--- Responses
-
-responseGetThingShadow :: GetThingShadowResponse -> TestTree
-responseGetThingShadow = res
-    "GetThingShadowResponse"
-    "fixture/GetThingShadowResponse.proto"
-    ioTDataPlane
-    (Proxy :: Proxy GetThingShadow)
-
-responseDeleteThingShadow :: DeleteThingShadowResponse -> TestTree
-responseDeleteThingShadow = res
-    "DeleteThingShadowResponse"
-    "fixture/DeleteThingShadowResponse.proto"
-    ioTDataPlane
-    (Proxy :: Proxy DeleteThingShadow)
-
-responseUpdateThingShadow :: UpdateThingShadowResponse -> TestTree
-responseUpdateThingShadow = res
-    "UpdateThingShadowResponse"
-    "fixture/UpdateThingShadowResponse.proto"
-    ioTDataPlane
-    (Proxy :: Proxy UpdateThingShadow)
-
-responsePublish :: PublishResponse -> TestTree
-responsePublish = res
-    "PublishResponse"
-    "fixture/PublishResponse.proto"
-    ioTDataPlane
-    (Proxy :: Proxy Publish)
diff --git a/test/Test/AWS/IoTData.hs b/test/Test/AWS/IoTData.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/IoTData.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.AWS.IoTData
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.IoTData
+    ( tests
+    , fixtures
+    ) where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/IoTData/Internal.hs b/test/Test/AWS/IoTData/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/IoTData/Internal.hs
@@ -0,0 +1,9 @@
+-- |
+-- Module      : Test.AWS.IoTData.Internal
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.IoTData.Internal where
diff --git a/test/Test/AWS/IoTDataPlane.hs b/test/Test/AWS/IoTDataPlane.hs
deleted file mode 100644
--- a/test/Test/AWS/IoTDataPlane.hs
+++ /dev/null
@@ -1,26 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- Module      : Test.AWS.IoTDataPlane
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
-
-module Test.AWS.IoTDataPlane
-    ( tests
-    , fixtures
-    ) where
-
-import           Network.AWS.IoTDataPlane
-import           Test.AWS.Gen.IoTDataPlane
-import           Test.Tasty
-
-tests :: [TestTree]
-tests = []
-
-fixtures :: [TestTree]
-fixtures = []
diff --git a/test/Test/AWS/IoTDataPlane/Internal.hs b/test/Test/AWS/IoTDataPlane/Internal.hs
deleted file mode 100644
--- a/test/Test/AWS/IoTDataPlane/Internal.hs
+++ /dev/null
@@ -1,17 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Test.AWS.IoTDataPlane.Internal
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
-
-module Test.AWS.IoTDataPlane.Internal where
-
-import           Test.AWS.Prelude
