diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.4.5`
+`1.5.0`
 
 
 ## Description
diff --git a/amazonka-kinesis.cabal b/amazonka-kinesis.cabal
--- a/amazonka-kinesis.cabal
+++ b/amazonka-kinesis.cabal
@@ -1,13 +1,13 @@
 name:                  amazonka-kinesis
-version:               1.4.5
+version:               1.5.0
 synopsis:              Amazon Kinesis SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
-license:               OtherLicense
+license:               MPL-2.0
 license-file:          LICENSE
 author:                Brendan Hay
-maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2013-2016 Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+copyright:             Copyright (c) 2013-2017 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 cabal-version:         >= 1.10
@@ -29,14 +29,19 @@
     to get started.
 
 source-repository head
-    type:     git
-    location: git://github.com/brendanhay/amazonka.git
+    type:              git
+    location:          git://github.com/brendanhay/amazonka.git
+    subdir:            amazonka-kinesis
 
 library
     default-language:  Haskell2010
     hs-source-dirs:    src gen
 
-    ghc-options:       -Wall
+    ghc-options:
+        -Wall
+        -fwarn-incomplete-uni-patterns
+        -fwarn-incomplete-record-updates
+        -funbox-strict-fields
 
     exposed-modules:
           Network.AWS.Kinesis
@@ -58,6 +63,8 @@
         , Network.AWS.Kinesis.PutRecords
         , Network.AWS.Kinesis.RemoveTagsFromStream
         , Network.AWS.Kinesis.SplitShard
+        , Network.AWS.Kinesis.StartStreamEncryption
+        , Network.AWS.Kinesis.StopStreamEncryption
         , Network.AWS.Kinesis.Types
         , Network.AWS.Kinesis.UpdateShardCount
         , Network.AWS.Kinesis.Waiters
@@ -67,7 +74,7 @@
         , Network.AWS.Kinesis.Types.Sum
 
     build-depends:
-          amazonka-core == 1.4.5.*
+          amazonka-core == 1.5.0.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-kinesis-test
@@ -87,9 +94,9 @@
         , Test.AWS.Kinesis.Internal
 
     build-depends:
-          amazonka-core == 1.4.5.*
-        , amazonka-test == 1.4.5.*
-        , amazonka-kinesis == 1.4.5.*
+          amazonka-core == 1.5.0.*
+        , amazonka-test == 1.5.0.*
+        , amazonka-kinesis
         , base
         , bytestring
         , tasty
diff --git a/fixture/StartStreamEncryption.yaml b/fixture/StartStreamEncryption.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartStreamEncryption.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kinesis/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kinesis.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartStreamEncryptionResponse.proto b/fixture/StartStreamEncryptionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartStreamEncryptionResponse.proto
diff --git a/fixture/StopStreamEncryption.yaml b/fixture/StopStreamEncryption.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopStreamEncryption.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kinesis/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kinesis.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StopStreamEncryptionResponse.proto b/fixture/StopStreamEncryptionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopStreamEncryptionResponse.proto
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
@@ -5,9 +5,9 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -23,18 +23,36 @@
     -- * Errors
     -- $errors
 
+    -- ** KMSInvalidStateException
+    , _KMSInvalidStateException
+
+    -- ** KMSThrottlingException
+    , _KMSThrottlingException
+
     -- ** ExpiredIteratorException
     , _ExpiredIteratorException
 
     -- ** InvalidArgumentException
     , _InvalidArgumentException
 
+    -- ** KMSOptInRequired
+    , _KMSOptInRequired
+
     -- ** ProvisionedThroughputExceededException
     , _ProvisionedThroughputExceededException
 
+    -- ** KMSNotFoundException
+    , _KMSNotFoundException
+
+    -- ** KMSDisabledException
+    , _KMSDisabledException
+
     -- ** ResourceNotFoundException
     , _ResourceNotFoundException
 
+    -- ** KMSAccessDeniedException
+    , _KMSAccessDeniedException
+
     -- ** LimitExceededException
     , _LimitExceededException
 
@@ -68,6 +86,9 @@
     -- ** GetRecords
     , module Network.AWS.Kinesis.GetRecords
 
+    -- ** StopStreamEncryption
+    , module Network.AWS.Kinesis.StopStreamEncryption
+
     -- ** EnableEnhancedMonitoring
     , module Network.AWS.Kinesis.EnableEnhancedMonitoring
 
@@ -101,6 +122,9 @@
     -- ** CreateStream
     , module Network.AWS.Kinesis.CreateStream
 
+    -- ** StartStreamEncryption
+    , module Network.AWS.Kinesis.StartStreamEncryption
+
     -- ** SplitShard
     , module Network.AWS.Kinesis.SplitShard
 
@@ -112,6 +136,9 @@
 
     -- * Types
 
+    -- ** EncryptionType
+    , EncryptionType (..)
+
     -- ** MetricsName
     , MetricsName (..)
 
@@ -160,6 +187,7 @@
     -- ** Record
     , Record
     , record
+    , rEncryptionType
     , rApproximateArrivalTimestamp
     , rSequenceNumber
     , rData
@@ -183,6 +211,8 @@
     -- ** StreamDescription
     , StreamDescription
     , streamDescription
+    , sdEncryptionType
+    , sdKeyId
     , sdStreamName
     , sdStreamARN
     , sdStreamStatus
@@ -199,27 +229,29 @@
     , tagKey
     ) where
 
-import           Network.AWS.Kinesis.AddTagsToStream
-import           Network.AWS.Kinesis.CreateStream
-import           Network.AWS.Kinesis.DecreaseStreamRetentionPeriod
-import           Network.AWS.Kinesis.DeleteStream
-import           Network.AWS.Kinesis.DescribeLimits
-import           Network.AWS.Kinesis.DescribeStream
-import           Network.AWS.Kinesis.DisableEnhancedMonitoring
-import           Network.AWS.Kinesis.EnableEnhancedMonitoring
-import           Network.AWS.Kinesis.GetRecords
-import           Network.AWS.Kinesis.GetShardIterator
-import           Network.AWS.Kinesis.IncreaseStreamRetentionPeriod
-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.UpdateShardCount
-import           Network.AWS.Kinesis.Waiters
+import Network.AWS.Kinesis.AddTagsToStream
+import Network.AWS.Kinesis.CreateStream
+import Network.AWS.Kinesis.DecreaseStreamRetentionPeriod
+import Network.AWS.Kinesis.DeleteStream
+import Network.AWS.Kinesis.DescribeLimits
+import Network.AWS.Kinesis.DescribeStream
+import Network.AWS.Kinesis.DisableEnhancedMonitoring
+import Network.AWS.Kinesis.EnableEnhancedMonitoring
+import Network.AWS.Kinesis.GetRecords
+import Network.AWS.Kinesis.GetShardIterator
+import Network.AWS.Kinesis.IncreaseStreamRetentionPeriod
+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.StartStreamEncryption
+import Network.AWS.Kinesis.StopStreamEncryption
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.UpdateShardCount
+import Network.AWS.Kinesis.Waiters
 
 {- $errors
 Error matchers are designed for use with the functions provided by
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
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.AddTagsToStream
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,12 +37,12 @@
     , AddTagsToStreamResponse
     ) where
 
-import           Network.AWS.Kinesis.Types
-import           Network.AWS.Kinesis.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | Represents the input for @AddTagsToStream@ .
 --
@@ -50,10 +50,11 @@
 --
 -- /See:/ 'addTagsToStream' smart constructor.
 data AddTagsToStream = AddTagsToStream'
-    { _attsStreamName :: !Text
-    , _attsTags       :: !(Map Text Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _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.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -65,11 +66,9 @@
     :: Text -- ^ 'attsStreamName'
     -> AddTagsToStream
 addTagsToStream pStreamName_ =
-    AddTagsToStream'
-    { _attsStreamName = pStreamName_
-    , _attsTags = mempty
-    }
+  AddTagsToStream' {_attsStreamName = pStreamName_, _attsTags = mempty}
 
+
 -- | The name of the stream.
 attsStreamName :: Lens' AddTagsToStream Text
 attsStreamName = lens _attsStreamName (\ s a -> s{_attsStreamName = a});
@@ -83,9 +82,9 @@
         request = postJSON kinesis
         response = receiveNull AddTagsToStreamResponse'
 
-instance Hashable AddTagsToStream
+instance Hashable AddTagsToStream where
 
-instance NFData AddTagsToStream
+instance NFData AddTagsToStream where
 
 instance ToHeaders AddTagsToStream where
         toHeaders
@@ -111,13 +110,15 @@
 
 -- | /See:/ 'addTagsToStreamResponse' smart constructor.
 data AddTagsToStreamResponse =
-    AddTagsToStreamResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  AddTagsToStreamResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'AddTagsToStreamResponse' with the minimum fields required to make a request.
 --
 addTagsToStreamResponse
     :: AddTagsToStreamResponse
 addTagsToStreamResponse = AddTagsToStreamResponse'
 
-instance NFData AddTagsToStreamResponse
+
+instance NFData AddTagsToStreamResponse where
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
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.CreateStream
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -55,12 +55,12 @@
     , CreateStreamResponse
     ) where
 
-import           Network.AWS.Kinesis.Types
-import           Network.AWS.Kinesis.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | Represents the input for @CreateStream@ .
 --
@@ -68,10 +68,11 @@
 --
 -- /See:/ 'createStream' smart constructor.
 data CreateStream = CreateStream'
-    { _csStreamName :: !Text
-    , _csShardCount :: !Nat
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _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.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -84,11 +85,10 @@
     -> Natural -- ^ 'csShardCount'
     -> CreateStream
 createStream pStreamName_ pShardCount_ =
-    CreateStream'
-    { _csStreamName = pStreamName_
-    , _csShardCount = _Nat # pShardCount_
-    }
+  CreateStream'
+  {_csStreamName = pStreamName_, _csShardCount = _Nat # pShardCount_}
 
+
 -- | 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});
@@ -102,9 +102,9 @@
         request = postJSON kinesis
         response = receiveNull CreateStreamResponse'
 
-instance Hashable CreateStream
+instance Hashable CreateStream where
 
-instance NFData CreateStream
+instance NFData CreateStream where
 
 instance ToHeaders CreateStream where
         toHeaders
@@ -130,13 +130,15 @@
 
 -- | /See:/ 'createStreamResponse' smart constructor.
 data CreateStreamResponse =
-    CreateStreamResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  CreateStreamResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateStreamResponse' with the minimum fields required to make a request.
 --
 createStreamResponse
     :: CreateStreamResponse
 createStreamResponse = CreateStreamResponse'
 
-instance NFData CreateStreamResponse
+
+instance NFData CreateStreamResponse where
diff --git a/gen/Network/AWS/Kinesis/DecreaseStreamRetentionPeriod.hs b/gen/Network/AWS/Kinesis/DecreaseStreamRetentionPeriod.hs
--- a/gen/Network/AWS/Kinesis/DecreaseStreamRetentionPeriod.hs
+++ b/gen/Network/AWS/Kinesis/DecreaseStreamRetentionPeriod.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.DecreaseStreamRetentionPeriod
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,12 +37,12 @@
     , DecreaseStreamRetentionPeriodResponse
     ) where
 
-import           Network.AWS.Kinesis.Types
-import           Network.AWS.Kinesis.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | Represents the input for 'DecreaseStreamRetentionPeriod' .
 --
@@ -50,10 +50,11 @@
 --
 -- /See:/ 'decreaseStreamRetentionPeriod' smart constructor.
 data DecreaseStreamRetentionPeriod = DecreaseStreamRetentionPeriod'
-    { _dsrpStreamName           :: !Text
-    , _dsrpRetentionPeriodHours :: !Nat
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dsrpStreamName           :: !Text
+  , _dsrpRetentionPeriodHours :: !Nat
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DecreaseStreamRetentionPeriod' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -66,11 +67,12 @@
     -> Natural -- ^ 'dsrpRetentionPeriodHours'
     -> DecreaseStreamRetentionPeriod
 decreaseStreamRetentionPeriod pStreamName_ pRetentionPeriodHours_ =
-    DecreaseStreamRetentionPeriod'
-    { _dsrpStreamName = pStreamName_
-    , _dsrpRetentionPeriodHours = _Nat # pRetentionPeriodHours_
-    }
+  DecreaseStreamRetentionPeriod'
+  { _dsrpStreamName = pStreamName_
+  , _dsrpRetentionPeriodHours = _Nat # pRetentionPeriodHours_
+  }
 
+
 -- | The name of the stream to modify.
 dsrpStreamName :: Lens' DecreaseStreamRetentionPeriod Text
 dsrpStreamName = lens _dsrpStreamName (\ s a -> s{_dsrpStreamName = a});
@@ -87,9 +89,9 @@
         response
           = receiveNull DecreaseStreamRetentionPeriodResponse'
 
-instance Hashable DecreaseStreamRetentionPeriod
+instance Hashable DecreaseStreamRetentionPeriod where
 
-instance NFData DecreaseStreamRetentionPeriod
+instance NFData DecreaseStreamRetentionPeriod where
 
 instance ToHeaders DecreaseStreamRetentionPeriod
          where
@@ -119,13 +121,16 @@
 
 -- | /See:/ 'decreaseStreamRetentionPeriodResponse' smart constructor.
 data DecreaseStreamRetentionPeriodResponse =
-    DecreaseStreamRetentionPeriodResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  DecreaseStreamRetentionPeriodResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DecreaseStreamRetentionPeriodResponse' with the minimum fields required to make a request.
 --
 decreaseStreamRetentionPeriodResponse
     :: DecreaseStreamRetentionPeriodResponse
 decreaseStreamRetentionPeriodResponse = DecreaseStreamRetentionPeriodResponse'
 
+
 instance NFData DecreaseStreamRetentionPeriodResponse
+         where
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
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.DeleteStream
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -44,12 +44,12 @@
     , DeleteStreamResponse
     ) where
 
-import           Network.AWS.Kinesis.Types
-import           Network.AWS.Kinesis.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | Represents the input for 'DeleteStream' .
 --
@@ -57,9 +57,10 @@
 --
 -- /See:/ 'deleteStream' smart constructor.
 newtype DeleteStream = DeleteStream'
-    { _dsStreamName :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dsStreamName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteStream' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -68,11 +69,9 @@
 deleteStream
     :: Text -- ^ 'dsStreamName'
     -> DeleteStream
-deleteStream pStreamName_ =
-    DeleteStream'
-    { _dsStreamName = pStreamName_
-    }
+deleteStream pStreamName_ = DeleteStream' {_dsStreamName = pStreamName_}
 
+
 -- | The name of the stream to delete.
 dsStreamName :: Lens' DeleteStream Text
 dsStreamName = lens _dsStreamName (\ s a -> s{_dsStreamName = a});
@@ -82,9 +81,9 @@
         request = postJSON kinesis
         response = receiveNull DeleteStreamResponse'
 
-instance Hashable DeleteStream
+instance Hashable DeleteStream where
 
-instance NFData DeleteStream
+instance NFData DeleteStream where
 
 instance ToHeaders DeleteStream where
         toHeaders
@@ -108,13 +107,15 @@
 
 -- | /See:/ 'deleteStreamResponse' smart constructor.
 data DeleteStreamResponse =
-    DeleteStreamResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  DeleteStreamResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteStreamResponse' with the minimum fields required to make a request.
 --
 deleteStreamResponse
     :: DeleteStreamResponse
 deleteStreamResponse = DeleteStreamResponse'
 
-instance NFData DeleteStreamResponse
+
+instance NFData DeleteStreamResponse where
diff --git a/gen/Network/AWS/Kinesis/DescribeLimits.hs b/gen/Network/AWS/Kinesis/DescribeLimits.hs
--- a/gen/Network/AWS/Kinesis/DescribeLimits.hs
+++ b/gen/Network/AWS/Kinesis/DescribeLimits.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.DescribeLimits
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -40,24 +40,26 @@
     , dlrsOpenShardCount
     ) where
 
-import           Network.AWS.Kinesis.Types
-import           Network.AWS.Kinesis.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'describeLimits' smart constructor.
 data DescribeLimits =
-    DescribeLimits'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  DescribeLimits'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeLimits' with the minimum fields required to make a request.
 --
 describeLimits
     :: DescribeLimits
 describeLimits = DescribeLimits'
 
+
 instance AWSRequest DescribeLimits where
         type Rs DescribeLimits = DescribeLimitsResponse
         request = postJSON kinesis
@@ -68,9 +70,9 @@
                    (pure (fromEnum s)) <*> (x .:> "ShardLimit") <*>
                      (x .:> "OpenShardCount"))
 
-instance Hashable DescribeLimits
+instance Hashable DescribeLimits where
 
-instance NFData DescribeLimits
+instance NFData DescribeLimits where
 
 instance ToHeaders DescribeLimits where
         toHeaders
@@ -92,11 +94,12 @@
 
 -- | /See:/ 'describeLimitsResponse' smart constructor.
 data DescribeLimitsResponse = DescribeLimitsResponse'
-    { _dlrsResponseStatus :: !Int
-    , _dlrsShardLimit     :: !Nat
-    , _dlrsOpenShardCount :: !Nat
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dlrsResponseStatus :: !Int
+  , _dlrsShardLimit     :: !Nat
+  , _dlrsOpenShardCount :: !Nat
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeLimitsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -112,12 +115,13 @@
     -> Natural -- ^ 'dlrsOpenShardCount'
     -> DescribeLimitsResponse
 describeLimitsResponse pResponseStatus_ pShardLimit_ pOpenShardCount_ =
-    DescribeLimitsResponse'
-    { _dlrsResponseStatus = pResponseStatus_
-    , _dlrsShardLimit = _Nat # pShardLimit_
-    , _dlrsOpenShardCount = _Nat # pOpenShardCount_
-    }
+  DescribeLimitsResponse'
+  { _dlrsResponseStatus = pResponseStatus_
+  , _dlrsShardLimit = _Nat # pShardLimit_
+  , _dlrsOpenShardCount = _Nat # pOpenShardCount_
+  }
 
+
 -- | -- | The response status code.
 dlrsResponseStatus :: Lens' DescribeLimitsResponse Int
 dlrsResponseStatus = lens _dlrsResponseStatus (\ s a -> s{_dlrsResponseStatus = a});
@@ -130,4 +134,4 @@
 dlrsOpenShardCount :: Lens' DescribeLimitsResponse Natural
 dlrsOpenShardCount = lens _dlrsOpenShardCount (\ s a -> s{_dlrsOpenShardCount = a}) . _Nat;
 
-instance NFData DescribeLimitsResponse
+instance NFData DescribeLimitsResponse where
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
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.DescribeStream
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -49,13 +49,13 @@
     , dsrsStreamDescription
     ) where
 
-import           Network.AWS.Kinesis.Types
-import           Network.AWS.Kinesis.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | Represents the input for @DescribeStream@ .
 --
@@ -63,11 +63,12 @@
 --
 -- /See:/ 'describeStream' smart constructor.
 data DescribeStream = DescribeStream'
-    { _dExclusiveStartShardId :: !(Maybe Text)
-    , _dLimit                 :: !(Maybe Nat)
-    , _dStreamName            :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _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.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -81,12 +82,13 @@
     :: Text -- ^ 'dStreamName'
     -> DescribeStream
 describeStream pStreamName_ =
-    DescribeStream'
-    { _dExclusiveStartShardId = Nothing
-    , _dLimit = Nothing
-    , _dStreamName = pStreamName_
-    }
+  DescribeStream'
+  { _dExclusiveStartShardId = Nothing
+  , _dLimit = Nothing
+  , _dStreamName = pStreamName_
+  }
 
+
 -- | The shard ID of the shard to start with.
 dExclusiveStartShardId :: Lens' DescribeStream (Maybe Text)
 dExclusiveStartShardId = lens _dExclusiveStartShardId (\ s a -> s{_dExclusiveStartShardId = a});
@@ -123,9 +125,9 @@
                  DescribeStreamResponse' <$>
                    (pure (fromEnum s)) <*> (x .:> "StreamDescription"))
 
-instance Hashable DescribeStream
+instance Hashable DescribeStream where
 
-instance NFData DescribeStream
+instance NFData DescribeStream where
 
 instance ToHeaders DescribeStream where
         toHeaders
@@ -157,10 +159,11 @@
 --
 -- /See:/ 'describeStreamResponse' smart constructor.
 data DescribeStreamResponse = DescribeStreamResponse'
-    { _dsrsResponseStatus    :: !Int
-    , _dsrsStreamDescription :: !StreamDescription
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dsrsResponseStatus    :: !Int
+  , _dsrsStreamDescription :: !StreamDescription
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | 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:
@@ -173,11 +176,12 @@
     -> StreamDescription -- ^ 'dsrsStreamDescription'
     -> DescribeStreamResponse
 describeStreamResponse pResponseStatus_ pStreamDescription_ =
-    DescribeStreamResponse'
-    { _dsrsResponseStatus = pResponseStatus_
-    , _dsrsStreamDescription = pStreamDescription_
-    }
+  DescribeStreamResponse'
+  { _dsrsResponseStatus = pResponseStatus_
+  , _dsrsStreamDescription = pStreamDescription_
+  }
 
+
 -- | -- | The response status code.
 dsrsResponseStatus :: Lens' DescribeStreamResponse Int
 dsrsResponseStatus = lens _dsrsResponseStatus (\ s a -> s{_dsrsResponseStatus = a});
@@ -186,4 +190,4 @@
 dsrsStreamDescription :: Lens' DescribeStreamResponse StreamDescription
 dsrsStreamDescription = lens _dsrsStreamDescription (\ s a -> s{_dsrsStreamDescription = a});
 
-instance NFData DescribeStreamResponse
+instance NFData DescribeStreamResponse where
diff --git a/gen/Network/AWS/Kinesis/DisableEnhancedMonitoring.hs b/gen/Network/AWS/Kinesis/DisableEnhancedMonitoring.hs
--- a/gen/Network/AWS/Kinesis/DisableEnhancedMonitoring.hs
+++ b/gen/Network/AWS/Kinesis/DisableEnhancedMonitoring.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.DisableEnhancedMonitoring
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -39,12 +39,12 @@
     , emoStreamName
     ) where
 
-import           Network.AWS.Kinesis.Types
-import           Network.AWS.Kinesis.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | Represents the input for 'DisableEnhancedMonitoring' .
 --
@@ -52,10 +52,11 @@
 --
 -- /See:/ 'disableEnhancedMonitoring' smart constructor.
 data DisableEnhancedMonitoring = DisableEnhancedMonitoring'
-    { _demStreamName        :: !Text
-    , _demShardLevelMetrics :: ![MetricsName]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _demStreamName        :: !Text
+  , _demShardLevelMetrics :: ![MetricsName]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DisableEnhancedMonitoring' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -67,11 +68,10 @@
     :: Text -- ^ 'demStreamName'
     -> DisableEnhancedMonitoring
 disableEnhancedMonitoring pStreamName_ =
-    DisableEnhancedMonitoring'
-    { _demStreamName = pStreamName_
-    , _demShardLevelMetrics = mempty
-    }
+  DisableEnhancedMonitoring'
+  {_demStreamName = pStreamName_, _demShardLevelMetrics = mempty}
 
+
 -- | The name of the Amazon Kinesis stream for which to disable enhanced monitoring.
 demStreamName :: Lens' DisableEnhancedMonitoring Text
 demStreamName = lens _demStreamName (\ s a -> s{_demStreamName = a});
@@ -86,9 +86,9 @@
         request = postJSON kinesis
         response = receiveJSON (\ s h x -> eitherParseJSON x)
 
-instance Hashable DisableEnhancedMonitoring
+instance Hashable DisableEnhancedMonitoring where
 
-instance NFData DisableEnhancedMonitoring
+instance NFData DisableEnhancedMonitoring where
 
 instance ToHeaders DisableEnhancedMonitoring where
         toHeaders
diff --git a/gen/Network/AWS/Kinesis/EnableEnhancedMonitoring.hs b/gen/Network/AWS/Kinesis/EnableEnhancedMonitoring.hs
--- a/gen/Network/AWS/Kinesis/EnableEnhancedMonitoring.hs
+++ b/gen/Network/AWS/Kinesis/EnableEnhancedMonitoring.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.EnableEnhancedMonitoring
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -39,12 +39,12 @@
     , emoStreamName
     ) where
 
-import           Network.AWS.Kinesis.Types
-import           Network.AWS.Kinesis.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | Represents the input for 'EnableEnhancedMonitoring' .
 --
@@ -52,10 +52,11 @@
 --
 -- /See:/ 'enableEnhancedMonitoring' smart constructor.
 data EnableEnhancedMonitoring = EnableEnhancedMonitoring'
-    { _eemStreamName        :: !Text
-    , _eemShardLevelMetrics :: ![MetricsName]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _eemStreamName        :: !Text
+  , _eemShardLevelMetrics :: ![MetricsName]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'EnableEnhancedMonitoring' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -67,11 +68,10 @@
     :: Text -- ^ 'eemStreamName'
     -> EnableEnhancedMonitoring
 enableEnhancedMonitoring pStreamName_ =
-    EnableEnhancedMonitoring'
-    { _eemStreamName = pStreamName_
-    , _eemShardLevelMetrics = mempty
-    }
+  EnableEnhancedMonitoring'
+  {_eemStreamName = pStreamName_, _eemShardLevelMetrics = mempty}
 
+
 -- | The name of the stream for which to enable enhanced monitoring.
 eemStreamName :: Lens' EnableEnhancedMonitoring Text
 eemStreamName = lens _eemStreamName (\ s a -> s{_eemStreamName = a});
@@ -86,9 +86,9 @@
         request = postJSON kinesis
         response = receiveJSON (\ s h x -> eitherParseJSON x)
 
-instance Hashable EnableEnhancedMonitoring
+instance Hashable EnableEnhancedMonitoring where
 
-instance NFData EnableEnhancedMonitoring
+instance NFData EnableEnhancedMonitoring where
 
 instance ToHeaders EnableEnhancedMonitoring where
         toHeaders
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
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.GetRecords
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -52,12 +52,12 @@
     , grrsRecords
     ) where
 
-import           Network.AWS.Kinesis.Types
-import           Network.AWS.Kinesis.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | Represents the input for 'GetRecords' .
 --
@@ -65,10 +65,11 @@
 --
 -- /See:/ 'getRecords' smart constructor.
 data GetRecords = GetRecords'
-    { _grLimit         :: !(Maybe Nat)
-    , _grShardIterator :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _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.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -80,11 +81,9 @@
     :: Text -- ^ 'grShardIterator'
     -> GetRecords
 getRecords pShardIterator_ =
-    GetRecords'
-    { _grLimit = Nothing
-    , _grShardIterator = 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@ .
 grLimit :: Lens' GetRecords (Maybe Natural)
 grLimit = lens _grLimit (\ s a -> s{_grLimit = a}) . mapping _Nat;
@@ -105,9 +104,9 @@
                      <*> (pure (fromEnum s))
                      <*> (x .?> "Records" .!@ mempty))
 
-instance Hashable GetRecords
+instance Hashable GetRecords where
 
-instance NFData GetRecords
+instance NFData GetRecords where
 
 instance ToHeaders GetRecords where
         toHeaders
@@ -137,12 +136,13 @@
 --
 -- /See:/ 'getRecordsResponse' smart constructor.
 data GetRecordsResponse = GetRecordsResponse'
-    { _grrsNextShardIterator  :: !(Maybe Text)
-    , _grrsMillisBehindLatest :: !(Maybe Nat)
-    , _grrsResponseStatus     :: !Int
-    , _grrsRecords            :: ![Record]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _grrsNextShardIterator  :: !(Maybe Text)
+  , _grrsMillisBehindLatest :: !(Maybe Nat)
+  , _grrsResponseStatus     :: !Int
+  , _grrsRecords            :: ![Record]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | 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:
@@ -158,13 +158,14 @@
     :: Int -- ^ 'grrsResponseStatus'
     -> GetRecordsResponse
 getRecordsResponse pResponseStatus_ =
-    GetRecordsResponse'
-    { _grrsNextShardIterator = Nothing
-    , _grrsMillisBehindLatest = Nothing
-    , _grrsResponseStatus = pResponseStatus_
-    , _grrsRecords = mempty
-    }
+  GetRecordsResponse'
+  { _grrsNextShardIterator = Nothing
+  , _grrsMillisBehindLatest = Nothing
+  , _grrsResponseStatus = pResponseStatus_
+  , _grrsRecords = 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.
 grrsNextShardIterator :: Lens' GetRecordsResponse (Maybe Text)
 grrsNextShardIterator = lens _grrsNextShardIterator (\ s a -> s{_grrsNextShardIterator = a});
@@ -181,4 +182,4 @@
 grrsRecords :: Lens' GetRecordsResponse [Record]
 grrsRecords = lens _grrsRecords (\ s a -> s{_grrsRecords = a}) . _Coerce;
 
-instance NFData GetRecordsResponse
+instance NFData GetRecordsResponse where
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
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.GetShardIterator
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -53,12 +53,12 @@
     , gsirsResponseStatus
     ) where
 
-import           Network.AWS.Kinesis.Types
-import           Network.AWS.Kinesis.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | Represents the input for @GetShardIterator@ .
 --
@@ -66,13 +66,14 @@
 --
 -- /See:/ 'getShardIterator' smart constructor.
 data GetShardIterator = GetShardIterator'
-    { _gsiStartingSequenceNumber :: !(Maybe Text)
-    , _gsiTimestamp              :: !(Maybe POSIX)
-    , _gsiStreamName             :: !Text
-    , _gsiShardId                :: !Text
-    , _gsiShardIteratorType      :: !ShardIteratorType
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gsiStartingSequenceNumber :: !(Maybe Text)
+  , _gsiTimestamp              :: !(Maybe POSIX)
+  , _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.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -92,14 +93,15 @@
     -> ShardIteratorType -- ^ 'gsiShardIteratorType'
     -> GetShardIterator
 getShardIterator pStreamName_ pShardId_ pShardIteratorType_ =
-    GetShardIterator'
-    { _gsiStartingSequenceNumber = Nothing
-    , _gsiTimestamp = Nothing
-    , _gsiStreamName = pStreamName_
-    , _gsiShardId = pShardId_
-    , _gsiShardIteratorType = pShardIteratorType_
-    }
+  GetShardIterator'
+  { _gsiStartingSequenceNumber = Nothing
+  , _gsiTimestamp = Nothing
+  , _gsiStreamName = pStreamName_
+  , _gsiShardId = pShardId_
+  , _gsiShardIteratorType = pShardIteratorType_
+  }
 
+
 -- | The sequence number of the data record in the shard from which to start reading. Used with shard iterator type AT_SEQUENCE_NUMBER and AFTER_SEQUENCE_NUMBER.
 gsiStartingSequenceNumber :: Lens' GetShardIterator (Maybe Text)
 gsiStartingSequenceNumber = lens _gsiStartingSequenceNumber (\ s a -> s{_gsiStartingSequenceNumber = a});
@@ -129,9 +131,9 @@
                  GetShardIteratorResponse' <$>
                    (x .?> "ShardIterator") <*> (pure (fromEnum s)))
 
-instance Hashable GetShardIterator
+instance Hashable GetShardIterator where
 
-instance NFData GetShardIterator
+instance NFData GetShardIterator where
 
 instance ToHeaders GetShardIterator where
         toHeaders
@@ -165,10 +167,11 @@
 --
 -- /See:/ 'getShardIteratorResponse' smart constructor.
 data GetShardIteratorResponse = GetShardIteratorResponse'
-    { _gsirsShardIterator  :: !(Maybe Text)
-    , _gsirsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gsirsShardIterator  :: !(Maybe Text)
+  , _gsirsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | 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:
@@ -180,11 +183,10 @@
     :: Int -- ^ 'gsirsResponseStatus'
     -> GetShardIteratorResponse
 getShardIteratorResponse pResponseStatus_ =
-    GetShardIteratorResponse'
-    { _gsirsShardIterator = Nothing
-    , _gsirsResponseStatus = pResponseStatus_
-    }
+  GetShardIteratorResponse'
+  {_gsirsShardIterator = Nothing, _gsirsResponseStatus = pResponseStatus_}
 
+
 -- | 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});
@@ -193,4 +195,4 @@
 gsirsResponseStatus :: Lens' GetShardIteratorResponse Int
 gsirsResponseStatus = lens _gsirsResponseStatus (\ s a -> s{_gsirsResponseStatus = a});
 
-instance NFData GetShardIteratorResponse
+instance NFData GetShardIteratorResponse where
diff --git a/gen/Network/AWS/Kinesis/IncreaseStreamRetentionPeriod.hs b/gen/Network/AWS/Kinesis/IncreaseStreamRetentionPeriod.hs
--- a/gen/Network/AWS/Kinesis/IncreaseStreamRetentionPeriod.hs
+++ b/gen/Network/AWS/Kinesis/IncreaseStreamRetentionPeriod.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.IncreaseStreamRetentionPeriod
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,12 +37,12 @@
     , IncreaseStreamRetentionPeriodResponse
     ) where
 
-import           Network.AWS.Kinesis.Types
-import           Network.AWS.Kinesis.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | Represents the input for 'IncreaseStreamRetentionPeriod' .
 --
@@ -50,10 +50,11 @@
 --
 -- /See:/ 'increaseStreamRetentionPeriod' smart constructor.
 data IncreaseStreamRetentionPeriod = IncreaseStreamRetentionPeriod'
-    { _isrpStreamName           :: !Text
-    , _isrpRetentionPeriodHours :: !Nat
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _isrpStreamName           :: !Text
+  , _isrpRetentionPeriodHours :: !Nat
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'IncreaseStreamRetentionPeriod' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -66,11 +67,12 @@
     -> Natural -- ^ 'isrpRetentionPeriodHours'
     -> IncreaseStreamRetentionPeriod
 increaseStreamRetentionPeriod pStreamName_ pRetentionPeriodHours_ =
-    IncreaseStreamRetentionPeriod'
-    { _isrpStreamName = pStreamName_
-    , _isrpRetentionPeriodHours = _Nat # pRetentionPeriodHours_
-    }
+  IncreaseStreamRetentionPeriod'
+  { _isrpStreamName = pStreamName_
+  , _isrpRetentionPeriodHours = _Nat # pRetentionPeriodHours_
+  }
 
+
 -- | The name of the stream to modify.
 isrpStreamName :: Lens' IncreaseStreamRetentionPeriod Text
 isrpStreamName = lens _isrpStreamName (\ s a -> s{_isrpStreamName = a});
@@ -87,9 +89,9 @@
         response
           = receiveNull IncreaseStreamRetentionPeriodResponse'
 
-instance Hashable IncreaseStreamRetentionPeriod
+instance Hashable IncreaseStreamRetentionPeriod where
 
-instance NFData IncreaseStreamRetentionPeriod
+instance NFData IncreaseStreamRetentionPeriod where
 
 instance ToHeaders IncreaseStreamRetentionPeriod
          where
@@ -119,13 +121,16 @@
 
 -- | /See:/ 'increaseStreamRetentionPeriodResponse' smart constructor.
 data IncreaseStreamRetentionPeriodResponse =
-    IncreaseStreamRetentionPeriodResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  IncreaseStreamRetentionPeriodResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'IncreaseStreamRetentionPeriodResponse' with the minimum fields required to make a request.
 --
 increaseStreamRetentionPeriodResponse
     :: IncreaseStreamRetentionPeriodResponse
 increaseStreamRetentionPeriodResponse = IncreaseStreamRetentionPeriodResponse'
 
+
 instance NFData IncreaseStreamRetentionPeriodResponse
+         where
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
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.ListStreams
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -47,13 +47,13 @@
     , lsrsHasMoreStreams
     ) where
 
-import           Network.AWS.Kinesis.Types
-import           Network.AWS.Kinesis.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | Represents the input for @ListStreams@ .
 --
@@ -61,10 +61,11 @@
 --
 -- /See:/ 'listStreams' smart constructor.
 data ListStreams = ListStreams'
-    { _lsLimit                    :: !(Maybe Nat)
-    , _lsExclusiveStartStreamName :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _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.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -75,11 +76,9 @@
 listStreams
     :: ListStreams
 listStreams =
-    ListStreams'
-    { _lsLimit = Nothing
-    , _lsExclusiveStartStreamName = Nothing
-    }
+  ListStreams' {_lsLimit = Nothing, _lsExclusiveStartStreamName = Nothing}
 
+
 -- | The maximum number of streams to list.
 lsLimit :: Lens' ListStreams (Maybe Natural)
 lsLimit = lens _lsLimit (\ s a -> s{_lsLimit = a}) . mapping _Nat;
@@ -108,9 +107,9 @@
                      (x .?> "StreamNames" .!@ mempty)
                      <*> (x .:> "HasMoreStreams"))
 
-instance Hashable ListStreams
+instance Hashable ListStreams where
 
-instance NFData ListStreams
+instance NFData ListStreams where
 
 instance ToHeaders ListStreams where
         toHeaders
@@ -141,11 +140,12 @@
 --
 -- /See:/ 'listStreamsResponse' smart constructor.
 data ListStreamsResponse = ListStreamsResponse'
-    { _lsrsResponseStatus :: !Int
-    , _lsrsStreamNames    :: ![Text]
-    , _lsrsHasMoreStreams :: !Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lsrsResponseStatus :: !Int
+  , _lsrsStreamNames    :: ![Text]
+  , _lsrsHasMoreStreams :: !Bool
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | 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:
@@ -160,12 +160,13 @@
     -> Bool -- ^ 'lsrsHasMoreStreams'
     -> ListStreamsResponse
 listStreamsResponse pResponseStatus_ pHasMoreStreams_ =
-    ListStreamsResponse'
-    { _lsrsResponseStatus = pResponseStatus_
-    , _lsrsStreamNames = mempty
-    , _lsrsHasMoreStreams = pHasMoreStreams_
-    }
+  ListStreamsResponse'
+  { _lsrsResponseStatus = pResponseStatus_
+  , _lsrsStreamNames = mempty
+  , _lsrsHasMoreStreams = pHasMoreStreams_
+  }
 
+
 -- | -- | The response status code.
 lsrsResponseStatus :: Lens' ListStreamsResponse Int
 lsrsResponseStatus = lens _lsrsResponseStatus (\ s a -> s{_lsrsResponseStatus = a});
@@ -178,4 +179,4 @@
 lsrsHasMoreStreams :: Lens' ListStreamsResponse Bool
 lsrsHasMoreStreams = lens _lsrsHasMoreStreams (\ s a -> s{_lsrsHasMoreStreams = a});
 
-instance NFData ListStreamsResponse
+instance NFData ListStreamsResponse where
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
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.ListTagsForStream
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -40,12 +40,12 @@
     , ltfsrsHasMoreTags
     ) where
 
-import           Network.AWS.Kinesis.Types
-import           Network.AWS.Kinesis.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | Represents the input for @ListTagsForStream@ .
 --
@@ -53,11 +53,12 @@
 --
 -- /See:/ 'listTagsForStream' smart constructor.
 data ListTagsForStream = ListTagsForStream'
-    { _ltfsLimit                :: !(Maybe Nat)
-    , _ltfsExclusiveStartTagKey :: !(Maybe Text)
-    , _ltfsStreamName           :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _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.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -71,12 +72,13 @@
     :: Text -- ^ 'ltfsStreamName'
     -> ListTagsForStream
 listTagsForStream pStreamName_ =
-    ListTagsForStream'
-    { _ltfsLimit = Nothing
-    , _ltfsExclusiveStartTagKey = Nothing
-    , _ltfsStreamName = pStreamName_
-    }
+  ListTagsForStream'
+  { _ltfsLimit = Nothing
+  , _ltfsExclusiveStartTagKey = Nothing
+  , _ltfsStreamName = pStreamName_
+  }
 
+
 -- | 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;
@@ -99,9 +101,9 @@
                    (pure (fromEnum s)) <*> (x .?> "Tags" .!@ mempty) <*>
                      (x .:> "HasMoreTags"))
 
-instance Hashable ListTagsForStream
+instance Hashable ListTagsForStream where
 
-instance NFData ListTagsForStream
+instance NFData ListTagsForStream where
 
 instance ToHeaders ListTagsForStream where
         toHeaders
@@ -133,11 +135,12 @@
 --
 -- /See:/ 'listTagsForStreamResponse' smart constructor.
 data ListTagsForStreamResponse = ListTagsForStreamResponse'
-    { _ltfsrsResponseStatus :: !Int
-    , _ltfsrsTags           :: ![Tag]
-    , _ltfsrsHasMoreTags    :: !Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ltfsrsResponseStatus :: !Int
+  , _ltfsrsTags           :: ![Tag]
+  , _ltfsrsHasMoreTags    :: !Bool
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | 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:
@@ -152,12 +155,13 @@
     -> Bool -- ^ 'ltfsrsHasMoreTags'
     -> ListTagsForStreamResponse
 listTagsForStreamResponse pResponseStatus_ pHasMoreTags_ =
-    ListTagsForStreamResponse'
-    { _ltfsrsResponseStatus = pResponseStatus_
-    , _ltfsrsTags = mempty
-    , _ltfsrsHasMoreTags = pHasMoreTags_
-    }
+  ListTagsForStreamResponse'
+  { _ltfsrsResponseStatus = pResponseStatus_
+  , _ltfsrsTags = mempty
+  , _ltfsrsHasMoreTags = pHasMoreTags_
+  }
 
+
 -- | -- | The response status code.
 ltfsrsResponseStatus :: Lens' ListTagsForStreamResponse Int
 ltfsrsResponseStatus = lens _ltfsrsResponseStatus (\ s a -> s{_ltfsrsResponseStatus = a});
@@ -170,4 +174,4 @@
 ltfsrsHasMoreTags :: Lens' ListTagsForStreamResponse Bool
 ltfsrsHasMoreTags = lens _ltfsrsHasMoreTags (\ s a -> s{_ltfsrsHasMoreTags = a});
 
-instance NFData ListTagsForStreamResponse
+instance NFData ListTagsForStreamResponse where
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
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.MergeShards
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -50,12 +50,12 @@
     , MergeShardsResponse
     ) where
 
-import           Network.AWS.Kinesis.Types
-import           Network.AWS.Kinesis.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | Represents the input for @MergeShards@ .
 --
@@ -63,11 +63,12 @@
 --
 -- /See:/ 'mergeShards' smart constructor.
 data MergeShards = MergeShards'
-    { _msStreamName           :: !Text
-    , _msShardToMerge         :: !Text
-    , _msAdjacentShardToMerge :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _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.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -83,12 +84,13 @@
     -> Text -- ^ 'msAdjacentShardToMerge'
     -> MergeShards
 mergeShards pStreamName_ pShardToMerge_ pAdjacentShardToMerge_ =
-    MergeShards'
-    { _msStreamName = pStreamName_
-    , _msShardToMerge = pShardToMerge_
-    , _msAdjacentShardToMerge = pAdjacentShardToMerge_
-    }
+  MergeShards'
+  { _msStreamName = pStreamName_
+  , _msShardToMerge = pShardToMerge_
+  , _msAdjacentShardToMerge = pAdjacentShardToMerge_
+  }
 
+
 -- | The name of the stream for the merge.
 msStreamName :: Lens' MergeShards Text
 msStreamName = lens _msStreamName (\ s a -> s{_msStreamName = a});
@@ -106,9 +108,9 @@
         request = postJSON kinesis
         response = receiveNull MergeShardsResponse'
 
-instance Hashable MergeShards
+instance Hashable MergeShards where
 
-instance NFData MergeShards
+instance NFData MergeShards where
 
 instance ToHeaders MergeShards where
         toHeaders
@@ -136,13 +138,15 @@
 
 -- | /See:/ 'mergeShardsResponse' smart constructor.
 data MergeShardsResponse =
-    MergeShardsResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  MergeShardsResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'MergeShardsResponse' with the minimum fields required to make a request.
 --
 mergeShardsResponse
     :: MergeShardsResponse
 mergeShardsResponse = MergeShardsResponse'
 
-instance NFData MergeShardsResponse
+
+instance NFData MergeShardsResponse where
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
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.PutRecord
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -35,7 +35,7 @@
 --
 -- If a @PutRecord@ request cannot be processed because of insufficient 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 a stream.
+-- By default, data records are accessible for 24 hours from the time that they are added to a stream. You can use 'IncreaseStreamRetentionPeriod' or 'DecreaseStreamRetentionPeriod' to modify this retention period.
 --
 module Network.AWS.Kinesis.PutRecord
     (
@@ -53,17 +53,18 @@
     , putRecordResponse
     , PutRecordResponse
     -- * Response Lenses
+    , prrsEncryptionType
     , prrsResponseStatus
     , prrsShardId
     , prrsSequenceNumber
     ) where
 
-import           Network.AWS.Kinesis.Types
-import           Network.AWS.Kinesis.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | Represents the input for @PutRecord@ .
 --
@@ -71,13 +72,14 @@
 --
 -- /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)
+  { _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.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -97,14 +99,15 @@
     -> Text -- ^ 'prPartitionKey'
     -> PutRecord
 putRecord pStreamName_ pData_ pPartitionKey_ =
-    PutRecord'
-    { _prExplicitHashKey = Nothing
-    , _prSequenceNumberForOrdering = Nothing
-    , _prStreamName = pStreamName_
-    , _prData = _Base64 # pData_
-    , _prPartitionKey = pPartitionKey_
-    }
+  PutRecord'
+  { _prExplicitHashKey = Nothing
+  , _prSequenceNumberForOrdering = Nothing
+  , _prStreamName = pStreamName_
+  , _prData = _Base64 # pData_
+  , _prPartitionKey = pPartitionKey_
+  }
 
+
 -- | 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});
@@ -132,12 +135,13 @@
           = receiveJSON
               (\ s h x ->
                  PutRecordResponse' <$>
-                   (pure (fromEnum s)) <*> (x .:> "ShardId") <*>
-                     (x .:> "SequenceNumber"))
+                   (x .?> "EncryptionType") <*> (pure (fromEnum s)) <*>
+                     (x .:> "ShardId")
+                     <*> (x .:> "SequenceNumber"))
 
-instance Hashable PutRecord
+instance Hashable PutRecord where
 
-instance NFData PutRecord
+instance NFData PutRecord where
 
 instance ToHeaders PutRecord where
         toHeaders
@@ -171,15 +175,19 @@
 --
 -- /See:/ 'putRecordResponse' smart constructor.
 data PutRecordResponse = PutRecordResponse'
-    { _prrsResponseStatus :: !Int
-    , _prrsShardId        :: !Text
-    , _prrsSequenceNumber :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _prrsEncryptionType :: !(Maybe EncryptionType)
+  , _prrsResponseStatus :: !Int
+  , _prrsShardId        :: !Text
+  , _prrsSequenceNumber :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | 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:
 --
+-- * 'prrsEncryptionType' - The encryption type to use on the record. This parameter can be one of the following values:     * @NONE@ : Do not encrypt the records in the stream.     * @KMS@ : Use server-side encryption on the records in the stream using a customer-managed KMS key.
+--
 -- * 'prrsResponseStatus' - -- | The response status code.
 --
 -- * 'prrsShardId' - The shard ID of the shard where the data record was placed.
@@ -191,12 +199,18 @@
     -> Text -- ^ 'prrsSequenceNumber'
     -> PutRecordResponse
 putRecordResponse pResponseStatus_ pShardId_ pSequenceNumber_ =
-    PutRecordResponse'
-    { _prrsResponseStatus = pResponseStatus_
-    , _prrsShardId = pShardId_
-    , _prrsSequenceNumber = pSequenceNumber_
-    }
+  PutRecordResponse'
+  { _prrsEncryptionType = Nothing
+  , _prrsResponseStatus = pResponseStatus_
+  , _prrsShardId = pShardId_
+  , _prrsSequenceNumber = pSequenceNumber_
+  }
 
+
+-- | The encryption type to use on the record. This parameter can be one of the following values:     * @NONE@ : Do not encrypt the records in the stream.     * @KMS@ : Use server-side encryption on the records in the stream using a customer-managed KMS key.
+prrsEncryptionType :: Lens' PutRecordResponse (Maybe EncryptionType)
+prrsEncryptionType = lens _prrsEncryptionType (\ s a -> s{_prrsEncryptionType = a});
+
 -- | -- | The response status code.
 prrsResponseStatus :: Lens' PutRecordResponse Int
 prrsResponseStatus = lens _prrsResponseStatus (\ s a -> s{_prrsResponseStatus = a});
@@ -209,4 +223,4 @@
 prrsSequenceNumber :: Lens' PutRecordResponse Text
 prrsSequenceNumber = lens _prrsSequenceNumber (\ s a -> s{_prrsSequenceNumber = a});
 
-instance NFData PutRecordResponse
+instance NFData PutRecordResponse where
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
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.PutRecords
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -39,7 +39,7 @@
 --
 -- 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 Streams Developer Guide/ .
 --
--- By default, data records are accessible for only 24 hours from the time that they are added to an Amazon Kinesis stream. This retention period can be modified using the 'DecreaseStreamRetentionPeriod' and 'IncreaseStreamRetentionPeriod' operations.
+-- By default, data records are accessible for 24 hours from the time that they are added to a stream. You can use 'IncreaseStreamRetentionPeriod' or 'DecreaseStreamRetentionPeriod' to modify this retention period.
 --
 module Network.AWS.Kinesis.PutRecords
     (
@@ -54,17 +54,18 @@
     , putRecordsResponse
     , PutRecordsResponse
     -- * Response Lenses
+    , prsEncryptionType
     , prsFailedRecordCount
     , prsResponseStatus
     , prsRecords
     ) where
 
-import           Network.AWS.Kinesis.Types
-import           Network.AWS.Kinesis.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | A @PutRecords@ request.
 --
@@ -72,10 +73,11 @@
 --
 -- /See:/ 'putRecords' smart constructor.
 data PutRecords = PutRecords'
-    { _pRecordEntries :: !(List1 PutRecordsRequestEntry)
-    , _pStreamName    :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _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.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -88,11 +90,10 @@
     -> Text -- ^ 'pStreamName'
     -> PutRecords
 putRecords pRecordEntries_ pStreamName_ =
-    PutRecords'
-    { _pRecordEntries = _List1 # pRecordEntries_
-    , _pStreamName = pStreamName_
-    }
+  PutRecords'
+  {_pRecordEntries = _List1 # pRecordEntries_, _pStreamName = pStreamName_}
 
+
 -- | The records associated with the request.
 pRecordEntries :: Lens' PutRecords (NonEmpty PutRecordsRequestEntry)
 pRecordEntries = lens _pRecordEntries (\ s a -> s{_pRecordEntries = a}) . _List1;
@@ -108,12 +109,14 @@
           = receiveJSON
               (\ s h x ->
                  PutRecordsResponse' <$>
-                   (x .?> "FailedRecordCount") <*> (pure (fromEnum s))
+                   (x .?> "EncryptionType") <*>
+                     (x .?> "FailedRecordCount")
+                     <*> (pure (fromEnum s))
                      <*> (x .:> "Records"))
 
-instance Hashable PutRecords
+instance Hashable PutRecords where
 
-instance NFData PutRecords
+instance NFData PutRecords where
 
 instance ToHeaders PutRecords where
         toHeaders
@@ -143,15 +146,19 @@
 --
 -- /See:/ 'putRecordsResponse' smart constructor.
 data PutRecordsResponse = PutRecordsResponse'
-    { _prsFailedRecordCount :: !(Maybe Nat)
-    , _prsResponseStatus    :: !Int
-    , _prsRecords           :: !(List1 PutRecordsResultEntry)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _prsEncryptionType    :: !(Maybe EncryptionType)
+  , _prsFailedRecordCount :: !(Maybe Nat)
+  , _prsResponseStatus    :: !Int
+  , _prsRecords           :: !(List1 PutRecordsResultEntry)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | 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:
 --
+-- * 'prsEncryptionType' - The encryption type used on the records. This parameter can be one of the following values:     * @NONE@ : Do not encrypt the records.     * @KMS@ : Use server-side encryption on the records using a customer-managed KMS key.
+--
 -- * 'prsFailedRecordCount' - The number of unsuccessfully processed records in a @PutRecords@ request.
 --
 -- * 'prsResponseStatus' - -- | The response status code.
@@ -162,12 +169,18 @@
     -> NonEmpty PutRecordsResultEntry -- ^ 'prsRecords'
     -> PutRecordsResponse
 putRecordsResponse pResponseStatus_ pRecords_ =
-    PutRecordsResponse'
-    { _prsFailedRecordCount = Nothing
-    , _prsResponseStatus = pResponseStatus_
-    , _prsRecords = _List1 # pRecords_
-    }
+  PutRecordsResponse'
+  { _prsEncryptionType = Nothing
+  , _prsFailedRecordCount = Nothing
+  , _prsResponseStatus = pResponseStatus_
+  , _prsRecords = _List1 # pRecords_
+  }
 
+
+-- | The encryption type used on the records. This parameter can be one of the following values:     * @NONE@ : Do not encrypt the records.     * @KMS@ : Use server-side encryption on the records using a customer-managed KMS key.
+prsEncryptionType :: Lens' PutRecordsResponse (Maybe EncryptionType)
+prsEncryptionType = lens _prsEncryptionType (\ s a -> s{_prsEncryptionType = a});
+
 -- | 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;
@@ -180,4 +193,4 @@
 prsRecords :: Lens' PutRecordsResponse (NonEmpty PutRecordsResultEntry)
 prsRecords = lens _prsRecords (\ s a -> s{_prsRecords = a}) . _List1;
 
-instance NFData PutRecordsResponse
+instance NFData PutRecordsResponse where
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
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.RemoveTagsFromStream
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,12 +37,12 @@
     , RemoveTagsFromStreamResponse
     ) where
 
-import           Network.AWS.Kinesis.Types
-import           Network.AWS.Kinesis.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | Represents the input for @RemoveTagsFromStream@ .
 --
@@ -50,10 +50,11 @@
 --
 -- /See:/ 'removeTagsFromStream' smart constructor.
 data RemoveTagsFromStream = RemoveTagsFromStream'
-    { _rtfsStreamName :: !Text
-    , _rtfsTagKeys    :: !(List1 Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _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.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -66,11 +67,10 @@
     -> NonEmpty Text -- ^ 'rtfsTagKeys'
     -> RemoveTagsFromStream
 removeTagsFromStream pStreamName_ pTagKeys_ =
-    RemoveTagsFromStream'
-    { _rtfsStreamName = pStreamName_
-    , _rtfsTagKeys = _List1 # pTagKeys_
-    }
+  RemoveTagsFromStream'
+  {_rtfsStreamName = pStreamName_, _rtfsTagKeys = _List1 # pTagKeys_}
 
+
 -- | The name of the stream.
 rtfsStreamName :: Lens' RemoveTagsFromStream Text
 rtfsStreamName = lens _rtfsStreamName (\ s a -> s{_rtfsStreamName = a});
@@ -85,9 +85,9 @@
         request = postJSON kinesis
         response = receiveNull RemoveTagsFromStreamResponse'
 
-instance Hashable RemoveTagsFromStream
+instance Hashable RemoveTagsFromStream where
 
-instance NFData RemoveTagsFromStream
+instance NFData RemoveTagsFromStream where
 
 instance ToHeaders RemoveTagsFromStream where
         toHeaders
@@ -114,13 +114,15 @@
 
 -- | /See:/ 'removeTagsFromStreamResponse' smart constructor.
 data RemoveTagsFromStreamResponse =
-    RemoveTagsFromStreamResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  RemoveTagsFromStreamResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'RemoveTagsFromStreamResponse' with the minimum fields required to make a request.
 --
 removeTagsFromStreamResponse
     :: RemoveTagsFromStreamResponse
 removeTagsFromStreamResponse = RemoveTagsFromStreamResponse'
 
-instance NFData RemoveTagsFromStreamResponse
+
+instance NFData RemoveTagsFromStreamResponse where
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
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.SplitShard
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -54,12 +54,12 @@
     , SplitShardResponse
     ) where
 
-import           Network.AWS.Kinesis.Types
-import           Network.AWS.Kinesis.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | Represents the input for @SplitShard@ .
 --
@@ -67,11 +67,12 @@
 --
 -- /See:/ 'splitShard' smart constructor.
 data SplitShard = SplitShard'
-    { _ssStreamName         :: !Text
-    , _ssShardToSplit       :: !Text
-    , _ssNewStartingHashKey :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _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.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -87,12 +88,13 @@
     -> Text -- ^ 'ssNewStartingHashKey'
     -> SplitShard
 splitShard pStreamName_ pShardToSplit_ pNewStartingHashKey_ =
-    SplitShard'
-    { _ssStreamName = pStreamName_
-    , _ssShardToSplit = pShardToSplit_
-    , _ssNewStartingHashKey = pNewStartingHashKey_
-    }
+  SplitShard'
+  { _ssStreamName = pStreamName_
+  , _ssShardToSplit = pShardToSplit_
+  , _ssNewStartingHashKey = pNewStartingHashKey_
+  }
 
+
 -- | The name of the stream for the shard split.
 ssStreamName :: Lens' SplitShard Text
 ssStreamName = lens _ssStreamName (\ s a -> s{_ssStreamName = a});
@@ -110,9 +112,9 @@
         request = postJSON kinesis
         response = receiveNull SplitShardResponse'
 
-instance Hashable SplitShard
+instance Hashable SplitShard where
 
-instance NFData SplitShard
+instance NFData SplitShard where
 
 instance ToHeaders SplitShard where
         toHeaders
@@ -140,13 +142,15 @@
 
 -- | /See:/ 'splitShardResponse' smart constructor.
 data SplitShardResponse =
-    SplitShardResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  SplitShardResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SplitShardResponse' with the minimum fields required to make a request.
 --
 splitShardResponse
     :: SplitShardResponse
 splitShardResponse = SplitShardResponse'
 
-instance NFData SplitShardResponse
+
+instance NFData SplitShardResponse where
diff --git a/gen/Network/AWS/Kinesis/StartStreamEncryption.hs b/gen/Network/AWS/Kinesis/StartStreamEncryption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Kinesis/StartStreamEncryption.hs
@@ -0,0 +1,141 @@
+{-# 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.StartStreamEncryption
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enables or updates server-side encryption using an AWS KMS key for a specified stream.
+--
+--
+-- Starting encryption is an asynchronous operation. Upon receiving the request, Amazon Kinesis returns immediately and sets the status of the stream to @UPDATING@ . After the update is complete, Amazon Kinesis sets the status of the stream back to @ACTIVE@ . Updating or applying encryption normally takes a few seconds to complete but it can take minutes. You can continue to read and write data to your stream while its status is @UPDATING@ . Once the status of the stream is @ACTIVE@ , records written to the stream will begin to be encrypted.
+--
+-- API Limits: You can successfully apply a new AWS KMS key for server-side encryption 25 times in a rolling 24 hour period.
+--
+-- Note: It can take up to 5 seconds after the stream is in an @ACTIVE@ status before all records written to the stream are encrypted. After you’ve enabled encryption, you can verify encryption was applied by inspecting the API response from @PutRecord@ or @PutRecords@ .
+--
+module Network.AWS.Kinesis.StartStreamEncryption
+    (
+    -- * Creating a Request
+      startStreamEncryption
+    , StartStreamEncryption
+    -- * Request Lenses
+    , sStreamName
+    , sEncryptionType
+    , sKeyId
+
+    -- * Destructuring the Response
+    , startStreamEncryptionResponse
+    , StartStreamEncryptionResponse
+    ) where
+
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'startStreamEncryption' smart constructor.
+data StartStreamEncryption = StartStreamEncryption'
+  { _sStreamName     :: !Text
+  , _sEncryptionType :: !EncryptionType
+  , _sKeyId          :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StartStreamEncryption' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sStreamName' - The name of the stream for which to start encrypting records.
+--
+-- * 'sEncryptionType' - The encryption type to use. This parameter can be one of the following values:     * @NONE@ : Not valid for this operation. An @InvalidOperationException@ will be thrown.     * @KMS@ : Use server-side encryption on the records in the stream using a customer-managed KMS key.
+--
+-- * 'sKeyId' - The GUID for the customer-managed KMS key to use for encryption. You can also use a Kinesis-owned master key by specifying the alias @aws/kinesis@ .
+startStreamEncryption
+    :: Text -- ^ 'sStreamName'
+    -> EncryptionType -- ^ 'sEncryptionType'
+    -> Text -- ^ 'sKeyId'
+    -> StartStreamEncryption
+startStreamEncryption pStreamName_ pEncryptionType_ pKeyId_ =
+  StartStreamEncryption'
+  { _sStreamName = pStreamName_
+  , _sEncryptionType = pEncryptionType_
+  , _sKeyId = pKeyId_
+  }
+
+
+-- | The name of the stream for which to start encrypting records.
+sStreamName :: Lens' StartStreamEncryption Text
+sStreamName = lens _sStreamName (\ s a -> s{_sStreamName = a});
+
+-- | The encryption type to use. This parameter can be one of the following values:     * @NONE@ : Not valid for this operation. An @InvalidOperationException@ will be thrown.     * @KMS@ : Use server-side encryption on the records in the stream using a customer-managed KMS key.
+sEncryptionType :: Lens' StartStreamEncryption EncryptionType
+sEncryptionType = lens _sEncryptionType (\ s a -> s{_sEncryptionType = a});
+
+-- | The GUID for the customer-managed KMS key to use for encryption. You can also use a Kinesis-owned master key by specifying the alias @aws/kinesis@ .
+sKeyId :: Lens' StartStreamEncryption Text
+sKeyId = lens _sKeyId (\ s a -> s{_sKeyId = a});
+
+instance AWSRequest StartStreamEncryption where
+        type Rs StartStreamEncryption =
+             StartStreamEncryptionResponse
+        request = postJSON kinesis
+        response = receiveNull StartStreamEncryptionResponse'
+
+instance Hashable StartStreamEncryption where
+
+instance NFData StartStreamEncryption where
+
+instance ToHeaders StartStreamEncryption where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Kinesis_20131202.StartStreamEncryption" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON StartStreamEncryption where
+        toJSON StartStreamEncryption'{..}
+          = object
+              (catMaybes
+                 [Just ("StreamName" .= _sStreamName),
+                  Just ("EncryptionType" .= _sEncryptionType),
+                  Just ("KeyId" .= _sKeyId)])
+
+instance ToPath StartStreamEncryption where
+        toPath = const "/"
+
+instance ToQuery StartStreamEncryption where
+        toQuery = const mempty
+
+-- | /See:/ 'startStreamEncryptionResponse' smart constructor.
+data StartStreamEncryptionResponse =
+  StartStreamEncryptionResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StartStreamEncryptionResponse' with the minimum fields required to make a request.
+--
+startStreamEncryptionResponse
+    :: StartStreamEncryptionResponse
+startStreamEncryptionResponse = StartStreamEncryptionResponse'
+
+
+instance NFData StartStreamEncryptionResponse where
diff --git a/gen/Network/AWS/Kinesis/StopStreamEncryption.hs b/gen/Network/AWS/Kinesis/StopStreamEncryption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Kinesis/StopStreamEncryption.hs
@@ -0,0 +1,141 @@
+{-# 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.StopStreamEncryption
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disables server-side encryption for a specified stream.
+--
+--
+-- Stopping encryption is an asynchronous operation. Upon receiving the request, Amazon Kinesis returns immediately and sets the status of the stream to @UPDATING@ . After the update is complete, Amazon Kinesis sets the status of the stream back to @ACTIVE@ . Stopping encryption normally takes a few seconds to complete but it can take minutes. You can continue to read and write data to your stream while its status is @UPDATING@ . Once the status of the stream is @ACTIVE@ records written to the stream will no longer be encrypted by the Amazon Kinesis Streams service.
+--
+-- API Limits: You can successfully disable server-side encryption 25 times in a rolling 24 hour period.
+--
+-- Note: It can take up to 5 seconds after the stream is in an @ACTIVE@ status before all records written to the stream are no longer subject to encryption. After you’ve disabled encryption, you can verify encryption was not applied by inspecting the API response from @PutRecord@ or @PutRecords@ .
+--
+module Network.AWS.Kinesis.StopStreamEncryption
+    (
+    -- * Creating a Request
+      stopStreamEncryption
+    , StopStreamEncryption
+    -- * Request Lenses
+    , sseStreamName
+    , sseEncryptionType
+    , sseKeyId
+
+    -- * Destructuring the Response
+    , stopStreamEncryptionResponse
+    , StopStreamEncryptionResponse
+    ) where
+
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'stopStreamEncryption' smart constructor.
+data StopStreamEncryption = StopStreamEncryption'
+  { _sseStreamName     :: !Text
+  , _sseEncryptionType :: !EncryptionType
+  , _sseKeyId          :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StopStreamEncryption' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sseStreamName' - The name of the stream on which to stop encrypting records.
+--
+-- * 'sseEncryptionType' - The encryption type. This parameter can be one of the following values:     * @NONE@ : Not valid for this operation. An @InvalidOperationException@ will be thrown.     * @KMS@ : Use server-side encryption on the records in the stream using a customer-managed KMS key.
+--
+-- * 'sseKeyId' - The GUID for the customer-managed key that was used for encryption.
+stopStreamEncryption
+    :: Text -- ^ 'sseStreamName'
+    -> EncryptionType -- ^ 'sseEncryptionType'
+    -> Text -- ^ 'sseKeyId'
+    -> StopStreamEncryption
+stopStreamEncryption pStreamName_ pEncryptionType_ pKeyId_ =
+  StopStreamEncryption'
+  { _sseStreamName = pStreamName_
+  , _sseEncryptionType = pEncryptionType_
+  , _sseKeyId = pKeyId_
+  }
+
+
+-- | The name of the stream on which to stop encrypting records.
+sseStreamName :: Lens' StopStreamEncryption Text
+sseStreamName = lens _sseStreamName (\ s a -> s{_sseStreamName = a});
+
+-- | The encryption type. This parameter can be one of the following values:     * @NONE@ : Not valid for this operation. An @InvalidOperationException@ will be thrown.     * @KMS@ : Use server-side encryption on the records in the stream using a customer-managed KMS key.
+sseEncryptionType :: Lens' StopStreamEncryption EncryptionType
+sseEncryptionType = lens _sseEncryptionType (\ s a -> s{_sseEncryptionType = a});
+
+-- | The GUID for the customer-managed key that was used for encryption.
+sseKeyId :: Lens' StopStreamEncryption Text
+sseKeyId = lens _sseKeyId (\ s a -> s{_sseKeyId = a});
+
+instance AWSRequest StopStreamEncryption where
+        type Rs StopStreamEncryption =
+             StopStreamEncryptionResponse
+        request = postJSON kinesis
+        response = receiveNull StopStreamEncryptionResponse'
+
+instance Hashable StopStreamEncryption where
+
+instance NFData StopStreamEncryption where
+
+instance ToHeaders StopStreamEncryption where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Kinesis_20131202.StopStreamEncryption" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON StopStreamEncryption where
+        toJSON StopStreamEncryption'{..}
+          = object
+              (catMaybes
+                 [Just ("StreamName" .= _sseStreamName),
+                  Just ("EncryptionType" .= _sseEncryptionType),
+                  Just ("KeyId" .= _sseKeyId)])
+
+instance ToPath StopStreamEncryption where
+        toPath = const "/"
+
+instance ToQuery StopStreamEncryption where
+        toQuery = const mempty
+
+-- | /See:/ 'stopStreamEncryptionResponse' smart constructor.
+data StopStreamEncryptionResponse =
+  StopStreamEncryptionResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StopStreamEncryptionResponse' with the minimum fields required to make a request.
+--
+stopStreamEncryptionResponse
+    :: StopStreamEncryptionResponse
+stopStreamEncryptionResponse = StopStreamEncryptionResponse'
+
+
+instance NFData StopStreamEncryptionResponse where
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
@@ -4,9 +4,9 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.Types
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -16,13 +16,22 @@
       kinesis
 
     -- * Errors
+    , _KMSInvalidStateException
+    , _KMSThrottlingException
     , _ExpiredIteratorException
     , _InvalidArgumentException
+    , _KMSOptInRequired
     , _ProvisionedThroughputExceededException
+    , _KMSNotFoundException
+    , _KMSDisabledException
     , _ResourceNotFoundException
+    , _KMSAccessDeniedException
     , _LimitExceededException
     , _ResourceInUseException
 
+    -- * EncryptionType
+    , EncryptionType (..)
+
     -- * MetricsName
     , MetricsName (..)
 
@@ -71,6 +80,7 @@
     -- * Record
     , Record
     , record
+    , rEncryptionType
     , rApproximateArrivalTimestamp
     , rSequenceNumber
     , rData
@@ -94,6 +104,8 @@
     -- * StreamDescription
     , StreamDescription
     , streamDescription
+    , sdEncryptionType
+    , sdKeyId
     , sdStreamName
     , sdStreamARN
     , sdStreamStatus
@@ -110,38 +122,40 @@
     , tagKey
     ) where
 
-import           Network.AWS.Kinesis.Types.Product
-import           Network.AWS.Kinesis.Types.Sum
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Sign.V4
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Kinesis.Types.Sum
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Sign.V4
 
 -- | API version @2013-12-02@ of the Amazon Kinesis SDK configuration.
 kinesis :: Service
 kinesis =
-    Service
-    { _svcAbbrev = "Kinesis"
-    , _svcSigner = v4
-    , _svcPrefix = "kinesis"
-    , _svcVersion = "2013-12-02"
-    , _svcEndpoint = defaultEndpoint kinesis
-    , _svcTimeout = Just 70
-    , _svcCheck = statusSuccess
-    , _svcError = parseJSONError "Kinesis"
-    , _svcRetry = retry
-    }
+  Service
+  { _svcAbbrev = "Kinesis"
+  , _svcSigner = v4
+  , _svcPrefix = "kinesis"
+  , _svcVersion = "2013-12-02"
+  , _svcEndpoint = defaultEndpoint kinesis
+  , _svcTimeout = Just 70
+  , _svcCheck = statusSuccess
+  , _svcError = parseJSONError "Kinesis"
+  , _svcRetry = retry
+  }
   where
     retry =
-        Exponential
-        { _retryBase = 5.0e-2
-        , _retryGrowth = 2
-        , _retryAttempts = 5
-        , _retryCheck = check
-        }
+      Exponential
+      { _retryBase = 5.0e-2
+      , _retryGrowth = 2
+      , _retryAttempts = 5
+      , _retryCheck = check
+      }
     check e
+      | has (hasCode "ThrottledException" . hasStatus 400) e =
+        Just "throttled_exception"
       | has (hasStatus 429) e = Just "too_many_requests"
       | has (hasCode "ThrottlingException" . hasStatus 400) e =
-          Just "throttling_exception"
+        Just "throttling_exception"
       | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
       | has (hasStatus 504) e = Just "gateway_timeout"
       | has (hasStatus 502) e = Just "bad_gateway"
@@ -150,40 +164,93 @@
       | has (hasStatus 509) e = Just "limit_exceeded"
       | otherwise = Nothing
 
+
+-- | The request was rejected because the state of the specified resource isn't valid for this request. For more information, see <http://docs.aws.amazon.com/kms/latest/developerguide/key-state.html How Key State Affects Use of a Customer Master Key> in the /AWS Key Management Service Developer Guide/ .
+--
+--
+_KMSInvalidStateException :: AsError a => Getting (First ServiceError) a ServiceError
+_KMSInvalidStateException =
+  _MatchServiceError kinesis "KMSInvalidStateException"
+
+
+-- | The request was denied due to request throttling. For more information about throttling, see <http://docs.aws.amazon.com/kms/latest/developerguide/limits.html#requests-per-second Limits> in the /AWS Key Management Service Developer Guide/ .
+--
+--
+_KMSThrottlingException :: AsError a => Getting (First ServiceError) a ServiceError
+_KMSThrottlingException = _MatchServiceError kinesis "KMSThrottlingException"
+
+
 -- | The provided iterator exceeds the maximum age allowed.
 --
 --
 _ExpiredIteratorException :: AsError a => Getting (First ServiceError) a ServiceError
-_ExpiredIteratorException = _ServiceError . hasCode "ExpiredIteratorException"
+_ExpiredIteratorException =
+  _MatchServiceError kinesis "ExpiredIteratorException"
 
+
 -- | 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"
+_InvalidArgumentException =
+  _MatchServiceError kinesis "InvalidArgumentException"
 
+
+-- | The AWS access key ID needs a subscription for the service.
+--
+--
+_KMSOptInRequired :: AsError a => Getting (First ServiceError) a ServiceError
+_KMSOptInRequired = _MatchServiceError kinesis "KMSOptInRequired"
+
+
 -- | The request rate for the stream 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/kinesis/latest/dev/service-sizes-and-limits.html Streams Limits> in the /Amazon Kinesis Streams Developer Guide/ , and <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"
+  _MatchServiceError kinesis "ProvisionedThroughputExceededException"
 
+
+-- | The request was rejected because the specified entity or resource couldn't be found.
+--
+--
+_KMSNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_KMSNotFoundException = _MatchServiceError kinesis "KMSNotFoundException"
+
+
+-- | The request was rejected because the specified CMK isn't enabled.
+--
+--
+_KMSDisabledException :: AsError a => Getting (First ServiceError) a ServiceError
+_KMSDisabledException = _MatchServiceError kinesis "KMSDisabledException"
+
+
 -- | The requested resource could not be found. The stream might not be specified correctly.
 --
 --
 _ResourceNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
 _ResourceNotFoundException =
-    _ServiceError . hasCode "ResourceNotFoundException"
+  _MatchServiceError kinesis "ResourceNotFoundException"
 
+
+-- | The ciphertext references a key that doesn't exist or that you don't have access to.
+--
+--
+_KMSAccessDeniedException :: AsError a => Getting (First ServiceError) a ServiceError
+_KMSAccessDeniedException =
+  _MatchServiceError kinesis "KMSAccessDeniedException"
+
+
 -- | 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"
+_LimitExceededException = _MatchServiceError kinesis "LimitExceededException"
 
+
 -- | The resource is not available for this operation. For successful operation, the resource needs to be in the @ACTIVE@ state.
 --
 --
 _ResourceInUseException :: AsError a => Getting (First ServiceError) a ServiceError
-_ResourceInUseException = _ServiceError . hasCode "ResourceInUseException"
+_ResourceInUseException = _MatchServiceError kinesis "ResourceInUseException"
+
diff --git a/gen/Network/AWS/Kinesis/Types/Product.hs b/gen/Network/AWS/Kinesis/Types/Product.hs
--- a/gen/Network/AWS/Kinesis/Types/Product.hs
+++ b/gen/Network/AWS/Kinesis/Types/Product.hs
@@ -9,17 +9,17 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.Types.Product
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@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.Lens
-import           Network.AWS.Prelude
+import Network.AWS.Kinesis.Types.Sum
+import Network.AWS.Lens
+import Network.AWS.Prelude
 
 -- | Represents enhanced metrics types.
 --
@@ -27,9 +27,10 @@
 --
 -- /See:/ 'enhancedMetrics' smart constructor.
 newtype EnhancedMetrics = EnhancedMetrics'
-    { _emShardLevelMetrics :: Maybe [MetricsName]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _emShardLevelMetrics :: Maybe [MetricsName]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'EnhancedMetrics' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -37,11 +38,9 @@
 -- * 'emShardLevelMetrics' - List of shard-level metrics. The following are the valid shard-level metrics. The value "@ALL@ " enhances every metric.     * @IncomingBytes@      * @IncomingRecords@      * @OutgoingBytes@      * @OutgoingRecords@      * @WriteProvisionedThroughputExceeded@      * @ReadProvisionedThroughputExceeded@      * @IteratorAgeMilliseconds@      * @ALL@  For more information, see <http://docs.aws.amazon.com/kinesis/latest/dev/monitoring-with-cloudwatch.html Monitoring the Amazon Kinesis Streams Service with Amazon CloudWatch> in the /Amazon Kinesis Streams Developer Guide/ .
 enhancedMetrics
     :: EnhancedMetrics
-enhancedMetrics =
-    EnhancedMetrics'
-    { _emShardLevelMetrics = Nothing
-    }
+enhancedMetrics = EnhancedMetrics' {_emShardLevelMetrics = Nothing}
 
+
 -- | List of shard-level metrics. The following are the valid shard-level metrics. The value "@ALL@ " enhances every metric.     * @IncomingBytes@      * @IncomingRecords@      * @OutgoingBytes@      * @OutgoingRecords@      * @WriteProvisionedThroughputExceeded@      * @ReadProvisionedThroughputExceeded@      * @IteratorAgeMilliseconds@      * @ALL@  For more information, see <http://docs.aws.amazon.com/kinesis/latest/dev/monitoring-with-cloudwatch.html Monitoring the Amazon Kinesis Streams Service with Amazon CloudWatch> in the /Amazon Kinesis Streams Developer Guide/ .
 emShardLevelMetrics :: Lens' EnhancedMetrics [MetricsName]
 emShardLevelMetrics = lens _emShardLevelMetrics (\ s a -> s{_emShardLevelMetrics = a}) . _Default . _Coerce;
@@ -53,9 +52,9 @@
                  EnhancedMetrics' <$>
                    (x .:? "ShardLevelMetrics" .!= mempty))
 
-instance Hashable EnhancedMetrics
+instance Hashable EnhancedMetrics where
 
-instance NFData EnhancedMetrics
+instance NFData EnhancedMetrics where
 
 -- | Represents the output for 'EnableEnhancedMonitoring' and 'DisableEnhancedMonitoring' .
 --
@@ -63,11 +62,12 @@
 --
 -- /See:/ 'enhancedMonitoringOutput' smart constructor.
 data EnhancedMonitoringOutput = EnhancedMonitoringOutput'
-    { _emoDesiredShardLevelMetrics :: !(Maybe [MetricsName])
-    , _emoCurrentShardLevelMetrics :: !(Maybe [MetricsName])
-    , _emoStreamName               :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _emoDesiredShardLevelMetrics :: !(Maybe [MetricsName])
+  , _emoCurrentShardLevelMetrics :: !(Maybe [MetricsName])
+  , _emoStreamName               :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'EnhancedMonitoringOutput' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -80,12 +80,13 @@
 enhancedMonitoringOutput
     :: EnhancedMonitoringOutput
 enhancedMonitoringOutput =
-    EnhancedMonitoringOutput'
-    { _emoDesiredShardLevelMetrics = Nothing
-    , _emoCurrentShardLevelMetrics = Nothing
-    , _emoStreamName = Nothing
-    }
+  EnhancedMonitoringOutput'
+  { _emoDesiredShardLevelMetrics = Nothing
+  , _emoCurrentShardLevelMetrics = Nothing
+  , _emoStreamName = Nothing
+  }
 
+
 -- | Represents the list of all the metrics that would be in the enhanced state after the operation.
 emoDesiredShardLevelMetrics :: Lens' EnhancedMonitoringOutput [MetricsName]
 emoDesiredShardLevelMetrics = lens _emoDesiredShardLevelMetrics (\ s a -> s{_emoDesiredShardLevelMetrics = a}) . _Default . _Coerce;
@@ -107,9 +108,9 @@
                      (x .:? "CurrentShardLevelMetrics" .!= mempty)
                      <*> (x .:? "StreamName"))
 
-instance Hashable EnhancedMonitoringOutput
+instance Hashable EnhancedMonitoringOutput where
 
-instance NFData EnhancedMonitoringOutput
+instance NFData EnhancedMonitoringOutput where
 
 -- | The range of possible hash key values for the shard, which is a set of ordered contiguous positive integers.
 --
@@ -117,10 +118,11 @@
 --
 -- /See:/ 'hashKeyRange' smart constructor.
 data HashKeyRange = HashKeyRange'
-    { _hkrStartingHashKey :: !Text
-    , _hkrEndingHashKey   :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _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:
@@ -133,11 +135,10 @@
     -> Text -- ^ 'hkrEndingHashKey'
     -> HashKeyRange
 hashKeyRange pStartingHashKey_ pEndingHashKey_ =
-    HashKeyRange'
-    { _hkrStartingHashKey = pStartingHashKey_
-    , _hkrEndingHashKey = 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});
@@ -153,9 +154,9 @@
                  HashKeyRange' <$>
                    (x .: "StartingHashKey") <*> (x .: "EndingHashKey"))
 
-instance Hashable HashKeyRange
+instance Hashable HashKeyRange where
 
-instance NFData HashKeyRange
+instance NFData HashKeyRange where
 
 -- | Represents the output for @PutRecords@ .
 --
@@ -163,11 +164,12 @@
 --
 -- /See:/ 'putRecordsRequestEntry' smart constructor.
 data PutRecordsRequestEntry = PutRecordsRequestEntry'
-    { _prreExplicitHashKey :: !(Maybe Text)
-    , _prreData            :: !Base64
-    , _prrePartitionKey    :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _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:
@@ -182,12 +184,13 @@
     -> Text -- ^ 'prrePartitionKey'
     -> PutRecordsRequestEntry
 putRecordsRequestEntry pData_ pPartitionKey_ =
-    PutRecordsRequestEntry'
-    { _prreExplicitHashKey = Nothing
-    , _prreData = _Base64 # pData_
-    , _prrePartitionKey = 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});
@@ -200,9 +203,9 @@
 prrePartitionKey :: Lens' PutRecordsRequestEntry Text
 prrePartitionKey = lens _prrePartitionKey (\ s a -> s{_prrePartitionKey = a});
 
-instance Hashable PutRecordsRequestEntry
+instance Hashable PutRecordsRequestEntry where
 
-instance NFData PutRecordsRequestEntry
+instance NFData PutRecordsRequestEntry where
 
 instance ToJSON PutRecordsRequestEntry where
         toJSON PutRecordsRequestEntry'{..}
@@ -218,12 +221,13 @@
 --
 -- /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)
+  { _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:
@@ -238,13 +242,14 @@
 putRecordsResultEntry
     :: PutRecordsResultEntry
 putRecordsResultEntry =
-    PutRecordsResultEntry'
-    { _prreSequenceNumber = Nothing
-    , _prreErrorCode = Nothing
-    , _prreErrorMessage = Nothing
-    , _prreShardId = Nothing
-    }
+  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});
@@ -270,9 +275,9 @@
                      (x .:? "ErrorMessage")
                      <*> (x .:? "ShardId"))
 
-instance Hashable PutRecordsResultEntry
+instance Hashable PutRecordsResultEntry where
 
-instance NFData PutRecordsResultEntry
+instance NFData PutRecordsResultEntry where
 
 -- | The unit of data of the Amazon Kinesis stream, which is composed of a sequence number, a partition key, and a data blob.
 --
@@ -280,19 +285,23 @@
 --
 -- /See:/ 'record' smart constructor.
 data Record = Record'
-    { _rApproximateArrivalTimestamp :: !(Maybe POSIX)
-    , _rSequenceNumber              :: !Text
-    , _rData                        :: !Base64
-    , _rPartitionKey                :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _rEncryptionType              :: !(Maybe EncryptionType)
+  , _rApproximateArrivalTimestamp :: !(Maybe POSIX)
+  , _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:
 --
+-- * 'rEncryptionType' - The encryption type used on the record. This parameter can be one of the following values:     * @NONE@ : Do not encrypt the records in the stream.     * @KMS@ : Use server-side encryption on the records in the stream using a customer-managed KMS key.
+--
 -- * 'rApproximateArrivalTimestamp' - The approximate time that the record was inserted into the stream.
 --
--- * 'rSequenceNumber' - The unique identifier of the record in the stream.
+-- * 'rSequenceNumber' - The unique identifier of the record within its shard.
 --
 -- * 'rData' - 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. When the data blob (the payload before base64-encoding) is added to the partition key size, the total size must not exceed the maximum record size (1 MB).-- /Note:/ This 'Lens' automatically encodes and decodes Base64 data. The underlying isomorphism will encode to Base64 representation during serialisation, and decode from Base64 representation during deserialisation. This 'Lens' accepts and returns only raw unencoded data.
 --
@@ -303,18 +312,24 @@
     -> Text -- ^ 'rPartitionKey'
     -> Record
 record pSequenceNumber_ pData_ pPartitionKey_ =
-    Record'
-    { _rApproximateArrivalTimestamp = Nothing
-    , _rSequenceNumber = pSequenceNumber_
-    , _rData = _Base64 # pData_
-    , _rPartitionKey = pPartitionKey_
-    }
+  Record'
+  { _rEncryptionType = Nothing
+  , _rApproximateArrivalTimestamp = Nothing
+  , _rSequenceNumber = pSequenceNumber_
+  , _rData = _Base64 # pData_
+  , _rPartitionKey = pPartitionKey_
+  }
 
+
+-- | The encryption type used on the record. This parameter can be one of the following values:     * @NONE@ : Do not encrypt the records in the stream.     * @KMS@ : Use server-side encryption on the records in the stream using a customer-managed KMS key.
+rEncryptionType :: Lens' Record (Maybe EncryptionType)
+rEncryptionType = lens _rEncryptionType (\ s a -> s{_rEncryptionType = a});
+
 -- | The approximate time that the record was inserted into the stream.
 rApproximateArrivalTimestamp :: Lens' Record (Maybe UTCTime)
 rApproximateArrivalTimestamp = lens _rApproximateArrivalTimestamp (\ s a -> s{_rApproximateArrivalTimestamp = a}) . mapping _Time;
 
--- | The unique identifier of the record in the stream.
+-- | The unique identifier of the record within its shard.
 rSequenceNumber :: Lens' Record Text
 rSequenceNumber = lens _rSequenceNumber (\ s a -> s{_rSequenceNumber = a});
 
@@ -331,14 +346,15 @@
           = withObject "Record"
               (\ x ->
                  Record' <$>
-                   (x .:? "ApproximateArrivalTimestamp") <*>
-                     (x .: "SequenceNumber")
+                   (x .:? "EncryptionType") <*>
+                     (x .:? "ApproximateArrivalTimestamp")
+                     <*> (x .: "SequenceNumber")
                      <*> (x .: "Data")
                      <*> (x .: "PartitionKey"))
 
-instance Hashable Record
+instance Hashable Record where
 
-instance NFData Record
+instance NFData Record where
 
 -- | The range of possible sequence numbers for the shard.
 --
@@ -346,10 +362,11 @@
 --
 -- /See:/ 'sequenceNumberRange' smart constructor.
 data SequenceNumberRange = SequenceNumberRange'
-    { _snrEndingSequenceNumber   :: !(Maybe Text)
-    , _snrStartingSequenceNumber :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _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:
@@ -361,11 +378,12 @@
     :: Text -- ^ 'snrStartingSequenceNumber'
     -> SequenceNumberRange
 sequenceNumberRange pStartingSequenceNumber_ =
-    SequenceNumberRange'
-    { _snrEndingSequenceNumber = Nothing
-    , _snrStartingSequenceNumber = 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});
@@ -382,9 +400,9 @@
                    (x .:? "EndingSequenceNumber") <*>
                      (x .: "StartingSequenceNumber"))
 
-instance Hashable SequenceNumberRange
+instance Hashable SequenceNumberRange where
 
-instance NFData SequenceNumberRange
+instance NFData SequenceNumberRange where
 
 -- | A uniquely identified group of data records in an Amazon Kinesis stream.
 --
@@ -392,13 +410,14 @@
 --
 -- /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)
+  { _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:
@@ -418,14 +437,15 @@
     -> SequenceNumberRange -- ^ 'sSequenceNumberRange'
     -> Shard
 shard pShardId_ pHashKeyRange_ pSequenceNumberRange_ =
-    Shard'
-    { _sAdjacentParentShardId = Nothing
-    , _sParentShardId = Nothing
-    , _sShardId = pShardId_
-    , _sHashKeyRange = pHashKeyRange_
-    , _sSequenceNumberRange = 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});
@@ -457,9 +477,9 @@
                      <*> (x .: "HashKeyRange")
                      <*> (x .: "SequenceNumberRange"))
 
-instance Hashable Shard
+instance Hashable Shard where
 
-instance NFData Shard
+instance NFData Shard where
 
 -- | Represents the output for 'DescribeStream' .
 --
@@ -467,20 +487,27 @@
 --
 -- /See:/ 'streamDescription' smart constructor.
 data StreamDescription = StreamDescription'
-    { _sdStreamName              :: !Text
-    , _sdStreamARN               :: !Text
-    , _sdStreamStatus            :: !StreamStatus
-    , _sdShards                  :: ![Shard]
-    , _sdHasMoreShards           :: !Bool
-    , _sdRetentionPeriodHours    :: !Nat
-    , _sdStreamCreationTimestamp :: !POSIX
-    , _sdEnhancedMonitoring      :: ![EnhancedMetrics]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _sdEncryptionType          :: !(Maybe EncryptionType)
+  , _sdKeyId                   :: !(Maybe Text)
+  , _sdStreamName              :: !Text
+  , _sdStreamARN               :: !Text
+  , _sdStreamStatus            :: !StreamStatus
+  , _sdShards                  :: ![Shard]
+  , _sdHasMoreShards           :: !Bool
+  , _sdRetentionPeriodHours    :: !Nat
+  , _sdStreamCreationTimestamp :: !POSIX
+  , _sdEnhancedMonitoring      :: ![EnhancedMetrics]
+  } 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:
 --
+-- * 'sdEncryptionType' - The server-side encryption type used on the stream. This parameter can be one of the following values:     * @NONE@ : Do not encrypt the records in the stream.     * @KMS@ : Use server-side encryption on the records in the stream using a customer-managed KMS key.
+--
+-- * 'sdKeyId' - The GUID for the customer-managed KMS key used for encryption on the stream.
+--
 -- * 'sdStreamName' - The name of the stream being described.
 --
 -- * 'sdStreamARN' - The Amazon Resource Name (ARN) for the stream being described.
@@ -505,17 +532,28 @@
     -> UTCTime -- ^ 'sdStreamCreationTimestamp'
     -> StreamDescription
 streamDescription pStreamName_ pStreamARN_ pStreamStatus_ pHasMoreShards_ pRetentionPeriodHours_ pStreamCreationTimestamp_ =
-    StreamDescription'
-    { _sdStreamName = pStreamName_
-    , _sdStreamARN = pStreamARN_
-    , _sdStreamStatus = pStreamStatus_
-    , _sdShards = mempty
-    , _sdHasMoreShards = pHasMoreShards_
-    , _sdRetentionPeriodHours = _Nat # pRetentionPeriodHours_
-    , _sdStreamCreationTimestamp = _Time # pStreamCreationTimestamp_
-    , _sdEnhancedMonitoring = mempty
-    }
+  StreamDescription'
+  { _sdEncryptionType = Nothing
+  , _sdKeyId = Nothing
+  , _sdStreamName = pStreamName_
+  , _sdStreamARN = pStreamARN_
+  , _sdStreamStatus = pStreamStatus_
+  , _sdShards = mempty
+  , _sdHasMoreShards = pHasMoreShards_
+  , _sdRetentionPeriodHours = _Nat # pRetentionPeriodHours_
+  , _sdStreamCreationTimestamp = _Time # pStreamCreationTimestamp_
+  , _sdEnhancedMonitoring = mempty
+  }
 
+
+-- | The server-side encryption type used on the stream. This parameter can be one of the following values:     * @NONE@ : Do not encrypt the records in the stream.     * @KMS@ : Use server-side encryption on the records in the stream using a customer-managed KMS key.
+sdEncryptionType :: Lens' StreamDescription (Maybe EncryptionType)
+sdEncryptionType = lens _sdEncryptionType (\ s a -> s{_sdEncryptionType = a});
+
+-- | The GUID for the customer-managed KMS key used for encryption on the stream.
+sdKeyId :: Lens' StreamDescription (Maybe Text)
+sdKeyId = lens _sdKeyId (\ s a -> s{_sdKeyId = a});
+
 -- | The name of the stream being described.
 sdStreamName :: Lens' StreamDescription Text
 sdStreamName = lens _sdStreamName (\ s a -> s{_sdStreamName = a});
@@ -553,17 +591,19 @@
           = withObject "StreamDescription"
               (\ x ->
                  StreamDescription' <$>
-                   (x .: "StreamName") <*> (x .: "StreamARN") <*>
-                     (x .: "StreamStatus")
+                   (x .:? "EncryptionType") <*> (x .:? "KeyId") <*>
+                     (x .: "StreamName")
+                     <*> (x .: "StreamARN")
+                     <*> (x .: "StreamStatus")
                      <*> (x .:? "Shards" .!= mempty)
                      <*> (x .: "HasMoreShards")
                      <*> (x .: "RetentionPeriodHours")
                      <*> (x .: "StreamCreationTimestamp")
                      <*> (x .:? "EnhancedMonitoring" .!= mempty))
 
-instance Hashable StreamDescription
+instance Hashable StreamDescription where
 
-instance NFData StreamDescription
+instance NFData StreamDescription where
 
 -- | Metadata assigned to the stream, consisting of a key-value pair.
 --
@@ -571,10 +611,11 @@
 --
 -- /See:/ 'tag' smart constructor.
 data Tag = Tag'
-    { _tagValue :: !(Maybe Text)
-    , _tagKey   :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _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:
@@ -585,12 +626,9 @@
 tag
     :: Text -- ^ 'tagKey'
     -> Tag
-tag pKey_ =
-    Tag'
-    { _tagValue = Nothing
-    , _tagKey = pKey_
-    }
+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});
@@ -604,6 +642,6 @@
           = withObject "Tag"
               (\ x -> Tag' <$> (x .:? "Value") <*> (x .: "Key"))
 
-instance Hashable Tag
+instance Hashable Tag where
 
-instance NFData Tag
+instance NFData Tag where
diff --git a/gen/Network/AWS/Kinesis/Types/Sum.hs b/gen/Network/AWS/Kinesis/Types/Sum.hs
--- a/gen/Network/AWS/Kinesis/Types/Sum.hs
+++ b/gen/Network/AWS/Kinesis/Types/Sum.hs
@@ -9,27 +9,58 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.Types.Sum
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 module Network.AWS.Kinesis.Types.Sum where
 
-import           Network.AWS.Prelude
+import Network.AWS.Prelude
 
+data EncryptionType
+  = KMS
+  | None
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText EncryptionType where
+    parser = takeLowerText >>= \case
+        "kms" -> pure KMS
+        "none" -> pure None
+        e -> fromTextError $ "Failure parsing EncryptionType from value: '" <> e
+           <> "'. Accepted values: kms, none"
+
+instance ToText EncryptionType where
+    toText = \case
+        KMS -> "KMS"
+        None -> "NONE"
+
+instance Hashable     EncryptionType
+instance NFData       EncryptionType
+instance ToByteString EncryptionType
+instance ToQuery      EncryptionType
+instance ToHeader     EncryptionType
+
+instance ToJSON EncryptionType where
+    toJSON = toJSONText
+
+instance FromJSON EncryptionType where
+    parseJSON = parseJSONText "EncryptionType"
+
 data MetricsName
-    = All
-    | IncomingBytes
-    | IncomingRecords
-    | IteratorAgeMilliseconds
-    | OutgoingBytes
-    | OutgoingRecords
-    | ReadProvisionedThroughputExceeded
-    | WriteProvisionedThroughputExceeded
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = All
+  | IncomingBytes
+  | IncomingRecords
+  | IteratorAgeMilliseconds
+  | OutgoingBytes
+  | OutgoingRecords
+  | ReadProvisionedThroughputExceeded
+  | WriteProvisionedThroughputExceeded
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText MetricsName where
     parser = takeLowerText >>= \case
         "all" -> pure All
@@ -67,9 +98,10 @@
     parseJSON = parseJSONText "MetricsName"
 
 data ScalingType =
-    UniformScaling
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  UniformScaling
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText ScalingType where
     parser = takeLowerText >>= \case
         "uniform_scaling" -> pure UniformScaling
@@ -90,13 +122,14 @@
     toJSON = toJSONText
 
 data ShardIteratorType
-    = AfterSequenceNumber
-    | AtSequenceNumber
-    | AtTimestamp
-    | Latest
-    | TrimHorizon
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = AfterSequenceNumber
+  | AtSequenceNumber
+  | AtTimestamp
+  | Latest
+  | TrimHorizon
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText ShardIteratorType where
     parser = takeLowerText >>= \case
         "after_sequence_number" -> pure AfterSequenceNumber
@@ -125,11 +158,12 @@
     toJSON = toJSONText
 
 data StreamStatus
-    = Active
-    | Creating
-    | Deleting
-    | Updating
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Active
+  | Creating
+  | Deleting
+  | Updating
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
 
 instance FromText StreamStatus where
     parser = takeLowerText >>= \case
diff --git a/gen/Network/AWS/Kinesis/UpdateShardCount.hs b/gen/Network/AWS/Kinesis/UpdateShardCount.hs
--- a/gen/Network/AWS/Kinesis/UpdateShardCount.hs
+++ b/gen/Network/AWS/Kinesis/UpdateShardCount.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.UpdateShardCount
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -23,10 +23,26 @@
 --
 -- Updating the shard count is an asynchronous operation. Upon receiving the request, Amazon Kinesis returns immediately and sets the status of the stream to @UPDATING@ . After the update is complete, Amazon Kinesis sets the status of the stream back to @ACTIVE@ . Depending on the size of the stream, the scaling action could take a few minutes to complete. You can continue to read and write data to your stream while its status is @UPDATING@ .
 --
--- To update the shard count, Amazon Kinesis performs splits and merges and individual shards. This can cause short-lived shards to be created, in addition to the final shards. We recommend that you double or halve the shard count, as this results in the fewest number of splits or merges.
+-- To update the shard count, Amazon Kinesis performs splits or merges on individual shards. This can cause short-lived shards to be created, in addition to the final shards. We recommend that you double or halve the shard count, as this results in the fewest number of splits or merges.
 --
--- This operation has a rate limit of twice per rolling 24 hour period. You cannot scale above double your current shard count, scale below half your current shard count, or exceed the shard limits for your account.
+-- This operation has the following limits, which are per region per account unless otherwise noted:
 --
+--     * scale more than twice per rolling 24 hour period
+--
+--     * scale up above double your current shard count
+--
+--     * scale down below half your current shard count
+--
+--     * scale up above 200 shards in a stream
+--
+--     * scale a stream with more than 200 shards down unless the result is less than 200 shards
+--
+--     * scale up above the shard limits for your account
+--
+--     *
+--
+--
+--
 -- For the default limits for an AWS account, see <http://docs.aws.amazon.com/kinesis/latest/dev/service-sizes-and-limits.html Streams Limits> in the /Amazon Kinesis Streams Developer Guide/ . If you need to increase a limit, <http://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html contact AWS Support> .
 --
 module Network.AWS.Kinesis.UpdateShardCount
@@ -49,20 +65,21 @@
     , uscrsResponseStatus
     ) where
 
-import           Network.AWS.Kinesis.Types
-import           Network.AWS.Kinesis.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Kinesis.Types
+import Network.AWS.Kinesis.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'updateShardCount' smart constructor.
 data UpdateShardCount = UpdateShardCount'
-    { _uscStreamName       :: !Text
-    , _uscTargetShardCount :: !Nat
-    , _uscScalingType      :: !ScalingType
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _uscStreamName       :: !Text
+  , _uscTargetShardCount :: !Nat
+  , _uscScalingType      :: !ScalingType
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'UpdateShardCount' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -78,12 +95,13 @@
     -> ScalingType -- ^ 'uscScalingType'
     -> UpdateShardCount
 updateShardCount pStreamName_ pTargetShardCount_ pScalingType_ =
-    UpdateShardCount'
-    { _uscStreamName = pStreamName_
-    , _uscTargetShardCount = _Nat # pTargetShardCount_
-    , _uscScalingType = pScalingType_
-    }
+  UpdateShardCount'
+  { _uscStreamName = pStreamName_
+  , _uscTargetShardCount = _Nat # pTargetShardCount_
+  , _uscScalingType = pScalingType_
+  }
 
+
 -- | The name of the stream.
 uscStreamName :: Lens' UpdateShardCount Text
 uscStreamName = lens _uscStreamName (\ s a -> s{_uscStreamName = a});
@@ -107,9 +125,9 @@
                      <*> (x .?> "CurrentShardCount")
                      <*> (pure (fromEnum s)))
 
-instance Hashable UpdateShardCount
+instance Hashable UpdateShardCount where
 
-instance NFData UpdateShardCount
+instance NFData UpdateShardCount where
 
 instance ToHeaders UpdateShardCount where
         toHeaders
@@ -136,12 +154,13 @@
 
 -- | /See:/ 'updateShardCountResponse' smart constructor.
 data UpdateShardCountResponse = UpdateShardCountResponse'
-    { _uscrsTargetShardCount  :: !(Maybe Nat)
-    , _uscrsStreamName        :: !(Maybe Text)
-    , _uscrsCurrentShardCount :: !(Maybe Nat)
-    , _uscrsResponseStatus    :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _uscrsTargetShardCount  :: !(Maybe Nat)
+  , _uscrsStreamName        :: !(Maybe Text)
+  , _uscrsCurrentShardCount :: !(Maybe Nat)
+  , _uscrsResponseStatus    :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'UpdateShardCountResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -157,13 +176,14 @@
     :: Int -- ^ 'uscrsResponseStatus'
     -> UpdateShardCountResponse
 updateShardCountResponse pResponseStatus_ =
-    UpdateShardCountResponse'
-    { _uscrsTargetShardCount = Nothing
-    , _uscrsStreamName = Nothing
-    , _uscrsCurrentShardCount = Nothing
-    , _uscrsResponseStatus = pResponseStatus_
-    }
+  UpdateShardCountResponse'
+  { _uscrsTargetShardCount = Nothing
+  , _uscrsStreamName = Nothing
+  , _uscrsCurrentShardCount = Nothing
+  , _uscrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | The updated number of shards.
 uscrsTargetShardCount :: Lens' UpdateShardCountResponse (Maybe Natural)
 uscrsTargetShardCount = lens _uscrsTargetShardCount (\ s a -> s{_uscrsTargetShardCount = a}) . mapping _Nat;
@@ -180,4 +200,4 @@
 uscrsResponseStatus :: Lens' UpdateShardCountResponse Int
 uscrsResponseStatus = lens _uscrsResponseStatus (\ s a -> s{_uscrsResponseStatus = a});
 
-instance NFData UpdateShardCountResponse
+instance NFData UpdateShardCountResponse where
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
@@ -7,41 +7,44 @@
 
 -- |
 -- Module      : Network.AWS.Kinesis.Waiters
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 module Network.AWS.Kinesis.Waiters where
 
-import           Network.AWS.Kinesis.DescribeStream
-import           Network.AWS.Kinesis.DescribeStream
-import           Network.AWS.Kinesis.Types
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Waiter
+import Network.AWS.Kinesis.DescribeStream
+import Network.AWS.Kinesis.DescribeStream
+import Network.AWS.Kinesis.Types
+import Network.AWS.Lens
+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
-                             (dsrsStreamDescription .
-                              sdStreamStatus . to toTextCI)]
-    }
+  Wait
+  { _waitName = "StreamExists"
+  , _waitAttempts = 18
+  , _waitDelay = 10
+  , _waitAcceptors =
+      [ matchAll
+          "ACTIVE"
+          AcceptSuccess
+          (dsrsStreamDescription . sdStreamStatus . to toTextCI)
+      ]
+  }
 
+
 -- | Polls 'Network.AWS.Kinesis.DescribeStream' every 10 seconds until a successful state is reached. An error is returned after 18 failed checks.
 streamNotExists :: Wait DescribeStream
 streamNotExists =
-    Wait
-    { _waitName = "StreamNotExists"
-    , _waitAttempts = 18
-    , _waitDelay = 10
-    , _waitAcceptors = [matchError "ResourceNotFoundException" AcceptSuccess]
-    }
+  Wait
+  { _waitName = "StreamNotExists"
+  , _waitAttempts = 18
+  , _waitDelay = 10
+  , _waitAcceptors = [matchError "ResourceNotFoundException" AcceptSuccess]
+  }
+
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -2,9 +2,9 @@
 
 -- |
 -- Module      : Main
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
diff --git a/test/Test/AWS/Gen/Kinesis.hs b/test/Test/AWS/Gen/Kinesis.hs
--- a/test/Test/AWS/Gen/Kinesis.hs
+++ b/test/Test/AWS/Gen/Kinesis.hs
@@ -5,20 +5,20 @@
 
 -- |
 -- Module      : Test.AWS.Gen.Kinesis
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 module Test.AWS.Gen.Kinesis where
 
 import Data.Proxy
+import Network.AWS.Kinesis
 import Test.AWS.Fixture
+import Test.AWS.Kinesis.Internal
 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.
@@ -43,6 +43,9 @@
 --         , requestGetRecords $
 --             getRecords
 --
+--         , requestStopStreamEncryption $
+--             stopStreamEncryption
+--
 --         , requestEnableEnhancedMonitoring $
 --             enableEnhancedMonitoring
 --
@@ -76,6 +79,9 @@
 --         , requestCreateStream $
 --             createStream
 --
+--         , requestStartStreamEncryption $
+--             startStreamEncryption
+--
 --         , requestSplitShard $
 --             splitShard
 --
@@ -103,6 +109,9 @@
 --         , responseGetRecords $
 --             getRecordsResponse
 --
+--         , responseStopStreamEncryption $
+--             stopStreamEncryptionResponse
+--
 --         , responseEnableEnhancedMonitoring $
 --             enhancedMonitoringOutput
 --
@@ -136,6 +145,9 @@
 --         , responseCreateStream $
 --             createStreamResponse
 --
+--         , responseStartStreamEncryption $
+--             startStreamEncryptionResponse
+--
 --         , responseSplitShard $
 --             splitShardResponse
 --
@@ -175,6 +187,11 @@
     "GetRecords"
     "fixture/GetRecords.yaml"
 
+requestStopStreamEncryption :: StopStreamEncryption -> TestTree
+requestStopStreamEncryption = req
+    "StopStreamEncryption"
+    "fixture/StopStreamEncryption.yaml"
+
 requestEnableEnhancedMonitoring :: EnableEnhancedMonitoring -> TestTree
 requestEnableEnhancedMonitoring = req
     "EnableEnhancedMonitoring"
@@ -230,6 +247,11 @@
     "CreateStream"
     "fixture/CreateStream.yaml"
 
+requestStartStreamEncryption :: StartStreamEncryption -> TestTree
+requestStartStreamEncryption = req
+    "StartStreamEncryption"
+    "fixture/StartStreamEncryption.yaml"
+
 requestSplitShard :: SplitShard -> TestTree
 requestSplitShard = req
     "SplitShard"
@@ -282,6 +304,13 @@
     kinesis
     (Proxy :: Proxy GetRecords)
 
+responseStopStreamEncryption :: StopStreamEncryptionResponse -> TestTree
+responseStopStreamEncryption = res
+    "StopStreamEncryptionResponse"
+    "fixture/StopStreamEncryptionResponse.proto"
+    kinesis
+    (Proxy :: Proxy StopStreamEncryption)
+
 responseEnableEnhancedMonitoring :: EnhancedMonitoringOutput -> TestTree
 responseEnableEnhancedMonitoring = res
     "EnableEnhancedMonitoringResponse"
@@ -358,6 +387,13 @@
     "fixture/CreateStreamResponse.proto"
     kinesis
     (Proxy :: Proxy CreateStream)
+
+responseStartStreamEncryption :: StartStreamEncryptionResponse -> TestTree
+responseStartStreamEncryption = res
+    "StartStreamEncryptionResponse"
+    "fixture/StartStreamEncryptionResponse.proto"
+    kinesis
+    (Proxy :: Proxy StartStreamEncryption)
 
 responseSplitShard :: SplitShardResponse -> TestTree
 responseSplitShard = res
