diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,21 +1,34 @@
 # Amazon Kinesis SDK
 
-> _Warning:_ This is an experimental preview release which is still under heavy development and not intended for public consumption, _caveat emptor_!
-
+* [Version](#version)
 * [Description](#description)
 * [Contribute](#contribute)
 * [Licence](#licence)
 
+
+## Version
+
+`1.0.0`
+
+
 ## Description
 
-Amazon Kinesis is a managed service that scales elastically for real-time
-processing of streaming big data. The service takes in large streams of data
-records that can then be consumed in real time by multiple data-processing
-applications that can be run on Amazon EC2 instances.
+Amazon Kinesis Service API Reference
 
+Amazon Kinesis is a managed service that scales elastically for real
+time processing of streaming big data.
+
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-kinesis)
 and the [AWS API Reference](http://docs.aws.amazon.com/kinesis/latest/APIReference/Welcome.html).
 
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information and sending requests.
+
+Use of lenses is required for constructing and manipulating types.
+This is due to the amount of nesting of AWS types and transparency regarding
+de/serialisation into more palatable Haskell values.
+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).
 
 ## Contribute
 
diff --git a/amazonka-kinesis.cabal b/amazonka-kinesis.cabal
--- a/amazonka-kinesis.cabal
+++ b/amazonka-kinesis.cabal
@@ -1,28 +1,36 @@
 name:                  amazonka-kinesis
-version:               0.3.6
+version:               1.0.0
 synopsis:              Amazon Kinesis SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
 license-file:          LICENSE
 author:                Brendan Hay
 maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2013-2014 Brendan Hay
+copyright:             Copyright (c) 2013-2015 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 extra-source-files:    README.md
 cabal-version:         >= 1.10
 
 description:
-    Amazon Kinesis is a managed service that scales elastically for real-time
-    processing of streaming big data. The service takes in large streams of data
-    records that can then be consumed in real time by multiple data-processing
-    applications that can be run on Amazon EC2 instances.
+    Amazon Kinesis Service API Reference
 
+    Amazon Kinesis is a managed service that scales elastically for real
+    time processing of streaming big data.
     .
-    /See:/ <http://docs.aws.amazon.com/kinesis/latest/APIReference/Welcome.html AWS API Reference>
+    The types from this library are intended to be used with
+    <http://hackage.haskell.org/package/amazonka amazonka>, which provides
+    mechanisms for specifying AuthN/AuthZ information and sending requests.
     .
-    /Warning:/ This is an experimental preview release which is still under
-    heavy development and not intended for public consumption, caveat emptor!
+    Use of lenses is required for constructing and manipulating types.
+    This is due to the amount of nesting of AWS types and transparency regarding
+    de/serialisation into more palatable Haskell values.
+    The provided lenses should be compatible with any of the major lens libraries
+    such as <http://hackage.haskell.org/package/lens lens> or
+    <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+    .
+    See "Network.AWS.Kinesis" and the <http://docs.aws.amazon.com/kinesis/latest/APIReference/Welcome.html AWS API Reference>
+    to get started.
 
 source-repository head
     type:     git
@@ -53,7 +61,37 @@
         , Network.AWS.Kinesis.Waiters
 
     other-modules:
+          Network.AWS.Kinesis.Types.Product
+        , Network.AWS.Kinesis.Types.Sum
 
     build-depends:
-          amazonka-core == 0.3.6.*
+          amazonka-core == 1.0.0.*
         , base          >= 4.7     && < 5
+
+test-suite amazonka-kinesis-test
+    type:              exitcode-stdio-1.0
+    default-language:  Haskell2010
+    hs-source-dirs:    test
+    main-is:           Main.hs
+
+    ghc-options:       -Wall -threaded
+
+    -- This is not comprehensive if modules have manually been added.
+    -- It exists to ensure cabal 'somewhat' detects test module changes.
+    other-modules:
+          Test.AWS.Kinesis
+        , Test.AWS.Gen.Kinesis
+        , Test.AWS.Kinesis.Internal
+
+    build-depends:
+          amazonka-core == 1.0.0
+        , amazonka-test == 1.0.0
+        , amazonka-kinesis == 1.0.0
+        , base
+        , bytestring
+        , lens
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/gen/Network/AWS/Kinesis.hs b/gen/Network/AWS/Kinesis.hs
--- a/gen/Network/AWS/Kinesis.hs
+++ b/gen/Network/AWS/Kinesis.hs
@@ -1,49 +1,205 @@
+{-# 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.Kinesis
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- 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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Amazon Kinesis is a managed service that scales elastically for real-time
--- processing of streaming big data. The service takes in large streams of data
--- records that can then be consumed in real time by multiple data-processing
--- applications that can be run on Amazon EC2 instances.
+-- Amazon Kinesis Service API Reference
+--
+-- Amazon Kinesis is a managed service that scales elastically for real
+-- time processing of streaming big data.
+--
+-- /See:/ <http://docs.aws.amazon.com/kinesis/latest/APIReference/Welcome.html AWS API Reference>
 module Network.AWS.Kinesis
-    ( module Network.AWS.Kinesis.AddTagsToStream
-    , module Network.AWS.Kinesis.CreateStream
-    , module Network.AWS.Kinesis.DeleteStream
-    , module Network.AWS.Kinesis.DescribeStream
+    (
+    -- * Service
+      Kinesis
+
+    -- * Errors
+    -- $errors
+
+    -- ** ExpiredIteratorException
+    , _ExpiredIteratorException
+
+    -- ** InvalidArgumentException
+    , _InvalidArgumentException
+
+    -- ** ProvisionedThroughputExceededException
+    , _ProvisionedThroughputExceededException
+
+    -- ** ResourceNotFoundException
+    , _ResourceNotFoundException
+
+    -- ** ResourceInUseException
+    , _ResourceInUseException
+
+    -- ** LimitExceededException
+    , _LimitExceededException
+
+    -- * Waiters
+    -- $waiters
+
+    -- ** StreamExists
+    , streamExists
+
+    -- * Operations
+    -- $operations
+
+    -- ** PutRecord
+    , module Network.AWS.Kinesis.PutRecord
+
+    -- ** MergeShards
+    , module Network.AWS.Kinesis.MergeShards
+
+    -- ** GetRecords
     , module Network.AWS.Kinesis.GetRecords
+
+    -- ** GetShardIterator
     , module Network.AWS.Kinesis.GetShardIterator
-    , module Network.AWS.Kinesis.ListStreams
+
+    -- ** ListTagsForStream
     , module Network.AWS.Kinesis.ListTagsForStream
-    , module Network.AWS.Kinesis.MergeShards
-    , module Network.AWS.Kinesis.PutRecord
+
+    -- ** AddTagsToStream
+    , module Network.AWS.Kinesis.AddTagsToStream
+
+    -- ** PutRecords
     , module Network.AWS.Kinesis.PutRecords
+
+    -- ** DeleteStream
+    , module Network.AWS.Kinesis.DeleteStream
+
+    -- ** RemoveTagsFromStream
     , module Network.AWS.Kinesis.RemoveTagsFromStream
+
+    -- ** ListStreams (Paginated)
+    , module Network.AWS.Kinesis.ListStreams
+
+    -- ** CreateStream
+    , module Network.AWS.Kinesis.CreateStream
+
+    -- ** SplitShard
     , module Network.AWS.Kinesis.SplitShard
-    , module Network.AWS.Kinesis.Types
-    , module Network.AWS.Kinesis.Waiters
+
+    -- ** DescribeStream (Paginated)
+    , module Network.AWS.Kinesis.DescribeStream
+
+    -- * Types
+
+    -- ** ShardIteratorType
+    , ShardIteratorType (..)
+
+    -- ** StreamStatus
+    , StreamStatus (..)
+
+    -- ** HashKeyRange
+    , HashKeyRange
+    , hashKeyRange
+    , hkrStartingHashKey
+    , hkrEndingHashKey
+
+    -- ** PutRecordsRequestEntry
+    , PutRecordsRequestEntry
+    , putRecordsRequestEntry
+    , prreExplicitHashKey
+    , prreData
+    , prrePartitionKey
+
+    -- ** PutRecordsResultEntry
+    , PutRecordsResultEntry
+    , putRecordsResultEntry
+    , prreSequenceNumber
+    , prreErrorCode
+    , prreErrorMessage
+    , prreShardId
+
+    -- ** Record
+    , Record
+    , record
+    , rSequenceNumber
+    , rData
+    , rPartitionKey
+
+    -- ** SequenceNumberRange
+    , SequenceNumberRange
+    , sequenceNumberRange
+    , snrEndingSequenceNumber
+    , snrStartingSequenceNumber
+
+    -- ** Shard
+    , Shard
+    , shard
+    , sAdjacentParentShardId
+    , sParentShardId
+    , sShardId
+    , sHashKeyRange
+    , sSequenceNumberRange
+
+    -- ** StreamDescription
+    , StreamDescription
+    , streamDescription
+    , sdStreamName
+    , sdStreamARN
+    , sdStreamStatus
+    , sdShards
+    , sdHasMoreShards
+
+    -- ** Tag
+    , Tag
+    , tag
+    , tagValue
+    , tagKey
     ) where
 
-import Network.AWS.Kinesis.AddTagsToStream
-import Network.AWS.Kinesis.CreateStream
-import Network.AWS.Kinesis.DeleteStream
-import Network.AWS.Kinesis.DescribeStream
-import Network.AWS.Kinesis.GetRecords
-import Network.AWS.Kinesis.GetShardIterator
-import Network.AWS.Kinesis.ListStreams
-import Network.AWS.Kinesis.ListTagsForStream
-import Network.AWS.Kinesis.MergeShards
-import Network.AWS.Kinesis.PutRecord
-import Network.AWS.Kinesis.PutRecords
-import Network.AWS.Kinesis.RemoveTagsFromStream
-import Network.AWS.Kinesis.SplitShard
-import Network.AWS.Kinesis.Types
-import Network.AWS.Kinesis.Waiters
+import           Network.AWS.Kinesis.AddTagsToStream
+import           Network.AWS.Kinesis.CreateStream
+import           Network.AWS.Kinesis.DeleteStream
+import           Network.AWS.Kinesis.DescribeStream
+import           Network.AWS.Kinesis.GetRecords
+import           Network.AWS.Kinesis.GetShardIterator
+import           Network.AWS.Kinesis.ListStreams
+import           Network.AWS.Kinesis.ListTagsForStream
+import           Network.AWS.Kinesis.MergeShards
+import           Network.AWS.Kinesis.PutRecord
+import           Network.AWS.Kinesis.PutRecords
+import           Network.AWS.Kinesis.RemoveTagsFromStream
+import           Network.AWS.Kinesis.SplitShard
+import           Network.AWS.Kinesis.Types
+import           Network.AWS.Kinesis.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 'Kinesis'.
+-}
+
+{- $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/Kinesis/AddTagsToStream.hs b/gen/Network/AWS/Kinesis/AddTagsToStream.hs
--- a/gen/Network/AWS/Kinesis/AddTagsToStream.hs
+++ b/gen/Network/AWS/Kinesis/AddTagsToStream.hs
@@ -1,108 +1,116 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.Kinesis.AddTagsToStream
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- 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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Adds or updates tags for the specified Amazon Kinesis stream. Each stream can
--- have up to 10 tags.
+-- Adds or updates tags for the specified Amazon Kinesis stream. Each
+-- stream can have up to 10 tags.
 --
--- If tags have already been assigned to the stream, 'AddTagsToStream' overwrites
--- any existing tags that correspond to the specified tag keys.
+-- If tags have already been assigned to the stream, 'AddTagsToStream'
+-- overwrites any existing tags that correspond to the specified tag keys.
 --
--- <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_AddTagsToStream.html>
+-- /See:/ <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_AddTagsToStream.html AWS API Reference> for AddTagsToStream.
 module Network.AWS.Kinesis.AddTagsToStream
     (
-    -- * Request
-      AddTagsToStream
-    -- ** Request constructor
-    , addTagsToStream
-    -- ** Request lenses
+    -- * Creating a Request
+      addTagsToStream
+    , AddTagsToStream
+    -- * Request Lenses
     , attsStreamName
     , attsTags
 
-    -- * Response
-    , AddTagsToStreamResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , addTagsToStreamResponse
+    , AddTagsToStreamResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Kinesis.Types
-import qualified GHC.Exts
-
-data AddTagsToStream = AddTagsToStream
-    { _attsStreamName :: Text
-    , _attsTags       :: Map Text Text
-    } deriving (Eq, Read, Show)
+import           Network.AWS.Kinesis.Types
+import           Network.AWS.Kinesis.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'AddTagsToStream' constructor.
+-- | Represents the input for 'AddTagsToStream'.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'addTagsToStream' smart constructor.
+data AddTagsToStream = AddTagsToStream'
+    { _attsStreamName :: !Text
+    , _attsTags       :: !(Map Text Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddTagsToStream' with the minimum fields required to make a request.
 --
--- * 'attsStreamName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'attsTags' @::@ 'HashMap' 'Text' 'Text'
+-- * 'attsStreamName'
 --
-addTagsToStream :: Text -- ^ 'attsStreamName'
-                -> AddTagsToStream
-addTagsToStream p1 = AddTagsToStream
-    { _attsStreamName = p1
-    , _attsTags       = mempty
+-- * 'attsTags'
+addTagsToStream
+    :: Text -- ^ 'attsStreamName'
+    -> AddTagsToStream
+addTagsToStream pStreamName_ =
+    AddTagsToStream'
+    { _attsStreamName = pStreamName_
+    , _attsTags = mempty
     }
 
 -- | The name of the stream.
 attsStreamName :: Lens' AddTagsToStream Text
-attsStreamName = lens _attsStreamName (\s a -> s { _attsStreamName = a })
+attsStreamName = lens _attsStreamName (\ s a -> s{_attsStreamName = a});
 
 -- | The set of key-value pairs to use to create the tags.
 attsTags :: Lens' AddTagsToStream (HashMap Text Text)
-attsTags = lens _attsTags (\s a -> s { _attsTags = a }) . _Map
+attsTags = lens _attsTags (\ s a -> s{_attsTags = a}) . _Map;
 
-data AddTagsToStreamResponse = AddTagsToStreamResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest AddTagsToStream where
+        type Sv AddTagsToStream = Kinesis
+        type Rs AddTagsToStream = AddTagsToStreamResponse
+        request = postJSON
+        response = receiveNull AddTagsToStreamResponse'
 
--- | 'AddTagsToStreamResponse' constructor.
-addTagsToStreamResponse :: AddTagsToStreamResponse
-addTagsToStreamResponse = AddTagsToStreamResponse
+instance ToHeaders AddTagsToStream where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Kinesis_20131202.AddTagsToStream" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON AddTagsToStream where
+        toJSON AddTagsToStream'{..}
+          = object
+              ["StreamName" .= _attsStreamName,
+               "Tags" .= _attsTags]
+
 instance ToPath AddTagsToStream where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery AddTagsToStream where
-    toQuery = const mempty
-
-instance ToHeaders AddTagsToStream
-
-instance ToJSON AddTagsToStream where
-    toJSON AddTagsToStream{..} = object
-        [ "StreamName" .= _attsStreamName
-        , "Tags"       .= _attsTags
-        ]
+        toQuery = const mempty
 
-instance AWSRequest AddTagsToStream where
-    type Sv AddTagsToStream = Kinesis
-    type Rs AddTagsToStream = AddTagsToStreamResponse
+-- | /See:/ 'addTagsToStreamResponse' smart constructor.
+data AddTagsToStreamResponse =
+    AddTagsToStreamResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "AddTagsToStream"
-    response = nullResponse AddTagsToStreamResponse
+-- | Creates a value of 'AddTagsToStreamResponse' with the minimum fields required to make a request.
+--
+addTagsToStreamResponse
+    :: AddTagsToStreamResponse
+addTagsToStreamResponse = AddTagsToStreamResponse'
diff --git a/gen/Network/AWS/Kinesis/CreateStream.hs b/gen/Network/AWS/Kinesis/CreateStream.hs
--- a/gen/Network/AWS/Kinesis/CreateStream.hs
+++ b/gen/Network/AWS/Kinesis/CreateStream.hs
@@ -1,144 +1,162 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.Kinesis.CreateStream
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- 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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Creates a Amazon Kinesis stream. A stream captures and transports data
--- records that are continuously emitted from different data sources or /producers/
--- . Scale-out within an Amazon Kinesis stream is explicitly supported by means
--- of shards, which are uniquely identified groups of data records in an Amazon
--- Kinesis stream.
+-- Creates a Amazon Kinesis stream. A stream captures and transports data
+-- records that are continuously emitted from different data sources or
+-- /producers/. Scale-out within an Amazon Kinesis stream is explicitly
+-- supported by means of shards, which are uniquely identified groups of
+-- data records in an Amazon Kinesis stream.
 --
--- You specify and control the number of shards that a stream is composed of.
--- Each open shard can support up to 5 read transactions per second, up to a
--- maximum total of 2 MB of data read per second. Each shard can support up to
--- 1000 records written per second, up to a maximum total of 1 MB data written
--- per second. You can add shards to a stream if the amount of data input
--- increases and you can remove shards if the amount of data input decreases.
+-- You specify and control the number of shards that a stream is composed
+-- of. Each open shard can support up to 5 read transactions per second, up
+-- to a maximum total of 2 MB of data read per second. Each shard can
+-- support up to 1000 records written per second, up to a maximum total of
+-- 1 MB data written per second. You can add shards to a stream if the
+-- amount of data input increases and you can remove shards if the amount
+-- of data input decreases.
 --
--- The stream name identifies the stream. The name is scoped to the AWS account
--- used by the application. It is also scoped by region. That is, two streams in
--- two different accounts can have the same name, and two streams in the same
--- account, but in two different regions, can have the same name.
+-- The stream name identifies the stream. The name is scoped to the AWS
+-- account used by the application. It is also scoped by region. That is,
+-- two streams in two different accounts can have the same name, and two
+-- streams in the same account, but in two different regions, can have the
+-- same name.
 --
--- 'CreateStream' is an asynchronous operation. Upon receiving a 'CreateStream'
--- request, Amazon Kinesis immediately returns and sets the stream status to 'CREATING'. After the stream is created, Amazon Kinesis sets the stream status to 'ACTIVE'
--- . You should perform read and write operations only on an 'ACTIVE' stream.
+-- 'CreateStream' is an asynchronous operation. Upon receiving a
+-- 'CreateStream' request, Amazon Kinesis immediately returns and sets the
+-- stream status to 'CREATING'. After the stream is created, Amazon Kinesis
+-- sets the stream status to 'ACTIVE'. You should perform read and write
+-- operations only on an 'ACTIVE' stream.
 --
--- You receive a 'LimitExceededException' when making a 'CreateStream' request if
--- you try to do one of the following:
+-- You receive a 'LimitExceededException' when making a 'CreateStream'
+-- request if you try to do one of the following:
 --
--- Have more than five streams in the 'CREATING' state at any point in time. Create more shards than are authorized for your account.
--- For the default shard limit for an AWS account, see <http://docs.aws.amazon.com/kinesis/latest/dev/service-sizes-and-limits.html Amazon Kinesis Limits>.
--- If you need to increase this limit, <http://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html contact AWS Support>
+-- -   Have more than five streams in the 'CREATING' state at any point in
+--     time.
+-- -   Create more shards than are authorized for your account.
 --
--- You can use 'DescribeStream' to check the stream status, which is returned in 'StreamStatus'.
+-- For the default shard limit for an AWS account, see
+-- <http://docs.aws.amazon.com/kinesis/latest/dev/service-sizes-and-limits.html Amazon Kinesis Limits>.
+-- If you need to increase this limit,
+-- <http://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html contact AWS Support>
 --
--- 'CreateStream' has a limit of 5 transactions per second per account.
+-- You can use 'DescribeStream' to check the stream status, which is
+-- returned in 'StreamStatus'.
 --
--- <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_CreateStream.html>
+-- CreateStream has a limit of 5 transactions per second per account.
+--
+-- /See:/ <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_CreateStream.html AWS API Reference> for CreateStream.
 module Network.AWS.Kinesis.CreateStream
     (
-    -- * Request
-      CreateStream
-    -- ** Request constructor
-    , createStream
-    -- ** Request lenses
-    , csShardCount
+    -- * Creating a Request
+      createStream
+    , CreateStream
+    -- * Request Lenses
     , csStreamName
+    , csShardCount
 
-    -- * Response
-    , CreateStreamResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createStreamResponse
+    , CreateStreamResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Kinesis.Types
-import qualified GHC.Exts
-
-data CreateStream = CreateStream
-    { _csShardCount :: Nat
-    , _csStreamName :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Kinesis.Types
+import           Network.AWS.Kinesis.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'CreateStream' constructor.
+-- | Represents the input for 'CreateStream'.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'createStream' smart constructor.
+data CreateStream = CreateStream'
+    { _csStreamName :: !Text
+    , _csShardCount :: !Nat
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateStream' with the minimum fields required to make a request.
 --
--- * 'csShardCount' @::@ 'Natural'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'csStreamName' @::@ 'Text'
+-- * 'csStreamName'
 --
-createStream :: Text -- ^ 'csStreamName'
-             -> Natural -- ^ 'csShardCount'
-             -> CreateStream
-createStream p1 p2 = CreateStream
-    { _csStreamName = p1
-    , _csShardCount = withIso _Nat (const id) p2
+-- * 'csShardCount'
+createStream
+    :: Text -- ^ 'csStreamName'
+    -> Natural -- ^ 'csShardCount'
+    -> CreateStream
+createStream pStreamName_ pShardCount_ =
+    CreateStream'
+    { _csStreamName = pStreamName_
+    , _csShardCount = _Nat # pShardCount_
     }
 
--- | The number of shards that the stream will use. The throughput of the stream
--- is a function of the number of shards; more shards are required for greater
--- provisioned throughput.
+-- | A name to identify the stream. The stream name is scoped to the AWS
+-- account used by the application that creates the stream. It is also
+-- scoped by region. That is, two streams in two different AWS accounts can
+-- have the same name, and two streams in the same AWS account, but in two
+-- different regions, can have the same name.
+csStreamName :: Lens' CreateStream Text
+csStreamName = lens _csStreamName (\ s a -> s{_csStreamName = a});
+
+-- | The number of shards that the stream will use. The throughput of the
+-- stream is a function of the number of shards; more shards are required
+-- for greater provisioned throughput.
 --
 -- DefaultShardLimit;
 csShardCount :: Lens' CreateStream Natural
-csShardCount = lens _csShardCount (\s a -> s { _csShardCount = a }) . _Nat
+csShardCount = lens _csShardCount (\ s a -> s{_csShardCount = a}) . _Nat;
 
--- | A name to identify the stream. The stream name is scoped to the AWS account
--- used by the application that creates the stream. It is also scoped by region.
--- That is, two streams in two different AWS accounts can have the same name,
--- and two streams in the same AWS account, but in two different regions, can
--- have the same name.
-csStreamName :: Lens' CreateStream Text
-csStreamName = lens _csStreamName (\s a -> s { _csStreamName = a })
+instance AWSRequest CreateStream where
+        type Sv CreateStream = Kinesis
+        type Rs CreateStream = CreateStreamResponse
+        request = postJSON
+        response = receiveNull CreateStreamResponse'
 
-data CreateStreamResponse = CreateStreamResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance ToHeaders CreateStream where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Kinesis_20131202.CreateStream" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | 'CreateStreamResponse' constructor.
-createStreamResponse :: CreateStreamResponse
-createStreamResponse = CreateStreamResponse
+instance ToJSON CreateStream where
+        toJSON CreateStream'{..}
+          = object
+              ["StreamName" .= _csStreamName,
+               "ShardCount" .= _csShardCount]
 
 instance ToPath CreateStream where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery CreateStream where
-    toQuery = const mempty
-
-instance ToHeaders CreateStream
-
-instance ToJSON CreateStream where
-    toJSON CreateStream{..} = object
-        [ "StreamName" .= _csStreamName
-        , "ShardCount" .= _csShardCount
-        ]
+        toQuery = const mempty
 
-instance AWSRequest CreateStream where
-    type Sv CreateStream = Kinesis
-    type Rs CreateStream = CreateStreamResponse
+-- | /See:/ 'createStreamResponse' smart constructor.
+data CreateStreamResponse =
+    CreateStreamResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "CreateStream"
-    response = nullResponse CreateStreamResponse
+-- | Creates a value of 'CreateStreamResponse' with the minimum fields required to make a request.
+--
+createStreamResponse
+    :: CreateStreamResponse
+createStreamResponse = CreateStreamResponse'
diff --git a/gen/Network/AWS/Kinesis/DeleteStream.hs b/gen/Network/AWS/Kinesis/DeleteStream.hs
--- a/gen/Network/AWS/Kinesis/DeleteStream.hs
+++ b/gen/Network/AWS/Kinesis/DeleteStream.hs
@@ -1,112 +1,120 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.Kinesis.DeleteStream
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- 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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deletes a stream and all its shards and data. You must shut down any
--- applications that are operating on the stream before you delete the stream.
--- If an application attempts to operate on a deleted stream, it will receive
--- the exception 'ResourceNotFoundException'.
+-- Deletes a stream and all its shards and data. You must shut down any
+-- applications that are operating on the stream before you delete the
+-- stream. If an application attempts to operate on a deleted stream, it
+-- will receive the exception 'ResourceNotFoundException'.
 --
--- If the stream is in the 'ACTIVE' state, you can delete it. After a 'DeleteStream'
--- request, the specified stream is in the 'DELETING' state until Amazon Kinesis
--- completes the deletion.
+-- If the stream is in the 'ACTIVE' state, you can delete it. After a
+-- 'DeleteStream' request, the specified stream is in the 'DELETING' state
+-- until Amazon Kinesis completes the deletion.
 --
--- Note: Amazon Kinesis might continue to accept data read and write
--- operations, such as 'PutRecord', 'PutRecords', and 'GetRecords', on a stream in the 'DELETING' state until the stream deletion is complete.
+-- __Note:__ Amazon Kinesis might continue to accept data read and write
+-- operations, such as PutRecord, PutRecords, and GetRecords, on a stream
+-- in the 'DELETING' state until the stream deletion is complete.
 --
--- When you delete a stream, any shards in that stream are also deleted, and
--- any tags are dissociated from the stream.
+-- When you delete a stream, any shards in that stream are also deleted,
+-- and any tags are dissociated from the stream.
 --
--- You can use the 'DescribeStream' operation to check the state of the stream,
--- which is returned in 'StreamStatus'.
+-- You can use the DescribeStream operation to check the state of the
+-- stream, which is returned in 'StreamStatus'.
 --
--- 'DeleteStream' has a limit of 5 transactions per second per account.
+-- DeleteStream has a limit of 5 transactions per second per account.
 --
--- <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_DeleteStream.html>
+-- /See:/ <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_DeleteStream.html AWS API Reference> for DeleteStream.
 module Network.AWS.Kinesis.DeleteStream
     (
-    -- * Request
-      DeleteStream
-    -- ** Request constructor
-    , deleteStream
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteStream
+    , DeleteStream
+    -- * Request Lenses
     , dsStreamName
 
-    -- * Response
-    , DeleteStreamResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteStreamResponse
+    , DeleteStreamResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Kinesis.Types
-import qualified GHC.Exts
+import           Network.AWS.Kinesis.Types
+import           Network.AWS.Kinesis.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype DeleteStream = DeleteStream
+-- | Represents the input for 'DeleteStream'.
+--
+-- /See:/ 'deleteStream' smart constructor.
+newtype DeleteStream = DeleteStream'
     { _dsStreamName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteStream' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteStream' with the minimum fields required to make a request.
 --
--- * 'dsStreamName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-deleteStream :: Text -- ^ 'dsStreamName'
-             -> DeleteStream
-deleteStream p1 = DeleteStream
-    { _dsStreamName = p1
+-- * 'dsStreamName'
+deleteStream
+    :: Text -- ^ 'dsStreamName'
+    -> DeleteStream
+deleteStream pStreamName_ =
+    DeleteStream'
+    { _dsStreamName = pStreamName_
     }
 
 -- | The name of the stream to delete.
 dsStreamName :: Lens' DeleteStream Text
-dsStreamName = lens _dsStreamName (\s a -> s { _dsStreamName = a })
+dsStreamName = lens _dsStreamName (\ s a -> s{_dsStreamName = a});
 
-data DeleteStreamResponse = DeleteStreamResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteStream where
+        type Sv DeleteStream = Kinesis
+        type Rs DeleteStream = DeleteStreamResponse
+        request = postJSON
+        response = receiveNull DeleteStreamResponse'
 
--- | 'DeleteStreamResponse' constructor.
-deleteStreamResponse :: DeleteStreamResponse
-deleteStreamResponse = DeleteStreamResponse
+instance ToHeaders DeleteStream where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Kinesis_20131202.DeleteStream" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON DeleteStream where
+        toJSON DeleteStream'{..}
+          = object ["StreamName" .= _dsStreamName]
+
 instance ToPath DeleteStream where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DeleteStream where
-    toQuery = const mempty
-
-instance ToHeaders DeleteStream
-
-instance ToJSON DeleteStream where
-    toJSON DeleteStream{..} = object
-        [ "StreamName" .= _dsStreamName
-        ]
+        toQuery = const mempty
 
-instance AWSRequest DeleteStream where
-    type Sv DeleteStream = Kinesis
-    type Rs DeleteStream = DeleteStreamResponse
+-- | /See:/ 'deleteStreamResponse' smart constructor.
+data DeleteStreamResponse =
+    DeleteStreamResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "DeleteStream"
-    response = nullResponse DeleteStreamResponse
+-- | Creates a value of 'DeleteStreamResponse' with the minimum fields required to make a request.
+--
+deleteStreamResponse
+    :: DeleteStreamResponse
+deleteStreamResponse = DeleteStreamResponse'
diff --git a/gen/Network/AWS/Kinesis/DescribeStream.hs b/gen/Network/AWS/Kinesis/DescribeStream.hs
--- a/gen/Network/AWS/Kinesis/DescribeStream.hs
+++ b/gen/Network/AWS/Kinesis/DescribeStream.hs
@@ -1,162 +1,192 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.Kinesis.DescribeStream
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- 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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Describes the specified stream.
+-- Describes the specified stream.
 --
 -- The information about the stream includes its current status, its Amazon
--- Resource Name (ARN), and an array of shard objects. For each shard object,
--- there is information about the hash key and sequence number ranges that the
--- shard spans, and the IDs of any earlier shards that played in a role in
--- creating the shard. A sequence number is the identifier associated with every
--- record ingested in the Amazon Kinesis stream. The sequence number is assigned
--- when a record is put into the stream.
+-- Resource Name (ARN), and an array of shard objects. For each shard
+-- object, there is information about the hash key and sequence number
+-- ranges that the shard spans, and the IDs of any earlier shards that
+-- played in a role in creating the shard. A sequence number is the
+-- identifier associated with every record ingested in the Amazon Kinesis
+-- stream. The sequence number is assigned when a record is put into the
+-- stream.
 --
--- You can limit the number of returned shards using the 'Limit' parameter. The
--- number of shards in a stream may be too large to return from a single call to 'DescribeStream'. You can detect this by using the 'HasMoreShards' flag in the
--- returned output. 'HasMoreShards' is set to 'true' when there is more data
--- available.
+-- You can limit the number of returned shards using the 'Limit' parameter.
+-- The number of shards in a stream may be too large to return from a
+-- single call to 'DescribeStream'. You can detect this by using the
+-- 'HasMoreShards' flag in the returned output. 'HasMoreShards' is set to
+-- 'true' when there is more data available.
 --
--- 'DescribeStream' is a paginated operation. If there are more shards available,
--- you can request them using the shard ID of the last shard returned. Specify
--- this ID in the 'ExclusiveStartShardId' parameter in a subsequent request to 'DescribeStream'.
+-- 'DescribeStream' is a paginated operation. If there are more shards
+-- available, you can request them using the shard ID of the last shard
+-- returned. Specify this ID in the 'ExclusiveStartShardId' parameter in a
+-- subsequent request to 'DescribeStream'.
 --
--- 'DescribeStream' has a limit of 10 transactions per second per account.
+-- DescribeStream has a limit of 10 transactions per second per account.
 --
--- <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_DescribeStream.html>
+-- /See:/ <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_DescribeStream.html AWS API Reference> for DescribeStream.
+--
+-- This operation returns paginated results.
 module Network.AWS.Kinesis.DescribeStream
     (
-    -- * Request
-      DescribeStream
-    -- ** Request constructor
-    , describeStream
-    -- ** Request lenses
-    , ds1ExclusiveStartShardId
-    , ds1Limit
-    , ds1StreamName
+    -- * Creating a Request
+      describeStream
+    , DescribeStream
+    -- * Request Lenses
+    , dExclusiveStartShardId
+    , dLimit
+    , dStreamName
 
-    -- * Response
-    , DescribeStreamResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , describeStreamResponse
-    -- ** Response lenses
-    , dsrStreamDescription
+    , DescribeStreamResponse
+    -- * Response Lenses
+    , dsrsStatus
+    , dsrsStreamDescription
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Kinesis.Types
-import qualified GHC.Exts
-
-data DescribeStream = DescribeStream
-    { _ds1ExclusiveStartShardId :: Maybe Text
-    , _ds1Limit                 :: Maybe Nat
-    , _ds1StreamName            :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Kinesis.Types
+import           Network.AWS.Kinesis.Types.Product
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'DescribeStream' constructor.
+-- | Represents the input for 'DescribeStream'.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'describeStream' smart constructor.
+data DescribeStream = DescribeStream'
+    { _dExclusiveStartShardId :: !(Maybe Text)
+    , _dLimit                 :: !(Maybe Nat)
+    , _dStreamName            :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeStream' with the minimum fields required to make a request.
 --
--- * 'ds1ExclusiveStartShardId' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ds1Limit' @::@ 'Maybe' 'Natural'
+-- * 'dExclusiveStartShardId'
 --
--- * 'ds1StreamName' @::@ 'Text'
+-- * 'dLimit'
 --
-describeStream :: Text -- ^ 'ds1StreamName'
-               -> DescribeStream
-describeStream p1 = DescribeStream
-    { _ds1StreamName            = p1
-    , _ds1Limit                 = Nothing
-    , _ds1ExclusiveStartShardId = Nothing
+-- * 'dStreamName'
+describeStream
+    :: Text -- ^ 'dStreamName'
+    -> DescribeStream
+describeStream pStreamName_ =
+    DescribeStream'
+    { _dExclusiveStartShardId = Nothing
+    , _dLimit = Nothing
+    , _dStreamName = pStreamName_
     }
 
 -- | The shard ID of the shard to start with.
-ds1ExclusiveStartShardId :: Lens' DescribeStream (Maybe Text)
-ds1ExclusiveStartShardId =
-    lens _ds1ExclusiveStartShardId
-        (\s a -> s { _ds1ExclusiveStartShardId = a })
+dExclusiveStartShardId :: Lens' DescribeStream (Maybe Text)
+dExclusiveStartShardId = lens _dExclusiveStartShardId (\ s a -> s{_dExclusiveStartShardId = a});
 
 -- | The maximum number of shards to return.
-ds1Limit :: Lens' DescribeStream (Maybe Natural)
-ds1Limit = lens _ds1Limit (\s a -> s { _ds1Limit = a }) . mapping _Nat
+dLimit :: Lens' DescribeStream (Maybe Natural)
+dLimit = lens _dLimit (\ s a -> s{_dLimit = a}) . mapping _Nat;
 
 -- | The name of the stream to describe.
-ds1StreamName :: Lens' DescribeStream Text
-ds1StreamName = lens _ds1StreamName (\s a -> s { _ds1StreamName = a })
+dStreamName :: Lens' DescribeStream Text
+dStreamName = lens _dStreamName (\ s a -> s{_dStreamName = a});
 
-newtype DescribeStreamResponse = DescribeStreamResponse
-    { _dsrStreamDescription :: StreamDescription
-    } deriving (Eq, Read, Show)
+instance AWSPager DescribeStream where
+        page rq rs
+          | stop
+              (rs ^. dsrsStreamDescription . sdHasMoreShards)
+            = Nothing
+          | isNothing
+              (rs ^?
+                 dsrsStreamDescription . sdShards . _last . sShardId)
+            = Nothing
+          | otherwise =
+            Just $ rq &
+              dExclusiveStartShardId .~
+                rs ^?
+                  dsrsStreamDescription . sdShards . _last . sShardId
 
--- | 'DescribeStreamResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dsrStreamDescription' @::@ 'StreamDescription'
---
-describeStreamResponse :: StreamDescription -- ^ 'dsrStreamDescription'
-                       -> DescribeStreamResponse
-describeStreamResponse p1 = DescribeStreamResponse
-    { _dsrStreamDescription = p1
-    }
+instance AWSRequest DescribeStream where
+        type Sv DescribeStream = Kinesis
+        type Rs DescribeStream = DescribeStreamResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeStreamResponse' <$>
+                   (pure (fromEnum s)) <*> (x .:> "StreamDescription"))
 
--- | The current status of the stream, the stream ARN, an array of shard objects
--- that comprise the stream, and states whether there are more shards available.
-dsrStreamDescription :: Lens' DescribeStreamResponse StreamDescription
-dsrStreamDescription =
-    lens _dsrStreamDescription (\s a -> s { _dsrStreamDescription = a })
+instance ToHeaders DescribeStream where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Kinesis_20131202.DescribeStream" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON DescribeStream where
+        toJSON DescribeStream'{..}
+          = object
+              ["ExclusiveStartShardId" .= _dExclusiveStartShardId,
+               "Limit" .= _dLimit, "StreamName" .= _dStreamName]
+
 instance ToPath DescribeStream where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DescribeStream where
-    toQuery = const mempty
-
-instance ToHeaders DescribeStream
-
-instance ToJSON DescribeStream where
-    toJSON DescribeStream{..} = object
-        [ "StreamName"            .= _ds1StreamName
-        , "Limit"                 .= _ds1Limit
-        , "ExclusiveStartShardId" .= _ds1ExclusiveStartShardId
-        ]
+        toQuery = const mempty
 
-instance AWSRequest DescribeStream where
-    type Sv DescribeStream = Kinesis
-    type Rs DescribeStream = DescribeStreamResponse
+-- | Represents the output for 'DescribeStream'.
+--
+-- /See:/ 'describeStreamResponse' smart constructor.
+data DescribeStreamResponse = DescribeStreamResponse'
+    { _dsrsStatus            :: !Int
+    , _dsrsStreamDescription :: !StreamDescription
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "DescribeStream"
-    response = jsonResponse
+-- | Creates a value of 'DescribeStreamResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsrsStatus'
+--
+-- * 'dsrsStreamDescription'
+describeStreamResponse
+    :: Int -- ^ 'dsrsStatus'
+    -> StreamDescription -- ^ 'dsrsStreamDescription'
+    -> DescribeStreamResponse
+describeStreamResponse pStatus_ pStreamDescription_ =
+    DescribeStreamResponse'
+    { _dsrsStatus = pStatus_
+    , _dsrsStreamDescription = pStreamDescription_
+    }
 
-instance FromJSON DescribeStreamResponse where
-    parseJSON = withObject "DescribeStreamResponse" $ \o -> DescribeStreamResponse
-        <$> o .:  "StreamDescription"
+-- | The response status code.
+dsrsStatus :: Lens' DescribeStreamResponse Int
+dsrsStatus = lens _dsrsStatus (\ s a -> s{_dsrsStatus = a});
 
-instance AWSPager DescribeStream where
-    page rq rs
-        | stop (rs ^. dsrStreamDescription . sdHasMoreShards) = Nothing
-        | otherwise = Just $ rq
-            & ds1ExclusiveStartShardId .~ rs ^. index (dsrStreamDescription . sdShards) sShardId
+-- | The current status of the stream, the stream ARN, an array of shard
+-- objects that comprise the stream, and states whether there are more
+-- shards available.
+dsrsStreamDescription :: Lens' DescribeStreamResponse StreamDescription
+dsrsStreamDescription = lens _dsrsStreamDescription (\ s a -> s{_dsrsStreamDescription = a});
diff --git a/gen/Network/AWS/Kinesis/GetRecords.hs b/gen/Network/AWS/Kinesis/GetRecords.hs
--- a/gen/Network/AWS/Kinesis/GetRecords.hs
+++ b/gen/Network/AWS/Kinesis/GetRecords.hs
@@ -1,194 +1,217 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.Kinesis.GetRecords
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- 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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Gets data records from a shard.
+-- Gets data records from a shard.
 --
 -- Specify a shard iterator using the 'ShardIterator' parameter. The shard
--- iterator specifies the position in the shard from which you want to start
--- reading data records sequentially. If there are no records available in the
--- portion of the shard that the iterator points to, 'GetRecords' returns an empty
--- list. Note that it might take multiple calls to get to a portion of the shard
--- that contains records.
+-- iterator specifies the position in the shard from which you want to
+-- start reading data records sequentially. If there are no records
+-- available in the portion of the shard that the iterator points to,
+-- GetRecords returns an empty list. Note that it might take multiple calls
+-- to get to a portion of the shard that contains records.
 --
--- You can scale by provisioning multiple shards. Your application should have
--- one thread per shard, each reading continuously from its stream. To read from
--- a stream continually, call 'GetRecords' in a loop. Use 'GetShardIterator' to get
--- the shard iterator to specify in the first 'GetRecords' call. 'GetRecords'
--- returns a new shard iterator in 'NextShardIterator'. Specify the shard iterator
--- returned in 'NextShardIterator' in subsequent calls to 'GetRecords'. Note that if
--- the shard has been closed, the shard iterator can't return more data and 'GetRecords' returns 'null' in 'NextShardIterator'. You can terminate the loop when the shard
--- is closed, or when the shard iterator reaches the record with the sequence
--- number or other attribute that marks it as the last record to process.
+-- You can scale by provisioning multiple shards. Your application should
+-- have one thread per shard, each reading continuously from its stream. To
+-- read from a stream continually, call GetRecords in a loop. Use
+-- GetShardIterator to get the shard iterator to specify in the first
+-- GetRecords call. GetRecords returns a new shard iterator in
+-- 'NextShardIterator'. Specify the shard iterator returned in
+-- 'NextShardIterator' in subsequent calls to GetRecords. Note that if the
+-- shard has been closed, the shard iterator can\'t return more data and
+-- GetRecords returns 'null' in 'NextShardIterator'. You can terminate the
+-- loop when the shard is closed, or when the shard iterator reaches the
+-- record with the sequence number or other attribute that marks it as the
+-- last record to process.
 --
--- Each data record can be up to 50 KB in size, and each shard can read up to 2
--- MB per second. You can ensure that your calls don't exceed the maximum
--- supported size or throughput by using the 'Limit' parameter to specify the
--- maximum number of records that 'GetRecords' can return. Consider your average
--- record size when determining this limit. For example, if your average record
--- size is 40 KB, you can limit the data returned to about 1 MB per call by
--- specifying 25 as the limit.
+-- Each data record can be up to 50 KB in size, and each shard can read up
+-- to 2 MB per second. You can ensure that your calls don\'t exceed the
+-- maximum supported size or throughput by using the 'Limit' parameter to
+-- specify the maximum number of records that GetRecords can return.
+-- Consider your average record size when determining this limit. For
+-- example, if your average record size is 40 KB, you can limit the data
+-- returned to about 1 MB per call by specifying 25 as the limit.
 --
--- The size of the data returned by 'GetRecords' will vary depending on the
--- utilization of the shard. The maximum size of data that 'GetRecords' can return
--- is 10 MB. If a call returns this amount of data, subsequent calls made within
--- the next 5 seconds throw 'ProvisionedThroughputExceededException'. If there is
--- insufficient provisioned throughput on the shard, subsequent calls made
--- within the next 1 second throw 'ProvisionedThroughputExceededException'. Note
--- that 'GetRecords' won't return any data when it throws an exception. For this
--- reason, we recommend that you wait one second between calls to 'GetRecords';
--- however, it's possible that the application will get exceptions for longer
--- than 1 second.
+-- The size of the data returned by GetRecords will vary depending on the
+-- utilization of the shard. The maximum size of data that GetRecords can
+-- return is 10 MB. If a call returns this amount of data, subsequent calls
+-- made within the next 5 seconds throw
+-- 'ProvisionedThroughputExceededException'. If there is insufficient
+-- provisioned throughput on the shard, subsequent calls made within the
+-- next 1 second throw 'ProvisionedThroughputExceededException'. Note that
+-- GetRecords won\'t return any data when it throws an exception. For this
+-- reason, we recommend that you wait one second between calls to
+-- GetRecords; however, it\'s possible that the application will get
+-- exceptions for longer than 1 second.
 --
--- To detect whether the application is falling behind in processing, you can
--- use the 'MillisBehindLatest' response attribute. You can also monitor the
--- amount of data in a stream using the CloudWatch metrics. For more
--- information, see <http://docs.aws.amazon.com/kinesis/latest/dev/monitoring_with_cloudwatch.html Monitoring Amazon Kinesis with Amazon CloudWatch> in the /Amazon Kinesis Developer Guide/.
+-- To detect whether the application is falling behind in processing, you
+-- can use the 'MillisBehindLatest' response attribute. You can also
+-- monitor the amount of data in a stream using the CloudWatch metrics. For
+-- more information, see
+-- <http://docs.aws.amazon.com/kinesis/latest/dev/monitoring_with_cloudwatch.html Monitoring Amazon Kinesis with Amazon CloudWatch>
+-- in the /Amazon Kinesis Developer Guide/.
 --
--- <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetRecords.html>
+-- /See:/ <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetRecords.html AWS API Reference> for GetRecords.
 module Network.AWS.Kinesis.GetRecords
     (
-    -- * Request
-      GetRecords
-    -- ** Request constructor
-    , getRecords
-    -- ** Request lenses
+    -- * Creating a Request
+      getRecords
+    , GetRecords
+    -- * Request Lenses
     , grLimit
     , grShardIterator
 
-    -- * Response
-    , GetRecordsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getRecordsResponse
-    -- ** Response lenses
-    , grrMillisBehindLatest
-    , grrNextShardIterator
-    , grrRecords
+    , GetRecordsResponse
+    -- * Response Lenses
+    , grrsMillisBehindLatest
+    , grrsNextShardIterator
+    , grrsStatus
+    , grrsRecords
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Kinesis.Types
-import qualified GHC.Exts
-
-data GetRecords = GetRecords
-    { _grLimit         :: Maybe Nat
-    , _grShardIterator :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Kinesis.Types
+import           Network.AWS.Kinesis.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'GetRecords' constructor.
+-- | Represents the input for GetRecords.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'getRecords' smart constructor.
+data GetRecords = GetRecords'
+    { _grLimit         :: !(Maybe Nat)
+    , _grShardIterator :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetRecords' with the minimum fields required to make a request.
 --
--- * 'grLimit' @::@ 'Maybe' 'Natural'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'grShardIterator' @::@ 'Text'
+-- * 'grLimit'
 --
-getRecords :: Text -- ^ 'grShardIterator'
-           -> GetRecords
-getRecords p1 = GetRecords
-    { _grShardIterator = p1
-    , _grLimit         = Nothing
+-- * 'grShardIterator'
+getRecords
+    :: Text -- ^ 'grShardIterator'
+    -> GetRecords
+getRecords pShardIterator_ =
+    GetRecords'
+    { _grLimit = Nothing
+    , _grShardIterator = pShardIterator_
     }
 
--- | The maximum number of records to return. Specify a value of up to 10,000. If
--- you specify a value that is greater than 10,000, 'GetRecords' throws 'InvalidArgumentException'.
+-- | The maximum number of records to return. Specify a value of up to
+-- 10,000. If you specify a value that is greater than 10,000, GetRecords
+-- throws 'InvalidArgumentException'.
 grLimit :: Lens' GetRecords (Maybe Natural)
-grLimit = lens _grLimit (\s a -> s { _grLimit = a }) . mapping _Nat
+grLimit = lens _grLimit (\ s a -> s{_grLimit = a}) . mapping _Nat;
 
--- | The position in the shard from which you want to start sequentially reading
--- data records. A shard iterator specifies this position using the sequence
--- number of a data record in the shard.
+-- | The position in the shard from which you want to start sequentially
+-- reading data records. A shard iterator specifies this position using the
+-- sequence number of a data record in the shard.
 grShardIterator :: Lens' GetRecords Text
-grShardIterator = lens _grShardIterator (\s a -> s { _grShardIterator = a })
-
-data GetRecordsResponse = GetRecordsResponse
-    { _grrMillisBehindLatest :: Maybe Nat
-    , _grrNextShardIterator  :: Maybe Text
-    , _grrRecords            :: List "Records" Record
-    } deriving (Eq, Read, Show)
-
--- | 'GetRecordsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'grrMillisBehindLatest' @::@ 'Maybe' 'Natural'
---
--- * 'grrNextShardIterator' @::@ 'Maybe' 'Text'
---
--- * 'grrRecords' @::@ ['Record']
---
-getRecordsResponse :: GetRecordsResponse
-getRecordsResponse = GetRecordsResponse
-    { _grrRecords            = mempty
-    , _grrNextShardIterator  = Nothing
-    , _grrMillisBehindLatest = Nothing
-    }
+grShardIterator = lens _grShardIterator (\ s a -> s{_grShardIterator = a});
 
--- | The number of milliseconds the 'GetRecords' response is from the tip of the
--- stream, indicating how far behind current time the consumer is. A value of
--- zero indicates record processing is caught up, and there are no new records
--- to process at this moment.
-grrMillisBehindLatest :: Lens' GetRecordsResponse (Maybe Natural)
-grrMillisBehindLatest =
-    lens _grrMillisBehindLatest (\s a -> s { _grrMillisBehindLatest = a })
-        . mapping _Nat
+instance AWSRequest GetRecords where
+        type Sv GetRecords = Kinesis
+        type Rs GetRecords = GetRecordsResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetRecordsResponse' <$>
+                   (x .?> "MillisBehindLatest") <*>
+                     (x .?> "NextShardIterator")
+                     <*> (pure (fromEnum s))
+                     <*> (x .?> "Records" .!@ mempty))
 
--- | The next position in the shard from which to start sequentially reading data
--- records. If set to 'null', the shard has been closed and the requested iterator
--- will not return any more data.
-grrNextShardIterator :: Lens' GetRecordsResponse (Maybe Text)
-grrNextShardIterator =
-    lens _grrNextShardIterator (\s a -> s { _grrNextShardIterator = a })
+instance ToHeaders GetRecords where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Kinesis_20131202.GetRecords" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | The data records retrieved from the shard.
-grrRecords :: Lens' GetRecordsResponse [Record]
-grrRecords = lens _grrRecords (\s a -> s { _grrRecords = a }) . _List
+instance ToJSON GetRecords where
+        toJSON GetRecords'{..}
+          = object
+              ["Limit" .= _grLimit,
+               "ShardIterator" .= _grShardIterator]
 
 instance ToPath GetRecords where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery GetRecords where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders GetRecords
+-- | Represents the output for GetRecords.
+--
+-- /See:/ 'getRecordsResponse' smart constructor.
+data GetRecordsResponse = GetRecordsResponse'
+    { _grrsMillisBehindLatest :: !(Maybe Nat)
+    , _grrsNextShardIterator  :: !(Maybe Text)
+    , _grrsStatus             :: !Int
+    , _grrsRecords            :: ![Record]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON GetRecords where
-    toJSON GetRecords{..} = object
-        [ "ShardIterator" .= _grShardIterator
-        , "Limit"         .= _grLimit
-        ]
+-- | Creates a value of 'GetRecordsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'grrsMillisBehindLatest'
+--
+-- * 'grrsNextShardIterator'
+--
+-- * 'grrsStatus'
+--
+-- * 'grrsRecords'
+getRecordsResponse
+    :: Int -- ^ 'grrsStatus'
+    -> GetRecordsResponse
+getRecordsResponse pStatus_ =
+    GetRecordsResponse'
+    { _grrsMillisBehindLatest = Nothing
+    , _grrsNextShardIterator = Nothing
+    , _grrsStatus = pStatus_
+    , _grrsRecords = mempty
+    }
 
-instance AWSRequest GetRecords where
-    type Sv GetRecords = Kinesis
-    type Rs GetRecords = GetRecordsResponse
+-- | The number of milliseconds the GetRecords response is from the tip of
+-- the stream, indicating how far behind current time the consumer is. A
+-- value of zero indicates record processing is caught up, and there are no
+-- new records to process at this moment.
+grrsMillisBehindLatest :: Lens' GetRecordsResponse (Maybe Natural)
+grrsMillisBehindLatest = lens _grrsMillisBehindLatest (\ s a -> s{_grrsMillisBehindLatest = a}) . mapping _Nat;
 
-    request  = post "GetRecords"
-    response = jsonResponse
+-- | The next position in the shard from which to start sequentially reading
+-- data records. If set to 'null', the shard has been closed and the
+-- requested iterator will not return any more data.
+grrsNextShardIterator :: Lens' GetRecordsResponse (Maybe Text)
+grrsNextShardIterator = lens _grrsNextShardIterator (\ s a -> s{_grrsNextShardIterator = a});
 
-instance FromJSON GetRecordsResponse where
-    parseJSON = withObject "GetRecordsResponse" $ \o -> GetRecordsResponse
-        <$> o .:? "MillisBehindLatest"
-        <*> o .:? "NextShardIterator"
-        <*> o .:? "Records" .!= mempty
+-- | The response status code.
+grrsStatus :: Lens' GetRecordsResponse Int
+grrsStatus = lens _grrsStatus (\ s a -> s{_grrsStatus = a});
+
+-- | The data records retrieved from the shard.
+grrsRecords :: Lens' GetRecordsResponse [Record]
+grrsRecords = lens _grrsRecords (\ s a -> s{_grrsRecords = a}) . _Coerce;
diff --git a/gen/Network/AWS/Kinesis/GetShardIterator.hs b/gen/Network/AWS/Kinesis/GetShardIterator.hs
--- a/gen/Network/AWS/Kinesis/GetShardIterator.hs
+++ b/gen/Network/AWS/Kinesis/GetShardIterator.hs
@@ -1,192 +1,218 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.Kinesis.GetShardIterator
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- 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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Gets a shard iterator. A shard iterator expires five minutes after it is
+-- Gets a shard iterator. A shard iterator expires five minutes after it is
 -- returned to the requester.
 --
 -- A shard iterator specifies the position in the shard from which to start
--- reading data records sequentially. A shard iterator specifies this position
--- using the sequence number of a data record in a shard. A sequence number is
--- the identifier associated with every record ingested in the Amazon Kinesis
--- stream. The sequence number is assigned when a record is put into the stream.
+-- reading data records sequentially. A shard iterator specifies this
+-- position using the sequence number of a data record in a shard. A
+-- sequence number is the identifier associated with every record ingested
+-- in the Amazon Kinesis stream. The sequence number is assigned when a
+-- record is put into the stream.
 --
--- You must specify the shard iterator type. For example, you can set the 'ShardIteratorType' parameter to read exactly from the position denoted by a specific sequence
--- number by using the 'AT_SEQUENCE_NUMBER' shard iterator type, or right after
--- the sequence number by using the 'AFTER_SEQUENCE_NUMBER' shard iterator type,
--- using sequence numbers returned by earlier calls to 'PutRecord', 'PutRecords', 'GetRecords', or 'DescribeStream'. You can specify the shard iterator type 'TRIM_HORIZON' in
--- the request to cause 'ShardIterator' to point to the last untrimmed record in
--- the shard in the system, which is the oldest data record in the shard. Or you
--- can point to just after the most recent record in the shard, by using the
--- shard iterator type 'LATEST', so that you always read the most recent data in
--- the shard.
+-- You must specify the shard iterator type. For example, you can set the
+-- 'ShardIteratorType' parameter to read exactly from the position denoted
+-- by a specific sequence number by using the 'AT_SEQUENCE_NUMBER' shard
+-- iterator type, or right after the sequence number by using the
+-- 'AFTER_SEQUENCE_NUMBER' shard iterator type, using sequence numbers
+-- returned by earlier calls to PutRecord, PutRecords, GetRecords, or
+-- DescribeStream. You can specify the shard iterator type 'TRIM_HORIZON'
+-- in the request to cause 'ShardIterator' to point to the last untrimmed
+-- record in the shard in the system, which is the oldest data record in
+-- the shard. Or you can point to just after the most recent record in the
+-- shard, by using the shard iterator type 'LATEST', so that you always
+-- read the most recent data in the shard.
 --
--- When you repeatedly read from an Amazon Kinesis stream use a 'GetShardIterator'
--- request to get the first shard iterator for use in your first 'GetRecords'
--- request and then use the shard iterator returned by the 'GetRecords' request in 'NextShardIterator' for subsequent reads. A new shard iterator is returned by
--- every 'GetRecords' request in 'NextShardIterator', which you use in the 'ShardIterator' parameter of the next 'GetRecords' request.
+-- When you repeatedly read from an Amazon Kinesis stream use a
+-- GetShardIterator request to get the first shard iterator for use in your
+-- first GetRecords request and then use the shard iterator returned by the
+-- GetRecords request in 'NextShardIterator' for subsequent reads. A new
+-- shard iterator is returned by every GetRecords request in
+-- 'NextShardIterator', which you use in the 'ShardIterator' parameter of
+-- the next GetRecords request.
 --
--- If a 'GetShardIterator' request is made too often, you receive a 'ProvisionedThroughputExceededException'. For more information about throughput limits, see 'GetRecords'.
+-- If a GetShardIterator request is made too often, you receive a
+-- 'ProvisionedThroughputExceededException'. For more information about
+-- throughput limits, see GetRecords.
 --
--- If the shard is closed, the iterator can't return more data, and 'GetShardIterator' returns 'null' for its 'ShardIterator'. A shard can be closed using 'SplitShard'
--- or 'MergeShards'.
+-- If the shard is closed, the iterator can\'t return more data, and
+-- GetShardIterator returns 'null' for its 'ShardIterator'. A shard can be
+-- closed using SplitShard or MergeShards.
 --
--- 'GetShardIterator' has a limit of 5 transactions per second per account per
--- open shard.
+-- GetShardIterator has a limit of 5 transactions per second per account
+-- per open shard.
 --
--- <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html>
+-- /See:/ <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html AWS API Reference> for GetShardIterator.
 module Network.AWS.Kinesis.GetShardIterator
     (
-    -- * Request
-      GetShardIterator
-    -- ** Request constructor
-    , getShardIterator
-    -- ** Request lenses
-    , gsiShardId
-    , gsiShardIteratorType
+    -- * Creating a Request
+      getShardIterator
+    , GetShardIterator
+    -- * Request Lenses
     , gsiStartingSequenceNumber
     , gsiStreamName
+    , gsiShardId
+    , gsiShardIteratorType
 
-    -- * Response
-    , GetShardIteratorResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getShardIteratorResponse
-    -- ** Response lenses
-    , gsirShardIterator
+    , GetShardIteratorResponse
+    -- * Response Lenses
+    , gsirsShardIterator
+    , gsirsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Kinesis.Types
-import qualified GHC.Exts
-
-data GetShardIterator = GetShardIterator
-    { _gsiShardId                :: Text
-    , _gsiShardIteratorType      :: ShardIteratorType
-    , _gsiStartingSequenceNumber :: Maybe Text
-    , _gsiStreamName             :: Text
-    } deriving (Eq, Read, Show)
+import           Network.AWS.Kinesis.Types
+import           Network.AWS.Kinesis.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'GetShardIterator' constructor.
+-- | Represents the input for 'GetShardIterator'.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'getShardIterator' smart constructor.
+data GetShardIterator = GetShardIterator'
+    { _gsiStartingSequenceNumber :: !(Maybe Text)
+    , _gsiStreamName             :: !Text
+    , _gsiShardId                :: !Text
+    , _gsiShardIteratorType      :: !ShardIteratorType
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetShardIterator' with the minimum fields required to make a request.
 --
--- * 'gsiShardId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gsiShardIteratorType' @::@ 'ShardIteratorType'
+-- * 'gsiStartingSequenceNumber'
 --
--- * 'gsiStartingSequenceNumber' @::@ 'Maybe' 'Text'
+-- * 'gsiStreamName'
 --
--- * 'gsiStreamName' @::@ 'Text'
+-- * 'gsiShardId'
 --
-getShardIterator :: Text -- ^ 'gsiStreamName'
-                 -> Text -- ^ 'gsiShardId'
-                 -> ShardIteratorType -- ^ 'gsiShardIteratorType'
-                 -> GetShardIterator
-getShardIterator p1 p2 p3 = GetShardIterator
-    { _gsiStreamName             = p1
-    , _gsiShardId                = p2
-    , _gsiShardIteratorType      = p3
-    , _gsiStartingSequenceNumber = Nothing
+-- * 'gsiShardIteratorType'
+getShardIterator
+    :: Text -- ^ 'gsiStreamName'
+    -> Text -- ^ 'gsiShardId'
+    -> ShardIteratorType -- ^ 'gsiShardIteratorType'
+    -> GetShardIterator
+getShardIterator pStreamName_ pShardId_ pShardIteratorType_ =
+    GetShardIterator'
+    { _gsiStartingSequenceNumber = Nothing
+    , _gsiStreamName = pStreamName_
+    , _gsiShardId = pShardId_
+    , _gsiShardIteratorType = pShardIteratorType_
     }
 
--- | The shard ID of the shard to get the iterator for.
-gsiShardId :: Lens' GetShardIterator Text
-gsiShardId = lens _gsiShardId (\s a -> s { _gsiShardId = a })
-
--- | Determines how the shard iterator is used to start reading data records from
--- the shard.
---
--- The following are the valid shard iterator types:
---
--- AT_SEQUENCE_NUMBER - Start reading exactly from the position denoted by a
--- specific sequence number. AFTER_SEQUENCE_NUMBER - Start reading right after
--- the position denoted by a specific sequence number. TRIM_HORIZON - Start
--- reading at the last untrimmed record in the shard in the system, which is the
--- oldest data record in the shard. LATEST - Start reading just after the most
--- recent record in the shard, so that you always read the most recent data in
--- the shard.
-gsiShardIteratorType :: Lens' GetShardIterator ShardIteratorType
-gsiShardIteratorType =
-    lens _gsiShardIteratorType (\s a -> s { _gsiShardIteratorType = a })
-
 -- | The sequence number of the data record in the shard from which to start
 -- reading from.
 gsiStartingSequenceNumber :: Lens' GetShardIterator (Maybe Text)
-gsiStartingSequenceNumber =
-    lens _gsiStartingSequenceNumber
-        (\s a -> s { _gsiStartingSequenceNumber = a })
+gsiStartingSequenceNumber = lens _gsiStartingSequenceNumber (\ s a -> s{_gsiStartingSequenceNumber = a});
 
 -- | The name of the stream.
 gsiStreamName :: Lens' GetShardIterator Text
-gsiStreamName = lens _gsiStreamName (\s a -> s { _gsiStreamName = a })
+gsiStreamName = lens _gsiStreamName (\ s a -> s{_gsiStreamName = a});
 
-newtype GetShardIteratorResponse = GetShardIteratorResponse
-    { _gsirShardIterator :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
+-- | The shard ID of the shard to get the iterator for.
+gsiShardId :: Lens' GetShardIterator Text
+gsiShardId = lens _gsiShardId (\ s a -> s{_gsiShardId = a});
 
--- | 'GetShardIteratorResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Determines how the shard iterator is used to start reading data records
+-- from the shard.
 --
--- * 'gsirShardIterator' @::@ 'Maybe' 'Text'
+-- The following are the valid shard iterator types:
 --
-getShardIteratorResponse :: GetShardIteratorResponse
-getShardIteratorResponse = GetShardIteratorResponse
-    { _gsirShardIterator = Nothing
-    }
+-- -   AT_SEQUENCE_NUMBER - Start reading exactly from the position denoted
+--     by a specific sequence number.
+-- -   AFTER_SEQUENCE_NUMBER - Start reading right after the position
+--     denoted by a specific sequence number.
+-- -   TRIM_HORIZON - Start reading at the last untrimmed record in the
+--     shard in the system, which is the oldest data record in the shard.
+-- -   LATEST - Start reading just after the most recent record in the
+--     shard, so that you always read the most recent data in the shard.
+gsiShardIteratorType :: Lens' GetShardIterator ShardIteratorType
+gsiShardIteratorType = lens _gsiShardIteratorType (\ s a -> s{_gsiShardIteratorType = a});
 
--- | The position in the shard from which to start reading data records
--- sequentially. A shard iterator specifies this position using the sequence
--- number of a data record in a shard.
-gsirShardIterator :: Lens' GetShardIteratorResponse (Maybe Text)
-gsirShardIterator =
-    lens _gsirShardIterator (\s a -> s { _gsirShardIterator = a })
+instance AWSRequest GetShardIterator where
+        type Sv GetShardIterator = Kinesis
+        type Rs GetShardIterator = GetShardIteratorResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetShardIteratorResponse' <$>
+                   (x .?> "ShardIterator") <*> (pure (fromEnum s)))
 
+instance ToHeaders GetShardIterator where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Kinesis_20131202.GetShardIterator" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetShardIterator where
+        toJSON GetShardIterator'{..}
+          = object
+              ["StartingSequenceNumber" .=
+                 _gsiStartingSequenceNumber,
+               "StreamName" .= _gsiStreamName,
+               "ShardId" .= _gsiShardId,
+               "ShardIteratorType" .= _gsiShardIteratorType]
+
 instance ToPath GetShardIterator where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery GetShardIterator where
-    toQuery = const mempty
-
-instance ToHeaders GetShardIterator
+        toQuery = const mempty
 
-instance ToJSON GetShardIterator where
-    toJSON GetShardIterator{..} = object
-        [ "StreamName"             .= _gsiStreamName
-        , "ShardId"                .= _gsiShardId
-        , "ShardIteratorType"      .= _gsiShardIteratorType
-        , "StartingSequenceNumber" .= _gsiStartingSequenceNumber
-        ]
+-- | Represents the output for 'GetShardIterator'.
+--
+-- /See:/ 'getShardIteratorResponse' smart constructor.
+data GetShardIteratorResponse = GetShardIteratorResponse'
+    { _gsirsShardIterator :: !(Maybe Text)
+    , _gsirsStatus        :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetShardIterator where
-    type Sv GetShardIterator = Kinesis
-    type Rs GetShardIterator = GetShardIteratorResponse
+-- | Creates a value of 'GetShardIteratorResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gsirsShardIterator'
+--
+-- * 'gsirsStatus'
+getShardIteratorResponse
+    :: Int -- ^ 'gsirsStatus'
+    -> GetShardIteratorResponse
+getShardIteratorResponse pStatus_ =
+    GetShardIteratorResponse'
+    { _gsirsShardIterator = Nothing
+    , _gsirsStatus = pStatus_
+    }
 
-    request  = post "GetShardIterator"
-    response = jsonResponse
+-- | The position in the shard from which to start reading data records
+-- sequentially. A shard iterator specifies this position using the
+-- sequence number of a data record in a shard.
+gsirsShardIterator :: Lens' GetShardIteratorResponse (Maybe Text)
+gsirsShardIterator = lens _gsirsShardIterator (\ s a -> s{_gsirsShardIterator = a});
 
-instance FromJSON GetShardIteratorResponse where
-    parseJSON = withObject "GetShardIteratorResponse" $ \o -> GetShardIteratorResponse
-        <$> o .:? "ShardIterator"
+-- | The response status code.
+gsirsStatus :: Lens' GetShardIteratorResponse Int
+gsirsStatus = lens _gsirsStatus (\ s a -> s{_gsirsStatus = a});
diff --git a/gen/Network/AWS/Kinesis/ListStreams.hs b/gen/Network/AWS/Kinesis/ListStreams.hs
--- a/gen/Network/AWS/Kinesis/ListStreams.hs
+++ b/gen/Network/AWS/Kinesis/ListStreams.hs
@@ -1,152 +1,181 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.Kinesis.ListStreams
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- 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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Lists your streams.
+-- Lists your streams.
 --
--- The number of streams may be too large to return from a single call to 'ListStreams'. You can limit the number of returned streams using the 'Limit' parameter. If
--- you do not specify a value for the 'Limit' parameter, Amazon Kinesis uses the
--- default limit, which is currently 10.
+-- The number of streams may be too large to return from a single call to
+-- 'ListStreams'. You can limit the number of returned streams using the
+-- 'Limit' parameter. If you do not specify a value for the 'Limit'
+-- parameter, Amazon Kinesis uses the default limit, which is currently 10.
 --
--- You can detect if there are more streams available to list by using the 'HasMoreStreams' flag from the returned output. If there are more streams available, you can
--- request more streams by using the name of the last stream returned by the 'ListStreams' request in the 'ExclusiveStartStreamName' parameter in a subsequent request to 'ListStreams'. The group of stream names returned by the subsequent request is
--- then added to the list. You can continue this process until all the stream
--- names have been collected in the list.
+-- You can detect if there are more streams available to list by using the
+-- 'HasMoreStreams' flag from the returned output. If there are more
+-- streams available, you can request more streams by using the name of the
+-- last stream returned by the 'ListStreams' request in the
+-- 'ExclusiveStartStreamName' parameter in a subsequent request to
+-- 'ListStreams'. The group of stream names returned by the subsequent
+-- request is then added to the list. You can continue this process until
+-- all the stream names have been collected in the list.
 --
--- 'ListStreams' has a limit of 5 transactions per second per account.
+-- ListStreams has a limit of 5 transactions per second per account.
 --
--- <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_ListStreams.html>
+-- /See:/ <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_ListStreams.html AWS API Reference> for ListStreams.
+--
+-- This operation returns paginated results.
 module Network.AWS.Kinesis.ListStreams
     (
-    -- * Request
-      ListStreams
-    -- ** Request constructor
-    , listStreams
-    -- ** Request lenses
-    , lsExclusiveStartStreamName
+    -- * Creating a Request
+      listStreams
+    , ListStreams
+    -- * Request Lenses
     , lsLimit
+    , lsExclusiveStartStreamName
 
-    -- * Response
-    , ListStreamsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listStreamsResponse
-    -- ** Response lenses
-    , lsrHasMoreStreams
-    , lsrStreamNames
+    , ListStreamsResponse
+    -- * Response Lenses
+    , lsrsStatus
+    , lsrsStreamNames
+    , lsrsHasMoreStreams
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Kinesis.Types
-import qualified GHC.Exts
-
-data ListStreams = ListStreams
-    { _lsExclusiveStartStreamName :: Maybe Text
-    , _lsLimit                    :: Maybe Nat
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Kinesis.Types
+import           Network.AWS.Kinesis.Types.Product
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'ListStreams' constructor.
+-- | Represents the input for 'ListStreams'.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listStreams' smart constructor.
+data ListStreams = ListStreams'
+    { _lsLimit                    :: !(Maybe Nat)
+    , _lsExclusiveStartStreamName :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListStreams' with the minimum fields required to make a request.
 --
--- * 'lsExclusiveStartStreamName' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lsLimit' @::@ 'Maybe' 'Natural'
+-- * 'lsLimit'
 --
-listStreams :: ListStreams
-listStreams = ListStreams
-    { _lsLimit                    = Nothing
+-- * 'lsExclusiveStartStreamName'
+listStreams
+    :: ListStreams
+listStreams =
+    ListStreams'
+    { _lsLimit = Nothing
     , _lsExclusiveStartStreamName = Nothing
     }
 
--- | The name of the stream to start the list with.
-lsExclusiveStartStreamName :: Lens' ListStreams (Maybe Text)
-lsExclusiveStartStreamName =
-    lens _lsExclusiveStartStreamName
-        (\s a -> s { _lsExclusiveStartStreamName = a })
-
 -- | The maximum number of streams to list.
 lsLimit :: Lens' ListStreams (Maybe Natural)
-lsLimit = lens _lsLimit (\s a -> s { _lsLimit = a }) . mapping _Nat
+lsLimit = lens _lsLimit (\ s a -> s{_lsLimit = a}) . mapping _Nat;
 
-data ListStreamsResponse = ListStreamsResponse
-    { _lsrHasMoreStreams :: Bool
-    , _lsrStreamNames    :: List "StreamNames" Text
-    } deriving (Eq, Ord, Read, Show)
+-- | The name of the stream to start the list with.
+lsExclusiveStartStreamName :: Lens' ListStreams (Maybe Text)
+lsExclusiveStartStreamName = lens _lsExclusiveStartStreamName (\ s a -> s{_lsExclusiveStartStreamName = a});
 
--- | 'ListStreamsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lsrHasMoreStreams' @::@ 'Bool'
---
--- * 'lsrStreamNames' @::@ ['Text']
---
-listStreamsResponse :: Bool -- ^ 'lsrHasMoreStreams'
-                    -> ListStreamsResponse
-listStreamsResponse p1 = ListStreamsResponse
-    { _lsrHasMoreStreams = p1
-    , _lsrStreamNames    = mempty
-    }
+instance AWSPager ListStreams where
+        page rq rs
+          | stop (rs ^. lsrsHasMoreStreams) = Nothing
+          | isNothing (rs ^? lsrsStreamNames . _last) = Nothing
+          | otherwise =
+            Just $ rq &
+              lsExclusiveStartStreamName .~
+                rs ^? lsrsStreamNames . _last
 
--- | If set to 'true', there are more streams available to list.
-lsrHasMoreStreams :: Lens' ListStreamsResponse Bool
-lsrHasMoreStreams =
-    lens _lsrHasMoreStreams (\s a -> s { _lsrHasMoreStreams = a })
+instance AWSRequest ListStreams where
+        type Sv ListStreams = Kinesis
+        type Rs ListStreams = ListStreamsResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListStreamsResponse' <$>
+                   (pure (fromEnum s)) <*>
+                     (x .?> "StreamNames" .!@ mempty)
+                     <*> (x .:> "HasMoreStreams"))
 
--- | The names of the streams that are associated with the AWS account making the 'ListStreams' request.
-lsrStreamNames :: Lens' ListStreamsResponse [Text]
-lsrStreamNames = lens _lsrStreamNames (\s a -> s { _lsrStreamNames = a }) . _List
+instance ToHeaders ListStreams where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Kinesis_20131202.ListStreams" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON ListStreams where
+        toJSON ListStreams'{..}
+          = object
+              ["Limit" .= _lsLimit,
+               "ExclusiveStartStreamName" .=
+                 _lsExclusiveStartStreamName]
+
 instance ToPath ListStreams where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery ListStreams where
-    toQuery = const mempty
-
-instance ToHeaders ListStreams
+        toQuery = const mempty
 
-instance ToJSON ListStreams where
-    toJSON ListStreams{..} = object
-        [ "Limit"                    .= _lsLimit
-        , "ExclusiveStartStreamName" .= _lsExclusiveStartStreamName
-        ]
+-- | Represents the output for 'ListStreams'.
+--
+-- /See:/ 'listStreamsResponse' smart constructor.
+data ListStreamsResponse = ListStreamsResponse'
+    { _lsrsStatus         :: !Int
+    , _lsrsStreamNames    :: ![Text]
+    , _lsrsHasMoreStreams :: !Bool
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest ListStreams where
-    type Sv ListStreams = Kinesis
-    type Rs ListStreams = ListStreamsResponse
+-- | Creates a value of 'ListStreamsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lsrsStatus'
+--
+-- * 'lsrsStreamNames'
+--
+-- * 'lsrsHasMoreStreams'
+listStreamsResponse
+    :: Int -- ^ 'lsrsStatus'
+    -> Bool -- ^ 'lsrsHasMoreStreams'
+    -> ListStreamsResponse
+listStreamsResponse pStatus_ pHasMoreStreams_ =
+    ListStreamsResponse'
+    { _lsrsStatus = pStatus_
+    , _lsrsStreamNames = mempty
+    , _lsrsHasMoreStreams = pHasMoreStreams_
+    }
 
-    request  = post "ListStreams"
-    response = jsonResponse
+-- | The response status code.
+lsrsStatus :: Lens' ListStreamsResponse Int
+lsrsStatus = lens _lsrsStatus (\ s a -> s{_lsrsStatus = a});
 
-instance FromJSON ListStreamsResponse where
-    parseJSON = withObject "ListStreamsResponse" $ \o -> ListStreamsResponse
-        <$> o .:  "HasMoreStreams"
-        <*> o .:? "StreamNames" .!= mempty
+-- | The names of the streams that are associated with the AWS account making
+-- the 'ListStreams' request.
+lsrsStreamNames :: Lens' ListStreamsResponse [Text]
+lsrsStreamNames = lens _lsrsStreamNames (\ s a -> s{_lsrsStreamNames = a}) . _Coerce;
 
-instance AWSPager ListStreams where
-    page rq rs
-        | stop (rs ^. lsrHasMoreStreams) = Nothing
-        | otherwise = Just $ rq
-            & lsExclusiveStartStreamName .~ rs ^. index lsrStreamNames (to id)
+-- | If set to 'true', there are more streams available to list.
+lsrsHasMoreStreams :: Lens' ListStreamsResponse Bool
+lsrsHasMoreStreams = lens _lsrsHasMoreStreams (\ s a -> s{_lsrsHasMoreStreams = a});
diff --git a/gen/Network/AWS/Kinesis/ListTagsForStream.hs b/gen/Network/AWS/Kinesis/ListTagsForStream.hs
--- a/gen/Network/AWS/Kinesis/ListTagsForStream.hs
+++ b/gen/Network/AWS/Kinesis/ListTagsForStream.hs
@@ -1,148 +1,168 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.Kinesis.ListTagsForStream
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- 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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Lists the tags for the specified Amazon Kinesis stream.
+-- Lists the tags for the specified Amazon Kinesis stream.
 --
--- <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_ListTagsForStream.html>
+-- /See:/ <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_ListTagsForStream.html AWS API Reference> for ListTagsForStream.
 module Network.AWS.Kinesis.ListTagsForStream
     (
-    -- * Request
-      ListTagsForStream
-    -- ** Request constructor
-    , listTagsForStream
-    -- ** Request lenses
-    , ltfsExclusiveStartTagKey
+    -- * Creating a Request
+      listTagsForStream
+    , ListTagsForStream
+    -- * Request Lenses
     , ltfsLimit
+    , ltfsExclusiveStartTagKey
     , ltfsStreamName
 
-    -- * Response
-    , ListTagsForStreamResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listTagsForStreamResponse
-    -- ** Response lenses
-    , ltfsrHasMoreTags
-    , ltfsrTags
+    , ListTagsForStreamResponse
+    -- * Response Lenses
+    , ltfsrsStatus
+    , ltfsrsTags
+    , ltfsrsHasMoreTags
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Kinesis.Types
-import qualified GHC.Exts
-
-data ListTagsForStream = ListTagsForStream
-    { _ltfsExclusiveStartTagKey :: Maybe Text
-    , _ltfsLimit                :: Maybe Nat
-    , _ltfsStreamName           :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Kinesis.Types
+import           Network.AWS.Kinesis.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'ListTagsForStream' constructor.
+-- | Represents the input for 'ListTagsForStream'.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listTagsForStream' smart constructor.
+data ListTagsForStream = ListTagsForStream'
+    { _ltfsLimit                :: !(Maybe Nat)
+    , _ltfsExclusiveStartTagKey :: !(Maybe Text)
+    , _ltfsStreamName           :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTagsForStream' with the minimum fields required to make a request.
 --
--- * 'ltfsExclusiveStartTagKey' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ltfsLimit' @::@ 'Maybe' 'Natural'
+-- * 'ltfsLimit'
 --
--- * 'ltfsStreamName' @::@ 'Text'
+-- * 'ltfsExclusiveStartTagKey'
 --
-listTagsForStream :: Text -- ^ 'ltfsStreamName'
-                  -> ListTagsForStream
-listTagsForStream p1 = ListTagsForStream
-    { _ltfsStreamName           = p1
+-- * 'ltfsStreamName'
+listTagsForStream
+    :: Text -- ^ 'ltfsStreamName'
+    -> ListTagsForStream
+listTagsForStream pStreamName_ =
+    ListTagsForStream'
+    { _ltfsLimit = Nothing
     , _ltfsExclusiveStartTagKey = Nothing
-    , _ltfsLimit                = Nothing
+    , _ltfsStreamName = pStreamName_
     }
 
--- | The key to use as the starting point for the list of tags. If this parameter
--- is set, 'ListTagsForStream' gets all tags that occur after 'ExclusiveStartTagKey'.
-ltfsExclusiveStartTagKey :: Lens' ListTagsForStream (Maybe Text)
-ltfsExclusiveStartTagKey =
-    lens _ltfsExclusiveStartTagKey
-        (\s a -> s { _ltfsExclusiveStartTagKey = a })
-
--- | The number of tags to return. If this number is less than the total number of
--- tags associated with the stream, 'HasMoreTags' is set to 'true'. To list
--- additional tags, set 'ExclusiveStartTagKey' to the last key in the response.
+-- | The number of tags to return. If this number is less than the total
+-- number of tags associated with the stream, 'HasMoreTags' is set to
+-- 'true'. To list additional tags, set 'ExclusiveStartTagKey' to the last
+-- key in the response.
 ltfsLimit :: Lens' ListTagsForStream (Maybe Natural)
-ltfsLimit = lens _ltfsLimit (\s a -> s { _ltfsLimit = a }) . mapping _Nat
+ltfsLimit = lens _ltfsLimit (\ s a -> s{_ltfsLimit = a}) . mapping _Nat;
 
+-- | The key to use as the starting point for the list of tags. If this
+-- parameter is set, 'ListTagsForStream' gets all tags that occur after
+-- 'ExclusiveStartTagKey'.
+ltfsExclusiveStartTagKey :: Lens' ListTagsForStream (Maybe Text)
+ltfsExclusiveStartTagKey = lens _ltfsExclusiveStartTagKey (\ s a -> s{_ltfsExclusiveStartTagKey = a});
+
 -- | The name of the stream.
 ltfsStreamName :: Lens' ListTagsForStream Text
-ltfsStreamName = lens _ltfsStreamName (\s a -> s { _ltfsStreamName = a })
-
-data ListTagsForStreamResponse = ListTagsForStreamResponse
-    { _ltfsrHasMoreTags :: Bool
-    , _ltfsrTags        :: List "Tags" Tag
-    } deriving (Eq, Read, Show)
+ltfsStreamName = lens _ltfsStreamName (\ s a -> s{_ltfsStreamName = a});
 
--- | 'ListTagsForStreamResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ltfsrHasMoreTags' @::@ 'Bool'
---
--- * 'ltfsrTags' @::@ ['Tag']
---
-listTagsForStreamResponse :: Bool -- ^ 'ltfsrHasMoreTags'
-                          -> ListTagsForStreamResponse
-listTagsForStreamResponse p1 = ListTagsForStreamResponse
-    { _ltfsrHasMoreTags = p1
-    , _ltfsrTags        = mempty
-    }
+instance AWSRequest ListTagsForStream where
+        type Sv ListTagsForStream = Kinesis
+        type Rs ListTagsForStream = ListTagsForStreamResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListTagsForStreamResponse' <$>
+                   (pure (fromEnum s)) <*> (x .?> "Tags" .!@ mempty) <*>
+                     (x .:> "HasMoreTags"))
 
--- | If set to 'true', more tags are available. To request additional tags, set 'ExclusiveStartTagKey' to the key of the last tag returned.
-ltfsrHasMoreTags :: Lens' ListTagsForStreamResponse Bool
-ltfsrHasMoreTags = lens _ltfsrHasMoreTags (\s a -> s { _ltfsrHasMoreTags = a })
+instance ToHeaders ListTagsForStream where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Kinesis_20131202.ListTagsForStream" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | A list of tags associated with 'StreamName', starting with the first tag after 'ExclusiveStartTagKey' and up to the specified 'Limit'.
-ltfsrTags :: Lens' ListTagsForStreamResponse [Tag]
-ltfsrTags = lens _ltfsrTags (\s a -> s { _ltfsrTags = a }) . _List
+instance ToJSON ListTagsForStream where
+        toJSON ListTagsForStream'{..}
+          = object
+              ["Limit" .= _ltfsLimit,
+               "ExclusiveStartTagKey" .= _ltfsExclusiveStartTagKey,
+               "StreamName" .= _ltfsStreamName]
 
 instance ToPath ListTagsForStream where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery ListTagsForStream where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders ListTagsForStream
+-- | Represents the output for 'ListTagsForStream'.
+--
+-- /See:/ 'listTagsForStreamResponse' smart constructor.
+data ListTagsForStreamResponse = ListTagsForStreamResponse'
+    { _ltfsrsStatus      :: !Int
+    , _ltfsrsTags        :: ![Tag]
+    , _ltfsrsHasMoreTags :: !Bool
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON ListTagsForStream where
-    toJSON ListTagsForStream{..} = object
-        [ "StreamName"           .= _ltfsStreamName
-        , "ExclusiveStartTagKey" .= _ltfsExclusiveStartTagKey
-        , "Limit"                .= _ltfsLimit
-        ]
+-- | Creates a value of 'ListTagsForStreamResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltfsrsStatus'
+--
+-- * 'ltfsrsTags'
+--
+-- * 'ltfsrsHasMoreTags'
+listTagsForStreamResponse
+    :: Int -- ^ 'ltfsrsStatus'
+    -> Bool -- ^ 'ltfsrsHasMoreTags'
+    -> ListTagsForStreamResponse
+listTagsForStreamResponse pStatus_ pHasMoreTags_ =
+    ListTagsForStreamResponse'
+    { _ltfsrsStatus = pStatus_
+    , _ltfsrsTags = mempty
+    , _ltfsrsHasMoreTags = pHasMoreTags_
+    }
 
-instance AWSRequest ListTagsForStream where
-    type Sv ListTagsForStream = Kinesis
-    type Rs ListTagsForStream = ListTagsForStreamResponse
+-- | The response status code.
+ltfsrsStatus :: Lens' ListTagsForStreamResponse Int
+ltfsrsStatus = lens _ltfsrsStatus (\ s a -> s{_ltfsrsStatus = a});
 
-    request  = post "ListTagsForStream"
-    response = jsonResponse
+-- | A list of tags associated with 'StreamName', starting with the first tag
+-- after 'ExclusiveStartTagKey' and up to the specified 'Limit'.
+ltfsrsTags :: Lens' ListTagsForStreamResponse [Tag]
+ltfsrsTags = lens _ltfsrsTags (\ s a -> s{_ltfsrsTags = a}) . _Coerce;
 
-instance FromJSON ListTagsForStreamResponse where
-    parseJSON = withObject "ListTagsForStreamResponse" $ \o -> ListTagsForStreamResponse
-        <$> o .:  "HasMoreTags"
-        <*> o .:? "Tags" .!= mempty
+-- | If set to 'true', more tags are available. To request additional tags,
+-- set 'ExclusiveStartTagKey' to the key of the last tag returned.
+ltfsrsHasMoreTags :: Lens' ListTagsForStreamResponse Bool
+ltfsrsHasMoreTags = lens _ltfsrsHasMoreTags (\ s a -> s{_ltfsrsHasMoreTags = a});
diff --git a/gen/Network/AWS/Kinesis/MergeShards.hs b/gen/Network/AWS/Kinesis/MergeShards.hs
--- a/gen/Network/AWS/Kinesis/MergeShards.hs
+++ b/gen/Network/AWS/Kinesis/MergeShards.hs
@@ -1,145 +1,164 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.Kinesis.MergeShards
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- 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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Merges two adjacent shards in a stream and combines them into a single shard
--- to reduce the stream's capacity to ingest and transport data. Two shards are
--- considered adjacent if the union of the hash key ranges for the two shards
--- form a contiguous set with no gaps. For example, if you have two shards, one
--- with a hash key range of 276...381 and the other with a hash key range of
--- 382...454, then you could merge these two shards into a single shard that
--- would have a hash key range of 276...454. After the merge, the single child
--- shard receives data for all hash key values covered by the two parent shards.
+-- Merges two adjacent shards in a stream and combines them into a single
+-- shard to reduce the stream\'s capacity to ingest and transport data. Two
+-- shards are considered adjacent if the union of the hash key ranges for
+-- the two shards form a contiguous set with no gaps. For example, if you
+-- have two shards, one with a hash key range of 276...381 and the other
+-- with a hash key range of 382...454, then you could merge these two
+-- shards into a single shard that would have a hash key range of
+-- 276...454. After the merge, the single child shard receives data for all
+-- hash key values covered by the two parent shards.
 --
--- 'MergeShards' is called when there is a need to reduce the overall capacity of
--- a stream because of excess capacity that is not being used. You must specify
--- the shard to be merged and the adjacent shard for a stream. For more
--- information about merging shards, see <http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-using-sdk-java-resharding-merge.html Merge Two Shards> in the /Amazon KinesisDeveloper Guide/.
+-- 'MergeShards' is called when there is a need to reduce the overall
+-- capacity of a stream because of excess capacity that is not being used.
+-- You must specify the shard to be merged and the adjacent shard for a
+-- stream. For more information about merging shards, see
+-- <http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-using-sdk-java-resharding-merge.html Merge Two Shards>
+-- in the /Amazon Kinesis Developer Guide/.
 --
--- If the stream is in the 'ACTIVE' state, you can call 'MergeShards'. If a stream
--- is in the 'CREATING', 'UPDATING', or 'DELETING' state, 'MergeShards' returns a 'ResourceInUseException'. If the specified stream does not exist, 'MergeShards' returns a 'ResourceNotFoundException'.
+-- If the stream is in the 'ACTIVE' state, you can call 'MergeShards'. If a
+-- stream is in the 'CREATING', 'UPDATING', or 'DELETING' state,
+-- 'MergeShards' returns a 'ResourceInUseException'. If the specified
+-- stream does not exist, 'MergeShards' returns a
+-- 'ResourceNotFoundException'.
 --
--- You can use 'DescribeStream' to check the state of the stream, which is
+-- You can use DescribeStream to check the state of the stream, which is
 -- returned in 'StreamStatus'.
 --
--- 'MergeShards' is an asynchronous operation. Upon receiving a 'MergeShards'
--- request, Amazon Kinesis immediately returns a response and sets the 'StreamStatus' to 'UPDATING'. After the operation is completed, Amazon Kinesis sets the 'StreamStatus' to 'ACTIVE'. Read and write operations continue to work while the stream is in
--- the 'UPDATING' state.
+-- 'MergeShards' is an asynchronous operation. Upon receiving a
+-- 'MergeShards' request, Amazon Kinesis immediately returns a response and
+-- sets the 'StreamStatus' to 'UPDATING'. After the operation is completed,
+-- Amazon Kinesis sets the 'StreamStatus' to 'ACTIVE'. Read and write
+-- operations continue to work while the stream is in the 'UPDATING' state.
 --
--- You use 'DescribeStream' to determine the shard IDs that are specified in the 'MergeShards' request.
+-- You use DescribeStream to determine the shard IDs that are specified in
+-- the 'MergeShards' request.
 --
--- If you try to operate on too many streams in parallel using 'CreateStream', 'DeleteStream', 'MergeShards' or 'SplitShard', you will receive a 'LimitExceededException'.
+-- If you try to operate on too many streams in parallel using
+-- CreateStream, DeleteStream, 'MergeShards' or SplitShard, you will
+-- receive a 'LimitExceededException'.
 --
 -- 'MergeShards' has limit of 5 transactions per second per account.
 --
--- <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_MergeShards.html>
+-- /See:/ <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_MergeShards.html AWS API Reference> for MergeShards.
 module Network.AWS.Kinesis.MergeShards
     (
-    -- * Request
-      MergeShards
-    -- ** Request constructor
-    , mergeShards
-    -- ** Request lenses
-    , msAdjacentShardToMerge
-    , msShardToMerge
+    -- * Creating a Request
+      mergeShards
+    , MergeShards
+    -- * Request Lenses
     , msStreamName
+    , msShardToMerge
+    , msAdjacentShardToMerge
 
-    -- * Response
-    , MergeShardsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , mergeShardsResponse
+    , MergeShardsResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Kinesis.Types
-import qualified GHC.Exts
-
-data MergeShards = MergeShards
-    { _msAdjacentShardToMerge :: Text
-    , _msShardToMerge         :: Text
-    , _msStreamName           :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Kinesis.Types
+import           Network.AWS.Kinesis.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'MergeShards' constructor.
+-- | Represents the input for 'MergeShards'.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'mergeShards' smart constructor.
+data MergeShards = MergeShards'
+    { _msStreamName           :: !Text
+    , _msShardToMerge         :: !Text
+    , _msAdjacentShardToMerge :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MergeShards' with the minimum fields required to make a request.
 --
--- * 'msAdjacentShardToMerge' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'msShardToMerge' @::@ 'Text'
+-- * 'msStreamName'
 --
--- * 'msStreamName' @::@ 'Text'
+-- * 'msShardToMerge'
 --
-mergeShards :: Text -- ^ 'msStreamName'
-            -> Text -- ^ 'msShardToMerge'
-            -> Text -- ^ 'msAdjacentShardToMerge'
-            -> MergeShards
-mergeShards p1 p2 p3 = MergeShards
-    { _msStreamName           = p1
-    , _msShardToMerge         = p2
-    , _msAdjacentShardToMerge = p3
+-- * 'msAdjacentShardToMerge'
+mergeShards
+    :: Text -- ^ 'msStreamName'
+    -> Text -- ^ 'msShardToMerge'
+    -> Text -- ^ 'msAdjacentShardToMerge'
+    -> MergeShards
+mergeShards pStreamName_ pShardToMerge_ pAdjacentShardToMerge_ =
+    MergeShards'
+    { _msStreamName = pStreamName_
+    , _msShardToMerge = pShardToMerge_
+    , _msAdjacentShardToMerge = pAdjacentShardToMerge_
     }
 
--- | The shard ID of the adjacent shard for the merge.
-msAdjacentShardToMerge :: Lens' MergeShards Text
-msAdjacentShardToMerge =
-    lens _msAdjacentShardToMerge (\s a -> s { _msAdjacentShardToMerge = a })
+-- | The name of the stream for the merge.
+msStreamName :: Lens' MergeShards Text
+msStreamName = lens _msStreamName (\ s a -> s{_msStreamName = a});
 
--- | The shard ID of the shard to combine with the adjacent shard for the merge.
+-- | The shard ID of the shard to combine with the adjacent shard for the
+-- merge.
 msShardToMerge :: Lens' MergeShards Text
-msShardToMerge = lens _msShardToMerge (\s a -> s { _msShardToMerge = a })
+msShardToMerge = lens _msShardToMerge (\ s a -> s{_msShardToMerge = a});
 
--- | The name of the stream for the merge.
-msStreamName :: Lens' MergeShards Text
-msStreamName = lens _msStreamName (\s a -> s { _msStreamName = a })
+-- | The shard ID of the adjacent shard for the merge.
+msAdjacentShardToMerge :: Lens' MergeShards Text
+msAdjacentShardToMerge = lens _msAdjacentShardToMerge (\ s a -> s{_msAdjacentShardToMerge = a});
 
-data MergeShardsResponse = MergeShardsResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest MergeShards where
+        type Sv MergeShards = Kinesis
+        type Rs MergeShards = MergeShardsResponse
+        request = postJSON
+        response = receiveNull MergeShardsResponse'
 
--- | 'MergeShardsResponse' constructor.
-mergeShardsResponse :: MergeShardsResponse
-mergeShardsResponse = MergeShardsResponse
+instance ToHeaders MergeShards where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Kinesis_20131202.MergeShards" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON MergeShards where
+        toJSON MergeShards'{..}
+          = object
+              ["StreamName" .= _msStreamName,
+               "ShardToMerge" .= _msShardToMerge,
+               "AdjacentShardToMerge" .= _msAdjacentShardToMerge]
+
 instance ToPath MergeShards where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery MergeShards where
-    toQuery = const mempty
-
-instance ToHeaders MergeShards
-
-instance ToJSON MergeShards where
-    toJSON MergeShards{..} = object
-        [ "StreamName"           .= _msStreamName
-        , "ShardToMerge"         .= _msShardToMerge
-        , "AdjacentShardToMerge" .= _msAdjacentShardToMerge
-        ]
+        toQuery = const mempty
 
-instance AWSRequest MergeShards where
-    type Sv MergeShards = Kinesis
-    type Rs MergeShards = MergeShardsResponse
+-- | /See:/ 'mergeShardsResponse' smart constructor.
+data MergeShardsResponse =
+    MergeShardsResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "MergeShards"
-    response = nullResponse MergeShardsResponse
+-- | Creates a value of 'MergeShardsResponse' with the minimum fields required to make a request.
+--
+mergeShardsResponse
+    :: MergeShardsResponse
+mergeShardsResponse = MergeShardsResponse'
diff --git a/gen/Network/AWS/Kinesis/PutRecord.hs b/gen/Network/AWS/Kinesis/PutRecord.hs
--- a/gen/Network/AWS/Kinesis/PutRecord.hs
+++ b/gen/Network/AWS/Kinesis/PutRecord.hs
@@ -1,222 +1,244 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.Kinesis.PutRecord
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- 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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Puts (writes) a single data record from a producer into an Amazon Kinesis
--- stream. Call 'PutRecord' to send data from the producer into the Amazon Kinesis
--- stream for real-time ingestion and subsequent processing, one record at a
--- time. Each shard can support up to 1000 records written per second, up to a
--- maximum total of 1 MB data written per second.
+-- Puts (writes) a single data record from a producer into an Amazon
+-- Kinesis stream. Call 'PutRecord' to send data from the producer into the
+-- Amazon Kinesis stream for real-time ingestion and subsequent processing,
+-- one record at a time. Each shard can support up to 1000 records written
+-- per second, up to a maximum total of 1 MB data written per second.
 --
 -- You must specify the name of the stream that captures, stores, and
 -- transports the data; a partition key; and the data blob itself.
 --
 -- The data blob can be any type of data; for example, a segment from a log
--- file, geographic/location data, website clickstream data, and so on.
+-- file, geographic\/location data, website clickstream data, and so on.
 --
 -- The partition key is used by Amazon Kinesis to distribute data across
 -- shards. Amazon Kinesis segregates the data records that belong to a data
--- stream into multiple shards, using the partition key associated with each
--- data record to determine which shard a given data record belongs to.
+-- stream into multiple shards, using the partition key associated with
+-- each data record to determine which shard a given data record belongs
+-- to.
 --
 -- Partition keys are Unicode strings, with a maximum length limit of 256
--- characters for each key. An MD5 hash function is used to map partition keys
--- to 128-bit integer values and to map associated data records to shards using
--- the hash key ranges of the shards. You can override hashing the partition key
--- to determine the shard by explicitly specifying a hash value using the 'ExplicitHashKey' parameter. For more information, see <http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-using-sdk-java-add-data-to-stream.html Adding Data to a Stream> in the /AmazonKinesis Developer Guide/.
+-- characters for each key. An MD5 hash function is used to map partition
+-- keys to 128-bit integer values and to map associated data records to
+-- shards using the hash key ranges of the shards. You can override hashing
+-- the partition key to determine the shard by explicitly specifying a hash
+-- value using the 'ExplicitHashKey' parameter. For more information, see
+-- <http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-using-sdk-java-add-data-to-stream.html Adding Data to a Stream>
+-- in the /Amazon Kinesis Developer Guide/.
 --
--- 'PutRecord' returns the shard ID of where the data record was placed and the
--- sequence number that was assigned to the data record.
+-- 'PutRecord' returns the shard ID of where the data record was placed and
+-- the sequence number that was assigned to the data record.
 --
 -- Sequence numbers generally increase over time. To guarantee strictly
--- increasing ordering, use the 'SequenceNumberForOrdering' parameter. For more
--- information, see <http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-using-sdk-java-add-data-to-stream.html Adding Data to a Stream> in the /Amazon Kinesis Developer Guide/
--- .
+-- increasing ordering, use the 'SequenceNumberForOrdering' parameter. For
+-- more information, see
+-- <http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-using-sdk-java-add-data-to-stream.html Adding Data to a Stream>
+-- in the /Amazon Kinesis Developer Guide/.
 --
 -- If a 'PutRecord' request cannot be processed because of insufficient
--- provisioned throughput on the shard involved in the request, 'PutRecord' throws 'ProvisionedThroughputExceededException'.
+-- provisioned throughput on the shard involved in the request, 'PutRecord'
+-- throws 'ProvisionedThroughputExceededException'.
 --
--- Data records are accessible for only 24 hours from the time that they are
--- added to an Amazon Kinesis stream.
+-- Data records are accessible for only 24 hours from the time that they
+-- are added to an Amazon Kinesis stream.
 --
--- <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html>
+-- /See:/ <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html AWS API Reference> for PutRecord.
 module Network.AWS.Kinesis.PutRecord
     (
-    -- * Request
-      PutRecord
-    -- ** Request constructor
-    , putRecord
-    -- ** Request lenses
-    , prData
+    -- * Creating a Request
+      putRecord
+    , PutRecord
+    -- * Request Lenses
     , prExplicitHashKey
-    , prPartitionKey
     , prSequenceNumberForOrdering
     , prStreamName
+    , prData
+    , prPartitionKey
 
-    -- * Response
-    , PutRecordResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , putRecordResponse
-    -- ** Response lenses
-    , prrSequenceNumber
-    , prrShardId
+    , PutRecordResponse
+    -- * Response Lenses
+    , prrsStatus
+    , prrsShardId
+    , prrsSequenceNumber
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Kinesis.Types
-import qualified GHC.Exts
-
-data PutRecord = PutRecord
-    { _prData                      :: Base64
-    , _prExplicitHashKey           :: Maybe Text
-    , _prPartitionKey              :: Text
-    , _prSequenceNumberForOrdering :: Maybe Text
-    , _prStreamName                :: Text
-    } deriving (Eq, Read, Show)
+import           Network.AWS.Kinesis.Types
+import           Network.AWS.Kinesis.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'PutRecord' constructor.
+-- | Represents the input for 'PutRecord'.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'putRecord' smart constructor.
+data PutRecord = PutRecord'
+    { _prExplicitHashKey           :: !(Maybe Text)
+    , _prSequenceNumberForOrdering :: !(Maybe Text)
+    , _prStreamName                :: !Text
+    , _prData                      :: !Base64
+    , _prPartitionKey              :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutRecord' with the minimum fields required to make a request.
 --
--- * 'prData' @::@ 'Base64'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'prExplicitHashKey' @::@ 'Maybe' 'Text'
+-- * 'prExplicitHashKey'
 --
--- * 'prPartitionKey' @::@ 'Text'
+-- * 'prSequenceNumberForOrdering'
 --
--- * 'prSequenceNumberForOrdering' @::@ 'Maybe' 'Text'
+-- * 'prStreamName'
 --
--- * 'prStreamName' @::@ 'Text'
+-- * 'prData'
 --
-putRecord :: Text -- ^ 'prStreamName'
-          -> Base64 -- ^ 'prData'
-          -> Text -- ^ 'prPartitionKey'
-          -> PutRecord
-putRecord p1 p2 p3 = PutRecord
-    { _prStreamName                = p1
-    , _prData                      = p2
-    , _prPartitionKey              = p3
-    , _prExplicitHashKey           = Nothing
+-- * 'prPartitionKey'
+putRecord
+    :: Text -- ^ 'prStreamName'
+    -> ByteString -- ^ 'prData'
+    -> Text -- ^ 'prPartitionKey'
+    -> PutRecord
+putRecord pStreamName_ pData_ pPartitionKey_ =
+    PutRecord'
+    { _prExplicitHashKey = Nothing
     , _prSequenceNumberForOrdering = Nothing
+    , _prStreamName = pStreamName_
+    , _prData = _Base64 # pData_
+    , _prPartitionKey = pPartitionKey_
     }
 
--- | The data blob to put into the record, which is base64-encoded when the blob
--- is serialized. The maximum size of the data blob (the payload before
--- base64-encoding) is 50 kilobytes (KB)
-prData :: Lens' PutRecord Base64
-prData = lens _prData (\s a -> s { _prData = a })
-
 -- | The hash value used to explicitly determine the shard the data record is
 -- assigned to by overriding the partition key hash.
 prExplicitHashKey :: Lens' PutRecord (Maybe Text)
-prExplicitHashKey =
-    lens _prExplicitHashKey (\s a -> s { _prExplicitHashKey = a })
-
--- | Determines which shard in the stream the data record is assigned to.
--- Partition keys are Unicode strings with a maximum length limit of 256
--- characters for each key. Amazon Kinesis uses the partition key as input to a
--- hash function that maps the partition key and associated data to a specific
--- shard. Specifically, an MD5 hash function is used to map partition keys to
--- 128-bit integer values and to map associated data records to shards. As a
--- result of this hashing mechanism, all data records with the same partition
--- key will map to the same shard within the stream.
-prPartitionKey :: Lens' PutRecord Text
-prPartitionKey = lens _prPartitionKey (\s a -> s { _prPartitionKey = a })
+prExplicitHashKey = lens _prExplicitHashKey (\ s a -> s{_prExplicitHashKey = a});
 
 -- | Guarantees strictly increasing sequence numbers, for puts from the same
--- client and to the same partition key. Usage: set the 'SequenceNumberForOrdering'
--- of record /n/ to the sequence number of record /n-1/ (as returned in the result
--- when putting record /n-1/). If this parameter is not set, records will be
--- coarsely ordered based on arrival time.
+-- client and to the same partition key. Usage: set the
+-- 'SequenceNumberForOrdering' of record /n/ to the sequence number of
+-- record /n-1/ (as returned in the result when putting record /n-1/). If
+-- this parameter is not set, records will be coarsely ordered based on
+-- arrival time.
 prSequenceNumberForOrdering :: Lens' PutRecord (Maybe Text)
-prSequenceNumberForOrdering =
-    lens _prSequenceNumberForOrdering
-        (\s a -> s { _prSequenceNumberForOrdering = a })
+prSequenceNumberForOrdering = lens _prSequenceNumberForOrdering (\ s a -> s{_prSequenceNumberForOrdering = a});
 
 -- | The name of the stream to put the data record into.
 prStreamName :: Lens' PutRecord Text
-prStreamName = lens _prStreamName (\s a -> s { _prStreamName = a })
+prStreamName = lens _prStreamName (\ s a -> s{_prStreamName = a});
 
-data PutRecordResponse = PutRecordResponse
-    { _prrSequenceNumber :: Text
-    , _prrShardId        :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | The data blob to put into the record, which is base64-encoded when the
+-- blob is serialized. The maximum size of the data blob (the payload
+-- before base64-encoding) is 50 kilobytes (KB)
+prData :: Lens' PutRecord ByteString
+prData = lens _prData (\ s a -> s{_prData = a}) . _Base64;
 
--- | 'PutRecordResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'prrSequenceNumber' @::@ 'Text'
---
--- * 'prrShardId' @::@ 'Text'
---
-putRecordResponse :: Text -- ^ 'prrShardId'
-                  -> Text -- ^ 'prrSequenceNumber'
-                  -> PutRecordResponse
-putRecordResponse p1 p2 = PutRecordResponse
-    { _prrShardId        = p1
-    , _prrSequenceNumber = p2
-    }
+-- | Determines which shard in the stream the data record is assigned to.
+-- Partition keys are Unicode strings with a maximum length limit of 256
+-- characters for each key. Amazon Kinesis uses the partition key as input
+-- to a hash function that maps the partition key and associated data to a
+-- specific shard. Specifically, an MD5 hash function is used to map
+-- partition keys to 128-bit integer values and to map associated data
+-- records to shards. As a result of this hashing mechanism, all data
+-- records with the same partition key will map to the same shard within
+-- the stream.
+prPartitionKey :: Lens' PutRecord Text
+prPartitionKey = lens _prPartitionKey (\ s a -> s{_prPartitionKey = a});
 
--- | The sequence number identifier that was assigned to the put data record. The
--- sequence number for the record is unique across all records in the stream. A
--- sequence number is the identifier associated with every record put into the
--- stream.
-prrSequenceNumber :: Lens' PutRecordResponse Text
-prrSequenceNumber =
-    lens _prrSequenceNumber (\s a -> s { _prrSequenceNumber = a })
+instance AWSRequest PutRecord where
+        type Sv PutRecord = Kinesis
+        type Rs PutRecord = PutRecordResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 PutRecordResponse' <$>
+                   (pure (fromEnum s)) <*> (x .:> "ShardId") <*>
+                     (x .:> "SequenceNumber"))
 
--- | The shard ID of the shard where the data record was placed.
-prrShardId :: Lens' PutRecordResponse Text
-prrShardId = lens _prrShardId (\s a -> s { _prrShardId = a })
+instance ToHeaders PutRecord where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Kinesis_20131202.PutRecord" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON PutRecord where
+        toJSON PutRecord'{..}
+          = object
+              ["ExplicitHashKey" .= _prExplicitHashKey,
+               "SequenceNumberForOrdering" .=
+                 _prSequenceNumberForOrdering,
+               "StreamName" .= _prStreamName, "Data" .= _prData,
+               "PartitionKey" .= _prPartitionKey]
+
 instance ToPath PutRecord where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery PutRecord where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders PutRecord
+-- | Represents the output for 'PutRecord'.
+--
+-- /See:/ 'putRecordResponse' smart constructor.
+data PutRecordResponse = PutRecordResponse'
+    { _prrsStatus         :: !Int
+    , _prrsShardId        :: !Text
+    , _prrsSequenceNumber :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON PutRecord where
-    toJSON PutRecord{..} = object
-        [ "StreamName"                .= _prStreamName
-        , "Data"                      .= _prData
-        , "PartitionKey"              .= _prPartitionKey
-        , "ExplicitHashKey"           .= _prExplicitHashKey
-        , "SequenceNumberForOrdering" .= _prSequenceNumberForOrdering
-        ]
+-- | Creates a value of 'PutRecordResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prrsStatus'
+--
+-- * 'prrsShardId'
+--
+-- * 'prrsSequenceNumber'
+putRecordResponse
+    :: Int -- ^ 'prrsStatus'
+    -> Text -- ^ 'prrsShardId'
+    -> Text -- ^ 'prrsSequenceNumber'
+    -> PutRecordResponse
+putRecordResponse pStatus_ pShardId_ pSequenceNumber_ =
+    PutRecordResponse'
+    { _prrsStatus = pStatus_
+    , _prrsShardId = pShardId_
+    , _prrsSequenceNumber = pSequenceNumber_
+    }
 
-instance AWSRequest PutRecord where
-    type Sv PutRecord = Kinesis
-    type Rs PutRecord = PutRecordResponse
+-- | The response status code.
+prrsStatus :: Lens' PutRecordResponse Int
+prrsStatus = lens _prrsStatus (\ s a -> s{_prrsStatus = a});
 
-    request  = post "PutRecord"
-    response = jsonResponse
+-- | The shard ID of the shard where the data record was placed.
+prrsShardId :: Lens' PutRecordResponse Text
+prrsShardId = lens _prrsShardId (\ s a -> s{_prrsShardId = a});
 
-instance FromJSON PutRecordResponse where
-    parseJSON = withObject "PutRecordResponse" $ \o -> PutRecordResponse
-        <$> o .:  "SequenceNumber"
-        <*> o .:  "ShardId"
+-- | The sequence number identifier that was assigned to the put data record.
+-- The sequence number for the record is unique across all records in the
+-- stream. A sequence number is the identifier associated with every record
+-- put into the stream.
+prrsSequenceNumber :: Lens' PutRecordResponse Text
+prrsSequenceNumber = lens _prrsSequenceNumber (\ s a -> s{_prrsSequenceNumber = a});
diff --git a/gen/Network/AWS/Kinesis/PutRecords.hs b/gen/Network/AWS/Kinesis/PutRecords.hs
--- a/gen/Network/AWS/Kinesis/PutRecords.hs
+++ b/gen/Network/AWS/Kinesis/PutRecords.hs
@@ -1,186 +1,216 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.Kinesis.PutRecords
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- 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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Puts (writes) multiple data records from a producer into an Amazon Kinesis
--- stream in a single call (also referred to as a 'PutRecords' request). Use this
--- operation to send data from a data producer into the Amazon Kinesis stream
--- for real-time ingestion and processing. Each shard can support up to 1000
--- records written per second, up to a maximum total of 1 MB data written per
--- second.
+-- Puts (writes) multiple data records from a producer into an Amazon
+-- Kinesis stream in a single call (also referred to as a 'PutRecords'
+-- request). Use this operation to send data from a data producer into the
+-- Amazon Kinesis stream for real-time ingestion and processing. Each shard
+-- can support up to 1000 records written per second, up to a maximum total
+-- of 1 MB data written per second.
 --
 -- You must specify the name of the stream that captures, stores, and
--- transports the data; and an array of request 'Records', with each record in the
--- array requiring a partition key and data blob.
+-- transports the data; and an array of request 'Records', with each record
+-- in the array requiring a partition key and data blob.
 --
 -- The data blob can be any type of data; for example, a segment from a log
--- file, geographic/location data, website clickstream data, and so on.
+-- file, geographic\/location data, website clickstream data, and so on.
 --
--- The partition key is used by Amazon Kinesis as input to a hash function that
--- maps the partition key and associated data to a specific shard. An MD5 hash
--- function is used to map partition keys to 128-bit integer values and to map
--- associated data records to shards. As a result of this hashing mechanism, all
--- data records with the same partition key map to the same shard within the
--- stream. For more information, see <http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-using-sdk-java-add-data-to-stream.html Adding Data to a Stream> in the /AmazonKinesis Developer Guide/.
+-- The partition key is used by Amazon Kinesis as input to a hash function
+-- that maps the partition key and associated data to a specific shard. An
+-- MD5 hash function is used to map partition keys to 128-bit integer
+-- values and to map associated data records to shards. As a result of this
+-- hashing mechanism, all data records with the same partition key map to
+-- the same shard within the stream. For more information, see
+-- <http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-using-sdk-java-add-data-to-stream.html Adding Data to a Stream>
+-- in the /Amazon Kinesis Developer Guide/.
 --
--- Each record in the 'Records' array may include an optional parameter, 'ExplicitHashKey', which overrides the partition key to shard mapping. This parameter allows a
--- data producer to determine explicitly the shard where the record is stored.
--- For more information, see <http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-using-sdk-java-add-data-to-stream.html#kinesis-using-sdk-java-putrecords Adding Multiple Records with PutRecords> in the /Amazon Kinesis Developer Guide/.
+-- Each record in the 'Records' array may include an optional parameter,
+-- 'ExplicitHashKey', which overrides the partition key to shard mapping.
+-- This parameter allows a data producer to determine explicitly the shard
+-- where the record is stored. For more information, see
+-- <http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-using-sdk-java-add-data-to-stream.html#kinesis-using-sdk-java-putrecords Adding Multiple Records with PutRecords>
+-- in the /Amazon Kinesis Developer Guide/.
 --
--- The 'PutRecords' response includes an array of response 'Records'. Each record
--- in the response array directly correlates with a record in the request array
--- using natural ordering, from the top to the bottom of the request and
--- response. The response 'Records' array always includes the same number of
--- records as the request array.
+-- The 'PutRecords' response includes an array of response 'Records'. Each
+-- record in the response array directly correlates with a record in the
+-- request array using natural ordering, from the top to the bottom of the
+-- request and response. The response 'Records' array always includes the
+-- same number of records as the request array.
 --
--- The response 'Records' array includes both successfully and unsuccessfully
--- processed records. Amazon Kinesis attempts to process all records in each 'PutRecords' request. A single record failure does not stop the processing of subsequent
--- records.
+-- The response 'Records' array includes both successfully and
+-- unsuccessfully processed records. Amazon Kinesis attempts to process all
+-- records in each 'PutRecords' request. A single record failure does not
+-- stop the processing of subsequent records.
 --
--- A successfully-processed record includes 'ShardId' and 'SequenceNumber' values.
--- The 'ShardId' parameter identifies the shard in the stream where the record is
--- stored. The 'SequenceNumber' parameter is an identifier assigned to the put
--- record, unique to all records in the stream.
+-- A successfully-processed record includes 'ShardId' and 'SequenceNumber'
+-- values. The 'ShardId' parameter identifies the shard in the stream where
+-- the record is stored. The 'SequenceNumber' parameter is an identifier
+-- assigned to the put record, unique to all records in the stream.
 --
--- An unsuccessfully-processed record includes 'ErrorCode' and 'ErrorMessage'
--- values. 'ErrorCode' reflects the type of error and can be one of the following
--- values: 'ProvisionedThroughputExceededException' or 'InternalFailure'. 'ErrorMessage' provides more detailed information about the 'ProvisionedThroughputExceededException' exception including the account ID, stream name, and shard ID of the record
--- that was throttled. For more information about partially successful
--- responses, see <http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-using-sdk-java-add-data-to-stream.html#kinesis-using-sdk-java-putrecords Adding Multiple Records with PutRecords> in the /Amazon KinesisDeveloper Guide/.
+-- An unsuccessfully-processed record includes 'ErrorCode' and
+-- 'ErrorMessage' values. 'ErrorCode' reflects the type of error and can be
+-- one of the following values: 'ProvisionedThroughputExceededException' or
+-- 'InternalFailure'. 'ErrorMessage' provides more detailed information
+-- about the 'ProvisionedThroughputExceededException' exception including
+-- the account ID, stream name, and shard ID of the record that was
+-- throttled. For more information about partially successful responses,
+-- see
+-- <http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-using-sdk-java-add-data-to-stream.html#kinesis-using-sdk-java-putrecords Adding Multiple Records with PutRecords>
+-- in the /Amazon Kinesis Developer Guide/.
 --
--- Data records are accessible for only 24 hours from the time that they are
--- added to an Amazon Kinesis stream.
+-- Data records are accessible for only 24 hours from the time that they
+-- are added to an Amazon Kinesis stream.
 --
--- <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecords.html>
+-- /See:/ <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecords.html AWS API Reference> for PutRecords.
 module Network.AWS.Kinesis.PutRecords
     (
-    -- * Request
-      PutRecords
-    -- ** Request constructor
-    , putRecords
-    -- ** Request lenses
-    , pr1Records
-    , pr1StreamName
+    -- * Creating a Request
+      putRecords
+    , PutRecords
+    -- * Request Lenses
+    , pRecordEntries
+    , pStreamName
 
-    -- * Response
-    , PutRecordsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , putRecordsResponse
-    -- ** Response lenses
-    , prrFailedRecordCount
-    , prrRecords
+    , PutRecordsResponse
+    -- * Response Lenses
+    , prsFailedRecordCount
+    , prsStatus
+    , prsRecords
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Kinesis.Types
-import qualified GHC.Exts
-
-data PutRecords = PutRecords
-    { _pr1Records    :: List1 "Records" PutRecordsRequestEntry
-    , _pr1StreamName :: Text
-    } deriving (Eq, Read, Show)
+import           Network.AWS.Kinesis.Types
+import           Network.AWS.Kinesis.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'PutRecords' constructor.
+-- | A 'PutRecords' request.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'putRecords' smart constructor.
+data PutRecords = PutRecords'
+    { _pRecordEntries :: !(List1 PutRecordsRequestEntry)
+    , _pStreamName    :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutRecords' with the minimum fields required to make a request.
 --
--- * 'pr1Records' @::@ 'NonEmpty' 'PutRecordsRequestEntry'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pr1StreamName' @::@ 'Text'
+-- * 'pRecordEntries'
 --
-putRecords :: NonEmpty PutRecordsRequestEntry -- ^ 'pr1Records'
-           -> Text -- ^ 'pr1StreamName'
-           -> PutRecords
-putRecords p1 p2 = PutRecords
-    { _pr1Records    = withIso _List1 (const id) p1
-    , _pr1StreamName = p2
+-- * 'pStreamName'
+putRecords
+    :: NonEmpty PutRecordsRequestEntry -- ^ 'pRecordEntries'
+    -> Text -- ^ 'pStreamName'
+    -> PutRecords
+putRecords pRecordEntries_ pStreamName_ =
+    PutRecords'
+    { _pRecordEntries = _List1 # pRecordEntries_
+    , _pStreamName = pStreamName_
     }
 
 -- | The records associated with the request.
-pr1Records :: Lens' PutRecords (NonEmpty PutRecordsRequestEntry)
-pr1Records = lens _pr1Records (\s a -> s { _pr1Records = a }) . _List1
+pRecordEntries :: Lens' PutRecords (NonEmpty PutRecordsRequestEntry)
+pRecordEntries = lens _pRecordEntries (\ s a -> s{_pRecordEntries = a}) . _List1;
 
 -- | The stream name associated with the request.
-pr1StreamName :: Lens' PutRecords Text
-pr1StreamName = lens _pr1StreamName (\s a -> s { _pr1StreamName = a })
-
-data PutRecordsResponse = PutRecordsResponse
-    { _prrFailedRecordCount :: Maybe Nat
-    , _prrRecords           :: List1 "Records" PutRecordsResultEntry
-    } deriving (Eq, Read, Show)
+pStreamName :: Lens' PutRecords Text
+pStreamName = lens _pStreamName (\ s a -> s{_pStreamName = a});
 
--- | 'PutRecordsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'prrFailedRecordCount' @::@ 'Maybe' 'Natural'
---
--- * 'prrRecords' @::@ 'NonEmpty' 'PutRecordsResultEntry'
---
-putRecordsResponse :: NonEmpty PutRecordsResultEntry -- ^ 'prrRecords'
-                   -> PutRecordsResponse
-putRecordsResponse p1 = PutRecordsResponse
-    { _prrRecords           = withIso _List1 (const id) p1
-    , _prrFailedRecordCount = Nothing
-    }
+instance AWSRequest PutRecords where
+        type Sv PutRecords = Kinesis
+        type Rs PutRecords = PutRecordsResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 PutRecordsResponse' <$>
+                   (x .?> "FailedRecordCount") <*> (pure (fromEnum s))
+                     <*> (x .:> "Records"))
 
--- | The number of unsuccessfully processed records in a 'PutRecords' request.
-prrFailedRecordCount :: Lens' PutRecordsResponse (Maybe Natural)
-prrFailedRecordCount =
-    lens _prrFailedRecordCount (\s a -> s { _prrFailedRecordCount = a })
-        . mapping _Nat
+instance ToHeaders PutRecords where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Kinesis_20131202.PutRecords" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | An array of successfully and unsuccessfully processed record results,
--- correlated with the request by natural ordering. A record that is
--- successfully added to your Amazon Kinesis stream includes 'SequenceNumber' and 'ShardId' in the result. A record that fails to be added to your Amazon Kinesis stream
--- includes 'ErrorCode' and 'ErrorMessage' in the result.
-prrRecords :: Lens' PutRecordsResponse (NonEmpty PutRecordsResultEntry)
-prrRecords = lens _prrRecords (\s a -> s { _prrRecords = a }) . _List1
+instance ToJSON PutRecords where
+        toJSON PutRecords'{..}
+          = object
+              ["Records" .= _pRecordEntries,
+               "StreamName" .= _pStreamName]
 
 instance ToPath PutRecords where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery PutRecords where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders PutRecords
+-- | 'PutRecords' results.
+--
+-- /See:/ 'putRecordsResponse' smart constructor.
+data PutRecordsResponse = PutRecordsResponse'
+    { _prsFailedRecordCount :: !(Maybe Nat)
+    , _prsStatus            :: !Int
+    , _prsRecords           :: !(List1 PutRecordsResultEntry)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON PutRecords where
-    toJSON PutRecords{..} = object
-        [ "Records"    .= _pr1Records
-        , "StreamName" .= _pr1StreamName
-        ]
+-- | Creates a value of 'PutRecordsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prsFailedRecordCount'
+--
+-- * 'prsStatus'
+--
+-- * 'prsRecords'
+putRecordsResponse
+    :: Int -- ^ 'prsStatus'
+    -> NonEmpty PutRecordsResultEntry -- ^ 'prsRecords'
+    -> PutRecordsResponse
+putRecordsResponse pStatus_ pRecords_ =
+    PutRecordsResponse'
+    { _prsFailedRecordCount = Nothing
+    , _prsStatus = pStatus_
+    , _prsRecords = _List1 # pRecords_
+    }
 
-instance AWSRequest PutRecords where
-    type Sv PutRecords = Kinesis
-    type Rs PutRecords = PutRecordsResponse
+-- | The number of unsuccessfully processed records in a 'PutRecords'
+-- request.
+prsFailedRecordCount :: Lens' PutRecordsResponse (Maybe Natural)
+prsFailedRecordCount = lens _prsFailedRecordCount (\ s a -> s{_prsFailedRecordCount = a}) . mapping _Nat;
 
-    request  = post "PutRecords"
-    response = jsonResponse
+-- | The response status code.
+prsStatus :: Lens' PutRecordsResponse Int
+prsStatus = lens _prsStatus (\ s a -> s{_prsStatus = a});
 
-instance FromJSON PutRecordsResponse where
-    parseJSON = withObject "PutRecordsResponse" $ \o -> PutRecordsResponse
-        <$> o .:? "FailedRecordCount"
-        <*> o .:  "Records"
+-- | An array of successfully and unsuccessfully processed record results,
+-- correlated with the request by natural ordering. A record that is
+-- successfully added to your Amazon Kinesis stream includes
+-- 'SequenceNumber' and 'ShardId' in the result. A record that fails to be
+-- added to your Amazon Kinesis stream includes 'ErrorCode' and
+-- 'ErrorMessage' in the result.
+prsRecords :: Lens' PutRecordsResponse (NonEmpty PutRecordsResultEntry)
+prsRecords = lens _prsRecords (\ s a -> s{_prsRecords = a}) . _List1;
diff --git a/gen/Network/AWS/Kinesis/RemoveTagsFromStream.hs b/gen/Network/AWS/Kinesis/RemoveTagsFromStream.hs
--- a/gen/Network/AWS/Kinesis/RemoveTagsFromStream.hs
+++ b/gen/Network/AWS/Kinesis/RemoveTagsFromStream.hs
@@ -1,107 +1,117 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.Kinesis.RemoveTagsFromStream
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- 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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deletes tags from the specified Amazon Kinesis stream.
+-- Deletes tags from the specified Amazon Kinesis stream.
 --
 -- If you specify a tag that does not exist, it is ignored.
 --
--- <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_RemoveTagsFromStream.html>
+-- /See:/ <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_RemoveTagsFromStream.html AWS API Reference> for RemoveTagsFromStream.
 module Network.AWS.Kinesis.RemoveTagsFromStream
     (
-    -- * Request
-      RemoveTagsFromStream
-    -- ** Request constructor
-    , removeTagsFromStream
-    -- ** Request lenses
+    -- * Creating a Request
+      removeTagsFromStream
+    , RemoveTagsFromStream
+    -- * Request Lenses
     , rtfsStreamName
     , rtfsTagKeys
 
-    -- * Response
-    , RemoveTagsFromStreamResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , removeTagsFromStreamResponse
+    , RemoveTagsFromStreamResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Kinesis.Types
-import qualified GHC.Exts
-
-data RemoveTagsFromStream = RemoveTagsFromStream
-    { _rtfsStreamName :: Text
-    , _rtfsTagKeys    :: List1 "TagKeys" Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Kinesis.Types
+import           Network.AWS.Kinesis.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'RemoveTagsFromStream' constructor.
+-- | Represents the input for 'RemoveTagsFromStream'.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'removeTagsFromStream' smart constructor.
+data RemoveTagsFromStream = RemoveTagsFromStream'
+    { _rtfsStreamName :: !Text
+    , _rtfsTagKeys    :: !(List1 Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RemoveTagsFromStream' with the minimum fields required to make a request.
 --
--- * 'rtfsStreamName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'rtfsTagKeys' @::@ 'NonEmpty' 'Text'
+-- * 'rtfsStreamName'
 --
-removeTagsFromStream :: Text -- ^ 'rtfsStreamName'
-                     -> NonEmpty Text -- ^ 'rtfsTagKeys'
-                     -> RemoveTagsFromStream
-removeTagsFromStream p1 p2 = RemoveTagsFromStream
-    { _rtfsStreamName = p1
-    , _rtfsTagKeys    = withIso _List1 (const id) p2
+-- * 'rtfsTagKeys'
+removeTagsFromStream
+    :: Text -- ^ 'rtfsStreamName'
+    -> NonEmpty Text -- ^ 'rtfsTagKeys'
+    -> RemoveTagsFromStream
+removeTagsFromStream pStreamName_ pTagKeys_ =
+    RemoveTagsFromStream'
+    { _rtfsStreamName = pStreamName_
+    , _rtfsTagKeys = _List1 # pTagKeys_
     }
 
 -- | The name of the stream.
 rtfsStreamName :: Lens' RemoveTagsFromStream Text
-rtfsStreamName = lens _rtfsStreamName (\s a -> s { _rtfsStreamName = a })
+rtfsStreamName = lens _rtfsStreamName (\ s a -> s{_rtfsStreamName = a});
 
 -- | A list of tag keys. Each corresponding tag is removed from the stream.
 rtfsTagKeys :: Lens' RemoveTagsFromStream (NonEmpty Text)
-rtfsTagKeys = lens _rtfsTagKeys (\s a -> s { _rtfsTagKeys = a }) . _List1
+rtfsTagKeys = lens _rtfsTagKeys (\ s a -> s{_rtfsTagKeys = a}) . _List1;
 
-data RemoveTagsFromStreamResponse = RemoveTagsFromStreamResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest RemoveTagsFromStream where
+        type Sv RemoveTagsFromStream = Kinesis
+        type Rs RemoveTagsFromStream =
+             RemoveTagsFromStreamResponse
+        request = postJSON
+        response = receiveNull RemoveTagsFromStreamResponse'
 
--- | 'RemoveTagsFromStreamResponse' constructor.
-removeTagsFromStreamResponse :: RemoveTagsFromStreamResponse
-removeTagsFromStreamResponse = RemoveTagsFromStreamResponse
+instance ToHeaders RemoveTagsFromStream where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Kinesis_20131202.RemoveTagsFromStream" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON RemoveTagsFromStream where
+        toJSON RemoveTagsFromStream'{..}
+          = object
+              ["StreamName" .= _rtfsStreamName,
+               "TagKeys" .= _rtfsTagKeys]
+
 instance ToPath RemoveTagsFromStream where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery RemoveTagsFromStream where
-    toQuery = const mempty
-
-instance ToHeaders RemoveTagsFromStream
-
-instance ToJSON RemoveTagsFromStream where
-    toJSON RemoveTagsFromStream{..} = object
-        [ "StreamName" .= _rtfsStreamName
-        , "TagKeys"    .= _rtfsTagKeys
-        ]
+        toQuery = const mempty
 
-instance AWSRequest RemoveTagsFromStream where
-    type Sv RemoveTagsFromStream = Kinesis
-    type Rs RemoveTagsFromStream = RemoveTagsFromStreamResponse
+-- | /See:/ 'removeTagsFromStreamResponse' smart constructor.
+data RemoveTagsFromStreamResponse =
+    RemoveTagsFromStreamResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "RemoveTagsFromStream"
-    response = nullResponse RemoveTagsFromStreamResponse
+-- | Creates a value of 'RemoveTagsFromStreamResponse' with the minimum fields required to make a request.
+--
+removeTagsFromStreamResponse
+    :: RemoveTagsFromStreamResponse
+removeTagsFromStreamResponse = RemoveTagsFromStreamResponse'
diff --git a/gen/Network/AWS/Kinesis/SplitShard.hs b/gen/Network/AWS/Kinesis/SplitShard.hs
--- a/gen/Network/AWS/Kinesis/SplitShard.hs
+++ b/gen/Network/AWS/Kinesis/SplitShard.hs
@@ -1,161 +1,179 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.Kinesis.SplitShard
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- 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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Splits a shard into two new shards in the stream, to increase the stream's
--- capacity to ingest and transport data. 'SplitShard' is called when there is a
--- need to increase the overall capacity of stream because of an expected
--- increase in the volume of data records being ingested.
+-- Splits a shard into two new shards in the stream, to increase the
+-- stream\'s capacity to ingest and transport data. 'SplitShard' is called
+-- when there is a need to increase the overall capacity of stream because
+-- of an expected increase in the volume of data records being ingested.
 --
 -- You can also use 'SplitShard' when a shard appears to be approaching its
--- maximum utilization, for example, when the set of producers sending data into
--- the specific shard are suddenly sending more than previously anticipated. You
--- can also call 'SplitShard' to increase stream capacity, so that more Amazon
--- Kinesis applications can simultaneously read data from the stream for
--- real-time processing.
+-- maximum utilization, for example, when the set of producers sending data
+-- into the specific shard are suddenly sending more than previously
+-- anticipated. You can also call 'SplitShard' to increase stream capacity,
+-- so that more Amazon Kinesis applications can simultaneously read data
+-- from the stream for real-time processing.
 --
--- You must specify the shard to be split and the new hash key, which is the
--- position in the shard where the shard gets split in two. In many cases, the
--- new hash key might simply be the average of the beginning and ending hash
--- key, but it can be any hash key value in the range being mapped into the
--- shard. For more information about splitting shards, see <http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-using-sdk-java-resharding-split.html Split a Shard> in the /Amazon Kinesis Developer Guide/.
+-- You must specify the shard to be split and the new hash key, which is
+-- the position in the shard where the shard gets split in two. In many
+-- cases, the new hash key might simply be the average of the beginning and
+-- ending hash key, but it can be any hash key value in the range being
+-- mapped into the shard. For more information about splitting shards, see
+-- <http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-using-sdk-java-resharding-split.html Split a Shard>
+-- in the /Amazon Kinesis Developer Guide/.
 --
--- You can use 'DescribeStream' to determine the shard ID and hash key values for
--- the 'ShardToSplit' and 'NewStartingHashKey' parameters that are specified in the 'SplitShard' request.
+-- You can use DescribeStream to determine the shard ID and hash key values
+-- for the 'ShardToSplit' and 'NewStartingHashKey' parameters that are
+-- specified in the 'SplitShard' request.
 --
 -- 'SplitShard' is an asynchronous operation. Upon receiving a 'SplitShard'
--- request, Amazon Kinesis immediately returns a response and sets the stream
--- status to 'UPDATING'. After the operation is completed, Amazon Kinesis sets the
--- stream status to 'ACTIVE'. Read and write operations continue to work while the
--- stream is in the 'UPDATING' state.
+-- request, Amazon Kinesis immediately returns a response and sets the
+-- stream status to 'UPDATING'. After the operation is completed, Amazon
+-- Kinesis sets the stream status to 'ACTIVE'. Read and write operations
+-- continue to work while the stream is in the 'UPDATING' state.
 --
 -- You can use 'DescribeStream' to check the status of the stream, which is
--- returned in 'StreamStatus'. If the stream is in the 'ACTIVE' state, you can call 'SplitShard'. If a stream is in 'CREATING' or 'UPDATING' or 'DELETING' states, 'DescribeStream'
--- returns a 'ResourceInUseException'.
+-- returned in 'StreamStatus'. If the stream is in the 'ACTIVE' state, you
+-- can call 'SplitShard'. If a stream is in 'CREATING' or 'UPDATING' or
+-- 'DELETING' states, 'DescribeStream' returns a 'ResourceInUseException'.
 --
--- If the specified stream does not exist, 'DescribeStream' returns a 'ResourceNotFoundException'. If you try to create more shards than are authorized for your account, you
--- receive a 'LimitExceededException'.
+-- If the specified stream does not exist, 'DescribeStream' returns a
+-- 'ResourceNotFoundException'. If you try to create more shards than are
+-- authorized for your account, you receive a 'LimitExceededException'.
 --
--- For the default shard limit for an AWS account, see <http://docs.aws.amazon.com/kinesis/latest/dev/service-sizes-and-limits.html Amazon Kinesis Limits>.
--- If you need to increase this limit, <http://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html contact AWS Support>
+-- For the default shard limit for an AWS account, see
+-- <http://docs.aws.amazon.com/kinesis/latest/dev/service-sizes-and-limits.html Amazon Kinesis Limits>.
+-- If you need to increase this limit,
+-- <http://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html contact AWS Support>
 --
--- If you try to operate on too many streams in parallel using 'CreateStream', 'DeleteStream', 'MergeShards' or 'SplitShard', you receive a 'LimitExceededException'.
+-- If you try to operate on too many streams in parallel using
+-- CreateStream, DeleteStream, MergeShards or SplitShard, you receive a
+-- 'LimitExceededException'.
 --
 -- 'SplitShard' has limit of 5 transactions per second per account.
 --
--- <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_SplitShard.html>
+-- /See:/ <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_SplitShard.html AWS API Reference> for SplitShard.
 module Network.AWS.Kinesis.SplitShard
     (
-    -- * Request
-      SplitShard
-    -- ** Request constructor
-    , splitShard
-    -- ** Request lenses
-    , ssNewStartingHashKey
-    , ssShardToSplit
+    -- * Creating a Request
+      splitShard
+    , SplitShard
+    -- * Request Lenses
     , ssStreamName
+    , ssShardToSplit
+    , ssNewStartingHashKey
 
-    -- * Response
-    , SplitShardResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , splitShardResponse
+    , SplitShardResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.Kinesis.Types
-import qualified GHC.Exts
-
-data SplitShard = SplitShard
-    { _ssNewStartingHashKey :: Text
-    , _ssShardToSplit       :: Text
-    , _ssStreamName         :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Kinesis.Types
+import           Network.AWS.Kinesis.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'SplitShard' constructor.
+-- | Represents the input for 'SplitShard'.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'splitShard' smart constructor.
+data SplitShard = SplitShard'
+    { _ssStreamName         :: !Text
+    , _ssShardToSplit       :: !Text
+    , _ssNewStartingHashKey :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SplitShard' with the minimum fields required to make a request.
 --
--- * 'ssNewStartingHashKey' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ssShardToSplit' @::@ 'Text'
+-- * 'ssStreamName'
 --
--- * 'ssStreamName' @::@ 'Text'
+-- * 'ssShardToSplit'
 --
-splitShard :: Text -- ^ 'ssStreamName'
-           -> Text -- ^ 'ssShardToSplit'
-           -> Text -- ^ 'ssNewStartingHashKey'
-           -> SplitShard
-splitShard p1 p2 p3 = SplitShard
-    { _ssStreamName         = p1
-    , _ssShardToSplit       = p2
-    , _ssNewStartingHashKey = p3
+-- * 'ssNewStartingHashKey'
+splitShard
+    :: Text -- ^ 'ssStreamName'
+    -> Text -- ^ 'ssShardToSplit'
+    -> Text -- ^ 'ssNewStartingHashKey'
+    -> SplitShard
+splitShard pStreamName_ pShardToSplit_ pNewStartingHashKey_ =
+    SplitShard'
+    { _ssStreamName = pStreamName_
+    , _ssShardToSplit = pShardToSplit_
+    , _ssNewStartingHashKey = pNewStartingHashKey_
     }
 
--- | A hash key value for the starting hash key of one of the child shards created
--- by the split. The hash key range for a given shard constitutes a set of
--- ordered contiguous positive integers. The value for 'NewStartingHashKey' must
--- be in the range of hash keys being mapped into the shard. The 'NewStartingHashKey' hash key value and all higher hash key values in hash key range are
--- distributed to one of the child shards. All the lower hash key values in the
--- range are distributed to the other child shard.
-ssNewStartingHashKey :: Lens' SplitShard Text
-ssNewStartingHashKey =
-    lens _ssNewStartingHashKey (\s a -> s { _ssNewStartingHashKey = a })
+-- | The name of the stream for the shard split.
+ssStreamName :: Lens' SplitShard Text
+ssStreamName = lens _ssStreamName (\ s a -> s{_ssStreamName = a});
 
 -- | The shard ID of the shard to split.
 ssShardToSplit :: Lens' SplitShard Text
-ssShardToSplit = lens _ssShardToSplit (\s a -> s { _ssShardToSplit = a })
+ssShardToSplit = lens _ssShardToSplit (\ s a -> s{_ssShardToSplit = a});
 
--- | The name of the stream for the shard split.
-ssStreamName :: Lens' SplitShard Text
-ssStreamName = lens _ssStreamName (\s a -> s { _ssStreamName = a })
+-- | A hash key value for the starting hash key of one of the child shards
+-- created by the split. The hash key range for a given shard constitutes a
+-- set of ordered contiguous positive integers. The value for
+-- 'NewStartingHashKey' must be in the range of hash keys being mapped into
+-- the shard. The 'NewStartingHashKey' hash key value and all higher hash
+-- key values in hash key range are distributed to one of the child shards.
+-- All the lower hash key values in the range are distributed to the other
+-- child shard.
+ssNewStartingHashKey :: Lens' SplitShard Text
+ssNewStartingHashKey = lens _ssNewStartingHashKey (\ s a -> s{_ssNewStartingHashKey = a});
 
-data SplitShardResponse = SplitShardResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest SplitShard where
+        type Sv SplitShard = Kinesis
+        type Rs SplitShard = SplitShardResponse
+        request = postJSON
+        response = receiveNull SplitShardResponse'
 
--- | 'SplitShardResponse' constructor.
-splitShardResponse :: SplitShardResponse
-splitShardResponse = SplitShardResponse
+instance ToHeaders SplitShard where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Kinesis_20131202.SplitShard" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON SplitShard where
+        toJSON SplitShard'{..}
+          = object
+              ["StreamName" .= _ssStreamName,
+               "ShardToSplit" .= _ssShardToSplit,
+               "NewStartingHashKey" .= _ssNewStartingHashKey]
+
 instance ToPath SplitShard where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery SplitShard where
-    toQuery = const mempty
-
-instance ToHeaders SplitShard
-
-instance ToJSON SplitShard where
-    toJSON SplitShard{..} = object
-        [ "StreamName"         .= _ssStreamName
-        , "ShardToSplit"       .= _ssShardToSplit
-        , "NewStartingHashKey" .= _ssNewStartingHashKey
-        ]
+        toQuery = const mempty
 
-instance AWSRequest SplitShard where
-    type Sv SplitShard = Kinesis
-    type Rs SplitShard = SplitShardResponse
+-- | /See:/ 'splitShardResponse' smart constructor.
+data SplitShardResponse =
+    SplitShardResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "SplitShard"
-    response = nullResponse SplitShardResponse
+-- | Creates a value of 'SplitShardResponse' with the minimum fields required to make a request.
+--
+splitShardResponse
+    :: SplitShardResponse
+splitShardResponse = SplitShardResponse'
diff --git a/gen/Network/AWS/Kinesis/Types.hs b/gen/Network/AWS/Kinesis/Types.hs
--- a/gen/Network/AWS/Kinesis/Types.hs
+++ b/gen/Network/AWS/Kinesis/Types.hs
@@ -1,89 +1,62 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-{-# LANGUAGE ViewPatterns                #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
 
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
 
+-- |
 -- Module      : Network.AWS.Kinesis.Types
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- 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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
 module Network.AWS.Kinesis.Types
     (
     -- * Service
       Kinesis
-    -- ** Error
-    , JSONError
 
-    -- * Shard
-    , Shard
-    , shard
-    , sAdjacentParentShardId
-    , sHashKeyRange
-    , sParentShardId
-    , sSequenceNumberRange
-    , sShardId
+    -- * Errors
+    , _ExpiredIteratorException
+    , _InvalidArgumentException
+    , _ProvisionedThroughputExceededException
+    , _ResourceNotFoundException
+    , _ResourceInUseException
+    , _LimitExceededException
 
-    -- * Tag
-    , Tag
-    , tag
-    , tagKey
-    , tagValue
+    -- * ShardIteratorType
+    , ShardIteratorType (..)
 
-    -- * StreamDescription
-    , StreamDescription
-    , streamDescription
-    , sdHasMoreShards
-    , sdShards
-    , sdStreamARN
-    , sdStreamName
-    , sdStreamStatus
+    -- * StreamStatus
+    , StreamStatus (..)
 
-    -- * PutRecordsResultEntry
-    , PutRecordsResultEntry
-    , putRecordsResultEntry
-    , prreErrorCode
-    , prreErrorMessage
-    , prreSequenceNumber
-    , prreShardId
+    -- * HashKeyRange
+    , HashKeyRange
+    , hashKeyRange
+    , hkrStartingHashKey
+    , hkrEndingHashKey
 
     -- * PutRecordsRequestEntry
     , PutRecordsRequestEntry
     , putRecordsRequestEntry
-    , prreData
     , prreExplicitHashKey
+    , prreData
     , prrePartitionKey
 
-    -- * StreamStatus
-    , StreamStatus (..)
-
-    -- * HashKeyRange
-    , HashKeyRange
-    , hashKeyRange
-    , hkrEndingHashKey
-    , hkrStartingHashKey
+    -- * PutRecordsResultEntry
+    , PutRecordsResultEntry
+    , putRecordsResultEntry
+    , prreSequenceNumber
+    , prreErrorCode
+    , prreErrorMessage
+    , prreShardId
 
     -- * Record
     , Record
     , record
+    , rSequenceNumber
     , rData
     , rPartitionKey
-    , rSequenceNumber
 
     -- * SequenceNumberRange
     , SequenceNumberRange
@@ -91,579 +64,100 @@
     , snrEndingSequenceNumber
     , snrStartingSequenceNumber
 
-    -- * ShardIteratorType
-    , ShardIteratorType (..)
+    -- * Shard
+    , Shard
+    , shard
+    , sAdjacentParentShardId
+    , sParentShardId
+    , sShardId
+    , sHashKeyRange
+    , sSequenceNumberRange
+
+    -- * StreamDescription
+    , StreamDescription
+    , streamDescription
+    , sdStreamName
+    , sdStreamARN
+    , sdStreamStatus
+    , sdShards
+    , sdHasMoreShards
+
+    -- * Tag
+    , Tag
+    , tag
+    , tagValue
+    , tagKey
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Signing
-import qualified GHC.Exts
+import           Network.AWS.Kinesis.Types.Product
+import           Network.AWS.Kinesis.Types.Sum
+import           Network.AWS.Prelude
+import           Network.AWS.Sign.V4
 
--- | Version @2013-12-02@ of the Amazon Kinesis service.
+-- | Version @2013-12-02@ of the Amazon Kinesis SDK.
 data Kinesis
 
 instance AWSService Kinesis where
     type Sg Kinesis = V4
-    type Er Kinesis = JSONError
-
-    service = service'
+    service = const svc
       where
-        service' :: Service Kinesis
-        service' = Service
-            { _svcAbbrev       = "Kinesis"
-            , _svcPrefix       = "kinesis"
-            , _svcVersion      = "2013-12-02"
-            , _svcTargetPrefix = Just "Kinesis_20131202"
-            , _svcJSONVersion  = Just "1.1"
-            , _svcHandle       = handle
-            , _svcRetry        = retry
+        svc =
+            Service
+            { _svcAbbrev = "Kinesis"
+            , _svcPrefix = "kinesis"
+            , _svcVersion = "2013-12-02"
+            , _svcEndpoint = defaultEndpoint svc
+            , _svcTimeout = Just 70
+            , _svcStatus = statusSuccess
+            , _svcError = parseJSONError
+            , _svcRetry = retry
             }
-
-        handle :: Status
-               -> Maybe (LazyByteString -> ServiceError JSONError)
-        handle = jsonError statusSuccess service'
-
-        retry :: Retry Kinesis
-        retry = Exponential
-            { _retryBase     = 0.05
-            , _retryGrowth   = 2
+        retry =
+            Exponential
+            { _retryBase = 5.0e-2
+            , _retryGrowth = 2
             , _retryAttempts = 5
-            , _retryCheck    = check
+            , _retryCheck = check
             }
-
-        check :: Status
-              -> JSONError
-              -> Bool
-        check (statusCode -> s) (awsErrorCode -> e)
-            | s == 500  = True -- General Server Error
-            | s == 509  = True -- Limit Exceeded
-            | s == 503  = True -- Service Unavailable
-            | otherwise = False
-
-data Shard = Shard
-    { _sAdjacentParentShardId :: Maybe Text
-    , _sHashKeyRange          :: HashKeyRange
-    , _sParentShardId         :: Maybe Text
-    , _sSequenceNumberRange   :: SequenceNumberRange
-    , _sShardId               :: Text
-    } deriving (Eq, Read, Show)
-
--- | 'Shard' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'sAdjacentParentShardId' @::@ 'Maybe' 'Text'
---
--- * 'sHashKeyRange' @::@ 'HashKeyRange'
---
--- * 'sParentShardId' @::@ 'Maybe' 'Text'
---
--- * 'sSequenceNumberRange' @::@ 'SequenceNumberRange'
---
--- * 'sShardId' @::@ 'Text'
---
-shard :: Text -- ^ 'sShardId'
-      -> HashKeyRange -- ^ 'sHashKeyRange'
-      -> SequenceNumberRange -- ^ 'sSequenceNumberRange'
-      -> Shard
-shard p1 p2 p3 = Shard
-    { _sShardId               = p1
-    , _sHashKeyRange          = p2
-    , _sSequenceNumberRange   = p3
-    , _sParentShardId         = Nothing
-    , _sAdjacentParentShardId = Nothing
-    }
-
--- | The shard Id of the shard adjacent to the shard's parent.
-sAdjacentParentShardId :: Lens' Shard (Maybe Text)
-sAdjacentParentShardId =
-    lens _sAdjacentParentShardId (\s a -> s { _sAdjacentParentShardId = a })
-
--- | The range of possible hash key values for the shard, which is a set of
--- ordered contiguous positive integers.
-sHashKeyRange :: Lens' Shard HashKeyRange
-sHashKeyRange = lens _sHashKeyRange (\s a -> s { _sHashKeyRange = a })
-
--- | The shard Id of the shard's parent.
-sParentShardId :: Lens' Shard (Maybe Text)
-sParentShardId = lens _sParentShardId (\s a -> s { _sParentShardId = a })
-
--- | The range of possible sequence numbers for the shard.
-sSequenceNumberRange :: Lens' Shard SequenceNumberRange
-sSequenceNumberRange =
-    lens _sSequenceNumberRange (\s a -> s { _sSequenceNumberRange = a })
-
--- | The unique identifier of the shard within the Amazon Kinesis stream.
-sShardId :: Lens' Shard Text
-sShardId = lens _sShardId (\s a -> s { _sShardId = a })
-
-instance FromJSON Shard where
-    parseJSON = withObject "Shard" $ \o -> Shard
-        <$> o .:? "AdjacentParentShardId"
-        <*> o .:  "HashKeyRange"
-        <*> o .:? "ParentShardId"
-        <*> o .:  "SequenceNumberRange"
-        <*> o .:  "ShardId"
-
-instance ToJSON Shard where
-    toJSON Shard{..} = object
-        [ "ShardId"               .= _sShardId
-        , "ParentShardId"         .= _sParentShardId
-        , "AdjacentParentShardId" .= _sAdjacentParentShardId
-        , "HashKeyRange"          .= _sHashKeyRange
-        , "SequenceNumberRange"   .= _sSequenceNumberRange
-        ]
-
-data Tag = Tag
-    { _tagKey   :: Text
-    , _tagValue :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'Tag' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'tagKey' @::@ 'Text'
---
--- * 'tagValue' @::@ 'Maybe' 'Text'
---
-tag :: Text -- ^ 'tagKey'
-    -> Tag
-tag p1 = Tag
-    { _tagKey   = p1
-    , _tagValue = Nothing
-    }
-
--- | A unique identifier for the tag. Maximum length: 128 characters. Valid
--- characters: Unicode letters, digits, white space, _ . / = + - % @
-tagKey :: Lens' Tag Text
-tagKey = lens _tagKey (\s a -> s { _tagKey = a })
-
--- | An optional string, typically used to describe or define the tag. Maximum
--- length: 256 characters. Valid characters: Unicode letters, digits, white
--- space, _ . / = + - % @
-tagValue :: Lens' Tag (Maybe Text)
-tagValue = lens _tagValue (\s a -> s { _tagValue = a })
-
-instance FromJSON Tag where
-    parseJSON = withObject "Tag" $ \o -> Tag
-        <$> o .:  "Key"
-        <*> o .:? "Value"
-
-instance ToJSON Tag where
-    toJSON Tag{..} = object
-        [ "Key"   .= _tagKey
-        , "Value" .= _tagValue
-        ]
-
-data StreamDescription = StreamDescription
-    { _sdHasMoreShards :: Bool
-    , _sdShards        :: List "Shards" Shard
-    , _sdStreamARN     :: Text
-    , _sdStreamName    :: Text
-    , _sdStreamStatus  :: StreamStatus
-    } deriving (Eq, Read, Show)
-
--- | 'StreamDescription' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'sdHasMoreShards' @::@ 'Bool'
---
--- * 'sdShards' @::@ ['Shard']
---
--- * 'sdStreamARN' @::@ 'Text'
---
--- * 'sdStreamName' @::@ 'Text'
---
--- * 'sdStreamStatus' @::@ 'StreamStatus'
---
-streamDescription :: Text -- ^ 'sdStreamName'
-                  -> Text -- ^ 'sdStreamARN'
-                  -> StreamStatus -- ^ 'sdStreamStatus'
-                  -> Bool -- ^ 'sdHasMoreShards'
-                  -> StreamDescription
-streamDescription p1 p2 p3 p4 = StreamDescription
-    { _sdStreamName    = p1
-    , _sdStreamARN     = p2
-    , _sdStreamStatus  = p3
-    , _sdHasMoreShards = p4
-    , _sdShards        = mempty
-    }
-
--- | If set to 'true', more shards in the stream are available to describe.
-sdHasMoreShards :: Lens' StreamDescription Bool
-sdHasMoreShards = lens _sdHasMoreShards (\s a -> s { _sdHasMoreShards = a })
-
--- | The shards that comprise the stream.
-sdShards :: Lens' StreamDescription [Shard]
-sdShards = lens _sdShards (\s a -> s { _sdShards = a }) . _List
-
--- | The Amazon Resource Name (ARN) for the stream being described.
-sdStreamARN :: Lens' StreamDescription Text
-sdStreamARN = lens _sdStreamARN (\s a -> s { _sdStreamARN = a })
-
--- | The name of the stream being described.
-sdStreamName :: Lens' StreamDescription Text
-sdStreamName = lens _sdStreamName (\s a -> s { _sdStreamName = a })
-
--- | The current status of the stream being described.
---
--- The stream status is one of the following states:
---
--- 'CREATING' - The stream is being created. Amazon Kinesis immediately returns
--- and sets 'StreamStatus' to 'CREATING'.  'DELETING' - The stream is being deleted.
--- The specified stream is in the 'DELETING' state until Amazon Kinesis completes
--- the deletion.  'ACTIVE' - The stream exists and is ready for read and write
--- operations or deletion. You should perform read and write operations only on
--- an 'ACTIVE' stream.  'UPDATING' - Shards in the stream are being merged or split.
--- Read and write operations continue to work while the stream is in the 'UPDATING'
--- state.
-sdStreamStatus :: Lens' StreamDescription StreamStatus
-sdStreamStatus = lens _sdStreamStatus (\s a -> s { _sdStreamStatus = a })
-
-instance FromJSON StreamDescription where
-    parseJSON = withObject "StreamDescription" $ \o -> StreamDescription
-        <$> o .:  "HasMoreShards"
-        <*> o .:? "Shards" .!= mempty
-        <*> o .:  "StreamARN"
-        <*> o .:  "StreamName"
-        <*> o .:  "StreamStatus"
-
-instance ToJSON StreamDescription where
-    toJSON StreamDescription{..} = object
-        [ "StreamName"    .= _sdStreamName
-        , "StreamARN"     .= _sdStreamARN
-        , "StreamStatus"  .= _sdStreamStatus
-        , "Shards"        .= _sdShards
-        , "HasMoreShards" .= _sdHasMoreShards
-        ]
-
-data PutRecordsResultEntry = PutRecordsResultEntry
-    { _prreErrorCode      :: Maybe Text
-    , _prreErrorMessage   :: Maybe Text
-    , _prreSequenceNumber :: Maybe Text
-    , _prreShardId        :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'PutRecordsResultEntry' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'prreErrorCode' @::@ 'Maybe' 'Text'
---
--- * 'prreErrorMessage' @::@ 'Maybe' 'Text'
---
--- * 'prreSequenceNumber' @::@ 'Maybe' 'Text'
---
--- * 'prreShardId' @::@ 'Maybe' 'Text'
---
-putRecordsResultEntry :: PutRecordsResultEntry
-putRecordsResultEntry = PutRecordsResultEntry
-    { _prreSequenceNumber = Nothing
-    , _prreShardId        = Nothing
-    , _prreErrorCode      = Nothing
-    , _prreErrorMessage   = Nothing
-    }
-
--- | The error code for an individual record result. 'ErrorCodes' can be either 'ProvisionedThroughputExceededException' or 'InternalFailure'.
-prreErrorCode :: Lens' PutRecordsResultEntry (Maybe Text)
-prreErrorCode = lens _prreErrorCode (\s a -> s { _prreErrorCode = a })
-
--- | The error message for an individual record result. An 'ErrorCode' value of 'ProvisionedThroughputExceededException' has an error message that includes the account ID, stream name, and shard
--- ID. An 'ErrorCode' value of 'InternalFailure' has the error message '"InternalService Failure"'.
-prreErrorMessage :: Lens' PutRecordsResultEntry (Maybe Text)
-prreErrorMessage = lens _prreErrorMessage (\s a -> s { _prreErrorMessage = a })
-
--- | The sequence number for an individual record result.
-prreSequenceNumber :: Lens' PutRecordsResultEntry (Maybe Text)
-prreSequenceNumber =
-    lens _prreSequenceNumber (\s a -> s { _prreSequenceNumber = a })
-
--- | The shard ID for an individual record result.
-prreShardId :: Lens' PutRecordsResultEntry (Maybe Text)
-prreShardId = lens _prreShardId (\s a -> s { _prreShardId = a })
-
-instance FromJSON PutRecordsResultEntry where
-    parseJSON = withObject "PutRecordsResultEntry" $ \o -> PutRecordsResultEntry
-        <$> o .:? "ErrorCode"
-        <*> o .:? "ErrorMessage"
-        <*> o .:? "SequenceNumber"
-        <*> o .:? "ShardId"
-
-instance ToJSON PutRecordsResultEntry where
-    toJSON PutRecordsResultEntry{..} = object
-        [ "SequenceNumber" .= _prreSequenceNumber
-        , "ShardId"        .= _prreShardId
-        , "ErrorCode"      .= _prreErrorCode
-        , "ErrorMessage"   .= _prreErrorMessage
-        ]
-
-data PutRecordsRequestEntry = PutRecordsRequestEntry
-    { _prreData            :: Base64
-    , _prreExplicitHashKey :: Maybe Text
-    , _prrePartitionKey    :: Text
-    } deriving (Eq, Read, Show)
-
--- | 'PutRecordsRequestEntry' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'prreData' @::@ 'Base64'
---
--- * 'prreExplicitHashKey' @::@ 'Maybe' 'Text'
---
--- * 'prrePartitionKey' @::@ 'Text'
---
-putRecordsRequestEntry :: Base64 -- ^ 'prreData'
-                       -> Text -- ^ 'prrePartitionKey'
-                       -> PutRecordsRequestEntry
-putRecordsRequestEntry p1 p2 = PutRecordsRequestEntry
-    { _prreData            = p1
-    , _prrePartitionKey    = p2
-    , _prreExplicitHashKey = Nothing
-    }
-
--- | The data blob to put into the record, which is base64-encoded when the blob
--- is serialized. The maximum size of the data blob (the payload before
--- base64-encoding) is 50 kilobytes (KB)
-prreData :: Lens' PutRecordsRequestEntry Base64
-prreData = lens _prreData (\s a -> s { _prreData = a })
-
--- | The hash value used to determine explicitly the shard that the data record is
--- assigned to by overriding the partition key hash.
-prreExplicitHashKey :: Lens' PutRecordsRequestEntry (Maybe Text)
-prreExplicitHashKey =
-    lens _prreExplicitHashKey (\s a -> s { _prreExplicitHashKey = a })
-
--- | Determines which shard in the stream the data record is assigned to.
--- Partition keys are Unicode strings with a maximum length limit of 256
--- characters for each key. Amazon Kinesis uses the partition key as input to a
--- hash function that maps the partition key and associated data to a specific
--- shard. Specifically, an MD5 hash function is used to map partition keys to
--- 128-bit integer values and to map associated data records to shards. As a
--- result of this hashing mechanism, all data records with the same partition
--- key map to the same shard within the stream.
-prrePartitionKey :: Lens' PutRecordsRequestEntry Text
-prrePartitionKey = lens _prrePartitionKey (\s a -> s { _prrePartitionKey = a })
-
-instance FromJSON PutRecordsRequestEntry where
-    parseJSON = withObject "PutRecordsRequestEntry" $ \o -> PutRecordsRequestEntry
-        <$> o .:  "Data"
-        <*> o .:? "ExplicitHashKey"
-        <*> o .:  "PartitionKey"
-
-instance ToJSON PutRecordsRequestEntry where
-    toJSON PutRecordsRequestEntry{..} = object
-        [ "Data"            .= _prreData
-        , "ExplicitHashKey" .= _prreExplicitHashKey
-        , "PartitionKey"    .= _prrePartitionKey
-        ]
-
-data StreamStatus
-    = Active   -- ^ ACTIVE
-    | Creating -- ^ CREATING
-    | Deleting -- ^ DELETING
-    | Updating -- ^ UPDATING
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable StreamStatus
-
-instance FromText StreamStatus where
-    parser = takeLowerText >>= \case
-        "active"   -> pure Active
-        "creating" -> pure Creating
-        "deleting" -> pure Deleting
-        "updating" -> pure Updating
-        e          -> fail $
-            "Failure parsing StreamStatus from " ++ show e
-
-instance ToText StreamStatus where
-    toText = \case
-        Active   -> "ACTIVE"
-        Creating -> "CREATING"
-        Deleting -> "DELETING"
-        Updating -> "UPDATING"
-
-instance ToByteString StreamStatus
-instance ToHeader     StreamStatus
-instance ToQuery      StreamStatus
-
-instance FromJSON StreamStatus where
-    parseJSON = parseJSONText "StreamStatus"
-
-instance ToJSON StreamStatus where
-    toJSON = toJSONText
-
-data HashKeyRange = HashKeyRange
-    { _hkrEndingHashKey   :: Text
-    , _hkrStartingHashKey :: Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'HashKeyRange' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'hkrEndingHashKey' @::@ 'Text'
---
--- * 'hkrStartingHashKey' @::@ 'Text'
---
-hashKeyRange :: Text -- ^ 'hkrStartingHashKey'
-             -> Text -- ^ 'hkrEndingHashKey'
-             -> HashKeyRange
-hashKeyRange p1 p2 = HashKeyRange
-    { _hkrStartingHashKey = p1
-    , _hkrEndingHashKey   = p2
-    }
-
--- | The ending hash key of the hash key range.
-hkrEndingHashKey :: Lens' HashKeyRange Text
-hkrEndingHashKey = lens _hkrEndingHashKey (\s a -> s { _hkrEndingHashKey = a })
-
--- | The starting hash key of the hash key range.
-hkrStartingHashKey :: Lens' HashKeyRange Text
-hkrStartingHashKey =
-    lens _hkrStartingHashKey (\s a -> s { _hkrStartingHashKey = a })
-
-instance FromJSON HashKeyRange where
-    parseJSON = withObject "HashKeyRange" $ \o -> HashKeyRange
-        <$> o .:  "EndingHashKey"
-        <*> o .:  "StartingHashKey"
-
-instance ToJSON HashKeyRange where
-    toJSON HashKeyRange{..} = object
-        [ "StartingHashKey" .= _hkrStartingHashKey
-        , "EndingHashKey"   .= _hkrEndingHashKey
-        ]
-
-data Record = Record
-    { _rData           :: Base64
-    , _rPartitionKey   :: Text
-    , _rSequenceNumber :: Text
-    } deriving (Eq, Read, Show)
-
--- | 'Record' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'rData' @::@ 'Base64'
---
--- * 'rPartitionKey' @::@ 'Text'
---
--- * 'rSequenceNumber' @::@ 'Text'
---
-record :: Text -- ^ 'rSequenceNumber'
-       -> Base64 -- ^ 'rData'
-       -> Text -- ^ 'rPartitionKey'
-       -> Record
-record p1 p2 p3 = Record
-    { _rSequenceNumber = p1
-    , _rData           = p2
-    , _rPartitionKey   = p3
-    }
-
--- | The data blob. The data in the blob is both opaque and immutable to the
--- Amazon Kinesis service, which does not inspect, interpret, or change the data
--- in the blob in any way. The maximum size of the data blob (the payload before
--- base64-encoding) is 50 kilobytes (KB)
-rData :: Lens' Record Base64
-rData = lens _rData (\s a -> s { _rData = a })
-
--- | Identifies which shard in the stream the data record is assigned to.
-rPartitionKey :: Lens' Record Text
-rPartitionKey = lens _rPartitionKey (\s a -> s { _rPartitionKey = a })
-
--- | The unique identifier for the record in the Amazon Kinesis stream.
-rSequenceNumber :: Lens' Record Text
-rSequenceNumber = lens _rSequenceNumber (\s a -> s { _rSequenceNumber = a })
-
-instance FromJSON Record where
-    parseJSON = withObject "Record" $ \o -> Record
-        <$> o .:  "Data"
-        <*> o .:  "PartitionKey"
-        <*> o .:  "SequenceNumber"
-
-instance ToJSON Record where
-    toJSON Record{..} = object
-        [ "SequenceNumber" .= _rSequenceNumber
-        , "Data"           .= _rData
-        , "PartitionKey"   .= _rPartitionKey
-        ]
-
-data SequenceNumberRange = SequenceNumberRange
-    { _snrEndingSequenceNumber   :: Maybe Text
-    , _snrStartingSequenceNumber :: Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'SequenceNumberRange' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'snrEndingSequenceNumber' @::@ 'Maybe' 'Text'
---
--- * 'snrStartingSequenceNumber' @::@ 'Text'
---
-sequenceNumberRange :: Text -- ^ 'snrStartingSequenceNumber'
-                    -> SequenceNumberRange
-sequenceNumberRange p1 = SequenceNumberRange
-    { _snrStartingSequenceNumber = p1
-    , _snrEndingSequenceNumber   = Nothing
-    }
-
--- | The ending sequence number for the range. Shards that are in the OPEN state
--- have an ending sequence number of 'null'.
-snrEndingSequenceNumber :: Lens' SequenceNumberRange (Maybe Text)
-snrEndingSequenceNumber =
-    lens _snrEndingSequenceNumber (\s a -> s { _snrEndingSequenceNumber = a })
-
--- | The starting sequence number for the range.
-snrStartingSequenceNumber :: Lens' SequenceNumberRange Text
-snrStartingSequenceNumber =
-    lens _snrStartingSequenceNumber
-        (\s a -> s { _snrStartingSequenceNumber = a })
-
-instance FromJSON SequenceNumberRange where
-    parseJSON = withObject "SequenceNumberRange" $ \o -> SequenceNumberRange
-        <$> o .:? "EndingSequenceNumber"
-        <*> o .:  "StartingSequenceNumber"
-
-instance ToJSON SequenceNumberRange where
-    toJSON SequenceNumberRange{..} = object
-        [ "StartingSequenceNumber" .= _snrStartingSequenceNumber
-        , "EndingSequenceNumber"   .= _snrEndingSequenceNumber
-        ]
-
-data ShardIteratorType
-    = AfterSequenceNumber -- ^ AFTER_SEQUENCE_NUMBER
-    | AtSequenceNumber    -- ^ AT_SEQUENCE_NUMBER
-    | Latest              -- ^ LATEST
-    | TrimHorizon         -- ^ TRIM_HORIZON
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
+        check e
+          | has (hasCode "ThrottlingException" . hasStatus 400) e =
+              Just "throttling_exception"
+          | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
+          | has (hasStatus 503) e = Just "service_unavailable"
+          | has (hasStatus 500) e = Just "general_server_error"
+          | has (hasStatus 509) e = Just "limit_exceeded"
+          | otherwise = Nothing
 
-instance Hashable ShardIteratorType
+-- | The provided iterator exceeds the maximum age allowed.
+_ExpiredIteratorException :: AsError a => Getting (First ServiceError) a ServiceError
+_ExpiredIteratorException = _ServiceError . hasCode "ExpiredIteratorException"
 
-instance FromText ShardIteratorType where
-    parser = takeLowerText >>= \case
-        "after_sequence_number" -> pure AfterSequenceNumber
-        "at_sequence_number"    -> pure AtSequenceNumber
-        "latest"                -> pure Latest
-        "trim_horizon"          -> pure TrimHorizon
-        e                       -> fail $
-            "Failure parsing ShardIteratorType from " ++ show e
+-- | A specified parameter exceeds its restrictions, is not supported, or
+-- can\'t be used. For more information, see the returned message.
+_InvalidArgumentException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidArgumentException = _ServiceError . hasCode "InvalidArgumentException"
 
-instance ToText ShardIteratorType where
-    toText = \case
-        AfterSequenceNumber -> "AFTER_SEQUENCE_NUMBER"
-        AtSequenceNumber    -> "AT_SEQUENCE_NUMBER"
-        Latest              -> "LATEST"
-        TrimHorizon         -> "TRIM_HORIZON"
+-- | The request rate is too high, or the requested data is too large for the
+-- available throughput. Reduce the frequency or size of your requests. For
+-- more information, see
+-- <http://docs.aws.amazon.com/general/latest/gr/api-retries.html Error Retries and Exponential Backoff in AWS>
+-- in the /AWS General Reference/.
+_ProvisionedThroughputExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_ProvisionedThroughputExceededException =
+    _ServiceError . hasCode "ProvisionedThroughputExceededException"
 
-instance ToByteString ShardIteratorType
-instance ToHeader     ShardIteratorType
-instance ToQuery      ShardIteratorType
+-- | The requested resource could not be found. It might not be specified
+-- correctly, or it might not be in the 'ACTIVE' state.
+_ResourceNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceNotFoundException =
+    _ServiceError . hasCode "ResourceNotFoundException"
 
-instance FromJSON ShardIteratorType where
-    parseJSON = parseJSONText "ShardIteratorType"
+-- | The resource is not available for this operation. For example, you
+-- attempted to split a shard but the stream is not in the 'ACTIVE' state.
+_ResourceInUseException :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceInUseException = _ServiceError . hasCode "ResourceInUseException"
 
-instance ToJSON ShardIteratorType where
-    toJSON = toJSONText
+-- | The requested resource exceeds the maximum number allowed, or the number
+-- of concurrent stream requests exceeds the maximum number allowed (5).
+_LimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_LimitExceededException = _ServiceError . hasCode "LimitExceededException"
diff --git a/gen/Network/AWS/Kinesis/Types/Product.hs b/gen/Network/AWS/Kinesis/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Kinesis/Types/Product.hs
@@ -0,0 +1,474 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Kinesis.Types.Product
+-- Copyright   : (c) 2013-2015 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)
+--
+module Network.AWS.Kinesis.Types.Product where
+
+import           Network.AWS.Kinesis.Types.Sum
+import           Network.AWS.Prelude
+
+-- | The range of possible hash key values for the shard, which is a set of
+-- ordered contiguous positive integers.
+--
+-- /See:/ 'hashKeyRange' smart constructor.
+data HashKeyRange = HashKeyRange'
+    { _hkrStartingHashKey :: !Text
+    , _hkrEndingHashKey   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HashKeyRange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hkrStartingHashKey'
+--
+-- * 'hkrEndingHashKey'
+hashKeyRange
+    :: Text -- ^ 'hkrStartingHashKey'
+    -> Text -- ^ 'hkrEndingHashKey'
+    -> HashKeyRange
+hashKeyRange pStartingHashKey_ pEndingHashKey_ =
+    HashKeyRange'
+    { _hkrStartingHashKey = pStartingHashKey_
+    , _hkrEndingHashKey = pEndingHashKey_
+    }
+
+-- | The starting hash key of the hash key range.
+hkrStartingHashKey :: Lens' HashKeyRange Text
+hkrStartingHashKey = lens _hkrStartingHashKey (\ s a -> s{_hkrStartingHashKey = a});
+
+-- | The ending hash key of the hash key range.
+hkrEndingHashKey :: Lens' HashKeyRange Text
+hkrEndingHashKey = lens _hkrEndingHashKey (\ s a -> s{_hkrEndingHashKey = a});
+
+instance FromJSON HashKeyRange where
+        parseJSON
+          = withObject "HashKeyRange"
+              (\ x ->
+                 HashKeyRange' <$>
+                   (x .: "StartingHashKey") <*> (x .: "EndingHashKey"))
+
+-- | Represents the output for 'PutRecords'.
+--
+-- /See:/ 'putRecordsRequestEntry' smart constructor.
+data PutRecordsRequestEntry = PutRecordsRequestEntry'
+    { _prreExplicitHashKey :: !(Maybe Text)
+    , _prreData            :: !Base64
+    , _prrePartitionKey    :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutRecordsRequestEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prreExplicitHashKey'
+--
+-- * 'prreData'
+--
+-- * 'prrePartitionKey'
+putRecordsRequestEntry
+    :: ByteString -- ^ 'prreData'
+    -> Text -- ^ 'prrePartitionKey'
+    -> PutRecordsRequestEntry
+putRecordsRequestEntry pData_ pPartitionKey_ =
+    PutRecordsRequestEntry'
+    { _prreExplicitHashKey = Nothing
+    , _prreData = _Base64 # pData_
+    , _prrePartitionKey = pPartitionKey_
+    }
+
+-- | The hash value used to determine explicitly the shard that the data
+-- record is assigned to by overriding the partition key hash.
+prreExplicitHashKey :: Lens' PutRecordsRequestEntry (Maybe Text)
+prreExplicitHashKey = lens _prreExplicitHashKey (\ s a -> s{_prreExplicitHashKey = a});
+
+-- | The data blob to put into the record, which is base64-encoded when the
+-- blob is serialized. The maximum size of the data blob (the payload
+-- before base64-encoding) is 50 kilobytes (KB)
+prreData :: Lens' PutRecordsRequestEntry ByteString
+prreData = lens _prreData (\ s a -> s{_prreData = a}) . _Base64;
+
+-- | Determines which shard in the stream the data record is assigned to.
+-- Partition keys are Unicode strings with a maximum length limit of 256
+-- characters for each key. Amazon Kinesis uses the partition key as input
+-- to a hash function that maps the partition key and associated data to a
+-- specific shard. Specifically, an MD5 hash function is used to map
+-- partition keys to 128-bit integer values and to map associated data
+-- records to shards. As a result of this hashing mechanism, all data
+-- records with the same partition key map to the same shard within the
+-- stream.
+prrePartitionKey :: Lens' PutRecordsRequestEntry Text
+prrePartitionKey = lens _prrePartitionKey (\ s a -> s{_prrePartitionKey = a});
+
+instance ToJSON PutRecordsRequestEntry where
+        toJSON PutRecordsRequestEntry'{..}
+          = object
+              ["ExplicitHashKey" .= _prreExplicitHashKey,
+               "Data" .= _prreData,
+               "PartitionKey" .= _prrePartitionKey]
+
+-- | Represents the result of an individual record from a 'PutRecords'
+-- request. A record that is successfully added to your Amazon Kinesis
+-- stream includes SequenceNumber and ShardId in the result. A record that
+-- fails to be added to your Amazon Kinesis stream includes ErrorCode and
+-- ErrorMessage in the result.
+--
+-- /See:/ 'putRecordsResultEntry' smart constructor.
+data PutRecordsResultEntry = PutRecordsResultEntry'
+    { _prreSequenceNumber :: !(Maybe Text)
+    , _prreErrorCode      :: !(Maybe Text)
+    , _prreErrorMessage   :: !(Maybe Text)
+    , _prreShardId        :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutRecordsResultEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prreSequenceNumber'
+--
+-- * 'prreErrorCode'
+--
+-- * 'prreErrorMessage'
+--
+-- * 'prreShardId'
+putRecordsResultEntry
+    :: PutRecordsResultEntry
+putRecordsResultEntry =
+    PutRecordsResultEntry'
+    { _prreSequenceNumber = Nothing
+    , _prreErrorCode = Nothing
+    , _prreErrorMessage = Nothing
+    , _prreShardId = Nothing
+    }
+
+-- | The sequence number for an individual record result.
+prreSequenceNumber :: Lens' PutRecordsResultEntry (Maybe Text)
+prreSequenceNumber = lens _prreSequenceNumber (\ s a -> s{_prreSequenceNumber = a});
+
+-- | The error code for an individual record result. 'ErrorCodes' can be
+-- either 'ProvisionedThroughputExceededException' or 'InternalFailure'.
+prreErrorCode :: Lens' PutRecordsResultEntry (Maybe Text)
+prreErrorCode = lens _prreErrorCode (\ s a -> s{_prreErrorCode = a});
+
+-- | The error message for an individual record result. An 'ErrorCode' value
+-- of 'ProvisionedThroughputExceededException' has an error message that
+-- includes the account ID, stream name, and shard ID. An 'ErrorCode' value
+-- of 'InternalFailure' has the error message
+-- '\"Internal Service Failure\"'.
+prreErrorMessage :: Lens' PutRecordsResultEntry (Maybe Text)
+prreErrorMessage = lens _prreErrorMessage (\ s a -> s{_prreErrorMessage = a});
+
+-- | The shard ID for an individual record result.
+prreShardId :: Lens' PutRecordsResultEntry (Maybe Text)
+prreShardId = lens _prreShardId (\ s a -> s{_prreShardId = a});
+
+instance FromJSON PutRecordsResultEntry where
+        parseJSON
+          = withObject "PutRecordsResultEntry"
+              (\ x ->
+                 PutRecordsResultEntry' <$>
+                   (x .:? "SequenceNumber") <*> (x .:? "ErrorCode") <*>
+                     (x .:? "ErrorMessage")
+                     <*> (x .:? "ShardId"))
+
+-- | The unit of data of the Amazon Kinesis stream, which is composed of a
+-- sequence number, a partition key, and a data blob.
+--
+-- /See:/ 'record' smart constructor.
+data Record = Record'
+    { _rSequenceNumber :: !Text
+    , _rData           :: !Base64
+    , _rPartitionKey   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Record' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rSequenceNumber'
+--
+-- * 'rData'
+--
+-- * 'rPartitionKey'
+record
+    :: Text -- ^ 'rSequenceNumber'
+    -> ByteString -- ^ 'rData'
+    -> Text -- ^ 'rPartitionKey'
+    -> Record
+record pSequenceNumber_ pData_ pPartitionKey_ =
+    Record'
+    { _rSequenceNumber = pSequenceNumber_
+    , _rData = _Base64 # pData_
+    , _rPartitionKey = pPartitionKey_
+    }
+
+-- | The unique identifier for the record in the Amazon Kinesis stream.
+rSequenceNumber :: Lens' Record Text
+rSequenceNumber = lens _rSequenceNumber (\ s a -> s{_rSequenceNumber = a});
+
+-- | The data blob. The data in the blob is both opaque and immutable to the
+-- Amazon Kinesis service, which does not inspect, interpret, or change the
+-- data in the blob in any way. The maximum size of the data blob (the
+-- payload before base64-encoding) is 50 kilobytes (KB)
+rData :: Lens' Record ByteString
+rData = lens _rData (\ s a -> s{_rData = a}) . _Base64;
+
+-- | Identifies which shard in the stream the data record is assigned to.
+rPartitionKey :: Lens' Record Text
+rPartitionKey = lens _rPartitionKey (\ s a -> s{_rPartitionKey = a});
+
+instance FromJSON Record where
+        parseJSON
+          = withObject "Record"
+              (\ x ->
+                 Record' <$>
+                   (x .: "SequenceNumber") <*> (x .: "Data") <*>
+                     (x .: "PartitionKey"))
+
+-- | The range of possible sequence numbers for the shard.
+--
+-- /See:/ 'sequenceNumberRange' smart constructor.
+data SequenceNumberRange = SequenceNumberRange'
+    { _snrEndingSequenceNumber   :: !(Maybe Text)
+    , _snrStartingSequenceNumber :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SequenceNumberRange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'snrEndingSequenceNumber'
+--
+-- * 'snrStartingSequenceNumber'
+sequenceNumberRange
+    :: Text -- ^ 'snrStartingSequenceNumber'
+    -> SequenceNumberRange
+sequenceNumberRange pStartingSequenceNumber_ =
+    SequenceNumberRange'
+    { _snrEndingSequenceNumber = Nothing
+    , _snrStartingSequenceNumber = pStartingSequenceNumber_
+    }
+
+-- | The ending sequence number for the range. Shards that are in the OPEN
+-- state have an ending sequence number of 'null'.
+snrEndingSequenceNumber :: Lens' SequenceNumberRange (Maybe Text)
+snrEndingSequenceNumber = lens _snrEndingSequenceNumber (\ s a -> s{_snrEndingSequenceNumber = a});
+
+-- | The starting sequence number for the range.
+snrStartingSequenceNumber :: Lens' SequenceNumberRange Text
+snrStartingSequenceNumber = lens _snrStartingSequenceNumber (\ s a -> s{_snrStartingSequenceNumber = a});
+
+instance FromJSON SequenceNumberRange where
+        parseJSON
+          = withObject "SequenceNumberRange"
+              (\ x ->
+                 SequenceNumberRange' <$>
+                   (x .:? "EndingSequenceNumber") <*>
+                     (x .: "StartingSequenceNumber"))
+
+-- | A uniquely identified group of data records in an Amazon Kinesis stream.
+--
+-- /See:/ 'shard' smart constructor.
+data Shard = Shard'
+    { _sAdjacentParentShardId :: !(Maybe Text)
+    , _sParentShardId         :: !(Maybe Text)
+    , _sShardId               :: !Text
+    , _sHashKeyRange          :: !HashKeyRange
+    , _sSequenceNumberRange   :: !SequenceNumberRange
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Shard' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sAdjacentParentShardId'
+--
+-- * 'sParentShardId'
+--
+-- * 'sShardId'
+--
+-- * 'sHashKeyRange'
+--
+-- * 'sSequenceNumberRange'
+shard
+    :: Text -- ^ 'sShardId'
+    -> HashKeyRange -- ^ 'sHashKeyRange'
+    -> SequenceNumberRange -- ^ 'sSequenceNumberRange'
+    -> Shard
+shard pShardId_ pHashKeyRange_ pSequenceNumberRange_ =
+    Shard'
+    { _sAdjacentParentShardId = Nothing
+    , _sParentShardId = Nothing
+    , _sShardId = pShardId_
+    , _sHashKeyRange = pHashKeyRange_
+    , _sSequenceNumberRange = pSequenceNumberRange_
+    }
+
+-- | The shard Id of the shard adjacent to the shard\'s parent.
+sAdjacentParentShardId :: Lens' Shard (Maybe Text)
+sAdjacentParentShardId = lens _sAdjacentParentShardId (\ s a -> s{_sAdjacentParentShardId = a});
+
+-- | The shard Id of the shard\'s parent.
+sParentShardId :: Lens' Shard (Maybe Text)
+sParentShardId = lens _sParentShardId (\ s a -> s{_sParentShardId = a});
+
+-- | The unique identifier of the shard within the Amazon Kinesis stream.
+sShardId :: Lens' Shard Text
+sShardId = lens _sShardId (\ s a -> s{_sShardId = a});
+
+-- | The range of possible hash key values for the shard, which is a set of
+-- ordered contiguous positive integers.
+sHashKeyRange :: Lens' Shard HashKeyRange
+sHashKeyRange = lens _sHashKeyRange (\ s a -> s{_sHashKeyRange = a});
+
+-- | The range of possible sequence numbers for the shard.
+sSequenceNumberRange :: Lens' Shard SequenceNumberRange
+sSequenceNumberRange = lens _sSequenceNumberRange (\ s a -> s{_sSequenceNumberRange = a});
+
+instance FromJSON Shard where
+        parseJSON
+          = withObject "Shard"
+              (\ x ->
+                 Shard' <$>
+                   (x .:? "AdjacentParentShardId") <*>
+                     (x .:? "ParentShardId")
+                     <*> (x .: "ShardId")
+                     <*> (x .: "HashKeyRange")
+                     <*> (x .: "SequenceNumberRange"))
+
+-- | Represents the output for 'DescribeStream'.
+--
+-- /See:/ 'streamDescription' smart constructor.
+data StreamDescription = StreamDescription'
+    { _sdStreamName    :: !Text
+    , _sdStreamARN     :: !Text
+    , _sdStreamStatus  :: !StreamStatus
+    , _sdShards        :: ![Shard]
+    , _sdHasMoreShards :: !Bool
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StreamDescription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdStreamName'
+--
+-- * 'sdStreamARN'
+--
+-- * 'sdStreamStatus'
+--
+-- * 'sdShards'
+--
+-- * 'sdHasMoreShards'
+streamDescription
+    :: Text -- ^ 'sdStreamName'
+    -> Text -- ^ 'sdStreamARN'
+    -> StreamStatus -- ^ 'sdStreamStatus'
+    -> Bool -- ^ 'sdHasMoreShards'
+    -> StreamDescription
+streamDescription pStreamName_ pStreamARN_ pStreamStatus_ pHasMoreShards_ =
+    StreamDescription'
+    { _sdStreamName = pStreamName_
+    , _sdStreamARN = pStreamARN_
+    , _sdStreamStatus = pStreamStatus_
+    , _sdShards = mempty
+    , _sdHasMoreShards = pHasMoreShards_
+    }
+
+-- | The name of the stream being described.
+sdStreamName :: Lens' StreamDescription Text
+sdStreamName = lens _sdStreamName (\ s a -> s{_sdStreamName = a});
+
+-- | The Amazon Resource Name (ARN) for the stream being described.
+sdStreamARN :: Lens' StreamDescription Text
+sdStreamARN = lens _sdStreamARN (\ s a -> s{_sdStreamARN = a});
+
+-- | The current status of the stream being described.
+--
+-- The stream status is one of the following states:
+--
+-- -   'CREATING' - The stream is being created. Amazon Kinesis immediately
+--     returns and sets 'StreamStatus' to 'CREATING'.
+-- -   'DELETING' - The stream is being deleted. The specified stream is in
+--     the 'DELETING' state until Amazon Kinesis completes the deletion.
+-- -   'ACTIVE' - The stream exists and is ready for read and write
+--     operations or deletion. You should perform read and write operations
+--     only on an 'ACTIVE' stream.
+-- -   'UPDATING' - Shards in the stream are being merged or split. Read
+--     and write operations continue to work while the stream is in the
+--     'UPDATING' state.
+sdStreamStatus :: Lens' StreamDescription StreamStatus
+sdStreamStatus = lens _sdStreamStatus (\ s a -> s{_sdStreamStatus = a});
+
+-- | The shards that comprise the stream.
+sdShards :: Lens' StreamDescription [Shard]
+sdShards = lens _sdShards (\ s a -> s{_sdShards = a}) . _Coerce;
+
+-- | If set to 'true', more shards in the stream are available to describe.
+sdHasMoreShards :: Lens' StreamDescription Bool
+sdHasMoreShards = lens _sdHasMoreShards (\ s a -> s{_sdHasMoreShards = a});
+
+instance FromJSON StreamDescription where
+        parseJSON
+          = withObject "StreamDescription"
+              (\ x ->
+                 StreamDescription' <$>
+                   (x .: "StreamName") <*> (x .: "StreamARN") <*>
+                     (x .: "StreamStatus")
+                     <*> (x .:? "Shards" .!= mempty)
+                     <*> (x .: "HasMoreShards"))
+
+-- | Metadata assigned to the stream, consisting of a key-value pair.
+--
+-- /See:/ 'tag' smart constructor.
+data Tag = Tag'
+    { _tagValue :: !(Maybe Text)
+    , _tagKey   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Tag' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tagValue'
+--
+-- * 'tagKey'
+tag
+    :: Text -- ^ 'tagKey'
+    -> Tag
+tag pKey_ =
+    Tag'
+    { _tagValue = Nothing
+    , _tagKey = pKey_
+    }
+
+-- | An optional string, typically used to describe or define the tag.
+-- Maximum length: 256 characters. Valid characters: Unicode letters,
+-- digits, white space, _ . \/ = + - % \'
+tagValue :: Lens' Tag (Maybe Text)
+tagValue = lens _tagValue (\ s a -> s{_tagValue = a});
+
+-- | A unique identifier for the tag. Maximum length: 128 characters. Valid
+-- characters: Unicode letters, digits, white space, _ . \/ = + - % \'
+tagKey :: Lens' Tag Text
+tagKey = lens _tagKey (\ s a -> s{_tagKey = a});
+
+instance FromJSON Tag where
+        parseJSON
+          = withObject "Tag"
+              (\ x -> Tag' <$> (x .:? "Value") <*> (x .: "Key"))
diff --git a/gen/Network/AWS/Kinesis/Types/Sum.hs b/gen/Network/AWS/Kinesis/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Kinesis/Types/Sum.hs
@@ -0,0 +1,82 @@
+{-# 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.Kinesis.Types.Sum
+-- Copyright   : (c) 2013-2015 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)
+--
+module Network.AWS.Kinesis.Types.Sum where
+
+import           Network.AWS.Prelude
+
+data ShardIteratorType
+    = AfterSequenceNumber
+    | AtSequenceNumber
+    | Latest
+    | TrimHorizon
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ShardIteratorType where
+    parser = takeLowerText >>= \case
+        "after_sequence_number" -> pure AfterSequenceNumber
+        "at_sequence_number" -> pure AtSequenceNumber
+        "latest" -> pure Latest
+        "trim_horizon" -> pure TrimHorizon
+        e -> fromTextError $ "Failure parsing ShardIteratorType from value: '" <> e
+           <> "'. Accepted values: after_sequence_number, at_sequence_number, latest, trim_horizon"
+
+instance ToText ShardIteratorType where
+    toText = \case
+        AfterSequenceNumber -> "after_sequence_number"
+        AtSequenceNumber -> "at_sequence_number"
+        Latest -> "latest"
+        TrimHorizon -> "trim_horizon"
+
+instance Hashable     ShardIteratorType
+instance ToByteString ShardIteratorType
+instance ToQuery      ShardIteratorType
+instance ToHeader     ShardIteratorType
+
+instance ToJSON ShardIteratorType where
+    toJSON = toJSONText
+
+data StreamStatus
+    = Active
+    | Creating
+    | Deleting
+    | Updating
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText StreamStatus where
+    parser = takeLowerText >>= \case
+        "active" -> pure Active
+        "creating" -> pure Creating
+        "deleting" -> pure Deleting
+        "updating" -> pure Updating
+        e -> fromTextError $ "Failure parsing StreamStatus from value: '" <> e
+           <> "'. Accepted values: active, creating, deleting, updating"
+
+instance ToText StreamStatus where
+    toText = \case
+        Active -> "active"
+        Creating -> "creating"
+        Deleting -> "deleting"
+        Updating -> "updating"
+
+instance Hashable     StreamStatus
+instance ToByteString StreamStatus
+instance ToQuery      StreamStatus
+instance ToHeader     StreamStatus
+
+instance FromJSON StreamStatus where
+    parseJSON = parseJSONText "StreamStatus"
diff --git a/gen/Network/AWS/Kinesis/Waiters.hs b/gen/Network/AWS/Kinesis/Waiters.hs
--- a/gen/Network/AWS/Kinesis/Waiters.hs
+++ b/gen/Network/AWS/Kinesis/Waiters.hs
@@ -1,31 +1,36 @@
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE TypeFamilies      #-}
 
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.Kinesis.Waiters
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- 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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
 module Network.AWS.Kinesis.Waiters where
 
-import Network.AWS.Kinesis.DescribeStream
-import Network.AWS.Kinesis.Types
-import Network.AWS.Waiters
+import           Network.AWS.Kinesis.DescribeStream
+import           Network.AWS.Kinesis.Types
+import           Network.AWS.Prelude
+import           Network.AWS.Waiter
 
+-- | Polls 'Network.AWS.Kinesis.DescribeStream' every 10 seconds until a
+-- successful state is reached. An error is returned after 18 failed checks.
 streamExists :: Wait DescribeStream
-streamExists = Wait
-    { _waitName      = "StreamExists"
-    , _waitAttempts  = 18
-    , _waitDelay     = 10
-    , _waitAcceptors =
-        [ matchAll Active AcceptSuccess
-            (dsrStreamDescription . sdStreamStatus)
-        ]
+streamExists =
+    Wait
+    { _waitName = "StreamExists"
+    , _waitAttempts = 18
+    , _waitDelay = 10
+    , _waitAcceptors = [ matchAll
+                             "ACTIVE"
+                             AcceptSuccess
+                             (dsrsStreamDescription .
+                              sdStreamStatus . to toTextCI)]
     }
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,21 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2015 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)
+--
+module Main (main) where
+
+import Test.Tasty
+import Test.AWS.Kinesis
+import Test.AWS.Kinesis.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "Kinesis"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/Gen/Kinesis.hs b/test/Test/AWS/Gen/Kinesis.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/Kinesis.hs
@@ -0,0 +1,260 @@
+{-# 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.Kinesis
+-- Copyright   : (c) 2013-2015 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)
+--
+module Test.AWS.Gen.Kinesis where
+
+import Data.Proxy
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+import Network.AWS.Kinesis
+import Test.AWS.Kinesis.Internal
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ testPutRecord $
+--             putRecord
+--
+--         , testMergeShards $
+--             mergeShards
+--
+--         , testGetRecords $
+--             getRecords
+--
+--         , testGetShardIterator $
+--             getShardIterator
+--
+--         , testListTagsForStream $
+--             listTagsForStream
+--
+--         , testAddTagsToStream $
+--             addTagsToStream
+--
+--         , testPutRecords $
+--             putRecords
+--
+--         , testDeleteStream $
+--             deleteStream
+--
+--         , testRemoveTagsFromStream $
+--             removeTagsFromStream
+--
+--         , testListStreams $
+--             listStreams
+--
+--         , testCreateStream $
+--             createStream
+--
+--         , testSplitShard $
+--             splitShard
+--
+--         , testDescribeStream $
+--             describeStream
+--
+--           ]
+
+--     , testGroup "response"
+--         [ testPutRecordResponse $
+--             putRecordResponse
+--
+--         , testMergeShardsResponse $
+--             mergeShardsResponse
+--
+--         , testGetRecordsResponse $
+--             getRecordsResponse
+--
+--         , testGetShardIteratorResponse $
+--             getShardIteratorResponse
+--
+--         , testListTagsForStreamResponse $
+--             listTagsForStreamResponse
+--
+--         , testAddTagsToStreamResponse $
+--             addTagsToStreamResponse
+--
+--         , testPutRecordsResponse $
+--             putRecordsResponse
+--
+--         , testDeleteStreamResponse $
+--             deleteStreamResponse
+--
+--         , testRemoveTagsFromStreamResponse $
+--             removeTagsFromStreamResponse
+--
+--         , testListStreamsResponse $
+--             listStreamsResponse
+--
+--         , testCreateStreamResponse $
+--             createStreamResponse
+--
+--         , testSplitShardResponse $
+--             splitShardResponse
+--
+--         , testDescribeStreamResponse $
+--             describeStreamResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+testPutRecord :: PutRecord -> TestTree
+testPutRecord = req
+    "PutRecord"
+    "fixture/PutRecord"
+
+testMergeShards :: MergeShards -> TestTree
+testMergeShards = req
+    "MergeShards"
+    "fixture/MergeShards"
+
+testGetRecords :: GetRecords -> TestTree
+testGetRecords = req
+    "GetRecords"
+    "fixture/GetRecords"
+
+testGetShardIterator :: GetShardIterator -> TestTree
+testGetShardIterator = req
+    "GetShardIterator"
+    "fixture/GetShardIterator"
+
+testListTagsForStream :: ListTagsForStream -> TestTree
+testListTagsForStream = req
+    "ListTagsForStream"
+    "fixture/ListTagsForStream"
+
+testAddTagsToStream :: AddTagsToStream -> TestTree
+testAddTagsToStream = req
+    "AddTagsToStream"
+    "fixture/AddTagsToStream"
+
+testPutRecords :: PutRecords -> TestTree
+testPutRecords = req
+    "PutRecords"
+    "fixture/PutRecords"
+
+testDeleteStream :: DeleteStream -> TestTree
+testDeleteStream = req
+    "DeleteStream"
+    "fixture/DeleteStream"
+
+testRemoveTagsFromStream :: RemoveTagsFromStream -> TestTree
+testRemoveTagsFromStream = req
+    "RemoveTagsFromStream"
+    "fixture/RemoveTagsFromStream"
+
+testListStreams :: ListStreams -> TestTree
+testListStreams = req
+    "ListStreams"
+    "fixture/ListStreams"
+
+testCreateStream :: CreateStream -> TestTree
+testCreateStream = req
+    "CreateStream"
+    "fixture/CreateStream"
+
+testSplitShard :: SplitShard -> TestTree
+testSplitShard = req
+    "SplitShard"
+    "fixture/SplitShard"
+
+testDescribeStream :: DescribeStream -> TestTree
+testDescribeStream = req
+    "DescribeStream"
+    "fixture/DescribeStream"
+
+-- Responses
+
+testPutRecordResponse :: PutRecordResponse -> TestTree
+testPutRecordResponse = res
+    "PutRecordResponse"
+    "fixture/PutRecordResponse"
+    (Proxy :: Proxy PutRecord)
+
+testMergeShardsResponse :: MergeShardsResponse -> TestTree
+testMergeShardsResponse = res
+    "MergeShardsResponse"
+    "fixture/MergeShardsResponse"
+    (Proxy :: Proxy MergeShards)
+
+testGetRecordsResponse :: GetRecordsResponse -> TestTree
+testGetRecordsResponse = res
+    "GetRecordsResponse"
+    "fixture/GetRecordsResponse"
+    (Proxy :: Proxy GetRecords)
+
+testGetShardIteratorResponse :: GetShardIteratorResponse -> TestTree
+testGetShardIteratorResponse = res
+    "GetShardIteratorResponse"
+    "fixture/GetShardIteratorResponse"
+    (Proxy :: Proxy GetShardIterator)
+
+testListTagsForStreamResponse :: ListTagsForStreamResponse -> TestTree
+testListTagsForStreamResponse = res
+    "ListTagsForStreamResponse"
+    "fixture/ListTagsForStreamResponse"
+    (Proxy :: Proxy ListTagsForStream)
+
+testAddTagsToStreamResponse :: AddTagsToStreamResponse -> TestTree
+testAddTagsToStreamResponse = res
+    "AddTagsToStreamResponse"
+    "fixture/AddTagsToStreamResponse"
+    (Proxy :: Proxy AddTagsToStream)
+
+testPutRecordsResponse :: PutRecordsResponse -> TestTree
+testPutRecordsResponse = res
+    "PutRecordsResponse"
+    "fixture/PutRecordsResponse"
+    (Proxy :: Proxy PutRecords)
+
+testDeleteStreamResponse :: DeleteStreamResponse -> TestTree
+testDeleteStreamResponse = res
+    "DeleteStreamResponse"
+    "fixture/DeleteStreamResponse"
+    (Proxy :: Proxy DeleteStream)
+
+testRemoveTagsFromStreamResponse :: RemoveTagsFromStreamResponse -> TestTree
+testRemoveTagsFromStreamResponse = res
+    "RemoveTagsFromStreamResponse"
+    "fixture/RemoveTagsFromStreamResponse"
+    (Proxy :: Proxy RemoveTagsFromStream)
+
+testListStreamsResponse :: ListStreamsResponse -> TestTree
+testListStreamsResponse = res
+    "ListStreamsResponse"
+    "fixture/ListStreamsResponse"
+    (Proxy :: Proxy ListStreams)
+
+testCreateStreamResponse :: CreateStreamResponse -> TestTree
+testCreateStreamResponse = res
+    "CreateStreamResponse"
+    "fixture/CreateStreamResponse"
+    (Proxy :: Proxy CreateStream)
+
+testSplitShardResponse :: SplitShardResponse -> TestTree
+testSplitShardResponse = res
+    "SplitShardResponse"
+    "fixture/SplitShardResponse"
+    (Proxy :: Proxy SplitShard)
+
+testDescribeStreamResponse :: DescribeStreamResponse -> TestTree
+testDescribeStreamResponse = res
+    "DescribeStreamResponse"
+    "fixture/DescribeStreamResponse"
+    (Proxy :: Proxy DescribeStream)
diff --git a/test/Test/AWS/Kinesis.hs b/test/Test/AWS/Kinesis.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Kinesis.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Module      : Test.AWS.Kinesis
+-- Copyright   : (c) 2013-2015 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.Kinesis
+    ( tests
+    , fixtures
+    ) where
+
+import           Network.AWS.Kinesis
+import           Test.AWS.Gen.Kinesis
+import           Test.Tasty
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/Kinesis/Internal.hs b/test/Test/AWS/Kinesis/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Kinesis/Internal.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Test.AWS.Kinesis.Internal
+-- Copyright   : (c) 2013-2015 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.Kinesis.Internal where
+
+import Test.AWS.Prelude
