diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,19 +1,71 @@
 # Amazon CloudWatch Logs SDK
 
-> _Warning:_ This is an experimental preview release which is still under heavy development and not intended for public consumption, _caveat emptor_!
-
+* [Version](#version)
 * [Description](#description)
 * [Contribute](#contribute)
 * [Licence](#licence)
 
+
+## Version
+
+`1.0.0`
+
+
 ## Description
 
-Amazon CloudWatch Logs enables you to monitor, store, and access your system,
-application, and custom log files.
+Amazon CloudWatch Logs API Reference
 
+This is the /Amazon CloudWatch Logs API Reference/. Amazon CloudWatch
+Logs enables you to monitor, store, and access your system, application,
+and custom log files. This guide provides detailed information about
+Amazon CloudWatch Logs actions, data types, parameters, and errors. For
+detailed information about Amazon CloudWatch Logs features and their
+associated API calls, go to the
+<http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide Amazon CloudWatch Developer Guide>.
+
+Use the following links to get started using the /Amazon CloudWatch Logs
+API Reference/:
+
+-   <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_Operations.html Actions>:
+    An alphabetical list of all Amazon CloudWatch Logs actions.
+-   <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_Types.html Data Types>:
+    An alphabetical list of all Amazon CloudWatch Logs data types.
+-   <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/CommonParameters.html Common Parameters>:
+    Parameters that all Query actions can use.
+-   <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/CommonErrors.html Common Errors>:
+    Client and server errors that all actions can return.
+-   <http://docs.aws.amazon.com/general/latest/gr/index.html?rande.html Regions and Endpoints>:
+    Itemized regions and endpoints for all AWS products.
+
+In addition to using the Amazon CloudWatch Logs API, you can also use
+the following SDKs and third-party libraries to access Amazon CloudWatch
+Logs programmatically.
+
+-   <http://aws.amazon.com/documentation/sdkforjava/ AWS SDK for Java Documentation>
+-   <http://aws.amazon.com/documentation/sdkfornet/ AWS SDK for .NET Documentation>
+-   <http://aws.amazon.com/documentation/sdkforphp/ AWS SDK for PHP Documentation>
+-   <http://aws.amazon.com/documentation/sdkforruby/ AWS SDK for Ruby Documentation>
+
+Developers in the AWS developer community also provide their own
+libraries, which you can find at the following AWS developer centers:
+
+-   <http://aws.amazon.com/java/ AWS Java Developer Center>
+-   <http://aws.amazon.com/php/ AWS PHP Developer Center>
+-   <http://aws.amazon.com/python/ AWS Python Developer Center>
+-   <http://aws.amazon.com/ruby/ AWS Ruby Developer Center>
+-   <http://aws.amazon.com/net/ AWS Windows and .NET Developer Center>
+
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-cloudwatch-logs)
 and the [AWS API Reference](http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/Welcome.html).
 
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information and sending requests.
+
+Use of lenses is required for constructing and manipulating types.
+This is due to the amount of nesting of AWS types and transparency regarding
+de/serialisation into more palatable Haskell values.
+The provided lenses should be compatible with any of the major lens libraries
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
 
 ## Contribute
 
diff --git a/amazonka-cloudwatch-logs.cabal b/amazonka-cloudwatch-logs.cabal
--- a/amazonka-cloudwatch-logs.cabal
+++ b/amazonka-cloudwatch-logs.cabal
@@ -1,26 +1,73 @@
 name:                  amazonka-cloudwatch-logs
-version:               0.3.6
+version:               1.0.0
 synopsis:              Amazon CloudWatch Logs SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
 license-file:          LICENSE
 author:                Brendan Hay
 maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2013-2014 Brendan Hay
+copyright:             Copyright (c) 2013-2015 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 extra-source-files:    README.md
 cabal-version:         >= 1.10
 
 description:
-    Amazon CloudWatch Logs enables you to monitor, store, and access your system,
-    application, and custom log files.
+    Amazon CloudWatch Logs API Reference
 
+    This is the /Amazon CloudWatch Logs API Reference/. Amazon CloudWatch
+    Logs enables you to monitor, store, and access your system, application,
+    and custom log files. This guide provides detailed information about
+    Amazon CloudWatch Logs actions, data types, parameters, and errors. For
+    detailed information about Amazon CloudWatch Logs features and their
+    associated API calls, go to the
+    <http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide Amazon CloudWatch Developer Guide>.
+
+    Use the following links to get started using the /Amazon CloudWatch Logs
+    API Reference/:
+
+    -   <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_Operations.html Actions>:
+        An alphabetical list of all Amazon CloudWatch Logs actions.
+    -   <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_Types.html Data Types>:
+        An alphabetical list of all Amazon CloudWatch Logs data types.
+    -   <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/CommonParameters.html Common Parameters>:
+        Parameters that all Query actions can use.
+    -   <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/CommonErrors.html Common Errors>:
+        Client and server errors that all actions can return.
+    -   <http://docs.aws.amazon.com/general/latest/gr/index.html?rande.html Regions and Endpoints>:
+        Itemized regions and endpoints for all AWS products.
+
+    In addition to using the Amazon CloudWatch Logs API, you can also use
+    the following SDKs and third-party libraries to access Amazon CloudWatch
+    Logs programmatically.
+
+    -   <http://aws.amazon.com/documentation/sdkforjava/ AWS SDK for Java Documentation>
+    -   <http://aws.amazon.com/documentation/sdkfornet/ AWS SDK for .NET Documentation>
+    -   <http://aws.amazon.com/documentation/sdkforphp/ AWS SDK for PHP Documentation>
+    -   <http://aws.amazon.com/documentation/sdkforruby/ AWS SDK for Ruby Documentation>
+
+    Developers in the AWS developer community also provide their own
+    libraries, which you can find at the following AWS developer centers:
+
+    -   <http://aws.amazon.com/java/ AWS Java Developer Center>
+    -   <http://aws.amazon.com/php/ AWS PHP Developer Center>
+    -   <http://aws.amazon.com/python/ AWS Python Developer Center>
+    -   <http://aws.amazon.com/ruby/ AWS Ruby Developer Center>
+    -   <http://aws.amazon.com/net/ AWS Windows and .NET Developer Center>
     .
-    /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/Welcome.html AWS API Reference>
+    The types from this library are intended to be used with
+    <http://hackage.haskell.org/package/amazonka amazonka>, which provides
+    mechanisms for specifying AuthN/AuthZ information and sending requests.
     .
-    /Warning:/ This is an experimental preview release which is still under
-    heavy development and not intended for public consumption, caveat emptor!
+    Use of lenses is required for constructing and manipulating types.
+    This is due to the amount of nesting of AWS types and transparency regarding
+    de/serialisation into more palatable Haskell values.
+    The provided lenses should be compatible with any of the major lens libraries
+    such as <http://hackage.haskell.org/package/lens lens> or
+    <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+    .
+    See "Network.AWS.CloudWatchLogs" and the <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/Welcome.html AWS API Reference>
+    to get started.
 
 source-repository head
     type:     git
@@ -36,23 +83,61 @@
           Network.AWS.CloudWatchLogs
         , Network.AWS.CloudWatchLogs.CreateLogGroup
         , Network.AWS.CloudWatchLogs.CreateLogStream
+        , Network.AWS.CloudWatchLogs.DeleteDestination
         , Network.AWS.CloudWatchLogs.DeleteLogGroup
         , Network.AWS.CloudWatchLogs.DeleteLogStream
         , Network.AWS.CloudWatchLogs.DeleteMetricFilter
         , Network.AWS.CloudWatchLogs.DeleteRetentionPolicy
+        , Network.AWS.CloudWatchLogs.DeleteSubscriptionFilter
+        , Network.AWS.CloudWatchLogs.DescribeDestinations
         , Network.AWS.CloudWatchLogs.DescribeLogGroups
         , Network.AWS.CloudWatchLogs.DescribeLogStreams
         , Network.AWS.CloudWatchLogs.DescribeMetricFilters
+        , Network.AWS.CloudWatchLogs.DescribeSubscriptionFilters
         , Network.AWS.CloudWatchLogs.FilterLogEvents
         , Network.AWS.CloudWatchLogs.GetLogEvents
+        , Network.AWS.CloudWatchLogs.PutDestination
+        , Network.AWS.CloudWatchLogs.PutDestinationPolicy
         , Network.AWS.CloudWatchLogs.PutLogEvents
         , Network.AWS.CloudWatchLogs.PutMetricFilter
         , Network.AWS.CloudWatchLogs.PutRetentionPolicy
+        , Network.AWS.CloudWatchLogs.PutSubscriptionFilter
         , Network.AWS.CloudWatchLogs.TestMetricFilter
         , Network.AWS.CloudWatchLogs.Types
+        , Network.AWS.CloudWatchLogs.Waiters
 
     other-modules:
+          Network.AWS.CloudWatchLogs.Types.Product
+        , Network.AWS.CloudWatchLogs.Types.Sum
 
     build-depends:
-          amazonka-core == 0.3.6.*
+          amazonka-core == 1.0.0.*
         , base          >= 4.7     && < 5
+
+test-suite amazonka-cloudwatch-logs-test
+    type:              exitcode-stdio-1.0
+    default-language:  Haskell2010
+    hs-source-dirs:    test
+    main-is:           Main.hs
+
+    ghc-options:       -Wall -threaded
+
+    -- This is not comprehensive if modules have manually been added.
+    -- It exists to ensure cabal 'somewhat' detects test module changes.
+    other-modules:
+          Test.AWS.CloudWatchLogs
+        , Test.AWS.Gen.CloudWatchLogs
+        , Test.AWS.CloudWatchLogs.Internal
+
+    build-depends:
+          amazonka-core == 1.0.0
+        , amazonka-test == 1.0.0
+        , amazonka-cloudwatch-logs == 1.0.0
+        , base
+        , bytestring
+        , lens
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/gen/Network/AWS/CloudWatchLogs.hs b/gen/Network/AWS/CloudWatchLogs.hs
--- a/gen/Network/AWS/CloudWatchLogs.hs
+++ b/gen/Network/AWS/CloudWatchLogs.hs
@@ -1,49 +1,319 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.CloudWatchLogs
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Amazon CloudWatch Logs enables you to monitor, store, and access your system,
--- application, and custom log files.
+-- Amazon CloudWatch Logs API Reference
+--
+-- This is the /Amazon CloudWatch Logs API Reference/. Amazon CloudWatch
+-- Logs enables you to monitor, store, and access your system, application,
+-- and custom log files. This guide provides detailed information about
+-- Amazon CloudWatch Logs actions, data types, parameters, and errors. For
+-- detailed information about Amazon CloudWatch Logs features and their
+-- associated API calls, go to the
+-- <http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide Amazon CloudWatch Developer Guide>.
+--
+-- Use the following links to get started using the /Amazon CloudWatch Logs
+-- API Reference/:
+--
+-- -   <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_Operations.html Actions>:
+--     An alphabetical list of all Amazon CloudWatch Logs actions.
+-- -   <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_Types.html Data Types>:
+--     An alphabetical list of all Amazon CloudWatch Logs data types.
+-- -   <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/CommonParameters.html Common Parameters>:
+--     Parameters that all Query actions can use.
+-- -   <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/CommonErrors.html Common Errors>:
+--     Client and server errors that all actions can return.
+-- -   <http://docs.aws.amazon.com/general/latest/gr/index.html?rande.html Regions and Endpoints>:
+--     Itemized regions and endpoints for all AWS products.
+--
+-- In addition to using the Amazon CloudWatch Logs API, you can also use
+-- the following SDKs and third-party libraries to access Amazon CloudWatch
+-- Logs programmatically.
+--
+-- -   <http://aws.amazon.com/documentation/sdkforjava/ AWS SDK for Java Documentation>
+-- -   <http://aws.amazon.com/documentation/sdkfornet/ AWS SDK for .NET Documentation>
+-- -   <http://aws.amazon.com/documentation/sdkforphp/ AWS SDK for PHP Documentation>
+-- -   <http://aws.amazon.com/documentation/sdkforruby/ AWS SDK for Ruby Documentation>
+--
+-- Developers in the AWS developer community also provide their own
+-- libraries, which you can find at the following AWS developer centers:
+--
+-- -   <http://aws.amazon.com/java/ AWS Java Developer Center>
+-- -   <http://aws.amazon.com/php/ AWS PHP Developer Center>
+-- -   <http://aws.amazon.com/python/ AWS Python Developer Center>
+-- -   <http://aws.amazon.com/ruby/ AWS Ruby Developer Center>
+-- -   <http://aws.amazon.com/net/ AWS Windows and .NET Developer Center>
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/Welcome.html AWS API Reference>
 module Network.AWS.CloudWatchLogs
-    ( module Network.AWS.CloudWatchLogs.CreateLogGroup
+    (
+    -- * Service
+      CloudWatchLogs
+
+    -- * Errors
+    -- $errors
+
+    -- ** InvalidParameterException
+    , _InvalidParameterException
+
+    -- ** InvalidSequenceTokenException
+    , _InvalidSequenceTokenException
+
+    -- ** ResourceAlreadyExistsException
+    , _ResourceAlreadyExistsException
+
+    -- ** OperationAbortedException
+    , _OperationAbortedException
+
+    -- ** DataAlreadyAcceptedException
+    , _DataAlreadyAcceptedException
+
+    -- ** ServiceUnavailableException
+    , _ServiceUnavailableException
+
+    -- ** ResourceNotFoundException
+    , _ResourceNotFoundException
+
+    -- ** LimitExceededException
+    , _LimitExceededException
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** DescribeDestinations
+    , module Network.AWS.CloudWatchLogs.DescribeDestinations
+
+    -- ** DeleteDestination
+    , module Network.AWS.CloudWatchLogs.DeleteDestination
+
+    -- ** PutDestination
+    , module Network.AWS.CloudWatchLogs.PutDestination
+
+    -- ** DescribeSubscriptionFilters
+    , module Network.AWS.CloudWatchLogs.DescribeSubscriptionFilters
+
+    -- ** GetLogEvents
+    , module Network.AWS.CloudWatchLogs.GetLogEvents
+
+    -- ** DescribeLogGroups
+    , module Network.AWS.CloudWatchLogs.DescribeLogGroups
+
+    -- ** FilterLogEvents
+    , module Network.AWS.CloudWatchLogs.FilterLogEvents
+
+    -- ** DeleteLogStream
+    , module Network.AWS.CloudWatchLogs.DeleteLogStream
+
+    -- ** CreateLogStream
     , module Network.AWS.CloudWatchLogs.CreateLogStream
+
+    -- ** CreateLogGroup
+    , module Network.AWS.CloudWatchLogs.CreateLogGroup
+
+    -- ** PutLogEvents
+    , module Network.AWS.CloudWatchLogs.PutLogEvents
+
+    -- ** DeleteSubscriptionFilter
+    , module Network.AWS.CloudWatchLogs.DeleteSubscriptionFilter
+
+    -- ** PutSubscriptionFilter
+    , module Network.AWS.CloudWatchLogs.PutSubscriptionFilter
+
+    -- ** DeleteLogGroup
     , module Network.AWS.CloudWatchLogs.DeleteLogGroup
-    , module Network.AWS.CloudWatchLogs.DeleteLogStream
+
+    -- ** TestMetricFilter
+    , module Network.AWS.CloudWatchLogs.TestMetricFilter
+
+    -- ** DescribeMetricFilters
+    , module Network.AWS.CloudWatchLogs.DescribeMetricFilters
+
+    -- ** DeleteMetricFilter
     , module Network.AWS.CloudWatchLogs.DeleteMetricFilter
+
+    -- ** PutRetentionPolicy
+    , module Network.AWS.CloudWatchLogs.PutRetentionPolicy
+
+    -- ** DeleteRetentionPolicy
     , module Network.AWS.CloudWatchLogs.DeleteRetentionPolicy
-    , module Network.AWS.CloudWatchLogs.DescribeLogGroups
-    , module Network.AWS.CloudWatchLogs.DescribeLogStreams
-    , module Network.AWS.CloudWatchLogs.DescribeMetricFilters
-    , module Network.AWS.CloudWatchLogs.FilterLogEvents
-    , module Network.AWS.CloudWatchLogs.GetLogEvents
-    , module Network.AWS.CloudWatchLogs.PutLogEvents
+
+    -- ** PutMetricFilter
     , module Network.AWS.CloudWatchLogs.PutMetricFilter
-    , module Network.AWS.CloudWatchLogs.PutRetentionPolicy
-    , module Network.AWS.CloudWatchLogs.TestMetricFilter
-    , module Network.AWS.CloudWatchLogs.Types
+
+    -- ** PutDestinationPolicy
+    , module Network.AWS.CloudWatchLogs.PutDestinationPolicy
+
+    -- ** DescribeLogStreams
+    , module Network.AWS.CloudWatchLogs.DescribeLogStreams
+
+    -- * Types
+
+    -- ** OrderBy
+    , OrderBy (..)
+
+    -- ** Destination
+    , Destination
+    , destination
+    , dTargetARN
+    , dCreationTime
+    , dArn
+    , dAccessPolicy
+    , dDestinationName
+    , dRoleARN
+
+    -- ** FilteredLogEvent
+    , FilteredLogEvent
+    , filteredLogEvent
+    , fleIngestionTime
+    , fleLogStreamName
+    , fleMessage
+    , fleTimestamp
+    , fleEventId
+
+    -- ** InputLogEvent
+    , InputLogEvent
+    , inputLogEvent
+    , ileTimestamp
+    , ileMessage
+
+    -- ** LogGroup
+    , LogGroup
+    , logGroup
+    , lgCreationTime
+    , lgMetricFilterCount
+    , lgArn
+    , lgLogGroupName
+    , lgRetentionInDays
+    , lgStoredBytes
+
+    -- ** LogStream
+    , LogStream
+    , logStream
+    , lsCreationTime
+    , lsUploadSequenceToken
+    , lsArn
+    , lsFirstEventTimestamp
+    , lsLogStreamName
+    , lsStoredBytes
+    , lsLastIngestionTime
+    , lsLastEventTimestamp
+
+    -- ** MetricFilter
+    , MetricFilter
+    , metricFilter
+    , mfCreationTime
+    , mfFilterName
+    , mfFilterPattern
+    , mfMetricTransformations
+
+    -- ** MetricFilterMatchRecord
+    , MetricFilterMatchRecord
+    , metricFilterMatchRecord
+    , mfmrExtractedValues
+    , mfmrEventMessage
+    , mfmrEventNumber
+
+    -- ** MetricTransformation
+    , MetricTransformation
+    , metricTransformation
+    , mtMetricName
+    , mtMetricNamespace
+    , mtMetricValue
+
+    -- ** OutputLogEvent
+    , OutputLogEvent
+    , outputLogEvent
+    , oleIngestionTime
+    , oleMessage
+    , oleTimestamp
+
+    -- ** RejectedLogEventsInfo
+    , RejectedLogEventsInfo
+    , rejectedLogEventsInfo
+    , rleiTooOldLogEventEndIndex
+    , rleiTooNewLogEventStartIndex
+    , rleiExpiredLogEventEndIndex
+
+    -- ** SearchedLogStream
+    , SearchedLogStream
+    , searchedLogStream
+    , slsLogStreamName
+    , slsSearchedCompletely
+
+    -- ** SubscriptionFilter
+    , SubscriptionFilter
+    , subscriptionFilter
+    , sfCreationTime
+    , sfFilterName
+    , sfDestinationARN
+    , sfLogGroupName
+    , sfFilterPattern
+    , sfRoleARN
     ) where
 
-import Network.AWS.CloudWatchLogs.CreateLogGroup
-import Network.AWS.CloudWatchLogs.CreateLogStream
-import Network.AWS.CloudWatchLogs.DeleteLogGroup
-import Network.AWS.CloudWatchLogs.DeleteLogStream
-import Network.AWS.CloudWatchLogs.DeleteMetricFilter
-import Network.AWS.CloudWatchLogs.DeleteRetentionPolicy
-import Network.AWS.CloudWatchLogs.DescribeLogGroups
-import Network.AWS.CloudWatchLogs.DescribeLogStreams
-import Network.AWS.CloudWatchLogs.DescribeMetricFilters
-import Network.AWS.CloudWatchLogs.FilterLogEvents
-import Network.AWS.CloudWatchLogs.GetLogEvents
-import Network.AWS.CloudWatchLogs.PutLogEvents
-import Network.AWS.CloudWatchLogs.PutMetricFilter
-import Network.AWS.CloudWatchLogs.PutRetentionPolicy
-import Network.AWS.CloudWatchLogs.TestMetricFilter
-import Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.CreateLogGroup
+import           Network.AWS.CloudWatchLogs.CreateLogStream
+import           Network.AWS.CloudWatchLogs.DeleteDestination
+import           Network.AWS.CloudWatchLogs.DeleteLogGroup
+import           Network.AWS.CloudWatchLogs.DeleteLogStream
+import           Network.AWS.CloudWatchLogs.DeleteMetricFilter
+import           Network.AWS.CloudWatchLogs.DeleteRetentionPolicy
+import           Network.AWS.CloudWatchLogs.DeleteSubscriptionFilter
+import           Network.AWS.CloudWatchLogs.DescribeDestinations
+import           Network.AWS.CloudWatchLogs.DescribeLogGroups
+import           Network.AWS.CloudWatchLogs.DescribeLogStreams
+import           Network.AWS.CloudWatchLogs.DescribeMetricFilters
+import           Network.AWS.CloudWatchLogs.DescribeSubscriptionFilters
+import           Network.AWS.CloudWatchLogs.FilterLogEvents
+import           Network.AWS.CloudWatchLogs.GetLogEvents
+import           Network.AWS.CloudWatchLogs.PutDestination
+import           Network.AWS.CloudWatchLogs.PutDestinationPolicy
+import           Network.AWS.CloudWatchLogs.PutLogEvents
+import           Network.AWS.CloudWatchLogs.PutMetricFilter
+import           Network.AWS.CloudWatchLogs.PutRetentionPolicy
+import           Network.AWS.CloudWatchLogs.PutSubscriptionFilter
+import           Network.AWS.CloudWatchLogs.TestMetricFilter
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Waiters
+
+{- $errors
+Error matchers are designed for use with the functions provided by
+<http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+This allows catching (and rethrowing) service specific errors returned
+by 'CloudWatchLogs'.
+-}
+
+{- $operations
+Some AWS operations return results that are incomplete and require subsequent
+requests in order to obtain the entire result set. The process of sending
+subsequent requests to continue where a previous request left off is called
+pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+1000 objects at a time, and you must send subsequent requests with the
+appropriate Marker in order to retrieve the next page of results.
+
+Operations that have an 'AWSPager' instance can transparently perform subsequent
+requests, correctly setting Markers and other request facets to iterate through
+the entire result set of a truncated API operation. Operations which support
+this have an additional note in the documentation.
+
+Many operations have the ability to filter results on the server side. See the
+individual operation parameters for details.
+-}
+
+{- $waiters
+Waiters poll by repeatedly sending a request until some remote success condition
+configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+determines how many attempts should be made, in addition to delay and retry strategies.
+-}
diff --git a/gen/Network/AWS/CloudWatchLogs/CreateLogGroup.hs b/gen/Network/AWS/CloudWatchLogs/CreateLogGroup.hs
--- a/gen/Network/AWS/CloudWatchLogs/CreateLogGroup.hs
+++ b/gen/Network/AWS/CloudWatchLogs/CreateLogGroup.hs
@@ -1,100 +1,107 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.CloudWatchLogs.CreateLogGroup
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Creates a new log group with the specified name. The name of the log group
--- must be unique within a region for an AWS account. You can create up to 500
--- log groups per account.
+-- Creates a new log group with the specified name. The name of the log
+-- group must be unique within a region for an AWS account. You can create
+-- up to 500 log groups per account.
 --
--- You must use the following guidelines when naming a log group:  Log group
--- names can be between 1 and 512 characters long. Allowed characters are a-z,
--- A-Z, 0-9, '_' (underscore), '-' (hyphen), '/' (forward slash), and '.'
--- (period).
+-- You must use the following guidelines when naming a log group:
 --
--- <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogGroup.html>
+-- -   Log group names can be between 1 and 512 characters long.
+-- -   Allowed characters are a-z, A-Z, 0-9, \'_\' (underscore), \'-\'
+--     (hyphen), \'\/\' (forward slash), and \'.\' (period).
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogGroup.html AWS API Reference> for CreateLogGroup.
 module Network.AWS.CloudWatchLogs.CreateLogGroup
     (
-    -- * Request
-      CreateLogGroup
-    -- ** Request constructor
-    , createLogGroup
-    -- ** Request lenses
+    -- * Creating a Request
+      createLogGroup
+    , CreateLogGroup
+    -- * Request Lenses
     , clgLogGroupName
 
-    -- * Response
-    , CreateLogGroupResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createLogGroupResponse
+    , CreateLogGroupResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudWatchLogs.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype CreateLogGroup = CreateLogGroup
+-- | /See:/ 'createLogGroup' smart constructor.
+newtype CreateLogGroup = CreateLogGroup'
     { _clgLogGroupName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CreateLogGroup' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CreateLogGroup' with the minimum fields required to make a request.
 --
--- * 'clgLogGroupName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-createLogGroup :: Text -- ^ 'clgLogGroupName'
-               -> CreateLogGroup
-createLogGroup p1 = CreateLogGroup
-    { _clgLogGroupName = p1
+-- * 'clgLogGroupName'
+createLogGroup
+    :: Text -- ^ 'clgLogGroupName'
+    -> CreateLogGroup
+createLogGroup pLogGroupName_ =
+    CreateLogGroup'
+    { _clgLogGroupName = pLogGroupName_
     }
 
+-- | The name of the log group to create.
 clgLogGroupName :: Lens' CreateLogGroup Text
-clgLogGroupName = lens _clgLogGroupName (\s a -> s { _clgLogGroupName = a })
+clgLogGroupName = lens _clgLogGroupName (\ s a -> s{_clgLogGroupName = a});
 
-data CreateLogGroupResponse = CreateLogGroupResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest CreateLogGroup where
+        type Sv CreateLogGroup = CloudWatchLogs
+        type Rs CreateLogGroup = CreateLogGroupResponse
+        request = postJSON
+        response = receiveNull CreateLogGroupResponse'
 
--- | 'CreateLogGroupResponse' constructor.
-createLogGroupResponse :: CreateLogGroupResponse
-createLogGroupResponse = CreateLogGroupResponse
+instance ToHeaders CreateLogGroup where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.CreateLogGroup" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON CreateLogGroup where
+        toJSON CreateLogGroup'{..}
+          = object ["logGroupName" .= _clgLogGroupName]
+
 instance ToPath CreateLogGroup where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery CreateLogGroup where
-    toQuery = const mempty
-
-instance ToHeaders CreateLogGroup
-
-instance ToJSON CreateLogGroup where
-    toJSON CreateLogGroup{..} = object
-        [ "logGroupName" .= _clgLogGroupName
-        ]
+        toQuery = const mempty
 
-instance AWSRequest CreateLogGroup where
-    type Sv CreateLogGroup = CloudWatchLogs
-    type Rs CreateLogGroup = CreateLogGroupResponse
+-- | /See:/ 'createLogGroupResponse' smart constructor.
+data CreateLogGroupResponse =
+    CreateLogGroupResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "CreateLogGroup"
-    response = nullResponse CreateLogGroupResponse
+-- | Creates a value of 'CreateLogGroupResponse' with the minimum fields required to make a request.
+--
+createLogGroupResponse
+    :: CreateLogGroupResponse
+createLogGroupResponse = CreateLogGroupResponse'
diff --git a/gen/Network/AWS/CloudWatchLogs/CreateLogStream.hs b/gen/Network/AWS/CloudWatchLogs/CreateLogStream.hs
--- a/gen/Network/AWS/CloudWatchLogs/CreateLogStream.hs
+++ b/gen/Network/AWS/CloudWatchLogs/CreateLogStream.hs
@@ -1,109 +1,118 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.CloudWatchLogs.CreateLogStream
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Creates a new log stream in the specified log group. The name of the log
--- stream must be unique within the log group. There is no limit on the number
--- of log streams that can exist in a log group.
+-- Creates a new log stream in the specified log group. The name of the log
+-- stream must be unique within the log group. There is no limit on the
+-- number of log streams that can exist in a log group.
 --
--- You must use the following guidelines when naming a log stream:  Log stream
--- names can be between 1 and 512 characters long. The ':' colon character is
--- not allowed.
+-- You must use the following guidelines when naming a log stream:
 --
--- <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogStream.html>
+-- -   Log stream names can be between 1 and 512 characters long.
+-- -   The \':\' colon character is not allowed.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogStream.html AWS API Reference> for CreateLogStream.
 module Network.AWS.CloudWatchLogs.CreateLogStream
     (
-    -- * Request
-      CreateLogStream
-    -- ** Request constructor
-    , createLogStream
-    -- ** Request lenses
+    -- * Creating a Request
+      createLogStream
+    , CreateLogStream
+    -- * Request Lenses
     , clsLogGroupName
     , clsLogStreamName
 
-    -- * Response
-    , CreateLogStreamResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createLogStreamResponse
+    , CreateLogStreamResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudWatchLogs.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data CreateLogStream = CreateLogStream
-    { _clsLogGroupName  :: Text
-    , _clsLogStreamName :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'createLogStream' smart constructor.
+data CreateLogStream = CreateLogStream'
+    { _clsLogGroupName  :: !Text
+    , _clsLogStreamName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CreateLogStream' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CreateLogStream' with the minimum fields required to make a request.
 --
--- * 'clsLogGroupName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'clsLogStreamName' @::@ 'Text'
+-- * 'clsLogGroupName'
 --
-createLogStream :: Text -- ^ 'clsLogGroupName'
-                -> Text -- ^ 'clsLogStreamName'
-                -> CreateLogStream
-createLogStream p1 p2 = CreateLogStream
-    { _clsLogGroupName  = p1
-    , _clsLogStreamName = p2
+-- * 'clsLogStreamName'
+createLogStream
+    :: Text -- ^ 'clsLogGroupName'
+    -> Text -- ^ 'clsLogStreamName'
+    -> CreateLogStream
+createLogStream pLogGroupName_ pLogStreamName_ =
+    CreateLogStream'
+    { _clsLogGroupName = pLogGroupName_
+    , _clsLogStreamName = pLogStreamName_
     }
 
+-- | The name of the log group under which the log stream is to be created.
 clsLogGroupName :: Lens' CreateLogStream Text
-clsLogGroupName = lens _clsLogGroupName (\s a -> s { _clsLogGroupName = a })
+clsLogGroupName = lens _clsLogGroupName (\ s a -> s{_clsLogGroupName = a});
 
+-- | The name of the log stream to create.
 clsLogStreamName :: Lens' CreateLogStream Text
-clsLogStreamName = lens _clsLogStreamName (\s a -> s { _clsLogStreamName = a })
+clsLogStreamName = lens _clsLogStreamName (\ s a -> s{_clsLogStreamName = a});
 
-data CreateLogStreamResponse = CreateLogStreamResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest CreateLogStream where
+        type Sv CreateLogStream = CloudWatchLogs
+        type Rs CreateLogStream = CreateLogStreamResponse
+        request = postJSON
+        response = receiveNull CreateLogStreamResponse'
 
--- | 'CreateLogStreamResponse' constructor.
-createLogStreamResponse :: CreateLogStreamResponse
-createLogStreamResponse = CreateLogStreamResponse
+instance ToHeaders CreateLogStream where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.CreateLogStream" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON CreateLogStream where
+        toJSON CreateLogStream'{..}
+          = object
+              ["logGroupName" .= _clsLogGroupName,
+               "logStreamName" .= _clsLogStreamName]
+
 instance ToPath CreateLogStream where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery CreateLogStream where
-    toQuery = const mempty
-
-instance ToHeaders CreateLogStream
-
-instance ToJSON CreateLogStream where
-    toJSON CreateLogStream{..} = object
-        [ "logGroupName"  .= _clsLogGroupName
-        , "logStreamName" .= _clsLogStreamName
-        ]
+        toQuery = const mempty
 
-instance AWSRequest CreateLogStream where
-    type Sv CreateLogStream = CloudWatchLogs
-    type Rs CreateLogStream = CreateLogStreamResponse
+-- | /See:/ 'createLogStreamResponse' smart constructor.
+data CreateLogStreamResponse =
+    CreateLogStreamResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "CreateLogStream"
-    response = nullResponse CreateLogStreamResponse
+-- | Creates a value of 'CreateLogStreamResponse' with the minimum fields required to make a request.
+--
+createLogStreamResponse
+    :: CreateLogStreamResponse
+createLogStreamResponse = CreateLogStreamResponse'
diff --git a/gen/Network/AWS/CloudWatchLogs/DeleteDestination.hs b/gen/Network/AWS/CloudWatchLogs/DeleteDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudWatchLogs/DeleteDestination.hs
@@ -0,0 +1,101 @@
+{-# 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.CloudWatchLogs.DeleteDestination
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the destination with the specified name and eventually disables
+-- all the subscription filters that publish to it. This will not delete
+-- the physical resource encapsulated by the destination.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DeleteDestination.html AWS API Reference> for DeleteDestination.
+module Network.AWS.CloudWatchLogs.DeleteDestination
+    (
+    -- * Creating a Request
+      deleteDestination
+    , DeleteDestination
+    -- * Request Lenses
+    , ddDestinationName
+
+    -- * Destructuring the Response
+    , deleteDestinationResponse
+    , DeleteDestinationResponse
+    ) where
+
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'deleteDestination' smart constructor.
+newtype DeleteDestination = DeleteDestination'
+    { _ddDestinationName :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteDestination' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddDestinationName'
+deleteDestination
+    :: Text -- ^ 'ddDestinationName'
+    -> DeleteDestination
+deleteDestination pDestinationName_ =
+    DeleteDestination'
+    { _ddDestinationName = pDestinationName_
+    }
+
+-- | The name of destination to delete.
+ddDestinationName :: Lens' DeleteDestination Text
+ddDestinationName = lens _ddDestinationName (\ s a -> s{_ddDestinationName = a});
+
+instance AWSRequest DeleteDestination where
+        type Sv DeleteDestination = CloudWatchLogs
+        type Rs DeleteDestination = DeleteDestinationResponse
+        request = postJSON
+        response = receiveNull DeleteDestinationResponse'
+
+instance ToHeaders DeleteDestination where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.DeleteDestination" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteDestination where
+        toJSON DeleteDestination'{..}
+          = object ["destinationName" .= _ddDestinationName]
+
+instance ToPath DeleteDestination where
+        toPath = const "/"
+
+instance ToQuery DeleteDestination where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteDestinationResponse' smart constructor.
+data DeleteDestinationResponse =
+    DeleteDestinationResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteDestinationResponse' with the minimum fields required to make a request.
+--
+deleteDestinationResponse
+    :: DeleteDestinationResponse
+deleteDestinationResponse = DeleteDestinationResponse'
diff --git a/gen/Network/AWS/CloudWatchLogs/DeleteLogGroup.hs b/gen/Network/AWS/CloudWatchLogs/DeleteLogGroup.hs
--- a/gen/Network/AWS/CloudWatchLogs/DeleteLogGroup.hs
+++ b/gen/Network/AWS/CloudWatchLogs/DeleteLogGroup.hs
@@ -1,94 +1,100 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.CloudWatchLogs.DeleteLogGroup
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deletes the log group with the specified name and permanently deletes all
--- the archived log events associated with it.
+-- Deletes the log group with the specified name and permanently deletes
+-- all the archived log events associated with it.
 --
--- <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DeleteLogGroup.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DeleteLogGroup.html AWS API Reference> for DeleteLogGroup.
 module Network.AWS.CloudWatchLogs.DeleteLogGroup
     (
-    -- * Request
-      DeleteLogGroup
-    -- ** Request constructor
-    , deleteLogGroup
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteLogGroup
+    , DeleteLogGroup
+    -- * Request Lenses
     , dlgLogGroupName
 
-    -- * Response
-    , DeleteLogGroupResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteLogGroupResponse
+    , DeleteLogGroupResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudWatchLogs.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype DeleteLogGroup = DeleteLogGroup
+-- | /See:/ 'deleteLogGroup' smart constructor.
+newtype DeleteLogGroup = DeleteLogGroup'
     { _dlgLogGroupName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteLogGroup' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteLogGroup' with the minimum fields required to make a request.
 --
--- * 'dlgLogGroupName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-deleteLogGroup :: Text -- ^ 'dlgLogGroupName'
-               -> DeleteLogGroup
-deleteLogGroup p1 = DeleteLogGroup
-    { _dlgLogGroupName = p1
+-- * 'dlgLogGroupName'
+deleteLogGroup
+    :: Text -- ^ 'dlgLogGroupName'
+    -> DeleteLogGroup
+deleteLogGroup pLogGroupName_ =
+    DeleteLogGroup'
+    { _dlgLogGroupName = pLogGroupName_
     }
 
+-- | The name of the log group to delete.
 dlgLogGroupName :: Lens' DeleteLogGroup Text
-dlgLogGroupName = lens _dlgLogGroupName (\s a -> s { _dlgLogGroupName = a })
+dlgLogGroupName = lens _dlgLogGroupName (\ s a -> s{_dlgLogGroupName = a});
 
-data DeleteLogGroupResponse = DeleteLogGroupResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteLogGroup where
+        type Sv DeleteLogGroup = CloudWatchLogs
+        type Rs DeleteLogGroup = DeleteLogGroupResponse
+        request = postJSON
+        response = receiveNull DeleteLogGroupResponse'
 
--- | 'DeleteLogGroupResponse' constructor.
-deleteLogGroupResponse :: DeleteLogGroupResponse
-deleteLogGroupResponse = DeleteLogGroupResponse
+instance ToHeaders DeleteLogGroup where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.DeleteLogGroup" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON DeleteLogGroup where
+        toJSON DeleteLogGroup'{..}
+          = object ["logGroupName" .= _dlgLogGroupName]
+
 instance ToPath DeleteLogGroup where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DeleteLogGroup where
-    toQuery = const mempty
-
-instance ToHeaders DeleteLogGroup
-
-instance ToJSON DeleteLogGroup where
-    toJSON DeleteLogGroup{..} = object
-        [ "logGroupName" .= _dlgLogGroupName
-        ]
+        toQuery = const mempty
 
-instance AWSRequest DeleteLogGroup where
-    type Sv DeleteLogGroup = CloudWatchLogs
-    type Rs DeleteLogGroup = DeleteLogGroupResponse
+-- | /See:/ 'deleteLogGroupResponse' smart constructor.
+data DeleteLogGroupResponse =
+    DeleteLogGroupResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "DeleteLogGroup"
-    response = nullResponse DeleteLogGroupResponse
+-- | Creates a value of 'DeleteLogGroupResponse' with the minimum fields required to make a request.
+--
+deleteLogGroupResponse
+    :: DeleteLogGroupResponse
+deleteLogGroupResponse = DeleteLogGroupResponse'
diff --git a/gen/Network/AWS/CloudWatchLogs/DeleteLogStream.hs b/gen/Network/AWS/CloudWatchLogs/DeleteLogStream.hs
--- a/gen/Network/AWS/CloudWatchLogs/DeleteLogStream.hs
+++ b/gen/Network/AWS/CloudWatchLogs/DeleteLogStream.hs
@@ -1,104 +1,112 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.CloudWatchLogs.DeleteLogStream
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deletes a log stream and permanently deletes all the archived log events
+-- Deletes a log stream and permanently deletes all the archived log events
 -- associated with it.
 --
--- <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DeleteLogStream.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DeleteLogStream.html AWS API Reference> for DeleteLogStream.
 module Network.AWS.CloudWatchLogs.DeleteLogStream
     (
-    -- * Request
-      DeleteLogStream
-    -- ** Request constructor
-    , deleteLogStream
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteLogStream
+    , DeleteLogStream
+    -- * Request Lenses
     , dlsLogGroupName
     , dlsLogStreamName
 
-    -- * Response
-    , DeleteLogStreamResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteLogStreamResponse
+    , DeleteLogStreamResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudWatchLogs.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data DeleteLogStream = DeleteLogStream
-    { _dlsLogGroupName  :: Text
-    , _dlsLogStreamName :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'deleteLogStream' smart constructor.
+data DeleteLogStream = DeleteLogStream'
+    { _dlsLogGroupName  :: !Text
+    , _dlsLogStreamName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteLogStream' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteLogStream' with the minimum fields required to make a request.
 --
--- * 'dlsLogGroupName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dlsLogStreamName' @::@ 'Text'
+-- * 'dlsLogGroupName'
 --
-deleteLogStream :: Text -- ^ 'dlsLogGroupName'
-                -> Text -- ^ 'dlsLogStreamName'
-                -> DeleteLogStream
-deleteLogStream p1 p2 = DeleteLogStream
-    { _dlsLogGroupName  = p1
-    , _dlsLogStreamName = p2
+-- * 'dlsLogStreamName'
+deleteLogStream
+    :: Text -- ^ 'dlsLogGroupName'
+    -> Text -- ^ 'dlsLogStreamName'
+    -> DeleteLogStream
+deleteLogStream pLogGroupName_ pLogStreamName_ =
+    DeleteLogStream'
+    { _dlsLogGroupName = pLogGroupName_
+    , _dlsLogStreamName = pLogStreamName_
     }
 
+-- | The name of the log group under which the log stream to delete belongs.
 dlsLogGroupName :: Lens' DeleteLogStream Text
-dlsLogGroupName = lens _dlsLogGroupName (\s a -> s { _dlsLogGroupName = a })
+dlsLogGroupName = lens _dlsLogGroupName (\ s a -> s{_dlsLogGroupName = a});
 
+-- | The name of the log stream to delete.
 dlsLogStreamName :: Lens' DeleteLogStream Text
-dlsLogStreamName = lens _dlsLogStreamName (\s a -> s { _dlsLogStreamName = a })
+dlsLogStreamName = lens _dlsLogStreamName (\ s a -> s{_dlsLogStreamName = a});
 
-data DeleteLogStreamResponse = DeleteLogStreamResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteLogStream where
+        type Sv DeleteLogStream = CloudWatchLogs
+        type Rs DeleteLogStream = DeleteLogStreamResponse
+        request = postJSON
+        response = receiveNull DeleteLogStreamResponse'
 
--- | 'DeleteLogStreamResponse' constructor.
-deleteLogStreamResponse :: DeleteLogStreamResponse
-deleteLogStreamResponse = DeleteLogStreamResponse
+instance ToHeaders DeleteLogStream where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.DeleteLogStream" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON DeleteLogStream where
+        toJSON DeleteLogStream'{..}
+          = object
+              ["logGroupName" .= _dlsLogGroupName,
+               "logStreamName" .= _dlsLogStreamName]
+
 instance ToPath DeleteLogStream where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DeleteLogStream where
-    toQuery = const mempty
-
-instance ToHeaders DeleteLogStream
-
-instance ToJSON DeleteLogStream where
-    toJSON DeleteLogStream{..} = object
-        [ "logGroupName"  .= _dlsLogGroupName
-        , "logStreamName" .= _dlsLogStreamName
-        ]
+        toQuery = const mempty
 
-instance AWSRequest DeleteLogStream where
-    type Sv DeleteLogStream = CloudWatchLogs
-    type Rs DeleteLogStream = DeleteLogStreamResponse
+-- | /See:/ 'deleteLogStreamResponse' smart constructor.
+data DeleteLogStreamResponse =
+    DeleteLogStreamResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "DeleteLogStream"
-    response = nullResponse DeleteLogStreamResponse
+-- | Creates a value of 'DeleteLogStreamResponse' with the minimum fields required to make a request.
+--
+deleteLogStreamResponse
+    :: DeleteLogStreamResponse
+deleteLogStreamResponse = DeleteLogStreamResponse'
diff --git a/gen/Network/AWS/CloudWatchLogs/DeleteMetricFilter.hs b/gen/Network/AWS/CloudWatchLogs/DeleteMetricFilter.hs
--- a/gen/Network/AWS/CloudWatchLogs/DeleteMetricFilter.hs
+++ b/gen/Network/AWS/CloudWatchLogs/DeleteMetricFilter.hs
@@ -1,103 +1,113 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.CloudWatchLogs.DeleteMetricFilter
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deletes a metric filter associated with the specified log group.
+-- Deletes a metric filter associated with the specified log group.
 --
--- <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DeleteMetricFilter.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DeleteMetricFilter.html AWS API Reference> for DeleteMetricFilter.
 module Network.AWS.CloudWatchLogs.DeleteMetricFilter
     (
-    -- * Request
-      DeleteMetricFilter
-    -- ** Request constructor
-    , deleteMetricFilter
-    -- ** Request lenses
-    , dmf1FilterName
-    , dmf1LogGroupName
+    -- * Creating a Request
+      deleteMetricFilter
+    , DeleteMetricFilter
+    -- * Request Lenses
+    , delLogGroupName
+    , delFilterName
 
-    -- * Response
-    , DeleteMetricFilterResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteMetricFilterResponse
+    , DeleteMetricFilterResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudWatchLogs.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data DeleteMetricFilter = DeleteMetricFilter
-    { _dmf1FilterName   :: Text
-    , _dmf1LogGroupName :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'deleteMetricFilter' smart constructor.
+data DeleteMetricFilter = DeleteMetricFilter'
+    { _delLogGroupName :: !Text
+    , _delFilterName   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteMetricFilter' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteMetricFilter' with the minimum fields required to make a request.
 --
--- * 'dmf1FilterName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dmf1LogGroupName' @::@ 'Text'
+-- * 'delLogGroupName'
 --
-deleteMetricFilter :: Text -- ^ 'dmf1LogGroupName'
-                   -> Text -- ^ 'dmf1FilterName'
-                   -> DeleteMetricFilter
-deleteMetricFilter p1 p2 = DeleteMetricFilter
-    { _dmf1LogGroupName = p1
-    , _dmf1FilterName   = p2
+-- * 'delFilterName'
+deleteMetricFilter
+    :: Text -- ^ 'delLogGroupName'
+    -> Text -- ^ 'delFilterName'
+    -> DeleteMetricFilter
+deleteMetricFilter pLogGroupName_ pFilterName_ =
+    DeleteMetricFilter'
+    { _delLogGroupName = pLogGroupName_
+    , _delFilterName = pFilterName_
     }
 
-dmf1FilterName :: Lens' DeleteMetricFilter Text
-dmf1FilterName = lens _dmf1FilterName (\s a -> s { _dmf1FilterName = a })
+-- | The name of the log group that is associated with the metric filter to
+-- delete.
+delLogGroupName :: Lens' DeleteMetricFilter Text
+delLogGroupName = lens _delLogGroupName (\ s a -> s{_delLogGroupName = a});
 
-dmf1LogGroupName :: Lens' DeleteMetricFilter Text
-dmf1LogGroupName = lens _dmf1LogGroupName (\s a -> s { _dmf1LogGroupName = a })
+-- | The name of the metric filter to delete.
+delFilterName :: Lens' DeleteMetricFilter Text
+delFilterName = lens _delFilterName (\ s a -> s{_delFilterName = a});
 
-data DeleteMetricFilterResponse = DeleteMetricFilterResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteMetricFilter where
+        type Sv DeleteMetricFilter = CloudWatchLogs
+        type Rs DeleteMetricFilter =
+             DeleteMetricFilterResponse
+        request = postJSON
+        response = receiveNull DeleteMetricFilterResponse'
 
--- | 'DeleteMetricFilterResponse' constructor.
-deleteMetricFilterResponse :: DeleteMetricFilterResponse
-deleteMetricFilterResponse = DeleteMetricFilterResponse
+instance ToHeaders DeleteMetricFilter where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.DeleteMetricFilter" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON DeleteMetricFilter where
+        toJSON DeleteMetricFilter'{..}
+          = object
+              ["logGroupName" .= _delLogGroupName,
+               "filterName" .= _delFilterName]
+
 instance ToPath DeleteMetricFilter where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DeleteMetricFilter where
-    toQuery = const mempty
-
-instance ToHeaders DeleteMetricFilter
-
-instance ToJSON DeleteMetricFilter where
-    toJSON DeleteMetricFilter{..} = object
-        [ "logGroupName" .= _dmf1LogGroupName
-        , "filterName"   .= _dmf1FilterName
-        ]
+        toQuery = const mempty
 
-instance AWSRequest DeleteMetricFilter where
-    type Sv DeleteMetricFilter = CloudWatchLogs
-    type Rs DeleteMetricFilter = DeleteMetricFilterResponse
+-- | /See:/ 'deleteMetricFilterResponse' smart constructor.
+data DeleteMetricFilterResponse =
+    DeleteMetricFilterResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "DeleteMetricFilter"
-    response = nullResponse DeleteMetricFilterResponse
+-- | Creates a value of 'DeleteMetricFilterResponse' with the minimum fields required to make a request.
+--
+deleteMetricFilterResponse
+    :: DeleteMetricFilterResponse
+deleteMetricFilterResponse = DeleteMetricFilterResponse'
diff --git a/gen/Network/AWS/CloudWatchLogs/DeleteRetentionPolicy.hs b/gen/Network/AWS/CloudWatchLogs/DeleteRetentionPolicy.hs
--- a/gen/Network/AWS/CloudWatchLogs/DeleteRetentionPolicy.hs
+++ b/gen/Network/AWS/CloudWatchLogs/DeleteRetentionPolicy.hs
@@ -1,94 +1,104 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.CloudWatchLogs.DeleteRetentionPolicy
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deletes the retention policy of the specified log group. Log events would
--- not expire if they belong to log groups without a retention policy.
+-- Deletes the retention policy of the specified log group. Log events
+-- would not expire if they belong to log groups without a retention
+-- policy.
 --
--- <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DeleteRetentionPolicy.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DeleteRetentionPolicy.html AWS API Reference> for DeleteRetentionPolicy.
 module Network.AWS.CloudWatchLogs.DeleteRetentionPolicy
     (
-    -- * Request
-      DeleteRetentionPolicy
-    -- ** Request constructor
-    , deleteRetentionPolicy
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteRetentionPolicy
+    , DeleteRetentionPolicy
+    -- * Request Lenses
     , drpLogGroupName
 
-    -- * Response
-    , DeleteRetentionPolicyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteRetentionPolicyResponse
+    , DeleteRetentionPolicyResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudWatchLogs.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype DeleteRetentionPolicy = DeleteRetentionPolicy
+-- | /See:/ 'deleteRetentionPolicy' smart constructor.
+newtype DeleteRetentionPolicy = DeleteRetentionPolicy'
     { _drpLogGroupName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteRetentionPolicy' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteRetentionPolicy' with the minimum fields required to make a request.
 --
--- * 'drpLogGroupName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-deleteRetentionPolicy :: Text -- ^ 'drpLogGroupName'
-                      -> DeleteRetentionPolicy
-deleteRetentionPolicy p1 = DeleteRetentionPolicy
-    { _drpLogGroupName = p1
+-- * 'drpLogGroupName'
+deleteRetentionPolicy
+    :: Text -- ^ 'drpLogGroupName'
+    -> DeleteRetentionPolicy
+deleteRetentionPolicy pLogGroupName_ =
+    DeleteRetentionPolicy'
+    { _drpLogGroupName = pLogGroupName_
     }
 
+-- | The name of the log group that is associated with the retention policy
+-- to delete.
 drpLogGroupName :: Lens' DeleteRetentionPolicy Text
-drpLogGroupName = lens _drpLogGroupName (\s a -> s { _drpLogGroupName = a })
+drpLogGroupName = lens _drpLogGroupName (\ s a -> s{_drpLogGroupName = a});
 
-data DeleteRetentionPolicyResponse = DeleteRetentionPolicyResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteRetentionPolicy where
+        type Sv DeleteRetentionPolicy = CloudWatchLogs
+        type Rs DeleteRetentionPolicy =
+             DeleteRetentionPolicyResponse
+        request = postJSON
+        response = receiveNull DeleteRetentionPolicyResponse'
 
--- | 'DeleteRetentionPolicyResponse' constructor.
-deleteRetentionPolicyResponse :: DeleteRetentionPolicyResponse
-deleteRetentionPolicyResponse = DeleteRetentionPolicyResponse
+instance ToHeaders DeleteRetentionPolicy where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.DeleteRetentionPolicy" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON DeleteRetentionPolicy where
+        toJSON DeleteRetentionPolicy'{..}
+          = object ["logGroupName" .= _drpLogGroupName]
+
 instance ToPath DeleteRetentionPolicy where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DeleteRetentionPolicy where
-    toQuery = const mempty
-
-instance ToHeaders DeleteRetentionPolicy
-
-instance ToJSON DeleteRetentionPolicy where
-    toJSON DeleteRetentionPolicy{..} = object
-        [ "logGroupName" .= _drpLogGroupName
-        ]
+        toQuery = const mempty
 
-instance AWSRequest DeleteRetentionPolicy where
-    type Sv DeleteRetentionPolicy = CloudWatchLogs
-    type Rs DeleteRetentionPolicy = DeleteRetentionPolicyResponse
+-- | /See:/ 'deleteRetentionPolicyResponse' smart constructor.
+data DeleteRetentionPolicyResponse =
+    DeleteRetentionPolicyResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "DeleteRetentionPolicy"
-    response = nullResponse DeleteRetentionPolicyResponse
+-- | Creates a value of 'DeleteRetentionPolicyResponse' with the minimum fields required to make a request.
+--
+deleteRetentionPolicyResponse
+    :: DeleteRetentionPolicyResponse
+deleteRetentionPolicyResponse = DeleteRetentionPolicyResponse'
diff --git a/gen/Network/AWS/CloudWatchLogs/DeleteSubscriptionFilter.hs b/gen/Network/AWS/CloudWatchLogs/DeleteSubscriptionFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudWatchLogs/DeleteSubscriptionFilter.hs
@@ -0,0 +1,115 @@
+{-# 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.CloudWatchLogs.DeleteSubscriptionFilter
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a subscription filter associated with the specified log group.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DeleteSubscriptionFilter.html AWS API Reference> for DeleteSubscriptionFilter.
+module Network.AWS.CloudWatchLogs.DeleteSubscriptionFilter
+    (
+    -- * Creating a Request
+      deleteSubscriptionFilter
+    , DeleteSubscriptionFilter
+    -- * Request Lenses
+    , dLogGroupName
+    , dFilterName
+
+    -- * Destructuring the Response
+    , deleteSubscriptionFilterResponse
+    , DeleteSubscriptionFilterResponse
+    ) where
+
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'deleteSubscriptionFilter' smart constructor.
+data DeleteSubscriptionFilter = DeleteSubscriptionFilter'
+    { _dLogGroupName :: !Text
+    , _dFilterName   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteSubscriptionFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dLogGroupName'
+--
+-- * 'dFilterName'
+deleteSubscriptionFilter
+    :: Text -- ^ 'dLogGroupName'
+    -> Text -- ^ 'dFilterName'
+    -> DeleteSubscriptionFilter
+deleteSubscriptionFilter pLogGroupName_ pFilterName_ =
+    DeleteSubscriptionFilter'
+    { _dLogGroupName = pLogGroupName_
+    , _dFilterName = pFilterName_
+    }
+
+-- | The name of the log group that is associated with the subscription
+-- filter to delete.
+dLogGroupName :: Lens' DeleteSubscriptionFilter Text
+dLogGroupName = lens _dLogGroupName (\ s a -> s{_dLogGroupName = a});
+
+-- | The name of the subscription filter to delete.
+dFilterName :: Lens' DeleteSubscriptionFilter Text
+dFilterName = lens _dFilterName (\ s a -> s{_dFilterName = a});
+
+instance AWSRequest DeleteSubscriptionFilter where
+        type Sv DeleteSubscriptionFilter = CloudWatchLogs
+        type Rs DeleteSubscriptionFilter =
+             DeleteSubscriptionFilterResponse
+        request = postJSON
+        response
+          = receiveNull DeleteSubscriptionFilterResponse'
+
+instance ToHeaders DeleteSubscriptionFilter where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.DeleteSubscriptionFilter" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteSubscriptionFilter where
+        toJSON DeleteSubscriptionFilter'{..}
+          = object
+              ["logGroupName" .= _dLogGroupName,
+               "filterName" .= _dFilterName]
+
+instance ToPath DeleteSubscriptionFilter where
+        toPath = const "/"
+
+instance ToQuery DeleteSubscriptionFilter where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteSubscriptionFilterResponse' smart constructor.
+data DeleteSubscriptionFilterResponse =
+    DeleteSubscriptionFilterResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteSubscriptionFilterResponse' with the minimum fields required to make a request.
+--
+deleteSubscriptionFilterResponse
+    :: DeleteSubscriptionFilterResponse
+deleteSubscriptionFilterResponse = DeleteSubscriptionFilterResponse'
diff --git a/gen/Network/AWS/CloudWatchLogs/DescribeDestinations.hs b/gen/Network/AWS/CloudWatchLogs/DescribeDestinations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudWatchLogs/DescribeDestinations.hs
@@ -0,0 +1,166 @@
+{-# 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.CloudWatchLogs.DescribeDestinations
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns all the destinations that are associated with the AWS account
+-- making the request. The list returned in the response is ASCII-sorted by
+-- destination name.
+--
+-- By default, this operation returns up to 50 destinations. If there are
+-- more destinations to list, the response would contain a 'nextToken'
+-- value in the response body. You can also limit the number of
+-- destinations returned in the response by specifying the 'limit'
+-- parameter in the request.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeDestinations.html AWS API Reference> for DescribeDestinations.
+module Network.AWS.CloudWatchLogs.DescribeDestinations
+    (
+    -- * Creating a Request
+      describeDestinations
+    , DescribeDestinations
+    -- * Request Lenses
+    , ddNextToken
+    , ddLimit
+    , ddDestinationNamePrefix
+
+    -- * Destructuring the Response
+    , describeDestinationsResponse
+    , DescribeDestinationsResponse
+    -- * Response Lenses
+    , ddrsNextToken
+    , ddrsDestinations
+    , ddrsStatus
+    ) where
+
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'describeDestinations' smart constructor.
+data DescribeDestinations = DescribeDestinations'
+    { _ddNextToken             :: !(Maybe Text)
+    , _ddLimit                 :: !(Maybe Nat)
+    , _ddDestinationNamePrefix :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeDestinations' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddNextToken'
+--
+-- * 'ddLimit'
+--
+-- * 'ddDestinationNamePrefix'
+describeDestinations
+    :: DescribeDestinations
+describeDestinations =
+    DescribeDestinations'
+    { _ddNextToken = Nothing
+    , _ddLimit = Nothing
+    , _ddDestinationNamePrefix = Nothing
+    }
+
+-- | Undocumented member.
+ddNextToken :: Lens' DescribeDestinations (Maybe Text)
+ddNextToken = lens _ddNextToken (\ s a -> s{_ddNextToken = a});
+
+-- | Undocumented member.
+ddLimit :: Lens' DescribeDestinations (Maybe Natural)
+ddLimit = lens _ddLimit (\ s a -> s{_ddLimit = a}) . mapping _Nat;
+
+-- | Will only return destinations that match the provided
+-- destinationNamePrefix. If you don\'t specify a value, no prefix is
+-- applied.
+ddDestinationNamePrefix :: Lens' DescribeDestinations (Maybe Text)
+ddDestinationNamePrefix = lens _ddDestinationNamePrefix (\ s a -> s{_ddDestinationNamePrefix = a});
+
+instance AWSRequest DescribeDestinations where
+        type Sv DescribeDestinations = CloudWatchLogs
+        type Rs DescribeDestinations =
+             DescribeDestinationsResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeDestinationsResponse' <$>
+                   (x .?> "nextToken") <*>
+                     (x .?> "destinations" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders DescribeDestinations where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.DescribeDestinations" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeDestinations where
+        toJSON DescribeDestinations'{..}
+          = object
+              ["nextToken" .= _ddNextToken, "limit" .= _ddLimit,
+               "DestinationNamePrefix" .= _ddDestinationNamePrefix]
+
+instance ToPath DescribeDestinations where
+        toPath = const "/"
+
+instance ToQuery DescribeDestinations where
+        toQuery = const mempty
+
+-- | /See:/ 'describeDestinationsResponse' smart constructor.
+data DescribeDestinationsResponse = DescribeDestinationsResponse'
+    { _ddrsNextToken    :: !(Maybe Text)
+    , _ddrsDestinations :: !(Maybe [Destination])
+    , _ddrsStatus       :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeDestinationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddrsNextToken'
+--
+-- * 'ddrsDestinations'
+--
+-- * 'ddrsStatus'
+describeDestinationsResponse
+    :: Int -- ^ 'ddrsStatus'
+    -> DescribeDestinationsResponse
+describeDestinationsResponse pStatus_ =
+    DescribeDestinationsResponse'
+    { _ddrsNextToken = Nothing
+    , _ddrsDestinations = Nothing
+    , _ddrsStatus = pStatus_
+    }
+
+-- | Undocumented member.
+ddrsNextToken :: Lens' DescribeDestinationsResponse (Maybe Text)
+ddrsNextToken = lens _ddrsNextToken (\ s a -> s{_ddrsNextToken = a});
+
+-- | Undocumented member.
+ddrsDestinations :: Lens' DescribeDestinationsResponse [Destination]
+ddrsDestinations = lens _ddrsDestinations (\ s a -> s{_ddrsDestinations = a}) . _Default . _Coerce;
+
+-- | The response status code.
+ddrsStatus :: Lens' DescribeDestinationsResponse Int
+ddrsStatus = lens _ddrsStatus (\ s a -> s{_ddrsStatus = a});
diff --git a/gen/Network/AWS/CloudWatchLogs/DescribeLogGroups.hs b/gen/Network/AWS/CloudWatchLogs/DescribeLogGroups.hs
--- a/gen/Network/AWS/CloudWatchLogs/DescribeLogGroups.hs
+++ b/gen/Network/AWS/CloudWatchLogs/DescribeLogGroups.hs
@@ -1,148 +1,168 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.CloudWatchLogs.DescribeLogGroups
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns all the log groups that are associated with the AWS account making
--- the request. The list returned in the response is ASCII-sorted by log group
--- name.
+-- Returns all the log groups that are associated with the AWS account
+-- making the request. The list returned in the response is ASCII-sorted by
+-- log group name.
 --
--- By default, this operation returns up to 50 log groups. If there are more
--- log groups to list, the response would contain a 'nextToken' value in the
--- response body. You can also limit the number of log groups returned in the
--- response by specifying the 'limit' parameter in the request.
+-- By default, this operation returns up to 50 log groups. If there are
+-- more log groups to list, the response would contain a 'nextToken' value
+-- in the response body. You can also limit the number of log groups
+-- returned in the response by specifying the 'limit' parameter in the
+-- request.
 --
--- <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeLogGroups.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeLogGroups.html AWS API Reference> for DescribeLogGroups.
 module Network.AWS.CloudWatchLogs.DescribeLogGroups
     (
-    -- * Request
-      DescribeLogGroups
-    -- ** Request constructor
-    , describeLogGroups
-    -- ** Request lenses
-    , dlgLimit
-    , dlgLogGroupNamePrefix
+    -- * Creating a Request
+      describeLogGroups
+    , DescribeLogGroups
+    -- * Request Lenses
     , dlgNextToken
+    , dlgLogGroupNamePrefix
+    , dlgLimit
 
-    -- * Response
-    , DescribeLogGroupsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , describeLogGroupsResponse
-    -- ** Response lenses
-    , dlgrLogGroups
-    , dlgrNextToken
+    , DescribeLogGroupsResponse
+    -- * Response Lenses
+    , dlgrsLogGroups
+    , dlgrsNextToken
+    , dlgrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudWatchLogs.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data DescribeLogGroups = DescribeLogGroups
-    { _dlgLimit              :: Maybe Nat
-    , _dlgLogGroupNamePrefix :: Maybe Text
-    , _dlgNextToken          :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'describeLogGroups' smart constructor.
+data DescribeLogGroups = DescribeLogGroups'
+    { _dlgNextToken          :: !(Maybe Text)
+    , _dlgLogGroupNamePrefix :: !(Maybe Text)
+    , _dlgLimit              :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DescribeLogGroups' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DescribeLogGroups' with the minimum fields required to make a request.
 --
--- * 'dlgLimit' @::@ 'Maybe' 'Natural'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dlgLogGroupNamePrefix' @::@ 'Maybe' 'Text'
+-- * 'dlgNextToken'
 --
--- * 'dlgNextToken' @::@ 'Maybe' 'Text'
+-- * 'dlgLogGroupNamePrefix'
 --
-describeLogGroups :: DescribeLogGroups
-describeLogGroups = DescribeLogGroups
-    { _dlgLogGroupNamePrefix = Nothing
-    , _dlgNextToken          = Nothing
-    , _dlgLimit              = Nothing
+-- * 'dlgLimit'
+describeLogGroups
+    :: DescribeLogGroups
+describeLogGroups =
+    DescribeLogGroups'
+    { _dlgNextToken = Nothing
+    , _dlgLogGroupNamePrefix = Nothing
+    , _dlgLimit = Nothing
     }
 
--- | The maximum number of items returned in the response. If you don't specify a
--- value, the request would return up to 50 items.
-dlgLimit :: Lens' DescribeLogGroups (Maybe Natural)
-dlgLimit = lens _dlgLimit (\s a -> s { _dlgLimit = a }) . mapping _Nat
+-- | A string token used for pagination that points to the next page of
+-- results. It must be a value obtained from the response of the previous
+-- 'DescribeLogGroups' request.
+dlgNextToken :: Lens' DescribeLogGroups (Maybe Text)
+dlgNextToken = lens _dlgNextToken (\ s a -> s{_dlgNextToken = a});
 
+-- | Will only return log groups that match the provided logGroupNamePrefix.
+-- If you don\'t specify a value, no prefix filter is applied.
 dlgLogGroupNamePrefix :: Lens' DescribeLogGroups (Maybe Text)
-dlgLogGroupNamePrefix =
-    lens _dlgLogGroupNamePrefix (\s a -> s { _dlgLogGroupNamePrefix = a })
-
--- | A string token used for pagination that points to the next page of results.
--- It must be a value obtained from the response of the previous 'DescribeLogGroups' request.
-dlgNextToken :: Lens' DescribeLogGroups (Maybe Text)
-dlgNextToken = lens _dlgNextToken (\s a -> s { _dlgNextToken = a })
+dlgLogGroupNamePrefix = lens _dlgLogGroupNamePrefix (\ s a -> s{_dlgLogGroupNamePrefix = a});
 
-data DescribeLogGroupsResponse = DescribeLogGroupsResponse
-    { _dlgrLogGroups :: List "logGroups" LogGroup
-    , _dlgrNextToken :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | The maximum number of items returned in the response. If you don\'t
+-- specify a value, the request would return up to 50 items.
+dlgLimit :: Lens' DescribeLogGroups (Maybe Natural)
+dlgLimit = lens _dlgLimit (\ s a -> s{_dlgLimit = a}) . mapping _Nat;
 
--- | 'DescribeLogGroupsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dlgrLogGroups' @::@ ['LogGroup']
---
--- * 'dlgrNextToken' @::@ 'Maybe' 'Text'
---
-describeLogGroupsResponse :: DescribeLogGroupsResponse
-describeLogGroupsResponse = DescribeLogGroupsResponse
-    { _dlgrLogGroups = mempty
-    , _dlgrNextToken = Nothing
-    }
+instance AWSRequest DescribeLogGroups where
+        type Sv DescribeLogGroups = CloudWatchLogs
+        type Rs DescribeLogGroups = DescribeLogGroupsResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeLogGroupsResponse' <$>
+                   (x .?> "logGroups" .!@ mempty) <*>
+                     (x .?> "nextToken")
+                     <*> (pure (fromEnum s)))
 
-dlgrLogGroups :: Lens' DescribeLogGroupsResponse [LogGroup]
-dlgrLogGroups = lens _dlgrLogGroups (\s a -> s { _dlgrLogGroups = a }) . _List
+instance ToHeaders DescribeLogGroups where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.DescribeLogGroups" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
-dlgrNextToken :: Lens' DescribeLogGroupsResponse (Maybe Text)
-dlgrNextToken = lens _dlgrNextToken (\s a -> s { _dlgrNextToken = a })
+instance ToJSON DescribeLogGroups where
+        toJSON DescribeLogGroups'{..}
+          = object
+              ["nextToken" .= _dlgNextToken,
+               "logGroupNamePrefix" .= _dlgLogGroupNamePrefix,
+               "limit" .= _dlgLimit]
 
 instance ToPath DescribeLogGroups where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DescribeLogGroups where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders DescribeLogGroups
+-- | /See:/ 'describeLogGroupsResponse' smart constructor.
+data DescribeLogGroupsResponse = DescribeLogGroupsResponse'
+    { _dlgrsLogGroups :: !(Maybe [LogGroup])
+    , _dlgrsNextToken :: !(Maybe Text)
+    , _dlgrsStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON DescribeLogGroups where
-    toJSON DescribeLogGroups{..} = object
-        [ "logGroupNamePrefix" .= _dlgLogGroupNamePrefix
-        , "nextToken"          .= _dlgNextToken
-        , "limit"              .= _dlgLimit
-        ]
+-- | Creates a value of 'DescribeLogGroupsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dlgrsLogGroups'
+--
+-- * 'dlgrsNextToken'
+--
+-- * 'dlgrsStatus'
+describeLogGroupsResponse
+    :: Int -- ^ 'dlgrsStatus'
+    -> DescribeLogGroupsResponse
+describeLogGroupsResponse pStatus_ =
+    DescribeLogGroupsResponse'
+    { _dlgrsLogGroups = Nothing
+    , _dlgrsNextToken = Nothing
+    , _dlgrsStatus = pStatus_
+    }
 
-instance AWSRequest DescribeLogGroups where
-    type Sv DescribeLogGroups = CloudWatchLogs
-    type Rs DescribeLogGroups = DescribeLogGroupsResponse
+-- | Undocumented member.
+dlgrsLogGroups :: Lens' DescribeLogGroupsResponse [LogGroup]
+dlgrsLogGroups = lens _dlgrsLogGroups (\ s a -> s{_dlgrsLogGroups = a}) . _Default . _Coerce;
 
-    request  = post "DescribeLogGroups"
-    response = jsonResponse
+-- | Undocumented member.
+dlgrsNextToken :: Lens' DescribeLogGroupsResponse (Maybe Text)
+dlgrsNextToken = lens _dlgrsNextToken (\ s a -> s{_dlgrsNextToken = a});
 
-instance FromJSON DescribeLogGroupsResponse where
-    parseJSON = withObject "DescribeLogGroupsResponse" $ \o -> DescribeLogGroupsResponse
-        <$> o .:? "logGroups" .!= mempty
-        <*> o .:? "nextToken"
+-- | The response status code.
+dlgrsStatus :: Lens' DescribeLogGroupsResponse Int
+dlgrsStatus = lens _dlgrsStatus (\ s a -> s{_dlgrsStatus = a});
diff --git a/gen/Network/AWS/CloudWatchLogs/DescribeLogStreams.hs b/gen/Network/AWS/CloudWatchLogs/DescribeLogStreams.hs
--- a/gen/Network/AWS/CloudWatchLogs/DescribeLogStreams.hs
+++ b/gen/Network/AWS/CloudWatchLogs/DescribeLogStreams.hs
@@ -1,185 +1,207 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.CloudWatchLogs.DescribeLogStreams
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns all the log streams that are associated with the specified log
--- group. The list returned in the response is ASCII-sorted by log stream name.
+-- Returns all the log streams that are associated with the specified log
+-- group. The list returned in the response is ASCII-sorted by log stream
+-- name.
 --
--- By default, this operation returns up to 50 log streams. If there are more
--- log streams to list, the response would contain a 'nextToken' value in the
--- response body. You can also limit the number of log streams returned in the
--- response by specifying the 'limit' parameter in the request. This operation has
--- a limit of five transactions per second, after which transactions are
--- throttled.
+-- By default, this operation returns up to 50 log streams. If there are
+-- more log streams to list, the response would contain a 'nextToken' value
+-- in the response body. You can also limit the number of log streams
+-- returned in the response by specifying the 'limit' parameter in the
+-- request. This operation has a limit of five transactions per second,
+-- after which transactions are throttled.
 --
--- <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeLogStreams.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeLogStreams.html AWS API Reference> for DescribeLogStreams.
 module Network.AWS.CloudWatchLogs.DescribeLogStreams
     (
-    -- * Request
-      DescribeLogStreams
-    -- ** Request constructor
-    , describeLogStreams
-    -- ** Request lenses
-    , dls1Descending
-    , dls1Limit
-    , dls1LogGroupName
-    , dls1LogStreamNamePrefix
-    , dls1NextToken
-    , dls1OrderBy
+    -- * Creating a Request
+      describeLogStreams
+    , DescribeLogStreams
+    -- * Request Lenses
+    , dlssOrderBy
+    , dlssDescending
+    , dlssNextToken
+    , dlssLogStreamNamePrefix
+    , dlssLimit
+    , dlssLogGroupName
 
-    -- * Response
-    , DescribeLogStreamsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , describeLogStreamsResponse
-    -- ** Response lenses
-    , dlsrLogStreams
-    , dlsrNextToken
+    , DescribeLogStreamsResponse
+    -- * Response Lenses
+    , dlsrsNextToken
+    , dlsrsLogStreams
+    , dlsrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudWatchLogs.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data DescribeLogStreams = DescribeLogStreams
-    { _dls1Descending          :: Maybe Bool
-    , _dls1Limit               :: Maybe Nat
-    , _dls1LogGroupName        :: Text
-    , _dls1LogStreamNamePrefix :: Maybe Text
-    , _dls1NextToken           :: Maybe Text
-    , _dls1OrderBy             :: Maybe OrderBy
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'describeLogStreams' smart constructor.
+data DescribeLogStreams = DescribeLogStreams'
+    { _dlssOrderBy             :: !(Maybe OrderBy)
+    , _dlssDescending          :: !(Maybe Bool)
+    , _dlssNextToken           :: !(Maybe Text)
+    , _dlssLogStreamNamePrefix :: !(Maybe Text)
+    , _dlssLimit               :: !(Maybe Nat)
+    , _dlssLogGroupName        :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DescribeLogStreams' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DescribeLogStreams' with the minimum fields required to make a request.
 --
--- * 'dls1Descending' @::@ 'Maybe' 'Bool'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dls1Limit' @::@ 'Maybe' 'Natural'
+-- * 'dlssOrderBy'
 --
--- * 'dls1LogGroupName' @::@ 'Text'
+-- * 'dlssDescending'
 --
--- * 'dls1LogStreamNamePrefix' @::@ 'Maybe' 'Text'
+-- * 'dlssNextToken'
 --
--- * 'dls1NextToken' @::@ 'Maybe' 'Text'
+-- * 'dlssLogStreamNamePrefix'
 --
--- * 'dls1OrderBy' @::@ 'Maybe' 'OrderBy'
+-- * 'dlssLimit'
 --
-describeLogStreams :: Text -- ^ 'dls1LogGroupName'
-                   -> DescribeLogStreams
-describeLogStreams p1 = DescribeLogStreams
-    { _dls1LogGroupName        = p1
-    , _dls1LogStreamNamePrefix = Nothing
-    , _dls1OrderBy             = Nothing
-    , _dls1Descending          = Nothing
-    , _dls1NextToken           = Nothing
-    , _dls1Limit               = Nothing
+-- * 'dlssLogGroupName'
+describeLogStreams
+    :: Text -- ^ 'dlssLogGroupName'
+    -> DescribeLogStreams
+describeLogStreams pLogGroupName_ =
+    DescribeLogStreams'
+    { _dlssOrderBy = Nothing
+    , _dlssDescending = Nothing
+    , _dlssNextToken = Nothing
+    , _dlssLogStreamNamePrefix = Nothing
+    , _dlssLimit = Nothing
+    , _dlssLogGroupName = pLogGroupName_
     }
 
--- | If set to true, results are returned in descending order. If you don't
--- specify a value or set it to false, results are returned in ascending order.
-dls1Descending :: Lens' DescribeLogStreams (Maybe Bool)
-dls1Descending = lens _dls1Descending (\s a -> s { _dls1Descending = a })
-
--- | The maximum number of items returned in the response. If you don't specify a
--- value, the request would return up to 50 items.
-dls1Limit :: Lens' DescribeLogStreams (Maybe Natural)
-dls1Limit = lens _dls1Limit (\s a -> s { _dls1Limit = a }) . mapping _Nat
+-- | Specifies what to order the returned log streams by. Valid arguments are
+-- \'LogStreamName\' or \'LastEventTime\'. If you don\'t specify a value,
+-- results are ordered by LogStreamName. If \'LastEventTime\' is chosen,
+-- the request cannot also contain a logStreamNamePrefix.
+dlssOrderBy :: Lens' DescribeLogStreams (Maybe OrderBy)
+dlssOrderBy = lens _dlssOrderBy (\ s a -> s{_dlssOrderBy = a});
 
-dls1LogGroupName :: Lens' DescribeLogStreams Text
-dls1LogGroupName = lens _dls1LogGroupName (\s a -> s { _dls1LogGroupName = a })
+-- | If set to true, results are returned in descending order. If you don\'t
+-- specify a value or set it to false, results are returned in ascending
+-- order.
+dlssDescending :: Lens' DescribeLogStreams (Maybe Bool)
+dlssDescending = lens _dlssDescending (\ s a -> s{_dlssDescending = a});
 
--- | Will only return log streams that match the provided logStreamNamePrefix. If
--- you don't specify a value, no prefix filter is applied.
-dls1LogStreamNamePrefix :: Lens' DescribeLogStreams (Maybe Text)
-dls1LogStreamNamePrefix =
-    lens _dls1LogStreamNamePrefix (\s a -> s { _dls1LogStreamNamePrefix = a })
+-- | A string token used for pagination that points to the next page of
+-- results. It must be a value obtained from the response of the previous
+-- 'DescribeLogStreams' request.
+dlssNextToken :: Lens' DescribeLogStreams (Maybe Text)
+dlssNextToken = lens _dlssNextToken (\ s a -> s{_dlssNextToken = a});
 
--- | A string token used for pagination that points to the next page of results.
--- It must be a value obtained from the response of the previous 'DescribeLogStreams' request.
-dls1NextToken :: Lens' DescribeLogStreams (Maybe Text)
-dls1NextToken = lens _dls1NextToken (\s a -> s { _dls1NextToken = a })
+-- | Will only return log streams that match the provided
+-- logStreamNamePrefix. If you don\'t specify a value, no prefix filter is
+-- applied.
+dlssLogStreamNamePrefix :: Lens' DescribeLogStreams (Maybe Text)
+dlssLogStreamNamePrefix = lens _dlssLogStreamNamePrefix (\ s a -> s{_dlssLogStreamNamePrefix = a});
 
--- | Specifies what to order the returned log streams by. Valid arguments are
--- 'LogStreamName' or 'LastEventTime'. If you don't specify a value, results are
--- ordered by LogStreamName. If 'LastEventTime' is chosen, the request cannot
--- also contain a logStreamNamePrefix.
-dls1OrderBy :: Lens' DescribeLogStreams (Maybe OrderBy)
-dls1OrderBy = lens _dls1OrderBy (\s a -> s { _dls1OrderBy = a })
+-- | The maximum number of items returned in the response. If you don\'t
+-- specify a value, the request would return up to 50 items.
+dlssLimit :: Lens' DescribeLogStreams (Maybe Natural)
+dlssLimit = lens _dlssLimit (\ s a -> s{_dlssLimit = a}) . mapping _Nat;
 
-data DescribeLogStreamsResponse = DescribeLogStreamsResponse
-    { _dlsrLogStreams :: List "logStreams" LogStream
-    , _dlsrNextToken  :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | The log group name for which log streams are to be listed.
+dlssLogGroupName :: Lens' DescribeLogStreams Text
+dlssLogGroupName = lens _dlssLogGroupName (\ s a -> s{_dlssLogGroupName = a});
 
--- | 'DescribeLogStreamsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dlsrLogStreams' @::@ ['LogStream']
---
--- * 'dlsrNextToken' @::@ 'Maybe' 'Text'
---
-describeLogStreamsResponse :: DescribeLogStreamsResponse
-describeLogStreamsResponse = DescribeLogStreamsResponse
-    { _dlsrLogStreams = mempty
-    , _dlsrNextToken  = Nothing
-    }
+instance AWSRequest DescribeLogStreams where
+        type Sv DescribeLogStreams = CloudWatchLogs
+        type Rs DescribeLogStreams =
+             DescribeLogStreamsResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeLogStreamsResponse' <$>
+                   (x .?> "nextToken") <*>
+                     (x .?> "logStreams" .!@ mempty)
+                     <*> (pure (fromEnum s)))
 
-dlsrLogStreams :: Lens' DescribeLogStreamsResponse [LogStream]
-dlsrLogStreams = lens _dlsrLogStreams (\s a -> s { _dlsrLogStreams = a }) . _List
+instance ToHeaders DescribeLogStreams where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.DescribeLogStreams" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
-dlsrNextToken :: Lens' DescribeLogStreamsResponse (Maybe Text)
-dlsrNextToken = lens _dlsrNextToken (\s a -> s { _dlsrNextToken = a })
+instance ToJSON DescribeLogStreams where
+        toJSON DescribeLogStreams'{..}
+          = object
+              ["orderBy" .= _dlssOrderBy,
+               "descending" .= _dlssDescending,
+               "nextToken" .= _dlssNextToken,
+               "logStreamNamePrefix" .= _dlssLogStreamNamePrefix,
+               "limit" .= _dlssLimit,
+               "logGroupName" .= _dlssLogGroupName]
 
 instance ToPath DescribeLogStreams where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DescribeLogStreams where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders DescribeLogStreams
+-- | /See:/ 'describeLogStreamsResponse' smart constructor.
+data DescribeLogStreamsResponse = DescribeLogStreamsResponse'
+    { _dlsrsNextToken  :: !(Maybe Text)
+    , _dlsrsLogStreams :: !(Maybe [LogStream])
+    , _dlsrsStatus     :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON DescribeLogStreams where
-    toJSON DescribeLogStreams{..} = object
-        [ "logGroupName"        .= _dls1LogGroupName
-        , "logStreamNamePrefix" .= _dls1LogStreamNamePrefix
-        , "orderBy"             .= _dls1OrderBy
-        , "descending"          .= _dls1Descending
-        , "nextToken"           .= _dls1NextToken
-        , "limit"               .= _dls1Limit
-        ]
+-- | Creates a value of 'DescribeLogStreamsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dlsrsNextToken'
+--
+-- * 'dlsrsLogStreams'
+--
+-- * 'dlsrsStatus'
+describeLogStreamsResponse
+    :: Int -- ^ 'dlsrsStatus'
+    -> DescribeLogStreamsResponse
+describeLogStreamsResponse pStatus_ =
+    DescribeLogStreamsResponse'
+    { _dlsrsNextToken = Nothing
+    , _dlsrsLogStreams = Nothing
+    , _dlsrsStatus = pStatus_
+    }
 
-instance AWSRequest DescribeLogStreams where
-    type Sv DescribeLogStreams = CloudWatchLogs
-    type Rs DescribeLogStreams = DescribeLogStreamsResponse
+-- | Undocumented member.
+dlsrsNextToken :: Lens' DescribeLogStreamsResponse (Maybe Text)
+dlsrsNextToken = lens _dlsrsNextToken (\ s a -> s{_dlsrsNextToken = a});
 
-    request  = post "DescribeLogStreams"
-    response = jsonResponse
+-- | Undocumented member.
+dlsrsLogStreams :: Lens' DescribeLogStreamsResponse [LogStream]
+dlsrsLogStreams = lens _dlsrsLogStreams (\ s a -> s{_dlsrsLogStreams = a}) . _Default . _Coerce;
 
-instance FromJSON DescribeLogStreamsResponse where
-    parseJSON = withObject "DescribeLogStreamsResponse" $ \o -> DescribeLogStreamsResponse
-        <$> o .:? "logStreams" .!= mempty
-        <*> o .:? "nextToken"
+-- | The response status code.
+dlsrsStatus :: Lens' DescribeLogStreamsResponse Int
+dlsrsStatus = lens _dlsrsStatus (\ s a -> s{_dlsrsStatus = a});
diff --git a/gen/Network/AWS/CloudWatchLogs/DescribeMetricFilters.hs b/gen/Network/AWS/CloudWatchLogs/DescribeMetricFilters.hs
--- a/gen/Network/AWS/CloudWatchLogs/DescribeMetricFilters.hs
+++ b/gen/Network/AWS/CloudWatchLogs/DescribeMetricFilters.hs
@@ -1,159 +1,180 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.CloudWatchLogs.DescribeMetricFilters
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns all the metrics filters associated with the specified log group. The
--- list returned in the response is ASCII-sorted by filter name.
+-- Returns all the metrics filters associated with the specified log group.
+-- The list returned in the response is ASCII-sorted by filter name.
 --
 -- By default, this operation returns up to 50 metric filters. If there are
--- more metric filters to list, the response would contain a 'nextToken' value in
--- the response body. You can also limit the number of metric filters returned
--- in the response by specifying the 'limit' parameter in the request.
+-- more metric filters to list, the response would contain a 'nextToken'
+-- value in the response body. You can also limit the number of metric
+-- filters returned in the response by specifying the 'limit' parameter in
+-- the request.
 --
--- <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeMetricFilters.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeMetricFilters.html AWS API Reference> for DescribeMetricFilters.
 module Network.AWS.CloudWatchLogs.DescribeMetricFilters
     (
-    -- * Request
-      DescribeMetricFilters
-    -- ** Request constructor
-    , describeMetricFilters
-    -- ** Request lenses
+    -- * Creating a Request
+      describeMetricFilters
+    , DescribeMetricFilters
+    -- * Request Lenses
     , dmfFilterNamePrefix
+    , dmfNextToken
     , dmfLimit
     , dmfLogGroupName
-    , dmfNextToken
 
-    -- * Response
-    , DescribeMetricFiltersResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , describeMetricFiltersResponse
-    -- ** Response lenses
-    , dmfrMetricFilters
-    , dmfrNextToken
+    , DescribeMetricFiltersResponse
+    -- * Response Lenses
+    , dmfrsNextToken
+    , dmfrsMetricFilters
+    , dmfrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudWatchLogs.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data DescribeMetricFilters = DescribeMetricFilters
-    { _dmfFilterNamePrefix :: Maybe Text
-    , _dmfLimit            :: Maybe Nat
-    , _dmfLogGroupName     :: Text
-    , _dmfNextToken        :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'describeMetricFilters' smart constructor.
+data DescribeMetricFilters = DescribeMetricFilters'
+    { _dmfFilterNamePrefix :: !(Maybe Text)
+    , _dmfNextToken        :: !(Maybe Text)
+    , _dmfLimit            :: !(Maybe Nat)
+    , _dmfLogGroupName     :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DescribeMetricFilters' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DescribeMetricFilters' with the minimum fields required to make a request.
 --
--- * 'dmfFilterNamePrefix' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dmfLimit' @::@ 'Maybe' 'Natural'
+-- * 'dmfFilterNamePrefix'
 --
--- * 'dmfLogGroupName' @::@ 'Text'
+-- * 'dmfNextToken'
 --
--- * 'dmfNextToken' @::@ 'Maybe' 'Text'
+-- * 'dmfLimit'
 --
-describeMetricFilters :: Text -- ^ 'dmfLogGroupName'
-                      -> DescribeMetricFilters
-describeMetricFilters p1 = DescribeMetricFilters
-    { _dmfLogGroupName     = p1
-    , _dmfFilterNamePrefix = Nothing
-    , _dmfNextToken        = Nothing
-    , _dmfLimit            = Nothing
+-- * 'dmfLogGroupName'
+describeMetricFilters
+    :: Text -- ^ 'dmfLogGroupName'
+    -> DescribeMetricFilters
+describeMetricFilters pLogGroupName_ =
+    DescribeMetricFilters'
+    { _dmfFilterNamePrefix = Nothing
+    , _dmfNextToken = Nothing
+    , _dmfLimit = Nothing
+    , _dmfLogGroupName = pLogGroupName_
     }
 
+-- | Will only return metric filters that match the provided
+-- filterNamePrefix. If you don\'t specify a value, no prefix filter is
+-- applied.
 dmfFilterNamePrefix :: Lens' DescribeMetricFilters (Maybe Text)
-dmfFilterNamePrefix =
-    lens _dmfFilterNamePrefix (\s a -> s { _dmfFilterNamePrefix = a })
+dmfFilterNamePrefix = lens _dmfFilterNamePrefix (\ s a -> s{_dmfFilterNamePrefix = a});
 
--- | The maximum number of items returned in the response. If you don't specify a
--- value, the request would return up to 50 items.
+-- | A string token used for pagination that points to the next page of
+-- results. It must be a value obtained from the response of the previous
+-- 'DescribeMetricFilters' request.
+dmfNextToken :: Lens' DescribeMetricFilters (Maybe Text)
+dmfNextToken = lens _dmfNextToken (\ s a -> s{_dmfNextToken = a});
+
+-- | The maximum number of items returned in the response. If you don\'t
+-- specify a value, the request would return up to 50 items.
 dmfLimit :: Lens' DescribeMetricFilters (Maybe Natural)
-dmfLimit = lens _dmfLimit (\s a -> s { _dmfLimit = a }) . mapping _Nat
+dmfLimit = lens _dmfLimit (\ s a -> s{_dmfLimit = a}) . mapping _Nat;
 
+-- | The log group name for which metric filters are to be listed.
 dmfLogGroupName :: Lens' DescribeMetricFilters Text
-dmfLogGroupName = lens _dmfLogGroupName (\s a -> s { _dmfLogGroupName = a })
-
--- | A string token used for pagination that points to the next page of results.
--- It must be a value obtained from the response of the previous 'DescribeMetricFilters' request.
-dmfNextToken :: Lens' DescribeMetricFilters (Maybe Text)
-dmfNextToken = lens _dmfNextToken (\s a -> s { _dmfNextToken = a })
-
-data DescribeMetricFiltersResponse = DescribeMetricFiltersResponse
-    { _dmfrMetricFilters :: List "metricFilters" MetricFilter
-    , _dmfrNextToken     :: Maybe Text
-    } deriving (Eq, Read, Show)
+dmfLogGroupName = lens _dmfLogGroupName (\ s a -> s{_dmfLogGroupName = a});
 
--- | 'DescribeMetricFiltersResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dmfrMetricFilters' @::@ ['MetricFilter']
---
--- * 'dmfrNextToken' @::@ 'Maybe' 'Text'
---
-describeMetricFiltersResponse :: DescribeMetricFiltersResponse
-describeMetricFiltersResponse = DescribeMetricFiltersResponse
-    { _dmfrMetricFilters = mempty
-    , _dmfrNextToken     = Nothing
-    }
+instance AWSRequest DescribeMetricFilters where
+        type Sv DescribeMetricFilters = CloudWatchLogs
+        type Rs DescribeMetricFilters =
+             DescribeMetricFiltersResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeMetricFiltersResponse' <$>
+                   (x .?> "nextToken") <*>
+                     (x .?> "metricFilters" .!@ mempty)
+                     <*> (pure (fromEnum s)))
 
-dmfrMetricFilters :: Lens' DescribeMetricFiltersResponse [MetricFilter]
-dmfrMetricFilters =
-    lens _dmfrMetricFilters (\s a -> s { _dmfrMetricFilters = a })
-        . _List
+instance ToHeaders DescribeMetricFilters where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.DescribeMetricFilters" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
-dmfrNextToken :: Lens' DescribeMetricFiltersResponse (Maybe Text)
-dmfrNextToken = lens _dmfrNextToken (\s a -> s { _dmfrNextToken = a })
+instance ToJSON DescribeMetricFilters where
+        toJSON DescribeMetricFilters'{..}
+          = object
+              ["filterNamePrefix" .= _dmfFilterNamePrefix,
+               "nextToken" .= _dmfNextToken, "limit" .= _dmfLimit,
+               "logGroupName" .= _dmfLogGroupName]
 
 instance ToPath DescribeMetricFilters where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DescribeMetricFilters where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders DescribeMetricFilters
+-- | /See:/ 'describeMetricFiltersResponse' smart constructor.
+data DescribeMetricFiltersResponse = DescribeMetricFiltersResponse'
+    { _dmfrsNextToken     :: !(Maybe Text)
+    , _dmfrsMetricFilters :: !(Maybe [MetricFilter])
+    , _dmfrsStatus        :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON DescribeMetricFilters where
-    toJSON DescribeMetricFilters{..} = object
-        [ "logGroupName"     .= _dmfLogGroupName
-        , "filterNamePrefix" .= _dmfFilterNamePrefix
-        , "nextToken"        .= _dmfNextToken
-        , "limit"            .= _dmfLimit
-        ]
+-- | Creates a value of 'DescribeMetricFiltersResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dmfrsNextToken'
+--
+-- * 'dmfrsMetricFilters'
+--
+-- * 'dmfrsStatus'
+describeMetricFiltersResponse
+    :: Int -- ^ 'dmfrsStatus'
+    -> DescribeMetricFiltersResponse
+describeMetricFiltersResponse pStatus_ =
+    DescribeMetricFiltersResponse'
+    { _dmfrsNextToken = Nothing
+    , _dmfrsMetricFilters = Nothing
+    , _dmfrsStatus = pStatus_
+    }
 
-instance AWSRequest DescribeMetricFilters where
-    type Sv DescribeMetricFilters = CloudWatchLogs
-    type Rs DescribeMetricFilters = DescribeMetricFiltersResponse
+-- | Undocumented member.
+dmfrsNextToken :: Lens' DescribeMetricFiltersResponse (Maybe Text)
+dmfrsNextToken = lens _dmfrsNextToken (\ s a -> s{_dmfrsNextToken = a});
 
-    request  = post "DescribeMetricFilters"
-    response = jsonResponse
+-- | Undocumented member.
+dmfrsMetricFilters :: Lens' DescribeMetricFiltersResponse [MetricFilter]
+dmfrsMetricFilters = lens _dmfrsMetricFilters (\ s a -> s{_dmfrsMetricFilters = a}) . _Default . _Coerce;
 
-instance FromJSON DescribeMetricFiltersResponse where
-    parseJSON = withObject "DescribeMetricFiltersResponse" $ \o -> DescribeMetricFiltersResponse
-        <$> o .:? "metricFilters" .!= mempty
-        <*> o .:? "nextToken"
+-- | The response status code.
+dmfrsStatus :: Lens' DescribeMetricFiltersResponse Int
+dmfrsStatus = lens _dmfrsStatus (\ s a -> s{_dmfrsStatus = a});
diff --git a/gen/Network/AWS/CloudWatchLogs/DescribeSubscriptionFilters.hs b/gen/Network/AWS/CloudWatchLogs/DescribeSubscriptionFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudWatchLogs/DescribeSubscriptionFilters.hs
@@ -0,0 +1,177 @@
+{-# 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.CloudWatchLogs.DescribeSubscriptionFilters
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns all the subscription filters associated with the specified log
+-- group. The list returned in the response is ASCII-sorted by filter name.
+--
+-- By default, this operation returns up to 50 subscription filters. If
+-- there are more subscription filters to list, the response would contain
+-- a 'nextToken' value in the response body. You can also limit the number
+-- of subscription filters returned in the response by specifying the
+-- 'limit' parameter in the request.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeSubscriptionFilters.html AWS API Reference> for DescribeSubscriptionFilters.
+module Network.AWS.CloudWatchLogs.DescribeSubscriptionFilters
+    (
+    -- * Creating a Request
+      describeSubscriptionFilters
+    , DescribeSubscriptionFilters
+    -- * Request Lenses
+    , dsfFilterNamePrefix
+    , dsfNextToken
+    , dsfLimit
+    , dsfLogGroupName
+
+    -- * Destructuring the Response
+    , describeSubscriptionFiltersResponse
+    , DescribeSubscriptionFiltersResponse
+    -- * Response Lenses
+    , dsfrsSubscriptionFilters
+    , dsfrsNextToken
+    , dsfrsStatus
+    ) where
+
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'describeSubscriptionFilters' smart constructor.
+data DescribeSubscriptionFilters = DescribeSubscriptionFilters'
+    { _dsfFilterNamePrefix :: !(Maybe Text)
+    , _dsfNextToken        :: !(Maybe Text)
+    , _dsfLimit            :: !(Maybe Nat)
+    , _dsfLogGroupName     :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeSubscriptionFilters' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsfFilterNamePrefix'
+--
+-- * 'dsfNextToken'
+--
+-- * 'dsfLimit'
+--
+-- * 'dsfLogGroupName'
+describeSubscriptionFilters
+    :: Text -- ^ 'dsfLogGroupName'
+    -> DescribeSubscriptionFilters
+describeSubscriptionFilters pLogGroupName_ =
+    DescribeSubscriptionFilters'
+    { _dsfFilterNamePrefix = Nothing
+    , _dsfNextToken = Nothing
+    , _dsfLimit = Nothing
+    , _dsfLogGroupName = pLogGroupName_
+    }
+
+-- | Will only return subscription filters that match the provided
+-- filterNamePrefix. If you don\'t specify a value, no prefix filter is
+-- applied.
+dsfFilterNamePrefix :: Lens' DescribeSubscriptionFilters (Maybe Text)
+dsfFilterNamePrefix = lens _dsfFilterNamePrefix (\ s a -> s{_dsfFilterNamePrefix = a});
+
+-- | Undocumented member.
+dsfNextToken :: Lens' DescribeSubscriptionFilters (Maybe Text)
+dsfNextToken = lens _dsfNextToken (\ s a -> s{_dsfNextToken = a});
+
+-- | Undocumented member.
+dsfLimit :: Lens' DescribeSubscriptionFilters (Maybe Natural)
+dsfLimit = lens _dsfLimit (\ s a -> s{_dsfLimit = a}) . mapping _Nat;
+
+-- | The log group name for which subscription filters are to be listed.
+dsfLogGroupName :: Lens' DescribeSubscriptionFilters Text
+dsfLogGroupName = lens _dsfLogGroupName (\ s a -> s{_dsfLogGroupName = a});
+
+instance AWSRequest DescribeSubscriptionFilters where
+        type Sv DescribeSubscriptionFilters = CloudWatchLogs
+        type Rs DescribeSubscriptionFilters =
+             DescribeSubscriptionFiltersResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeSubscriptionFiltersResponse' <$>
+                   (x .?> "subscriptionFilters" .!@ mempty) <*>
+                     (x .?> "nextToken")
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders DescribeSubscriptionFilters where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.DescribeSubscriptionFilters" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeSubscriptionFilters where
+        toJSON DescribeSubscriptionFilters'{..}
+          = object
+              ["filterNamePrefix" .= _dsfFilterNamePrefix,
+               "nextToken" .= _dsfNextToken, "limit" .= _dsfLimit,
+               "logGroupName" .= _dsfLogGroupName]
+
+instance ToPath DescribeSubscriptionFilters where
+        toPath = const "/"
+
+instance ToQuery DescribeSubscriptionFilters where
+        toQuery = const mempty
+
+-- | /See:/ 'describeSubscriptionFiltersResponse' smart constructor.
+data DescribeSubscriptionFiltersResponse = DescribeSubscriptionFiltersResponse'
+    { _dsfrsSubscriptionFilters :: !(Maybe [SubscriptionFilter])
+    , _dsfrsNextToken           :: !(Maybe Text)
+    , _dsfrsStatus              :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeSubscriptionFiltersResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsfrsSubscriptionFilters'
+--
+-- * 'dsfrsNextToken'
+--
+-- * 'dsfrsStatus'
+describeSubscriptionFiltersResponse
+    :: Int -- ^ 'dsfrsStatus'
+    -> DescribeSubscriptionFiltersResponse
+describeSubscriptionFiltersResponse pStatus_ =
+    DescribeSubscriptionFiltersResponse'
+    { _dsfrsSubscriptionFilters = Nothing
+    , _dsfrsNextToken = Nothing
+    , _dsfrsStatus = pStatus_
+    }
+
+-- | Undocumented member.
+dsfrsSubscriptionFilters :: Lens' DescribeSubscriptionFiltersResponse [SubscriptionFilter]
+dsfrsSubscriptionFilters = lens _dsfrsSubscriptionFilters (\ s a -> s{_dsfrsSubscriptionFilters = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+dsfrsNextToken :: Lens' DescribeSubscriptionFiltersResponse (Maybe Text)
+dsfrsNextToken = lens _dsfrsNextToken (\ s a -> s{_dsfrsNextToken = a});
+
+-- | The response status code.
+dsfrsStatus :: Lens' DescribeSubscriptionFiltersResponse Int
+dsfrsStatus = lens _dsfrsStatus (\ s a -> s{_dsfrsStatus = a});
diff --git a/gen/Network/AWS/CloudWatchLogs/FilterLogEvents.hs b/gen/Network/AWS/CloudWatchLogs/FilterLogEvents.hs
--- a/gen/Network/AWS/CloudWatchLogs/FilterLogEvents.hs
+++ b/gen/Network/AWS/CloudWatchLogs/FilterLogEvents.hs
@@ -1,232 +1,246 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.CloudWatchLogs.FilterLogEvents
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Retrieves log events, optionally filtered by a filter pattern from the
--- specified log group. You can provide an optional time range to filter the
--- results on the event 'timestamp'. You can limit the streams searched to an
--- explicit list of 'logStreamNames'.
+-- Retrieves log events, optionally filtered by a filter pattern from the
+-- specified log group. You can provide an optional time range to filter
+-- the results on the event 'timestamp'. You can limit the streams searched
+-- to an explicit list of 'logStreamNames'.
 --
--- By default, this operation returns as much matching log events as can fit
--- in a response size of 1MB, up to 10,000 log events, or all the events found
--- within a time-bounded scan window. If the response includes a 'nextToken', then
--- there is more data to search, and the search can be resumed with a new
--- request providing the nextToken. The response will contain a list of 'searchedLogStreams' that contains information about which streams were searched in the request
--- and whether they have been searched completely or require further pagination.
--- The 'limit' parameter in the request. can be used to specify the maximum number
--- of events to return in a page.
+-- By default, this operation returns as much matching log events as can
+-- fit in a response size of 1MB, up to 10,000 log events, or all the
+-- events found within a time-bounded scan window. If the response includes
+-- a 'nextToken', then there is more data to search, and the search can be
+-- resumed with a new request providing the nextToken. The response will
+-- contain a list of 'searchedLogStreams' that contains information about
+-- which streams were searched in the request and whether they have been
+-- searched completely or require further pagination. The 'limit' parameter
+-- in the request. can be used to specify the maximum number of events to
+-- return in a page.
 --
--- <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_FilterLogEvents.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_FilterLogEvents.html AWS API Reference> for FilterLogEvents.
 module Network.AWS.CloudWatchLogs.FilterLogEvents
     (
-    -- * Request
-      FilterLogEvents
-    -- ** Request constructor
-    , filterLogEvents
-    -- ** Request lenses
+    -- * Creating a Request
+      filterLogEvents
+    , FilterLogEvents
+    -- * Request Lenses
+    , fleStartTime
+    , fleLogStreamNames
+    , fleNextToken
     , fleEndTime
+    , fleLimit
     , fleFilterPattern
     , fleInterleaved
-    , fleLimit
     , fleLogGroupName
-    , fleLogStreamNames
-    , fleNextToken
-    , fleStartTime
 
-    -- * Response
-    , FilterLogEventsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , filterLogEventsResponse
-    -- ** Response lenses
-    , flerEvents
-    , flerNextToken
-    , flerSearchedLogStreams
+    , FilterLogEventsResponse
+    -- * Response Lenses
+    , flersSearchedLogStreams
+    , flersNextToken
+    , flersEvents
+    , flersStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudWatchLogs.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data FilterLogEvents = FilterLogEvents
-    { _fleEndTime        :: Maybe Nat
-    , _fleFilterPattern  :: Maybe Text
-    , _fleInterleaved    :: Maybe Bool
-    , _fleLimit          :: Maybe Nat
-    , _fleLogGroupName   :: Text
-    , _fleLogStreamNames :: List1 "logStreamNames" Text
-    , _fleNextToken      :: Maybe Text
-    , _fleStartTime      :: Maybe Nat
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'filterLogEvents' smart constructor.
+data FilterLogEvents = FilterLogEvents'
+    { _fleStartTime      :: !(Maybe Nat)
+    , _fleLogStreamNames :: !(Maybe (List1 Text))
+    , _fleNextToken      :: !(Maybe Text)
+    , _fleEndTime        :: !(Maybe Nat)
+    , _fleLimit          :: !(Maybe Nat)
+    , _fleFilterPattern  :: !(Maybe Text)
+    , _fleInterleaved    :: !(Maybe Bool)
+    , _fleLogGroupName   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'FilterLogEvents' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'FilterLogEvents' with the minimum fields required to make a request.
 --
--- * 'fleEndTime' @::@ 'Maybe' 'Natural'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'fleFilterPattern' @::@ 'Maybe' 'Text'
+-- * 'fleStartTime'
 --
--- * 'fleInterleaved' @::@ 'Maybe' 'Bool'
+-- * 'fleLogStreamNames'
 --
--- * 'fleLimit' @::@ 'Maybe' 'Natural'
+-- * 'fleNextToken'
 --
--- * 'fleLogGroupName' @::@ 'Text'
+-- * 'fleEndTime'
 --
--- * 'fleLogStreamNames' @::@ 'NonEmpty' 'Text'
+-- * 'fleLimit'
 --
--- * 'fleNextToken' @::@ 'Maybe' 'Text'
+-- * 'fleFilterPattern'
 --
--- * 'fleStartTime' @::@ 'Maybe' 'Natural'
+-- * 'fleInterleaved'
 --
-filterLogEvents :: Text -- ^ 'fleLogGroupName'
-                -> NonEmpty Text -- ^ 'fleLogStreamNames'
-                -> FilterLogEvents
-filterLogEvents p1 p2 = FilterLogEvents
-    { _fleLogGroupName   = p1
-    , _fleLogStreamNames = withIso _List1 (const id) p2
-    , _fleStartTime      = Nothing
-    , _fleEndTime        = Nothing
-    , _fleFilterPattern  = Nothing
-    , _fleNextToken      = Nothing
-    , _fleLimit          = Nothing
-    , _fleInterleaved    = Nothing
+-- * 'fleLogGroupName'
+filterLogEvents
+    :: Text -- ^ 'fleLogGroupName'
+    -> FilterLogEvents
+filterLogEvents pLogGroupName_ =
+    FilterLogEvents'
+    { _fleStartTime = Nothing
+    , _fleLogStreamNames = Nothing
+    , _fleNextToken = Nothing
+    , _fleEndTime = Nothing
+    , _fleLimit = Nothing
+    , _fleFilterPattern = Nothing
+    , _fleInterleaved = Nothing
+    , _fleLogGroupName = pLogGroupName_
     }
 
--- | A unix timestamp indicating the end time of the range for the request. If
--- provided, events with a timestamp later than this time will not be returned.
-fleEndTime :: Lens' FilterLogEvents (Maybe Natural)
-fleEndTime = lens _fleEndTime (\s a -> s { _fleEndTime = a }) . mapping _Nat
+-- | A unix timestamp indicating the start time of the range for the request.
+-- If provided, events with a timestamp prior to this time will not be
+-- returned.
+fleStartTime :: Lens' FilterLogEvents (Maybe Natural)
+fleStartTime = lens _fleStartTime (\ s a -> s{_fleStartTime = a}) . mapping _Nat;
 
--- | A valid CloudWatch Logs filter pattern to use for filtering the response. If
--- not provided, all the events are matched.
-fleFilterPattern :: Lens' FilterLogEvents (Maybe Text)
-fleFilterPattern = lens _fleFilterPattern (\s a -> s { _fleFilterPattern = a })
+-- | Optional list of log stream names within the specified log group to
+-- search. Defaults to all the log streams in the log group.
+fleLogStreamNames :: Lens' FilterLogEvents (Maybe (NonEmpty Text))
+fleLogStreamNames = lens _fleLogStreamNames (\ s a -> s{_fleLogStreamNames = a}) . mapping _List1;
 
--- | If provided, the API will make a best effort to provide responses that
--- contain events from multiple log streams within the log group interleaved in
--- a single response. If not provided, all the matched log events in the first
--- log stream will be searched first, then those in the next log stream, etc.
-fleInterleaved :: Lens' FilterLogEvents (Maybe Bool)
-fleInterleaved = lens _fleInterleaved (\s a -> s { _fleInterleaved = a })
+-- | A pagination token obtained from a 'FilterLogEvents' response to
+-- continue paginating the FilterLogEvents results.
+fleNextToken :: Lens' FilterLogEvents (Maybe Text)
+fleNextToken = lens _fleNextToken (\ s a -> s{_fleNextToken = a});
 
+-- | A unix timestamp indicating the end time of the range for the request.
+-- If provided, events with a timestamp later than this time will not be
+-- returned.
+fleEndTime :: Lens' FilterLogEvents (Maybe Natural)
+fleEndTime = lens _fleEndTime (\ s a -> s{_fleEndTime = a}) . mapping _Nat;
+
 -- | The maximum number of events to return in a page of results. Default is
 -- 10,000 events.
 fleLimit :: Lens' FilterLogEvents (Maybe Natural)
-fleLimit = lens _fleLimit (\s a -> s { _fleLimit = a }) . mapping _Nat
+fleLimit = lens _fleLimit (\ s a -> s{_fleLimit = a}) . mapping _Nat;
 
--- | The name of the log group to query
+-- | A valid CloudWatch Logs filter pattern to use for filtering the
+-- response. If not provided, all the events are matched.
+fleFilterPattern :: Lens' FilterLogEvents (Maybe Text)
+fleFilterPattern = lens _fleFilterPattern (\ s a -> s{_fleFilterPattern = a});
+
+-- | If provided, the API will make a best effort to provide responses that
+-- contain events from multiple log streams within the log group
+-- interleaved in a single response. If not provided, all the matched log
+-- events in the first log stream will be searched first, then those in the
+-- next log stream, etc.
+fleInterleaved :: Lens' FilterLogEvents (Maybe Bool)
+fleInterleaved = lens _fleInterleaved (\ s a -> s{_fleInterleaved = a});
+
+-- | The name of the log group to query.
 fleLogGroupName :: Lens' FilterLogEvents Text
-fleLogGroupName = lens _fleLogGroupName (\s a -> s { _fleLogGroupName = a })
+fleLogGroupName = lens _fleLogGroupName (\ s a -> s{_fleLogGroupName = a});
 
--- | Optional list of log stream names within the specified log group to search.
--- Defaults to all the log streams in the log group.
-fleLogStreamNames :: Lens' FilterLogEvents (NonEmpty Text)
-fleLogStreamNames =
-    lens _fleLogStreamNames (\s a -> s { _fleLogStreamNames = a })
-        . _List1
+instance AWSRequest FilterLogEvents where
+        type Sv FilterLogEvents = CloudWatchLogs
+        type Rs FilterLogEvents = FilterLogEventsResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 FilterLogEventsResponse' <$>
+                   (x .?> "searchedLogStreams" .!@ mempty) <*>
+                     (x .?> "nextToken")
+                     <*> (x .?> "events" .!@ mempty)
+                     <*> (pure (fromEnum s)))
 
--- | A pagination token obtained from a 'FilterLogEvents' response to continue
--- paginating the FilterLogEvents results.
-fleNextToken :: Lens' FilterLogEvents (Maybe Text)
-fleNextToken = lens _fleNextToken (\s a -> s { _fleNextToken = a })
+instance ToHeaders FilterLogEvents where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.FilterLogEvents" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | A unix timestamp indicating the start time of the range for the request. If
--- provided, events with a timestamp prior to this time will not be returned.
-fleStartTime :: Lens' FilterLogEvents (Maybe Natural)
-fleStartTime = lens _fleStartTime (\s a -> s { _fleStartTime = a }) . mapping _Nat
+instance ToJSON FilterLogEvents where
+        toJSON FilterLogEvents'{..}
+          = object
+              ["startTime" .= _fleStartTime,
+               "logStreamNames" .= _fleLogStreamNames,
+               "nextToken" .= _fleNextToken,
+               "endTime" .= _fleEndTime, "limit" .= _fleLimit,
+               "filterPattern" .= _fleFilterPattern,
+               "interleaved" .= _fleInterleaved,
+               "logGroupName" .= _fleLogGroupName]
 
-data FilterLogEventsResponse = FilterLogEventsResponse
-    { _flerEvents             :: List "events" FilteredLogEvent
-    , _flerNextToken          :: Maybe Text
-    , _flerSearchedLogStreams :: List "searchedLogStreams" SearchedLogStream
-    } deriving (Eq, Read, Show)
+instance ToPath FilterLogEvents where
+        toPath = const "/"
 
--- | 'FilterLogEventsResponse' constructor.
+instance ToQuery FilterLogEvents where
+        toQuery = const mempty
+
+-- | /See:/ 'filterLogEventsResponse' smart constructor.
+data FilterLogEventsResponse = FilterLogEventsResponse'
+    { _flersSearchedLogStreams :: !(Maybe [SearchedLogStream])
+    , _flersNextToken          :: !(Maybe Text)
+    , _flersEvents             :: !(Maybe [FilteredLogEvent])
+    , _flersStatus             :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FilterLogEventsResponse' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'flerEvents' @::@ ['FilteredLogEvent']
+-- * 'flersSearchedLogStreams'
 --
--- * 'flerNextToken' @::@ 'Maybe' 'Text'
+-- * 'flersNextToken'
 --
--- * 'flerSearchedLogStreams' @::@ ['SearchedLogStream']
+-- * 'flersEvents'
 --
-filterLogEventsResponse :: FilterLogEventsResponse
-filterLogEventsResponse = FilterLogEventsResponse
-    { _flerEvents             = mempty
-    , _flerSearchedLogStreams = mempty
-    , _flerNextToken          = Nothing
+-- * 'flersStatus'
+filterLogEventsResponse
+    :: Int -- ^ 'flersStatus'
+    -> FilterLogEventsResponse
+filterLogEventsResponse pStatus_ =
+    FilterLogEventsResponse'
+    { _flersSearchedLogStreams = Nothing
+    , _flersNextToken = Nothing
+    , _flersEvents = Nothing
+    , _flersStatus = pStatus_
     }
 
--- | A list of 'FilteredLogEvent' objects representing the matched events from the
--- request.
-flerEvents :: Lens' FilterLogEventsResponse [FilteredLogEvent]
-flerEvents = lens _flerEvents (\s a -> s { _flerEvents = a }) . _List
-
--- | A pagination token obtained from a 'FilterLogEvents' response to continue
--- paginating the FilterLogEvents results.
-flerNextToken :: Lens' FilterLogEventsResponse (Maybe Text)
-flerNextToken = lens _flerNextToken (\s a -> s { _flerNextToken = a })
-
--- | A list of 'SearchedLogStream' objects indicating which log streams have been
--- searched in this request and whether each has been searched completely or
--- still has more to be paginated.
-flerSearchedLogStreams :: Lens' FilterLogEventsResponse [SearchedLogStream]
-flerSearchedLogStreams =
-    lens _flerSearchedLogStreams (\s a -> s { _flerSearchedLogStreams = a })
-        . _List
-
-instance ToPath FilterLogEvents where
-    toPath = const "/"
-
-instance ToQuery FilterLogEvents where
-    toQuery = const mempty
-
-instance ToHeaders FilterLogEvents
-
-instance ToJSON FilterLogEvents where
-    toJSON FilterLogEvents{..} = object
-        [ "logGroupName"   .= _fleLogGroupName
-        , "logStreamNames" .= _fleLogStreamNames
-        , "startTime"      .= _fleStartTime
-        , "endTime"        .= _fleEndTime
-        , "filterPattern"  .= _fleFilterPattern
-        , "nextToken"      .= _fleNextToken
-        , "limit"          .= _fleLimit
-        , "interleaved"    .= _fleInterleaved
-        ]
+-- | A list of 'SearchedLogStream' objects indicating which log streams have
+-- been searched in this request and whether each has been searched
+-- completely or still has more to be paginated.
+flersSearchedLogStreams :: Lens' FilterLogEventsResponse [SearchedLogStream]
+flersSearchedLogStreams = lens _flersSearchedLogStreams (\ s a -> s{_flersSearchedLogStreams = a}) . _Default . _Coerce;
 
-instance AWSRequest FilterLogEvents where
-    type Sv FilterLogEvents = CloudWatchLogs
-    type Rs FilterLogEvents = FilterLogEventsResponse
+-- | A pagination token obtained from a 'FilterLogEvents' response to
+-- continue paginating the FilterLogEvents results.
+flersNextToken :: Lens' FilterLogEventsResponse (Maybe Text)
+flersNextToken = lens _flersNextToken (\ s a -> s{_flersNextToken = a});
 
-    request  = post "FilterLogEvents"
-    response = jsonResponse
+-- | A list of 'FilteredLogEvent' objects representing the matched events
+-- from the request.
+flersEvents :: Lens' FilterLogEventsResponse [FilteredLogEvent]
+flersEvents = lens _flersEvents (\ s a -> s{_flersEvents = a}) . _Default . _Coerce;
 
-instance FromJSON FilterLogEventsResponse where
-    parseJSON = withObject "FilterLogEventsResponse" $ \o -> FilterLogEventsResponse
-        <$> o .:? "events" .!= mempty
-        <*> o .:? "nextToken"
-        <*> o .:? "searchedLogStreams" .!= mempty
+-- | The response status code.
+flersStatus :: Lens' FilterLogEventsResponse Int
+flersStatus = lens _flersStatus (\ s a -> s{_flersStatus = a});
diff --git a/gen/Network/AWS/CloudWatchLogs/GetLogEvents.hs b/gen/Network/AWS/CloudWatchLogs/GetLogEvents.hs
--- a/gen/Network/AWS/CloudWatchLogs/GetLogEvents.hs
+++ b/gen/Network/AWS/CloudWatchLogs/GetLogEvents.hs
@@ -1,202 +1,222 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.CloudWatchLogs.GetLogEvents
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Retrieves log events from the specified log stream. You can provide an
+-- Retrieves log events from the specified log stream. You can provide an
 -- optional time range to filter the results on the event 'timestamp'.
 --
 -- By default, this operation returns as much log events as can fit in a
 -- response size of 1MB, up to 10,000 log events. The response will always
--- include a 'nextForwardToken' and a 'nextBackwardToken' in the response body. You
--- can use any of these tokens in subsequent 'GetLogEvents' requests to paginate
--- through events in either forward or backward direction. You can also limit
--- the number of log events returned in the response by specifying the 'limit'
--- parameter in the request.
+-- include a 'nextForwardToken' and a 'nextBackwardToken' in the response
+-- body. You can use any of these tokens in subsequent 'GetLogEvents'
+-- requests to paginate through events in either forward or backward
+-- direction. You can also limit the number of log events returned in the
+-- response by specifying the 'limit' parameter in the request.
 --
--- <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_GetLogEvents.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_GetLogEvents.html AWS API Reference> for GetLogEvents.
 module Network.AWS.CloudWatchLogs.GetLogEvents
     (
-    -- * Request
-      GetLogEvents
-    -- ** Request constructor
-    , getLogEvents
-    -- ** Request lenses
+    -- * Creating a Request
+      getLogEvents
+    , GetLogEvents
+    -- * Request Lenses
+    , gleStartTime
+    , gleStartFromHead
+    , gleNextToken
     , gleEndTime
     , gleLimit
     , gleLogGroupName
     , gleLogStreamName
-    , gleNextToken
-    , gleStartFromHead
-    , gleStartTime
 
-    -- * Response
-    , GetLogEventsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getLogEventsResponse
-    -- ** Response lenses
-    , glerEvents
-    , glerNextBackwardToken
-    , glerNextForwardToken
+    , GetLogEventsResponse
+    -- * Response Lenses
+    , glersNextBackwardToken
+    , glersNextForwardToken
+    , glersEvents
+    , glersStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudWatchLogs.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data GetLogEvents = GetLogEvents
-    { _gleEndTime       :: Maybe Nat
-    , _gleLimit         :: Maybe Nat
-    , _gleLogGroupName  :: Text
-    , _gleLogStreamName :: Text
-    , _gleNextToken     :: Maybe Text
-    , _gleStartFromHead :: Maybe Bool
-    , _gleStartTime     :: Maybe Nat
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'getLogEvents' smart constructor.
+data GetLogEvents = GetLogEvents'
+    { _gleStartTime     :: !(Maybe Nat)
+    , _gleStartFromHead :: !(Maybe Bool)
+    , _gleNextToken     :: !(Maybe Text)
+    , _gleEndTime       :: !(Maybe Nat)
+    , _gleLimit         :: !(Maybe Nat)
+    , _gleLogGroupName  :: !Text
+    , _gleLogStreamName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetLogEvents' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetLogEvents' with the minimum fields required to make a request.
 --
--- * 'gleEndTime' @::@ 'Maybe' 'Natural'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gleLimit' @::@ 'Maybe' 'Natural'
+-- * 'gleStartTime'
 --
--- * 'gleLogGroupName' @::@ 'Text'
+-- * 'gleStartFromHead'
 --
--- * 'gleLogStreamName' @::@ 'Text'
+-- * 'gleNextToken'
 --
--- * 'gleNextToken' @::@ 'Maybe' 'Text'
+-- * 'gleEndTime'
 --
--- * 'gleStartFromHead' @::@ 'Maybe' 'Bool'
+-- * 'gleLimit'
 --
--- * 'gleStartTime' @::@ 'Maybe' 'Natural'
+-- * 'gleLogGroupName'
 --
-getLogEvents :: Text -- ^ 'gleLogGroupName'
-             -> Text -- ^ 'gleLogStreamName'
-             -> GetLogEvents
-getLogEvents p1 p2 = GetLogEvents
-    { _gleLogGroupName  = p1
-    , _gleLogStreamName = p2
-    , _gleStartTime     = Nothing
-    , _gleEndTime       = Nothing
-    , _gleNextToken     = Nothing
-    , _gleLimit         = Nothing
+-- * 'gleLogStreamName'
+getLogEvents
+    :: Text -- ^ 'gleLogGroupName'
+    -> Text -- ^ 'gleLogStreamName'
+    -> GetLogEvents
+getLogEvents pLogGroupName_ pLogStreamName_ =
+    GetLogEvents'
+    { _gleStartTime = Nothing
     , _gleStartFromHead = Nothing
+    , _gleNextToken = Nothing
+    , _gleEndTime = Nothing
+    , _gleLimit = Nothing
+    , _gleLogGroupName = pLogGroupName_
+    , _gleLogStreamName = pLogStreamName_
     }
 
+-- | Undocumented member.
+gleStartTime :: Lens' GetLogEvents (Maybe Natural)
+gleStartTime = lens _gleStartTime (\ s a -> s{_gleStartTime = a}) . mapping _Nat;
+
+-- | If set to true, the earliest log events would be returned first. The
+-- default is false (the latest log events are returned first).
+gleStartFromHead :: Lens' GetLogEvents (Maybe Bool)
+gleStartFromHead = lens _gleStartFromHead (\ s a -> s{_gleStartFromHead = a});
+
+-- | A string token used for pagination that points to the next page of
+-- results. It must be a value obtained from the 'nextForwardToken' or
+-- 'nextBackwardToken' fields in the response of the previous
+-- 'GetLogEvents' request.
+gleNextToken :: Lens' GetLogEvents (Maybe Text)
+gleNextToken = lens _gleNextToken (\ s a -> s{_gleNextToken = a});
+
+-- | Undocumented member.
 gleEndTime :: Lens' GetLogEvents (Maybe Natural)
-gleEndTime = lens _gleEndTime (\s a -> s { _gleEndTime = a }) . mapping _Nat
+gleEndTime = lens _gleEndTime (\ s a -> s{_gleEndTime = a}) . mapping _Nat;
 
--- | The maximum number of log events returned in the response. If you don't
--- specify a value, the request would return as many log events as can fit in a
--- response size of 1MB, up to 10,000 log events.
+-- | The maximum number of log events returned in the response. If you don\'t
+-- specify a value, the request would return as many log events as can fit
+-- in a response size of 1MB, up to 10,000 log events.
 gleLimit :: Lens' GetLogEvents (Maybe Natural)
-gleLimit = lens _gleLimit (\s a -> s { _gleLimit = a }) . mapping _Nat
+gleLimit = lens _gleLimit (\ s a -> s{_gleLimit = a}) . mapping _Nat;
 
+-- | The name of the log group to query.
 gleLogGroupName :: Lens' GetLogEvents Text
-gleLogGroupName = lens _gleLogGroupName (\s a -> s { _gleLogGroupName = a })
+gleLogGroupName = lens _gleLogGroupName (\ s a -> s{_gleLogGroupName = a});
 
+-- | The name of the log stream to query.
 gleLogStreamName :: Lens' GetLogEvents Text
-gleLogStreamName = lens _gleLogStreamName (\s a -> s { _gleLogStreamName = a })
+gleLogStreamName = lens _gleLogStreamName (\ s a -> s{_gleLogStreamName = a});
 
--- | A string token used for pagination that points to the next page of results.
--- It must be a value obtained from the 'nextForwardToken' or 'nextBackwardToken'
--- fields in the response of the previous 'GetLogEvents' request.
-gleNextToken :: Lens' GetLogEvents (Maybe Text)
-gleNextToken = lens _gleNextToken (\s a -> s { _gleNextToken = a })
+instance AWSRequest GetLogEvents where
+        type Sv GetLogEvents = CloudWatchLogs
+        type Rs GetLogEvents = GetLogEventsResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetLogEventsResponse' <$>
+                   (x .?> "nextBackwardToken") <*>
+                     (x .?> "nextForwardToken")
+                     <*> (x .?> "events" .!@ mempty)
+                     <*> (pure (fromEnum s)))
 
--- | If set to true, the earliest log events would be returned first. The default
--- is false (the latest log events are returned first).
-gleStartFromHead :: Lens' GetLogEvents (Maybe Bool)
-gleStartFromHead = lens _gleStartFromHead (\s a -> s { _gleStartFromHead = a })
+instance ToHeaders GetLogEvents where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.GetLogEvents" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
-gleStartTime :: Lens' GetLogEvents (Maybe Natural)
-gleStartTime = lens _gleStartTime (\s a -> s { _gleStartTime = a }) . mapping _Nat
+instance ToJSON GetLogEvents where
+        toJSON GetLogEvents'{..}
+          = object
+              ["startTime" .= _gleStartTime,
+               "startFromHead" .= _gleStartFromHead,
+               "nextToken" .= _gleNextToken,
+               "endTime" .= _gleEndTime, "limit" .= _gleLimit,
+               "logGroupName" .= _gleLogGroupName,
+               "logStreamName" .= _gleLogStreamName]
 
-data GetLogEventsResponse = GetLogEventsResponse
-    { _glerEvents            :: List "events" OutputLogEvent
-    , _glerNextBackwardToken :: Maybe Text
-    , _glerNextForwardToken  :: Maybe Text
-    } deriving (Eq, Read, Show)
+instance ToPath GetLogEvents where
+        toPath = const "/"
 
--- | 'GetLogEventsResponse' constructor.
+instance ToQuery GetLogEvents where
+        toQuery = const mempty
+
+-- | /See:/ 'getLogEventsResponse' smart constructor.
+data GetLogEventsResponse = GetLogEventsResponse'
+    { _glersNextBackwardToken :: !(Maybe Text)
+    , _glersNextForwardToken  :: !(Maybe Text)
+    , _glersEvents            :: !(Maybe [OutputLogEvent])
+    , _glersStatus            :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetLogEventsResponse' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'glerEvents' @::@ ['OutputLogEvent']
+-- * 'glersNextBackwardToken'
 --
--- * 'glerNextBackwardToken' @::@ 'Maybe' 'Text'
+-- * 'glersNextForwardToken'
 --
--- * 'glerNextForwardToken' @::@ 'Maybe' 'Text'
+-- * 'glersEvents'
 --
-getLogEventsResponse :: GetLogEventsResponse
-getLogEventsResponse = GetLogEventsResponse
-    { _glerEvents            = mempty
-    , _glerNextForwardToken  = Nothing
-    , _glerNextBackwardToken = Nothing
+-- * 'glersStatus'
+getLogEventsResponse
+    :: Int -- ^ 'glersStatus'
+    -> GetLogEventsResponse
+getLogEventsResponse pStatus_ =
+    GetLogEventsResponse'
+    { _glersNextBackwardToken = Nothing
+    , _glersNextForwardToken = Nothing
+    , _glersEvents = Nothing
+    , _glersStatus = pStatus_
     }
 
-glerEvents :: Lens' GetLogEventsResponse [OutputLogEvent]
-glerEvents = lens _glerEvents (\s a -> s { _glerEvents = a }) . _List
-
-glerNextBackwardToken :: Lens' GetLogEventsResponse (Maybe Text)
-glerNextBackwardToken =
-    lens _glerNextBackwardToken (\s a -> s { _glerNextBackwardToken = a })
-
-glerNextForwardToken :: Lens' GetLogEventsResponse (Maybe Text)
-glerNextForwardToken =
-    lens _glerNextForwardToken (\s a -> s { _glerNextForwardToken = a })
-
-instance ToPath GetLogEvents where
-    toPath = const "/"
-
-instance ToQuery GetLogEvents where
-    toQuery = const mempty
-
-instance ToHeaders GetLogEvents
-
-instance ToJSON GetLogEvents where
-    toJSON GetLogEvents{..} = object
-        [ "logGroupName"  .= _gleLogGroupName
-        , "logStreamName" .= _gleLogStreamName
-        , "startTime"     .= _gleStartTime
-        , "endTime"       .= _gleEndTime
-        , "nextToken"     .= _gleNextToken
-        , "limit"         .= _gleLimit
-        , "startFromHead" .= _gleStartFromHead
-        ]
+-- | Undocumented member.
+glersNextBackwardToken :: Lens' GetLogEventsResponse (Maybe Text)
+glersNextBackwardToken = lens _glersNextBackwardToken (\ s a -> s{_glersNextBackwardToken = a});
 
-instance AWSRequest GetLogEvents where
-    type Sv GetLogEvents = CloudWatchLogs
-    type Rs GetLogEvents = GetLogEventsResponse
+-- | Undocumented member.
+glersNextForwardToken :: Lens' GetLogEventsResponse (Maybe Text)
+glersNextForwardToken = lens _glersNextForwardToken (\ s a -> s{_glersNextForwardToken = a});
 
-    request  = post "GetLogEvents"
-    response = jsonResponse
+-- | Undocumented member.
+glersEvents :: Lens' GetLogEventsResponse [OutputLogEvent]
+glersEvents = lens _glersEvents (\ s a -> s{_glersEvents = a}) . _Default . _Coerce;
 
-instance FromJSON GetLogEventsResponse where
-    parseJSON = withObject "GetLogEventsResponse" $ \o -> GetLogEventsResponse
-        <$> o .:? "events" .!= mempty
-        <*> o .:? "nextBackwardToken"
-        <*> o .:? "nextForwardToken"
+-- | The response status code.
+glersStatus :: Lens' GetLogEventsResponse Int
+glersStatus = lens _glersStatus (\ s a -> s{_glersStatus = a});
diff --git a/gen/Network/AWS/CloudWatchLogs/PutDestination.hs b/gen/Network/AWS/CloudWatchLogs/PutDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudWatchLogs/PutDestination.hs
@@ -0,0 +1,160 @@
+{-# 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.CloudWatchLogs.PutDestination
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates or updates a 'Destination'. A destination encapsulates a
+-- physical resource (such as a Kinesis stream) and allows you to subscribe
+-- to a real-time stream of log events of a different account, ingested
+-- through 'PutLogEvents' requests. Currently, the only supported physical
+-- resource is a Amazon Kinesis stream belonging to the same account as the
+-- destination.
+--
+-- A destination controls what is written to its Amazon Kinesis stream
+-- through an access policy. By default, PutDestination does not set any
+-- access policy with the destination, which means a cross-account user
+-- will not be able to call 'PutSubscriptionFilter' against this
+-- destination. To enable that, the destination owner must call
+-- 'PutDestinationPolicy' after PutDestination.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDestination.html AWS API Reference> for PutDestination.
+module Network.AWS.CloudWatchLogs.PutDestination
+    (
+    -- * Creating a Request
+      putDestination
+    , PutDestination
+    -- * Request Lenses
+    , pdDestinationName
+    , pdTargetARN
+    , pdRoleARN
+
+    -- * Destructuring the Response
+    , putDestinationResponse
+    , PutDestinationResponse
+    -- * Response Lenses
+    , pdrsDestination
+    , pdrsStatus
+    ) where
+
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'putDestination' smart constructor.
+data PutDestination = PutDestination'
+    { _pdDestinationName :: !Text
+    , _pdTargetARN       :: !Text
+    , _pdRoleARN         :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutDestination' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdDestinationName'
+--
+-- * 'pdTargetARN'
+--
+-- * 'pdRoleARN'
+putDestination
+    :: Text -- ^ 'pdDestinationName'
+    -> Text -- ^ 'pdTargetARN'
+    -> Text -- ^ 'pdRoleARN'
+    -> PutDestination
+putDestination pDestinationName_ pTargetARN_ pRoleARN_ =
+    PutDestination'
+    { _pdDestinationName = pDestinationName_
+    , _pdTargetARN = pTargetARN_
+    , _pdRoleARN = pRoleARN_
+    }
+
+-- | A name for the destination.
+pdDestinationName :: Lens' PutDestination Text
+pdDestinationName = lens _pdDestinationName (\ s a -> s{_pdDestinationName = a});
+
+-- | The ARN of an Amazon Kinesis stream to deliver matching log events to.
+pdTargetARN :: Lens' PutDestination Text
+pdTargetARN = lens _pdTargetARN (\ s a -> s{_pdTargetARN = a});
+
+-- | The ARN of an IAM role that grants Amazon CloudWatch Logs permissions to
+-- do Amazon Kinesis PutRecord requests on the desitnation stream.
+pdRoleARN :: Lens' PutDestination Text
+pdRoleARN = lens _pdRoleARN (\ s a -> s{_pdRoleARN = a});
+
+instance AWSRequest PutDestination where
+        type Sv PutDestination = CloudWatchLogs
+        type Rs PutDestination = PutDestinationResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 PutDestinationResponse' <$>
+                   (x .?> "destination") <*> (pure (fromEnum s)))
+
+instance ToHeaders PutDestination where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.PutDestination" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON PutDestination where
+        toJSON PutDestination'{..}
+          = object
+              ["destinationName" .= _pdDestinationName,
+               "targetArn" .= _pdTargetARN, "roleArn" .= _pdRoleARN]
+
+instance ToPath PutDestination where
+        toPath = const "/"
+
+instance ToQuery PutDestination where
+        toQuery = const mempty
+
+-- | /See:/ 'putDestinationResponse' smart constructor.
+data PutDestinationResponse = PutDestinationResponse'
+    { _pdrsDestination :: !(Maybe Destination)
+    , _pdrsStatus      :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutDestinationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdrsDestination'
+--
+-- * 'pdrsStatus'
+putDestinationResponse
+    :: Int -- ^ 'pdrsStatus'
+    -> PutDestinationResponse
+putDestinationResponse pStatus_ =
+    PutDestinationResponse'
+    { _pdrsDestination = Nothing
+    , _pdrsStatus = pStatus_
+    }
+
+-- | Undocumented member.
+pdrsDestination :: Lens' PutDestinationResponse (Maybe Destination)
+pdrsDestination = lens _pdrsDestination (\ s a -> s{_pdrsDestination = a});
+
+-- | The response status code.
+pdrsStatus :: Lens' PutDestinationResponse Int
+pdrsStatus = lens _pdrsStatus (\ s a -> s{_pdrsStatus = a});
diff --git a/gen/Network/AWS/CloudWatchLogs/PutDestinationPolicy.hs b/gen/Network/AWS/CloudWatchLogs/PutDestinationPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudWatchLogs/PutDestinationPolicy.hs
@@ -0,0 +1,117 @@
+{-# 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.CloudWatchLogs.PutDestinationPolicy
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates or updates an access policy associated with an existing
+-- 'Destination'. An access policy is an
+-- <http://docs.aws.amazon.com/IAM/latest/UserGuide/policies_overview.html IAM policy document>
+-- that is used to authorize claims to register a subscription filter
+-- against a given destination.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDestinationPolicy.html AWS API Reference> for PutDestinationPolicy.
+module Network.AWS.CloudWatchLogs.PutDestinationPolicy
+    (
+    -- * Creating a Request
+      putDestinationPolicy
+    , PutDestinationPolicy
+    -- * Request Lenses
+    , pdpDestinationName
+    , pdpAccessPolicy
+
+    -- * Destructuring the Response
+    , putDestinationPolicyResponse
+    , PutDestinationPolicyResponse
+    ) where
+
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'putDestinationPolicy' smart constructor.
+data PutDestinationPolicy = PutDestinationPolicy'
+    { _pdpDestinationName :: !Text
+    , _pdpAccessPolicy    :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutDestinationPolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdpDestinationName'
+--
+-- * 'pdpAccessPolicy'
+putDestinationPolicy
+    :: Text -- ^ 'pdpDestinationName'
+    -> Text -- ^ 'pdpAccessPolicy'
+    -> PutDestinationPolicy
+putDestinationPolicy pDestinationName_ pAccessPolicy_ =
+    PutDestinationPolicy'
+    { _pdpDestinationName = pDestinationName_
+    , _pdpAccessPolicy = pAccessPolicy_
+    }
+
+-- | A name for an existing destination.
+pdpDestinationName :: Lens' PutDestinationPolicy Text
+pdpDestinationName = lens _pdpDestinationName (\ s a -> s{_pdpDestinationName = a});
+
+-- | An IAM policy document that authorizes cross-account users to deliver
+-- their log events to associated destination.
+pdpAccessPolicy :: Lens' PutDestinationPolicy Text
+pdpAccessPolicy = lens _pdpAccessPolicy (\ s a -> s{_pdpAccessPolicy = a});
+
+instance AWSRequest PutDestinationPolicy where
+        type Sv PutDestinationPolicy = CloudWatchLogs
+        type Rs PutDestinationPolicy =
+             PutDestinationPolicyResponse
+        request = postJSON
+        response = receiveNull PutDestinationPolicyResponse'
+
+instance ToHeaders PutDestinationPolicy where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.PutDestinationPolicy" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON PutDestinationPolicy where
+        toJSON PutDestinationPolicy'{..}
+          = object
+              ["destinationName" .= _pdpDestinationName,
+               "accessPolicy" .= _pdpAccessPolicy]
+
+instance ToPath PutDestinationPolicy where
+        toPath = const "/"
+
+instance ToQuery PutDestinationPolicy where
+        toQuery = const mempty
+
+-- | /See:/ 'putDestinationPolicyResponse' smart constructor.
+data PutDestinationPolicyResponse =
+    PutDestinationPolicyResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutDestinationPolicyResponse' with the minimum fields required to make a request.
+--
+putDestinationPolicyResponse
+    :: PutDestinationPolicyResponse
+putDestinationPolicyResponse = PutDestinationPolicyResponse'
diff --git a/gen/Network/AWS/CloudWatchLogs/PutLogEvents.hs b/gen/Network/AWS/CloudWatchLogs/PutLogEvents.hs
--- a/gen/Network/AWS/CloudWatchLogs/PutLogEvents.hs
+++ b/gen/Network/AWS/CloudWatchLogs/PutLogEvents.hs
@@ -1,164 +1,187 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.CloudWatchLogs.PutLogEvents
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Uploads a batch of log events to the specified log stream.
+-- Uploads a batch of log events to the specified log stream.
 --
--- Every PutLogEvents request must include the 'sequenceToken' obtained from the
--- response of the previous request. An upload in a newly created log stream
--- does not require a 'sequenceToken'.
+-- Every PutLogEvents request must include the 'sequenceToken' obtained
+-- from the response of the previous request. An upload in a newly created
+-- log stream does not require a 'sequenceToken'.
 --
--- The batch of events must satisfy the following constraints:  The maximum
--- batch size is 1,048,576 bytes, and this size is calculated as the sum of all
--- event messages in UTF-8, plus 26 bytes for each log event. None of the log
--- events in the batch can be more than 2 hours in the future. None of the log
--- events in the batch can be older than 14 days or the retention period of the
--- log group. The log events in the batch must be in chronological ordered by
--- their 'timestamp'. The maximum number of log events in a batch is 10,000.
+-- The batch of events must satisfy the following constraints:
 --
--- <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html>
+-- -   The maximum batch size is 1,048,576 bytes, and this size is
+--     calculated as the sum of all event messages in UTF-8, plus 26 bytes
+--     for each log event.
+-- -   None of the log events in the batch can be more than 2 hours in the
+--     future.
+-- -   None of the log events in the batch can be older than 14 days or the
+--     retention period of the log group.
+-- -   The log events in the batch must be in chronological ordered by
+--     their 'timestamp'.
+-- -   The maximum number of log events in a batch is 10,000.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html AWS API Reference> for PutLogEvents.
 module Network.AWS.CloudWatchLogs.PutLogEvents
     (
-    -- * Request
-      PutLogEvents
-    -- ** Request constructor
-    , putLogEvents
-    -- ** Request lenses
-    , pleLogEvents
+    -- * Creating a Request
+      putLogEvents
+    , PutLogEvents
+    -- * Request Lenses
+    , pleSequenceToken
     , pleLogGroupName
     , pleLogStreamName
-    , pleSequenceToken
+    , pleLogEvents
 
-    -- * Response
-    , PutLogEventsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , putLogEventsResponse
-    -- ** Response lenses
-    , plerNextSequenceToken
-    , plerRejectedLogEventsInfo
+    , PutLogEventsResponse
+    -- * Response Lenses
+    , plersRejectedLogEventsInfo
+    , plersNextSequenceToken
+    , plersStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudWatchLogs.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data PutLogEvents = PutLogEvents
-    { _pleLogEvents     :: List1 "logEvents" InputLogEvent
-    , _pleLogGroupName  :: Text
-    , _pleLogStreamName :: Text
-    , _pleSequenceToken :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'putLogEvents' smart constructor.
+data PutLogEvents = PutLogEvents'
+    { _pleSequenceToken :: !(Maybe Text)
+    , _pleLogGroupName  :: !Text
+    , _pleLogStreamName :: !Text
+    , _pleLogEvents     :: !(List1 InputLogEvent)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'PutLogEvents' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'PutLogEvents' with the minimum fields required to make a request.
 --
--- * 'pleLogEvents' @::@ 'NonEmpty' 'InputLogEvent'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pleLogGroupName' @::@ 'Text'
+-- * 'pleSequenceToken'
 --
--- * 'pleLogStreamName' @::@ 'Text'
+-- * 'pleLogGroupName'
 --
--- * 'pleSequenceToken' @::@ 'Maybe' 'Text'
+-- * 'pleLogStreamName'
 --
-putLogEvents :: Text -- ^ 'pleLogGroupName'
-             -> Text -- ^ 'pleLogStreamName'
-             -> NonEmpty InputLogEvent -- ^ 'pleLogEvents'
-             -> PutLogEvents
-putLogEvents p1 p2 p3 = PutLogEvents
-    { _pleLogGroupName  = p1
-    , _pleLogStreamName = p2
-    , _pleLogEvents     = withIso _List1 (const id) p3
-    , _pleSequenceToken = Nothing
+-- * 'pleLogEvents'
+putLogEvents
+    :: Text -- ^ 'pleLogGroupName'
+    -> Text -- ^ 'pleLogStreamName'
+    -> NonEmpty InputLogEvent -- ^ 'pleLogEvents'
+    -> PutLogEvents
+putLogEvents pLogGroupName_ pLogStreamName_ pLogEvents_ =
+    PutLogEvents'
+    { _pleSequenceToken = Nothing
+    , _pleLogGroupName = pLogGroupName_
+    , _pleLogStreamName = pLogStreamName_
+    , _pleLogEvents = _List1 # pLogEvents_
     }
 
-pleLogEvents :: Lens' PutLogEvents (NonEmpty InputLogEvent)
-pleLogEvents = lens _pleLogEvents (\s a -> s { _pleLogEvents = a }) . _List1
+-- | A string token that must be obtained from the response of the previous
+-- 'PutLogEvents' request.
+pleSequenceToken :: Lens' PutLogEvents (Maybe Text)
+pleSequenceToken = lens _pleSequenceToken (\ s a -> s{_pleSequenceToken = a});
 
+-- | The name of the log group to put log events to.
 pleLogGroupName :: Lens' PutLogEvents Text
-pleLogGroupName = lens _pleLogGroupName (\s a -> s { _pleLogGroupName = a })
+pleLogGroupName = lens _pleLogGroupName (\ s a -> s{_pleLogGroupName = a});
 
+-- | The name of the log stream to put log events to.
 pleLogStreamName :: Lens' PutLogEvents Text
-pleLogStreamName = lens _pleLogStreamName (\s a -> s { _pleLogStreamName = a })
-
--- | A string token that must be obtained from the response of the previous 'PutLogEvents' request.
-pleSequenceToken :: Lens' PutLogEvents (Maybe Text)
-pleSequenceToken = lens _pleSequenceToken (\s a -> s { _pleSequenceToken = a })
+pleLogStreamName = lens _pleLogStreamName (\ s a -> s{_pleLogStreamName = a});
 
-data PutLogEventsResponse = PutLogEventsResponse
-    { _plerNextSequenceToken     :: Maybe Text
-    , _plerRejectedLogEventsInfo :: Maybe RejectedLogEventsInfo
-    } deriving (Eq, Read, Show)
+-- | Undocumented member.
+pleLogEvents :: Lens' PutLogEvents (NonEmpty InputLogEvent)
+pleLogEvents = lens _pleLogEvents (\ s a -> s{_pleLogEvents = a}) . _List1;
 
--- | 'PutLogEventsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'plerNextSequenceToken' @::@ 'Maybe' 'Text'
---
--- * 'plerRejectedLogEventsInfo' @::@ 'Maybe' 'RejectedLogEventsInfo'
---
-putLogEventsResponse :: PutLogEventsResponse
-putLogEventsResponse = PutLogEventsResponse
-    { _plerNextSequenceToken     = Nothing
-    , _plerRejectedLogEventsInfo = Nothing
-    }
+instance AWSRequest PutLogEvents where
+        type Sv PutLogEvents = CloudWatchLogs
+        type Rs PutLogEvents = PutLogEventsResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 PutLogEventsResponse' <$>
+                   (x .?> "rejectedLogEventsInfo") <*>
+                     (x .?> "nextSequenceToken")
+                     <*> (pure (fromEnum s)))
 
-plerNextSequenceToken :: Lens' PutLogEventsResponse (Maybe Text)
-plerNextSequenceToken =
-    lens _plerNextSequenceToken (\s a -> s { _plerNextSequenceToken = a })
+instance ToHeaders PutLogEvents where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.PutLogEvents" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
-plerRejectedLogEventsInfo :: Lens' PutLogEventsResponse (Maybe RejectedLogEventsInfo)
-plerRejectedLogEventsInfo =
-    lens _plerRejectedLogEventsInfo
-        (\s a -> s { _plerRejectedLogEventsInfo = a })
+instance ToJSON PutLogEvents where
+        toJSON PutLogEvents'{..}
+          = object
+              ["sequenceToken" .= _pleSequenceToken,
+               "logGroupName" .= _pleLogGroupName,
+               "logStreamName" .= _pleLogStreamName,
+               "logEvents" .= _pleLogEvents]
 
 instance ToPath PutLogEvents where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery PutLogEvents where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders PutLogEvents
+-- | /See:/ 'putLogEventsResponse' smart constructor.
+data PutLogEventsResponse = PutLogEventsResponse'
+    { _plersRejectedLogEventsInfo :: !(Maybe RejectedLogEventsInfo)
+    , _plersNextSequenceToken     :: !(Maybe Text)
+    , _plersStatus                :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON PutLogEvents where
-    toJSON PutLogEvents{..} = object
-        [ "logGroupName"  .= _pleLogGroupName
-        , "logStreamName" .= _pleLogStreamName
-        , "logEvents"     .= _pleLogEvents
-        , "sequenceToken" .= _pleSequenceToken
-        ]
+-- | Creates a value of 'PutLogEventsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plersRejectedLogEventsInfo'
+--
+-- * 'plersNextSequenceToken'
+--
+-- * 'plersStatus'
+putLogEventsResponse
+    :: Int -- ^ 'plersStatus'
+    -> PutLogEventsResponse
+putLogEventsResponse pStatus_ =
+    PutLogEventsResponse'
+    { _plersRejectedLogEventsInfo = Nothing
+    , _plersNextSequenceToken = Nothing
+    , _plersStatus = pStatus_
+    }
 
-instance AWSRequest PutLogEvents where
-    type Sv PutLogEvents = CloudWatchLogs
-    type Rs PutLogEvents = PutLogEventsResponse
+-- | Undocumented member.
+plersRejectedLogEventsInfo :: Lens' PutLogEventsResponse (Maybe RejectedLogEventsInfo)
+plersRejectedLogEventsInfo = lens _plersRejectedLogEventsInfo (\ s a -> s{_plersRejectedLogEventsInfo = a});
 
-    request  = post "PutLogEvents"
-    response = jsonResponse
+-- | Undocumented member.
+plersNextSequenceToken :: Lens' PutLogEventsResponse (Maybe Text)
+plersNextSequenceToken = lens _plersNextSequenceToken (\ s a -> s{_plersNextSequenceToken = a});
 
-instance FromJSON PutLogEventsResponse where
-    parseJSON = withObject "PutLogEventsResponse" $ \o -> PutLogEventsResponse
-        <$> o .:? "nextSequenceToken"
-        <*> o .:? "rejectedLogEventsInfo"
+-- | The response status code.
+plersStatus :: Lens' PutLogEventsResponse Int
+plersStatus = lens _plersStatus (\ s a -> s{_plersStatus = a});
diff --git a/gen/Network/AWS/CloudWatchLogs/PutMetricFilter.hs b/gen/Network/AWS/CloudWatchLogs/PutMetricFilter.hs
--- a/gen/Network/AWS/CloudWatchLogs/PutMetricFilter.hs
+++ b/gen/Network/AWS/CloudWatchLogs/PutMetricFilter.hs
@@ -1,128 +1,140 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.CloudWatchLogs.PutMetricFilter
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Creates or updates a metric filter and associates it with the specified log
--- group. Metric filters allow you to configure rules to extract metric data
--- from log events ingested through 'PutLogEvents' requests.
+-- Creates or updates a metric filter and associates it with the specified
+-- log group. Metric filters allow you to configure rules to extract metric
+-- data from log events ingested through 'PutLogEvents' requests.
 --
--- <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutMetricFilter.html>
+-- The maximum number of metric filters that can be associated with a log
+-- group is 100.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutMetricFilter.html AWS API Reference> for PutMetricFilter.
 module Network.AWS.CloudWatchLogs.PutMetricFilter
     (
-    -- * Request
-      PutMetricFilter
-    -- ** Request constructor
-    , putMetricFilter
-    -- ** Request lenses
+    -- * Creating a Request
+      putMetricFilter
+    , PutMetricFilter
+    -- * Request Lenses
+    , pmfLogGroupName
     , pmfFilterName
     , pmfFilterPattern
-    , pmfLogGroupName
     , pmfMetricTransformations
 
-    -- * Response
-    , PutMetricFilterResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , putMetricFilterResponse
+    , PutMetricFilterResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudWatchLogs.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data PutMetricFilter = PutMetricFilter
-    { _pmfFilterName            :: Text
-    , _pmfFilterPattern         :: Text
-    , _pmfLogGroupName          :: Text
-    , _pmfMetricTransformations :: List1 "metricTransformations" MetricTransformation
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'putMetricFilter' smart constructor.
+data PutMetricFilter = PutMetricFilter'
+    { _pmfLogGroupName          :: !Text
+    , _pmfFilterName            :: !Text
+    , _pmfFilterPattern         :: !Text
+    , _pmfMetricTransformations :: !(List1 MetricTransformation)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'PutMetricFilter' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'PutMetricFilter' with the minimum fields required to make a request.
 --
--- * 'pmfFilterName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'pmfFilterPattern' @::@ 'Text'
+-- * 'pmfLogGroupName'
 --
--- * 'pmfLogGroupName' @::@ 'Text'
+-- * 'pmfFilterName'
 --
--- * 'pmfMetricTransformations' @::@ 'NonEmpty' 'MetricTransformation'
+-- * 'pmfFilterPattern'
 --
-putMetricFilter :: Text -- ^ 'pmfLogGroupName'
-                -> Text -- ^ 'pmfFilterName'
-                -> Text -- ^ 'pmfFilterPattern'
-                -> NonEmpty MetricTransformation -- ^ 'pmfMetricTransformations'
-                -> PutMetricFilter
-putMetricFilter p1 p2 p3 p4 = PutMetricFilter
-    { _pmfLogGroupName          = p1
-    , _pmfFilterName            = p2
-    , _pmfFilterPattern         = p3
-    , _pmfMetricTransformations = withIso _List1 (const id) p4
+-- * 'pmfMetricTransformations'
+putMetricFilter
+    :: Text -- ^ 'pmfLogGroupName'
+    -> Text -- ^ 'pmfFilterName'
+    -> Text -- ^ 'pmfFilterPattern'
+    -> NonEmpty MetricTransformation -- ^ 'pmfMetricTransformations'
+    -> PutMetricFilter
+putMetricFilter pLogGroupName_ pFilterName_ pFilterPattern_ pMetricTransformations_ =
+    PutMetricFilter'
+    { _pmfLogGroupName = pLogGroupName_
+    , _pmfFilterName = pFilterName_
+    , _pmfFilterPattern = pFilterPattern_
+    , _pmfMetricTransformations = _List1 # pMetricTransformations_
     }
 
+-- | The name of the log group to associate the metric filter with.
+pmfLogGroupName :: Lens' PutMetricFilter Text
+pmfLogGroupName = lens _pmfLogGroupName (\ s a -> s{_pmfLogGroupName = a});
+
+-- | A name for the metric filter.
 pmfFilterName :: Lens' PutMetricFilter Text
-pmfFilterName = lens _pmfFilterName (\s a -> s { _pmfFilterName = a })
+pmfFilterName = lens _pmfFilterName (\ s a -> s{_pmfFilterName = a});
 
+-- | A valid CloudWatch Logs filter pattern for extracting metric data out of
+-- ingested log events.
 pmfFilterPattern :: Lens' PutMetricFilter Text
-pmfFilterPattern = lens _pmfFilterPattern (\s a -> s { _pmfFilterPattern = a })
-
-pmfLogGroupName :: Lens' PutMetricFilter Text
-pmfLogGroupName = lens _pmfLogGroupName (\s a -> s { _pmfLogGroupName = a })
+pmfFilterPattern = lens _pmfFilterPattern (\ s a -> s{_pmfFilterPattern = a});
 
+-- | A collection of information needed to define how metric data gets
+-- emitted.
 pmfMetricTransformations :: Lens' PutMetricFilter (NonEmpty MetricTransformation)
-pmfMetricTransformations =
-    lens _pmfMetricTransformations
-        (\s a -> s { _pmfMetricTransformations = a })
-            . _List1
+pmfMetricTransformations = lens _pmfMetricTransformations (\ s a -> s{_pmfMetricTransformations = a}) . _List1;
 
-data PutMetricFilterResponse = PutMetricFilterResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest PutMetricFilter where
+        type Sv PutMetricFilter = CloudWatchLogs
+        type Rs PutMetricFilter = PutMetricFilterResponse
+        request = postJSON
+        response = receiveNull PutMetricFilterResponse'
 
--- | 'PutMetricFilterResponse' constructor.
-putMetricFilterResponse :: PutMetricFilterResponse
-putMetricFilterResponse = PutMetricFilterResponse
+instance ToHeaders PutMetricFilter where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.PutMetricFilter" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON PutMetricFilter where
+        toJSON PutMetricFilter'{..}
+          = object
+              ["logGroupName" .= _pmfLogGroupName,
+               "filterName" .= _pmfFilterName,
+               "filterPattern" .= _pmfFilterPattern,
+               "metricTransformations" .= _pmfMetricTransformations]
+
 instance ToPath PutMetricFilter where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery PutMetricFilter where
-    toQuery = const mempty
-
-instance ToHeaders PutMetricFilter
-
-instance ToJSON PutMetricFilter where
-    toJSON PutMetricFilter{..} = object
-        [ "logGroupName"          .= _pmfLogGroupName
-        , "filterName"            .= _pmfFilterName
-        , "filterPattern"         .= _pmfFilterPattern
-        , "metricTransformations" .= _pmfMetricTransformations
-        ]
+        toQuery = const mempty
 
-instance AWSRequest PutMetricFilter where
-    type Sv PutMetricFilter = CloudWatchLogs
-    type Rs PutMetricFilter = PutMetricFilterResponse
+-- | /See:/ 'putMetricFilterResponse' smart constructor.
+data PutMetricFilterResponse =
+    PutMetricFilterResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "PutMetricFilter"
-    response = nullResponse PutMetricFilterResponse
+-- | Creates a value of 'PutMetricFilterResponse' with the minimum fields required to make a request.
+--
+putMetricFilterResponse
+    :: PutMetricFilterResponse
+putMetricFilterResponse = PutMetricFilterResponse'
diff --git a/gen/Network/AWS/CloudWatchLogs/PutRetentionPolicy.hs b/gen/Network/AWS/CloudWatchLogs/PutRetentionPolicy.hs
--- a/gen/Network/AWS/CloudWatchLogs/PutRetentionPolicy.hs
+++ b/gen/Network/AWS/CloudWatchLogs/PutRetentionPolicy.hs
@@ -1,106 +1,114 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.CloudWatchLogs.PutRetentionPolicy
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Sets the retention of the specified log group. A retention policy allows you
--- to configure the number of days you want to retain log events in the
+-- Sets the retention of the specified log group. A retention policy allows
+-- you to configure the number of days you want to retain log events in the
 -- specified log group.
 --
--- <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutRetentionPolicy.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutRetentionPolicy.html AWS API Reference> for PutRetentionPolicy.
 module Network.AWS.CloudWatchLogs.PutRetentionPolicy
     (
-    -- * Request
-      PutRetentionPolicy
-    -- ** Request constructor
-    , putRetentionPolicy
-    -- ** Request lenses
+    -- * Creating a Request
+      putRetentionPolicy
+    , PutRetentionPolicy
+    -- * Request Lenses
     , prpLogGroupName
     , prpRetentionInDays
 
-    -- * Response
-    , PutRetentionPolicyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , putRetentionPolicyResponse
+    , PutRetentionPolicyResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudWatchLogs.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data PutRetentionPolicy = PutRetentionPolicy
-    { _prpLogGroupName    :: Text
-    , _prpRetentionInDays :: Int
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'putRetentionPolicy' smart constructor.
+data PutRetentionPolicy = PutRetentionPolicy'
+    { _prpLogGroupName    :: !Text
+    , _prpRetentionInDays :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'PutRetentionPolicy' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'PutRetentionPolicy' with the minimum fields required to make a request.
 --
--- * 'prpLogGroupName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'prpRetentionInDays' @::@ 'Int'
+-- * 'prpLogGroupName'
 --
-putRetentionPolicy :: Text -- ^ 'prpLogGroupName'
-                   -> Int -- ^ 'prpRetentionInDays'
-                   -> PutRetentionPolicy
-putRetentionPolicy p1 p2 = PutRetentionPolicy
-    { _prpLogGroupName    = p1
-    , _prpRetentionInDays = p2
+-- * 'prpRetentionInDays'
+putRetentionPolicy
+    :: Text -- ^ 'prpLogGroupName'
+    -> Int -- ^ 'prpRetentionInDays'
+    -> PutRetentionPolicy
+putRetentionPolicy pLogGroupName_ pRetentionInDays_ =
+    PutRetentionPolicy'
+    { _prpLogGroupName = pLogGroupName_
+    , _prpRetentionInDays = pRetentionInDays_
     }
 
+-- | The name of the log group to associate the retention policy with.
 prpLogGroupName :: Lens' PutRetentionPolicy Text
-prpLogGroupName = lens _prpLogGroupName (\s a -> s { _prpLogGroupName = a })
+prpLogGroupName = lens _prpLogGroupName (\ s a -> s{_prpLogGroupName = a});
 
+-- | Undocumented member.
 prpRetentionInDays :: Lens' PutRetentionPolicy Int
-prpRetentionInDays =
-    lens _prpRetentionInDays (\s a -> s { _prpRetentionInDays = a })
+prpRetentionInDays = lens _prpRetentionInDays (\ s a -> s{_prpRetentionInDays = a});
 
-data PutRetentionPolicyResponse = PutRetentionPolicyResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest PutRetentionPolicy where
+        type Sv PutRetentionPolicy = CloudWatchLogs
+        type Rs PutRetentionPolicy =
+             PutRetentionPolicyResponse
+        request = postJSON
+        response = receiveNull PutRetentionPolicyResponse'
 
--- | 'PutRetentionPolicyResponse' constructor.
-putRetentionPolicyResponse :: PutRetentionPolicyResponse
-putRetentionPolicyResponse = PutRetentionPolicyResponse
+instance ToHeaders PutRetentionPolicy where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.PutRetentionPolicy" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON PutRetentionPolicy where
+        toJSON PutRetentionPolicy'{..}
+          = object
+              ["logGroupName" .= _prpLogGroupName,
+               "retentionInDays" .= _prpRetentionInDays]
+
 instance ToPath PutRetentionPolicy where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery PutRetentionPolicy where
-    toQuery = const mempty
-
-instance ToHeaders PutRetentionPolicy
-
-instance ToJSON PutRetentionPolicy where
-    toJSON PutRetentionPolicy{..} = object
-        [ "logGroupName"    .= _prpLogGroupName
-        , "retentionInDays" .= _prpRetentionInDays
-        ]
+        toQuery = const mempty
 
-instance AWSRequest PutRetentionPolicy where
-    type Sv PutRetentionPolicy = CloudWatchLogs
-    type Rs PutRetentionPolicy = PutRetentionPolicyResponse
+-- | /See:/ 'putRetentionPolicyResponse' smart constructor.
+data PutRetentionPolicyResponse =
+    PutRetentionPolicyResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "PutRetentionPolicy"
-    response = nullResponse PutRetentionPolicyResponse
+-- | Creates a value of 'PutRetentionPolicyResponse' with the minimum fields required to make a request.
+--
+putRetentionPolicyResponse
+    :: PutRetentionPolicyResponse
+putRetentionPolicyResponse = PutRetentionPolicyResponse'
diff --git a/gen/Network/AWS/CloudWatchLogs/PutSubscriptionFilter.hs b/gen/Network/AWS/CloudWatchLogs/PutSubscriptionFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudWatchLogs/PutSubscriptionFilter.hs
@@ -0,0 +1,167 @@
+{-# 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.CloudWatchLogs.PutSubscriptionFilter
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates or updates a subscription filter and associates it with the
+-- specified log group. Subscription filters allow you to subscribe to a
+-- real-time stream of log events ingested through 'PutLogEvents' requests
+-- and have them delivered to a specific destination. Currently, the
+-- supported destinations are:
+--
+-- -   A Amazon Kinesis stream belonging to the same account as the
+--     subscription filter, for same-account delivery.
+-- -   A logical destination (used via an ARN of 'Destination') belonging
+--     to a different account, for cross-account delivery.
+--
+-- Currently there can only be one subscription filter associated with a
+-- log group.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutSubscriptionFilter.html AWS API Reference> for PutSubscriptionFilter.
+module Network.AWS.CloudWatchLogs.PutSubscriptionFilter
+    (
+    -- * Creating a Request
+      putSubscriptionFilter
+    , PutSubscriptionFilter
+    -- * Request Lenses
+    , psfRoleARN
+    , psfLogGroupName
+    , psfFilterName
+    , psfFilterPattern
+    , psfDestinationARN
+
+    -- * Destructuring the Response
+    , putSubscriptionFilterResponse
+    , PutSubscriptionFilterResponse
+    ) where
+
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'putSubscriptionFilter' smart constructor.
+data PutSubscriptionFilter = PutSubscriptionFilter'
+    { _psfRoleARN        :: !(Maybe Text)
+    , _psfLogGroupName   :: !Text
+    , _psfFilterName     :: !Text
+    , _psfFilterPattern  :: !Text
+    , _psfDestinationARN :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutSubscriptionFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'psfRoleARN'
+--
+-- * 'psfLogGroupName'
+--
+-- * 'psfFilterName'
+--
+-- * 'psfFilterPattern'
+--
+-- * 'psfDestinationARN'
+putSubscriptionFilter
+    :: Text -- ^ 'psfLogGroupName'
+    -> Text -- ^ 'psfFilterName'
+    -> Text -- ^ 'psfFilterPattern'
+    -> Text -- ^ 'psfDestinationARN'
+    -> PutSubscriptionFilter
+putSubscriptionFilter pLogGroupName_ pFilterName_ pFilterPattern_ pDestinationARN_ =
+    PutSubscriptionFilter'
+    { _psfRoleARN = Nothing
+    , _psfLogGroupName = pLogGroupName_
+    , _psfFilterName = pFilterName_
+    , _psfFilterPattern = pFilterPattern_
+    , _psfDestinationARN = pDestinationARN_
+    }
+
+-- | The ARN of an IAM role that grants Amazon CloudWatch Logs permissions to
+-- deliver ingested log events to the destination stream. You don\'t need
+-- to provide the ARN when you are working with a logical destination (used
+-- via an ARN of 'Destination') for cross-account delivery.
+psfRoleARN :: Lens' PutSubscriptionFilter (Maybe Text)
+psfRoleARN = lens _psfRoleARN (\ s a -> s{_psfRoleARN = a});
+
+-- | The name of the log group to associate the subscription filter with.
+psfLogGroupName :: Lens' PutSubscriptionFilter Text
+psfLogGroupName = lens _psfLogGroupName (\ s a -> s{_psfLogGroupName = a});
+
+-- | A name for the subscription filter.
+psfFilterName :: Lens' PutSubscriptionFilter Text
+psfFilterName = lens _psfFilterName (\ s a -> s{_psfFilterName = a});
+
+-- | A valid CloudWatch Logs filter pattern for subscribing to a filtered
+-- stream of log events.
+psfFilterPattern :: Lens' PutSubscriptionFilter Text
+psfFilterPattern = lens _psfFilterPattern (\ s a -> s{_psfFilterPattern = a});
+
+-- | The ARN of the destination to deliver matching log events to. Currently,
+-- the supported destinations are:
+--
+-- -   A Amazon Kinesis stream belonging to the same account as the
+--     subscription filter, for same-account delivery.
+-- -   A logical destination (used via an ARN of 'Destination') belonging
+--     to a different account, for cross-account delivery.
+psfDestinationARN :: Lens' PutSubscriptionFilter Text
+psfDestinationARN = lens _psfDestinationARN (\ s a -> s{_psfDestinationARN = a});
+
+instance AWSRequest PutSubscriptionFilter where
+        type Sv PutSubscriptionFilter = CloudWatchLogs
+        type Rs PutSubscriptionFilter =
+             PutSubscriptionFilterResponse
+        request = postJSON
+        response = receiveNull PutSubscriptionFilterResponse'
+
+instance ToHeaders PutSubscriptionFilter where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.PutSubscriptionFilter" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON PutSubscriptionFilter where
+        toJSON PutSubscriptionFilter'{..}
+          = object
+              ["roleArn" .= _psfRoleARN,
+               "logGroupName" .= _psfLogGroupName,
+               "filterName" .= _psfFilterName,
+               "filterPattern" .= _psfFilterPattern,
+               "destinationArn" .= _psfDestinationARN]
+
+instance ToPath PutSubscriptionFilter where
+        toPath = const "/"
+
+instance ToQuery PutSubscriptionFilter where
+        toQuery = const mempty
+
+-- | /See:/ 'putSubscriptionFilterResponse' smart constructor.
+data PutSubscriptionFilterResponse =
+    PutSubscriptionFilterResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutSubscriptionFilterResponse' with the minimum fields required to make a request.
+--
+putSubscriptionFilterResponse
+    :: PutSubscriptionFilterResponse
+putSubscriptionFilterResponse = PutSubscriptionFilterResponse'
diff --git a/gen/Network/AWS/CloudWatchLogs/TestMetricFilter.hs b/gen/Network/AWS/CloudWatchLogs/TestMetricFilter.hs
--- a/gen/Network/AWS/CloudWatchLogs/TestMetricFilter.hs
+++ b/gen/Network/AWS/CloudWatchLogs/TestMetricFilter.hs
@@ -1,130 +1,139 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.CloudWatchLogs.TestMetricFilter
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Tests the filter pattern of a metric filter against a sample of log event
--- messages. You can use this operation to validate the correctness of a metric
--- filter pattern.
+-- Tests the filter pattern of a metric filter against a sample of log
+-- event messages. You can use this operation to validate the correctness
+-- of a metric filter pattern.
 --
--- <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_TestMetricFilter.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_TestMetricFilter.html AWS API Reference> for TestMetricFilter.
 module Network.AWS.CloudWatchLogs.TestMetricFilter
     (
-    -- * Request
-      TestMetricFilter
-    -- ** Request constructor
-    , testMetricFilter
-    -- ** Request lenses
+    -- * Creating a Request
+      testMetricFilter
+    , TestMetricFilter
+    -- * Request Lenses
     , tmfFilterPattern
     , tmfLogEventMessages
 
-    -- * Response
-    , TestMetricFilterResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , testMetricFilterResponse
-    -- ** Response lenses
-    , tmfrMatches
+    , TestMetricFilterResponse
+    -- * Response Lenses
+    , tmfrsMatches
+    , tmfrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudWatchLogs.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data TestMetricFilter = TestMetricFilter
-    { _tmfFilterPattern    :: Text
-    , _tmfLogEventMessages :: List1 "logEventMessages" Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'testMetricFilter' smart constructor.
+data TestMetricFilter = TestMetricFilter'
+    { _tmfFilterPattern    :: !Text
+    , _tmfLogEventMessages :: !(List1 Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'TestMetricFilter' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'TestMetricFilter' with the minimum fields required to make a request.
 --
--- * 'tmfFilterPattern' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'tmfLogEventMessages' @::@ 'NonEmpty' 'Text'
+-- * 'tmfFilterPattern'
 --
-testMetricFilter :: Text -- ^ 'tmfFilterPattern'
-                 -> NonEmpty Text -- ^ 'tmfLogEventMessages'
-                 -> TestMetricFilter
-testMetricFilter p1 p2 = TestMetricFilter
-    { _tmfFilterPattern    = p1
-    , _tmfLogEventMessages = withIso _List1 (const id) p2
+-- * 'tmfLogEventMessages'
+testMetricFilter
+    :: Text -- ^ 'tmfFilterPattern'
+    -> NonEmpty Text -- ^ 'tmfLogEventMessages'
+    -> TestMetricFilter
+testMetricFilter pFilterPattern_ pLogEventMessages_ =
+    TestMetricFilter'
+    { _tmfFilterPattern = pFilterPattern_
+    , _tmfLogEventMessages = _List1 # pLogEventMessages_
     }
 
+-- | Undocumented member.
 tmfFilterPattern :: Lens' TestMetricFilter Text
-tmfFilterPattern = lens _tmfFilterPattern (\s a -> s { _tmfFilterPattern = a })
+tmfFilterPattern = lens _tmfFilterPattern (\ s a -> s{_tmfFilterPattern = a});
 
+-- | A list of log event messages to test.
 tmfLogEventMessages :: Lens' TestMetricFilter (NonEmpty Text)
-tmfLogEventMessages =
-    lens _tmfLogEventMessages (\s a -> s { _tmfLogEventMessages = a })
-        . _List1
-
-newtype TestMetricFilterResponse = TestMetricFilterResponse
-    { _tmfrMatches :: List "matches" MetricFilterMatchRecord
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
-
-instance GHC.Exts.IsList TestMetricFilterResponse where
-    type Item TestMetricFilterResponse = MetricFilterMatchRecord
+tmfLogEventMessages = lens _tmfLogEventMessages (\ s a -> s{_tmfLogEventMessages = a}) . _List1;
 
-    fromList = TestMetricFilterResponse . GHC.Exts.fromList
-    toList   = GHC.Exts.toList . _tmfrMatches
+instance AWSRequest TestMetricFilter where
+        type Sv TestMetricFilter = CloudWatchLogs
+        type Rs TestMetricFilter = TestMetricFilterResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 TestMetricFilterResponse' <$>
+                   (x .?> "matches" .!@ mempty) <*> (pure (fromEnum s)))
 
--- | 'TestMetricFilterResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'tmfrMatches' @::@ ['MetricFilterMatchRecord']
---
-testMetricFilterResponse :: TestMetricFilterResponse
-testMetricFilterResponse = TestMetricFilterResponse
-    { _tmfrMatches = mempty
-    }
+instance ToHeaders TestMetricFilter where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.TestMetricFilter" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
-tmfrMatches :: Lens' TestMetricFilterResponse [MetricFilterMatchRecord]
-tmfrMatches = lens _tmfrMatches (\s a -> s { _tmfrMatches = a }) . _List
+instance ToJSON TestMetricFilter where
+        toJSON TestMetricFilter'{..}
+          = object
+              ["filterPattern" .= _tmfFilterPattern,
+               "logEventMessages" .= _tmfLogEventMessages]
 
 instance ToPath TestMetricFilter where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery TestMetricFilter where
-    toQuery = const mempty
-
-instance ToHeaders TestMetricFilter
+        toQuery = const mempty
 
-instance ToJSON TestMetricFilter where
-    toJSON TestMetricFilter{..} = object
-        [ "filterPattern"    .= _tmfFilterPattern
-        , "logEventMessages" .= _tmfLogEventMessages
-        ]
+-- | /See:/ 'testMetricFilterResponse' smart constructor.
+data TestMetricFilterResponse = TestMetricFilterResponse'
+    { _tmfrsMatches :: !(Maybe [MetricFilterMatchRecord])
+    , _tmfrsStatus  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest TestMetricFilter where
-    type Sv TestMetricFilter = CloudWatchLogs
-    type Rs TestMetricFilter = TestMetricFilterResponse
+-- | Creates a value of 'TestMetricFilterResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tmfrsMatches'
+--
+-- * 'tmfrsStatus'
+testMetricFilterResponse
+    :: Int -- ^ 'tmfrsStatus'
+    -> TestMetricFilterResponse
+testMetricFilterResponse pStatus_ =
+    TestMetricFilterResponse'
+    { _tmfrsMatches = Nothing
+    , _tmfrsStatus = pStatus_
+    }
 
-    request  = post "TestMetricFilter"
-    response = jsonResponse
+-- | Undocumented member.
+tmfrsMatches :: Lens' TestMetricFilterResponse [MetricFilterMatchRecord]
+tmfrsMatches = lens _tmfrsMatches (\ s a -> s{_tmfrsMatches = a}) . _Default . _Coerce;
 
-instance FromJSON TestMetricFilterResponse where
-    parseJSON = withObject "TestMetricFilterResponse" $ \o -> TestMetricFilterResponse
-        <$> o .:? "matches" .!= mempty
+-- | The response status code.
+tmfrsStatus :: Lens' TestMetricFilterResponse Int
+tmfrsStatus = lens _tmfrsStatus (\ s a -> s{_tmfrsStatus = a});
diff --git a/gen/Network/AWS/CloudWatchLogs/Types.hs b/gen/Network/AWS/CloudWatchLogs/Types.hs
--- a/gen/Network/AWS/CloudWatchLogs/Types.hs
+++ b/gen/Network/AWS/CloudWatchLogs/Types.hs
@@ -1,35 +1,81 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-{-# LANGUAGE ViewPatterns                #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
 
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
 
+-- |
 -- Module      : Network.AWS.CloudWatchLogs.Types
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
 module Network.AWS.CloudWatchLogs.Types
     (
     -- * Service
       CloudWatchLogs
-    -- ** Error
-    , JSONError
 
+    -- * Errors
+    , _InvalidParameterException
+    , _InvalidSequenceTokenException
+    , _ResourceAlreadyExistsException
+    , _OperationAbortedException
+    , _DataAlreadyAcceptedException
+    , _ServiceUnavailableException
+    , _ResourceNotFoundException
+    , _LimitExceededException
+
+    -- * OrderBy
+    , OrderBy (..)
+
+    -- * Destination
+    , Destination
+    , destination
+    , dTargetARN
+    , dCreationTime
+    , dArn
+    , dAccessPolicy
+    , dDestinationName
+    , dRoleARN
+
+    -- * FilteredLogEvent
+    , FilteredLogEvent
+    , filteredLogEvent
+    , fleIngestionTime
+    , fleLogStreamName
+    , fleMessage
+    , fleTimestamp
+    , fleEventId
+
+    -- * InputLogEvent
+    , InputLogEvent
+    , inputLogEvent
+    , ileTimestamp
+    , ileMessage
+
+    -- * LogGroup
+    , LogGroup
+    , logGroup
+    , lgCreationTime
+    , lgMetricFilterCount
+    , lgArn
+    , lgLogGroupName
+    , lgRetentionInDays
+    , lgStoredBytes
+
+    -- * LogStream
+    , LogStream
+    , logStream
+    , lsCreationTime
+    , lsUploadSequenceToken
+    , lsArn
+    , lsFirstEventTimestamp
+    , lsLogStreamName
+    , lsStoredBytes
+    , lsLastIngestionTime
+    , lsLastEventTimestamp
+
     -- * MetricFilter
     , MetricFilter
     , metricFilter
@@ -38,18 +84,12 @@
     , mfFilterPattern
     , mfMetricTransformations
 
-    -- * SearchedLogStream
-    , SearchedLogStream
-    , searchedLogStream
-    , slsLogStreamName
-    , slsSearchedCompletely
-
     -- * MetricFilterMatchRecord
     , MetricFilterMatchRecord
     , metricFilterMatchRecord
+    , mfmrExtractedValues
     , mfmrEventMessage
     , mfmrEventNumber
-    , mfmrExtractedValues
 
     -- * MetricTransformation
     , MetricTransformation
@@ -58,694 +98,113 @@
     , mtMetricNamespace
     , mtMetricValue
 
-    -- * OrderBy
-    , OrderBy (..)
-
-    -- * LogStream
-    , LogStream
-    , logStream
-    , lsArn
-    , lsCreationTime
-    , lsFirstEventTimestamp
-    , lsLastEventTimestamp
-    , lsLastIngestionTime
-    , lsLogStreamName
-    , lsStoredBytes
-    , lsUploadSequenceToken
-
-    -- * LogGroup
-    , LogGroup
-    , logGroup
-    , lgArn
-    , lgCreationTime
-    , lgLogGroupName
-    , lgMetricFilterCount
-    , lgRetentionInDays
-    , lgStoredBytes
+    -- * OutputLogEvent
+    , OutputLogEvent
+    , outputLogEvent
+    , oleIngestionTime
+    , oleMessage
+    , oleTimestamp
 
     -- * RejectedLogEventsInfo
     , RejectedLogEventsInfo
     , rejectedLogEventsInfo
-    , rleiExpiredLogEventEndIndex
-    , rleiTooNewLogEventStartIndex
     , rleiTooOldLogEventEndIndex
-
-    -- * InputLogEvent
-    , InputLogEvent
-    , inputLogEvent
-    , ileMessage
-    , ileTimestamp
+    , rleiTooNewLogEventStartIndex
+    , rleiExpiredLogEventEndIndex
 
-    -- * FilteredLogEvent
-    , FilteredLogEvent
-    , filteredLogEvent
-    , fleEventId
-    , fleIngestionTime
-    , fleLogStreamName
-    , fleMessage
-    , fleTimestamp
+    -- * SearchedLogStream
+    , SearchedLogStream
+    , searchedLogStream
+    , slsLogStreamName
+    , slsSearchedCompletely
 
-    -- * OutputLogEvent
-    , OutputLogEvent
-    , outputLogEvent
-    , oleIngestionTime
-    , oleMessage
-    , oleTimestamp
+    -- * SubscriptionFilter
+    , SubscriptionFilter
+    , subscriptionFilter
+    , sfCreationTime
+    , sfFilterName
+    , sfDestinationARN
+    , sfLogGroupName
+    , sfFilterPattern
+    , sfRoleARN
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Signing
-import qualified GHC.Exts
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.CloudWatchLogs.Types.Sum
+import           Network.AWS.Prelude
+import           Network.AWS.Sign.V4
 
--- | Version @2014-03-28@ of the Amazon CloudWatch Logs service.
+-- | Version @2014-03-28@ of the Amazon CloudWatch Logs SDK.
 data CloudWatchLogs
 
 instance AWSService CloudWatchLogs where
     type Sg CloudWatchLogs = V4
-    type Er CloudWatchLogs = JSONError
-
-    service = service'
+    service = const svc
       where
-        service' :: Service CloudWatchLogs
-        service' = Service
-            { _svcAbbrev       = "CloudWatchLogs"
-            , _svcPrefix       = "logs"
-            , _svcVersion      = "2014-03-28"
-            , _svcTargetPrefix = Just "Logs_20140328"
-            , _svcJSONVersion  = Just "1.1"
-            , _svcHandle       = handle
-            , _svcRetry        = retry
+        svc =
+            Service
+            { _svcAbbrev = "CloudWatchLogs"
+            , _svcPrefix = "logs"
+            , _svcVersion = "2014-03-28"
+            , _svcEndpoint = defaultEndpoint svc
+            , _svcTimeout = Just 70
+            , _svcStatus = statusSuccess
+            , _svcError = parseJSONError
+            , _svcRetry = retry
             }
-
-        handle :: Status
-               -> Maybe (LazyByteString -> ServiceError JSONError)
-        handle = jsonError statusSuccess service'
-
-        retry :: Retry CloudWatchLogs
-        retry = Exponential
-            { _retryBase     = 0.05
-            , _retryGrowth   = 2
+        retry =
+            Exponential
+            { _retryBase = 5.0e-2
+            , _retryGrowth = 2
             , _retryAttempts = 5
-            , _retryCheck    = check
+            , _retryCheck = check
             }
-
-        check :: Status
-              -> JSONError
-              -> Bool
-        check (statusCode -> s) (awsErrorCode -> e)
-            | s == 500  = True -- General Server Error
-            | s == 509  = True -- Limit Exceeded
-            | s == 503  = True -- Service Unavailable
-            | otherwise = False
-
-data MetricFilter = MetricFilter
-    { _mfCreationTime          :: Maybe Nat
-    , _mfFilterName            :: Maybe Text
-    , _mfFilterPattern         :: Maybe Text
-    , _mfMetricTransformations :: List1 "metricTransformations" MetricTransformation
-    } deriving (Eq, Read, Show)
-
--- | 'MetricFilter' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'mfCreationTime' @::@ 'Maybe' 'Natural'
---
--- * 'mfFilterName' @::@ 'Maybe' 'Text'
---
--- * 'mfFilterPattern' @::@ 'Maybe' 'Text'
---
--- * 'mfMetricTransformations' @::@ 'NonEmpty' 'MetricTransformation'
---
-metricFilter :: NonEmpty MetricTransformation -- ^ 'mfMetricTransformations'
-             -> MetricFilter
-metricFilter p1 = MetricFilter
-    { _mfMetricTransformations = withIso _List1 (const id) p1
-    , _mfFilterName            = Nothing
-    , _mfFilterPattern         = Nothing
-    , _mfCreationTime          = Nothing
-    }
-
-mfCreationTime :: Lens' MetricFilter (Maybe Natural)
-mfCreationTime = lens _mfCreationTime (\s a -> s { _mfCreationTime = a }) . mapping _Nat
-
-mfFilterName :: Lens' MetricFilter (Maybe Text)
-mfFilterName = lens _mfFilterName (\s a -> s { _mfFilterName = a })
-
-mfFilterPattern :: Lens' MetricFilter (Maybe Text)
-mfFilterPattern = lens _mfFilterPattern (\s a -> s { _mfFilterPattern = a })
-
-mfMetricTransformations :: Lens' MetricFilter (NonEmpty MetricTransformation)
-mfMetricTransformations =
-    lens _mfMetricTransformations (\s a -> s { _mfMetricTransformations = a })
-        . _List1
-
-instance FromJSON MetricFilter where
-    parseJSON = withObject "MetricFilter" $ \o -> MetricFilter
-        <$> o .:? "creationTime"
-        <*> o .:? "filterName"
-        <*> o .:? "filterPattern"
-        <*> o .:  "metricTransformations"
-
-instance ToJSON MetricFilter where
-    toJSON MetricFilter{..} = object
-        [ "filterName"            .= _mfFilterName
-        , "filterPattern"         .= _mfFilterPattern
-        , "metricTransformations" .= _mfMetricTransformations
-        , "creationTime"          .= _mfCreationTime
-        ]
-
-data SearchedLogStream = SearchedLogStream
-    { _slsLogStreamName      :: Maybe Text
-    , _slsSearchedCompletely :: Maybe Bool
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'SearchedLogStream' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'slsLogStreamName' @::@ 'Maybe' 'Text'
---
--- * 'slsSearchedCompletely' @::@ 'Maybe' 'Bool'
---
-searchedLogStream :: SearchedLogStream
-searchedLogStream = SearchedLogStream
-    { _slsLogStreamName      = Nothing
-    , _slsSearchedCompletely = Nothing
-    }
-
--- | The name of the log stream.
-slsLogStreamName :: Lens' SearchedLogStream (Maybe Text)
-slsLogStreamName = lens _slsLogStreamName (\s a -> s { _slsLogStreamName = a })
-
--- | Indicates whether all the events in this log stream were searched or more
--- data exists to search by paginating further.
-slsSearchedCompletely :: Lens' SearchedLogStream (Maybe Bool)
-slsSearchedCompletely =
-    lens _slsSearchedCompletely (\s a -> s { _slsSearchedCompletely = a })
-
-instance FromJSON SearchedLogStream where
-    parseJSON = withObject "SearchedLogStream" $ \o -> SearchedLogStream
-        <$> o .:? "logStreamName"
-        <*> o .:? "searchedCompletely"
-
-instance ToJSON SearchedLogStream where
-    toJSON SearchedLogStream{..} = object
-        [ "logStreamName"      .= _slsLogStreamName
-        , "searchedCompletely" .= _slsSearchedCompletely
-        ]
-
-data MetricFilterMatchRecord = MetricFilterMatchRecord
-    { _mfmrEventMessage    :: Maybe Text
-    , _mfmrEventNumber     :: Maybe Integer
-    , _mfmrExtractedValues :: Map Text Text
-    } deriving (Eq, Read, Show)
-
--- | 'MetricFilterMatchRecord' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'mfmrEventMessage' @::@ 'Maybe' 'Text'
---
--- * 'mfmrEventNumber' @::@ 'Maybe' 'Integer'
---
--- * 'mfmrExtractedValues' @::@ 'HashMap' 'Text' 'Text'
---
-metricFilterMatchRecord :: MetricFilterMatchRecord
-metricFilterMatchRecord = MetricFilterMatchRecord
-    { _mfmrEventNumber     = Nothing
-    , _mfmrEventMessage    = Nothing
-    , _mfmrExtractedValues = mempty
-    }
-
-mfmrEventMessage :: Lens' MetricFilterMatchRecord (Maybe Text)
-mfmrEventMessage = lens _mfmrEventMessage (\s a -> s { _mfmrEventMessage = a })
-
-mfmrEventNumber :: Lens' MetricFilterMatchRecord (Maybe Integer)
-mfmrEventNumber = lens _mfmrEventNumber (\s a -> s { _mfmrEventNumber = a })
-
-mfmrExtractedValues :: Lens' MetricFilterMatchRecord (HashMap Text Text)
-mfmrExtractedValues =
-    lens _mfmrExtractedValues (\s a -> s { _mfmrExtractedValues = a })
-        . _Map
-
-instance FromJSON MetricFilterMatchRecord where
-    parseJSON = withObject "MetricFilterMatchRecord" $ \o -> MetricFilterMatchRecord
-        <$> o .:? "eventMessage"
-        <*> o .:? "eventNumber"
-        <*> o .:? "extractedValues" .!= mempty
-
-instance ToJSON MetricFilterMatchRecord where
-    toJSON MetricFilterMatchRecord{..} = object
-        [ "eventNumber"     .= _mfmrEventNumber
-        , "eventMessage"    .= _mfmrEventMessage
-        , "extractedValues" .= _mfmrExtractedValues
-        ]
-
-data MetricTransformation = MetricTransformation
-    { _mtMetricName      :: Text
-    , _mtMetricNamespace :: Text
-    , _mtMetricValue     :: Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'MetricTransformation' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'mtMetricName' @::@ 'Text'
---
--- * 'mtMetricNamespace' @::@ 'Text'
---
--- * 'mtMetricValue' @::@ 'Text'
---
-metricTransformation :: Text -- ^ 'mtMetricName'
-                     -> Text -- ^ 'mtMetricNamespace'
-                     -> Text -- ^ 'mtMetricValue'
-                     -> MetricTransformation
-metricTransformation p1 p2 p3 = MetricTransformation
-    { _mtMetricName      = p1
-    , _mtMetricNamespace = p2
-    , _mtMetricValue     = p3
-    }
-
-mtMetricName :: Lens' MetricTransformation Text
-mtMetricName = lens _mtMetricName (\s a -> s { _mtMetricName = a })
-
-mtMetricNamespace :: Lens' MetricTransformation Text
-mtMetricNamespace =
-    lens _mtMetricNamespace (\s a -> s { _mtMetricNamespace = a })
-
-mtMetricValue :: Lens' MetricTransformation Text
-mtMetricValue = lens _mtMetricValue (\s a -> s { _mtMetricValue = a })
-
-instance FromJSON MetricTransformation where
-    parseJSON = withObject "MetricTransformation" $ \o -> MetricTransformation
-        <$> o .:  "metricName"
-        <*> o .:  "metricNamespace"
-        <*> o .:  "metricValue"
-
-instance ToJSON MetricTransformation where
-    toJSON MetricTransformation{..} = object
-        [ "metricName"      .= _mtMetricName
-        , "metricNamespace" .= _mtMetricNamespace
-        , "metricValue"     .= _mtMetricValue
-        ]
-
-data OrderBy
-    = OBLastEventTime -- ^ LastEventTime
-    | OBLogStreamName -- ^ LogStreamName
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable OrderBy
-
-instance FromText OrderBy where
-    parser = takeLowerText >>= \case
-        "lasteventtime" -> pure OBLastEventTime
-        "logstreamname" -> pure OBLogStreamName
-        e               -> fail $
-            "Failure parsing OrderBy from " ++ show e
-
-instance ToText OrderBy where
-    toText = \case
-        OBLastEventTime -> "LastEventTime"
-        OBLogStreamName -> "LogStreamName"
-
-instance ToByteString OrderBy
-instance ToHeader     OrderBy
-instance ToQuery      OrderBy
-
-instance FromJSON OrderBy where
-    parseJSON = parseJSONText "OrderBy"
-
-instance ToJSON OrderBy where
-    toJSON = toJSONText
-
-data LogStream = LogStream
-    { _lsArn                 :: Maybe Text
-    , _lsCreationTime        :: Maybe Nat
-    , _lsFirstEventTimestamp :: Maybe Nat
-    , _lsLastEventTimestamp  :: Maybe Nat
-    , _lsLastIngestionTime   :: Maybe Nat
-    , _lsLogStreamName       :: Maybe Text
-    , _lsStoredBytes         :: Maybe Nat
-    , _lsUploadSequenceToken :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'LogStream' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lsArn' @::@ 'Maybe' 'Text'
---
--- * 'lsCreationTime' @::@ 'Maybe' 'Natural'
---
--- * 'lsFirstEventTimestamp' @::@ 'Maybe' 'Natural'
---
--- * 'lsLastEventTimestamp' @::@ 'Maybe' 'Natural'
---
--- * 'lsLastIngestionTime' @::@ 'Maybe' 'Natural'
---
--- * 'lsLogStreamName' @::@ 'Maybe' 'Text'
---
--- * 'lsStoredBytes' @::@ 'Maybe' 'Natural'
---
--- * 'lsUploadSequenceToken' @::@ 'Maybe' 'Text'
---
-logStream :: LogStream
-logStream = LogStream
-    { _lsLogStreamName       = Nothing
-    , _lsCreationTime        = Nothing
-    , _lsFirstEventTimestamp = Nothing
-    , _lsLastEventTimestamp  = Nothing
-    , _lsLastIngestionTime   = Nothing
-    , _lsUploadSequenceToken = Nothing
-    , _lsArn                 = Nothing
-    , _lsStoredBytes         = Nothing
-    }
-
-lsArn :: Lens' LogStream (Maybe Text)
-lsArn = lens _lsArn (\s a -> s { _lsArn = a })
-
-lsCreationTime :: Lens' LogStream (Maybe Natural)
-lsCreationTime = lens _lsCreationTime (\s a -> s { _lsCreationTime = a }) . mapping _Nat
-
-lsFirstEventTimestamp :: Lens' LogStream (Maybe Natural)
-lsFirstEventTimestamp =
-    lens _lsFirstEventTimestamp (\s a -> s { _lsFirstEventTimestamp = a })
-        . mapping _Nat
-
-lsLastEventTimestamp :: Lens' LogStream (Maybe Natural)
-lsLastEventTimestamp =
-    lens _lsLastEventTimestamp (\s a -> s { _lsLastEventTimestamp = a })
-        . mapping _Nat
-
-lsLastIngestionTime :: Lens' LogStream (Maybe Natural)
-lsLastIngestionTime =
-    lens _lsLastIngestionTime (\s a -> s { _lsLastIngestionTime = a })
-        . mapping _Nat
-
-lsLogStreamName :: Lens' LogStream (Maybe Text)
-lsLogStreamName = lens _lsLogStreamName (\s a -> s { _lsLogStreamName = a })
-
-lsStoredBytes :: Lens' LogStream (Maybe Natural)
-lsStoredBytes = lens _lsStoredBytes (\s a -> s { _lsStoredBytes = a }) . mapping _Nat
-
-lsUploadSequenceToken :: Lens' LogStream (Maybe Text)
-lsUploadSequenceToken =
-    lens _lsUploadSequenceToken (\s a -> s { _lsUploadSequenceToken = a })
-
-instance FromJSON LogStream where
-    parseJSON = withObject "LogStream" $ \o -> LogStream
-        <$> o .:? "arn"
-        <*> o .:? "creationTime"
-        <*> o .:? "firstEventTimestamp"
-        <*> o .:? "lastEventTimestamp"
-        <*> o .:? "lastIngestionTime"
-        <*> o .:? "logStreamName"
-        <*> o .:? "storedBytes"
-        <*> o .:? "uploadSequenceToken"
-
-instance ToJSON LogStream where
-    toJSON LogStream{..} = object
-        [ "logStreamName"       .= _lsLogStreamName
-        , "creationTime"        .= _lsCreationTime
-        , "firstEventTimestamp" .= _lsFirstEventTimestamp
-        , "lastEventTimestamp"  .= _lsLastEventTimestamp
-        , "lastIngestionTime"   .= _lsLastIngestionTime
-        , "uploadSequenceToken" .= _lsUploadSequenceToken
-        , "arn"                 .= _lsArn
-        , "storedBytes"         .= _lsStoredBytes
-        ]
-
-data LogGroup = LogGroup
-    { _lgArn               :: Maybe Text
-    , _lgCreationTime      :: Maybe Nat
-    , _lgLogGroupName      :: Maybe Text
-    , _lgMetricFilterCount :: Maybe Int
-    , _lgRetentionInDays   :: Maybe Int
-    , _lgStoredBytes       :: Maybe Nat
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'LogGroup' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lgArn' @::@ 'Maybe' 'Text'
---
--- * 'lgCreationTime' @::@ 'Maybe' 'Natural'
---
--- * 'lgLogGroupName' @::@ 'Maybe' 'Text'
---
--- * 'lgMetricFilterCount' @::@ 'Maybe' 'Int'
---
--- * 'lgRetentionInDays' @::@ 'Maybe' 'Int'
---
--- * 'lgStoredBytes' @::@ 'Maybe' 'Natural'
---
-logGroup :: LogGroup
-logGroup = LogGroup
-    { _lgLogGroupName      = Nothing
-    , _lgCreationTime      = Nothing
-    , _lgRetentionInDays   = Nothing
-    , _lgMetricFilterCount = Nothing
-    , _lgArn               = Nothing
-    , _lgStoredBytes       = Nothing
-    }
-
-lgArn :: Lens' LogGroup (Maybe Text)
-lgArn = lens _lgArn (\s a -> s { _lgArn = a })
-
-lgCreationTime :: Lens' LogGroup (Maybe Natural)
-lgCreationTime = lens _lgCreationTime (\s a -> s { _lgCreationTime = a }) . mapping _Nat
-
-lgLogGroupName :: Lens' LogGroup (Maybe Text)
-lgLogGroupName = lens _lgLogGroupName (\s a -> s { _lgLogGroupName = a })
-
-lgMetricFilterCount :: Lens' LogGroup (Maybe Int)
-lgMetricFilterCount =
-    lens _lgMetricFilterCount (\s a -> s { _lgMetricFilterCount = a })
-
-lgRetentionInDays :: Lens' LogGroup (Maybe Int)
-lgRetentionInDays =
-    lens _lgRetentionInDays (\s a -> s { _lgRetentionInDays = a })
-
-lgStoredBytes :: Lens' LogGroup (Maybe Natural)
-lgStoredBytes = lens _lgStoredBytes (\s a -> s { _lgStoredBytes = a }) . mapping _Nat
-
-instance FromJSON LogGroup where
-    parseJSON = withObject "LogGroup" $ \o -> LogGroup
-        <$> o .:? "arn"
-        <*> o .:? "creationTime"
-        <*> o .:? "logGroupName"
-        <*> o .:? "metricFilterCount"
-        <*> o .:? "retentionInDays"
-        <*> o .:? "storedBytes"
-
-instance ToJSON LogGroup where
-    toJSON LogGroup{..} = object
-        [ "logGroupName"      .= _lgLogGroupName
-        , "creationTime"      .= _lgCreationTime
-        , "retentionInDays"   .= _lgRetentionInDays
-        , "metricFilterCount" .= _lgMetricFilterCount
-        , "arn"               .= _lgArn
-        , "storedBytes"       .= _lgStoredBytes
-        ]
-
-data RejectedLogEventsInfo = RejectedLogEventsInfo
-    { _rleiExpiredLogEventEndIndex  :: Maybe Int
-    , _rleiTooNewLogEventStartIndex :: Maybe Int
-    , _rleiTooOldLogEventEndIndex   :: Maybe Int
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'RejectedLogEventsInfo' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'rleiExpiredLogEventEndIndex' @::@ 'Maybe' 'Int'
---
--- * 'rleiTooNewLogEventStartIndex' @::@ 'Maybe' 'Int'
---
--- * 'rleiTooOldLogEventEndIndex' @::@ 'Maybe' 'Int'
---
-rejectedLogEventsInfo :: RejectedLogEventsInfo
-rejectedLogEventsInfo = RejectedLogEventsInfo
-    { _rleiTooNewLogEventStartIndex = Nothing
-    , _rleiTooOldLogEventEndIndex   = Nothing
-    , _rleiExpiredLogEventEndIndex  = Nothing
-    }
-
-rleiExpiredLogEventEndIndex :: Lens' RejectedLogEventsInfo (Maybe Int)
-rleiExpiredLogEventEndIndex =
-    lens _rleiExpiredLogEventEndIndex
-        (\s a -> s { _rleiExpiredLogEventEndIndex = a })
-
-rleiTooNewLogEventStartIndex :: Lens' RejectedLogEventsInfo (Maybe Int)
-rleiTooNewLogEventStartIndex =
-    lens _rleiTooNewLogEventStartIndex
-        (\s a -> s { _rleiTooNewLogEventStartIndex = a })
-
-rleiTooOldLogEventEndIndex :: Lens' RejectedLogEventsInfo (Maybe Int)
-rleiTooOldLogEventEndIndex =
-    lens _rleiTooOldLogEventEndIndex
-        (\s a -> s { _rleiTooOldLogEventEndIndex = a })
-
-instance FromJSON RejectedLogEventsInfo where
-    parseJSON = withObject "RejectedLogEventsInfo" $ \o -> RejectedLogEventsInfo
-        <$> o .:? "expiredLogEventEndIndex"
-        <*> o .:? "tooNewLogEventStartIndex"
-        <*> o .:? "tooOldLogEventEndIndex"
-
-instance ToJSON RejectedLogEventsInfo where
-    toJSON RejectedLogEventsInfo{..} = object
-        [ "tooNewLogEventStartIndex" .= _rleiTooNewLogEventStartIndex
-        , "tooOldLogEventEndIndex"   .= _rleiTooOldLogEventEndIndex
-        , "expiredLogEventEndIndex"  .= _rleiExpiredLogEventEndIndex
-        ]
-
-data InputLogEvent = InputLogEvent
-    { _ileMessage   :: Text
-    , _ileTimestamp :: Nat
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'InputLogEvent' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ileMessage' @::@ 'Text'
---
--- * 'ileTimestamp' @::@ 'Natural'
---
-inputLogEvent :: Natural -- ^ 'ileTimestamp'
-              -> Text -- ^ 'ileMessage'
-              -> InputLogEvent
-inputLogEvent p1 p2 = InputLogEvent
-    { _ileTimestamp = withIso _Nat (const id) p1
-    , _ileMessage   = p2
-    }
-
-ileMessage :: Lens' InputLogEvent Text
-ileMessage = lens _ileMessage (\s a -> s { _ileMessage = a })
-
-ileTimestamp :: Lens' InputLogEvent Natural
-ileTimestamp = lens _ileTimestamp (\s a -> s { _ileTimestamp = a }) . _Nat
-
-instance FromJSON InputLogEvent where
-    parseJSON = withObject "InputLogEvent" $ \o -> InputLogEvent
-        <$> o .:  "message"
-        <*> o .:  "timestamp"
-
-instance ToJSON InputLogEvent where
-    toJSON InputLogEvent{..} = object
-        [ "timestamp" .= _ileTimestamp
-        , "message"   .= _ileMessage
-        ]
-
-data FilteredLogEvent = FilteredLogEvent
-    { _fleEventId       :: Maybe Text
-    , _fleIngestionTime :: Maybe Nat
-    , _fleLogStreamName :: Maybe Text
-    , _fleMessage       :: Maybe Text
-    , _fleTimestamp     :: Maybe Nat
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'FilteredLogEvent' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'fleEventId' @::@ 'Maybe' 'Text'
---
--- * 'fleIngestionTime' @::@ 'Maybe' 'Natural'
---
--- * 'fleLogStreamName' @::@ 'Maybe' 'Text'
---
--- * 'fleMessage' @::@ 'Maybe' 'Text'
---
--- * 'fleTimestamp' @::@ 'Maybe' 'Natural'
---
-filteredLogEvent :: FilteredLogEvent
-filteredLogEvent = FilteredLogEvent
-    { _fleLogStreamName = Nothing
-    , _fleTimestamp     = Nothing
-    , _fleMessage       = Nothing
-    , _fleIngestionTime = Nothing
-    , _fleEventId       = Nothing
-    }
-
--- | A unique identifier for this event.
-fleEventId :: Lens' FilteredLogEvent (Maybe Text)
-fleEventId = lens _fleEventId (\s a -> s { _fleEventId = a })
-
-fleIngestionTime :: Lens' FilteredLogEvent (Maybe Natural)
-fleIngestionTime = lens _fleIngestionTime (\s a -> s { _fleIngestionTime = a }) . mapping _Nat
-
--- | The name of the log stream this event belongs to.
-fleLogStreamName :: Lens' FilteredLogEvent (Maybe Text)
-fleLogStreamName = lens _fleLogStreamName (\s a -> s { _fleLogStreamName = a })
-
-fleMessage :: Lens' FilteredLogEvent (Maybe Text)
-fleMessage = lens _fleMessage (\s a -> s { _fleMessage = a })
-
-fleTimestamp :: Lens' FilteredLogEvent (Maybe Natural)
-fleTimestamp = lens _fleTimestamp (\s a -> s { _fleTimestamp = a }) . mapping _Nat
-
-instance FromJSON FilteredLogEvent where
-    parseJSON = withObject "FilteredLogEvent" $ \o -> FilteredLogEvent
-        <$> o .:? "eventId"
-        <*> o .:? "ingestionTime"
-        <*> o .:? "logStreamName"
-        <*> o .:? "message"
-        <*> o .:? "timestamp"
+        check e
+          | has (hasCode "ThrottlingException" . hasStatus 400) e =
+              Just "throttling_exception"
+          | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
+          | has (hasStatus 503) e = Just "service_unavailable"
+          | has (hasStatus 500) e = Just "general_server_error"
+          | has (hasStatus 509) e = Just "limit_exceeded"
+          | otherwise = Nothing
 
-instance ToJSON FilteredLogEvent where
-    toJSON FilteredLogEvent{..} = object
-        [ "logStreamName" .= _fleLogStreamName
-        , "timestamp"     .= _fleTimestamp
-        , "message"       .= _fleMessage
-        , "ingestionTime" .= _fleIngestionTime
-        , "eventId"       .= _fleEventId
-        ]
+-- | Returned if a parameter of the request is incorrectly specified.
+_InvalidParameterException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidParameterException =
+    _ServiceError . hasCode "InvalidParameterException"
 
-data OutputLogEvent = OutputLogEvent
-    { _oleIngestionTime :: Maybe Nat
-    , _oleMessage       :: Maybe Text
-    , _oleTimestamp     :: Maybe Nat
-    } deriving (Eq, Ord, Read, Show)
+-- | Prism for InvalidSequenceTokenException' errors.
+_InvalidSequenceTokenException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidSequenceTokenException =
+    _ServiceError . hasCode "InvalidSequenceTokenException"
 
--- | 'OutputLogEvent' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'oleIngestionTime' @::@ 'Maybe' 'Natural'
---
--- * 'oleMessage' @::@ 'Maybe' 'Text'
---
--- * 'oleTimestamp' @::@ 'Maybe' 'Natural'
---
-outputLogEvent :: OutputLogEvent
-outputLogEvent = OutputLogEvent
-    { _oleTimestamp     = Nothing
-    , _oleMessage       = Nothing
-    , _oleIngestionTime = Nothing
-    }
+-- | Returned if the specified resource already exists.
+_ResourceAlreadyExistsException :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceAlreadyExistsException =
+    _ServiceError . hasCode "ResourceAlreadyExistsException"
 
-oleIngestionTime :: Lens' OutputLogEvent (Maybe Natural)
-oleIngestionTime = lens _oleIngestionTime (\s a -> s { _oleIngestionTime = a }) . mapping _Nat
+-- | Returned if multiple requests to update the same resource were in
+-- conflict.
+_OperationAbortedException :: AsError a => Getting (First ServiceError) a ServiceError
+_OperationAbortedException =
+    _ServiceError . hasCode "OperationAbortedException"
 
-oleMessage :: Lens' OutputLogEvent (Maybe Text)
-oleMessage = lens _oleMessage (\s a -> s { _oleMessage = a })
+-- | Prism for DataAlreadyAcceptedException' errors.
+_DataAlreadyAcceptedException :: AsError a => Getting (First ServiceError) a ServiceError
+_DataAlreadyAcceptedException =
+    _ServiceError . hasCode "DataAlreadyAcceptedException"
 
-oleTimestamp :: Lens' OutputLogEvent (Maybe Natural)
-oleTimestamp = lens _oleTimestamp (\s a -> s { _oleTimestamp = a }) . mapping _Nat
+-- | Returned if the service cannot complete the request.
+_ServiceUnavailableException :: AsError a => Getting (First ServiceError) a ServiceError
+_ServiceUnavailableException =
+    _ServiceError . hasCode "ServiceUnavailableException"
 
-instance FromJSON OutputLogEvent where
-    parseJSON = withObject "OutputLogEvent" $ \o -> OutputLogEvent
-        <$> o .:? "ingestionTime"
-        <*> o .:? "message"
-        <*> o .:? "timestamp"
+-- | Returned if the specified resource does not exist.
+_ResourceNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceNotFoundException =
+    _ServiceError . hasCode "ResourceNotFoundException"
 
-instance ToJSON OutputLogEvent where
-    toJSON OutputLogEvent{..} = object
-        [ "timestamp"     .= _oleTimestamp
-        , "message"       .= _oleMessage
-        , "ingestionTime" .= _oleIngestionTime
-        ]
+-- | Returned if you have reached the maximum number of resources that can be
+-- created.
+_LimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_LimitExceededException = _ServiceError . hasCode "LimitExceededException"
diff --git a/gen/Network/AWS/CloudWatchLogs/Types/Product.hs b/gen/Network/AWS/CloudWatchLogs/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudWatchLogs/Types/Product.hs
@@ -0,0 +1,730 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.CloudWatchLogs.Types.Product
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.CloudWatchLogs.Types.Product where
+
+import           Network.AWS.CloudWatchLogs.Types.Sum
+import           Network.AWS.Prelude
+
+-- | /See:/ 'destination' smart constructor.
+data Destination = Destination'
+    { _dTargetARN       :: !(Maybe Text)
+    , _dCreationTime    :: !(Maybe Nat)
+    , _dArn             :: !(Maybe Text)
+    , _dAccessPolicy    :: !(Maybe Text)
+    , _dDestinationName :: !(Maybe Text)
+    , _dRoleARN         :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Destination' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dTargetARN'
+--
+-- * 'dCreationTime'
+--
+-- * 'dArn'
+--
+-- * 'dAccessPolicy'
+--
+-- * 'dDestinationName'
+--
+-- * 'dRoleARN'
+destination
+    :: Destination
+destination =
+    Destination'
+    { _dTargetARN = Nothing
+    , _dCreationTime = Nothing
+    , _dArn = Nothing
+    , _dAccessPolicy = Nothing
+    , _dDestinationName = Nothing
+    , _dRoleARN = Nothing
+    }
+
+-- | Undocumented member.
+dTargetARN :: Lens' Destination (Maybe Text)
+dTargetARN = lens _dTargetARN (\ s a -> s{_dTargetARN = a});
+
+-- | Undocumented member.
+dCreationTime :: Lens' Destination (Maybe Natural)
+dCreationTime = lens _dCreationTime (\ s a -> s{_dCreationTime = a}) . mapping _Nat;
+
+-- | Undocumented member.
+dArn :: Lens' Destination (Maybe Text)
+dArn = lens _dArn (\ s a -> s{_dArn = a});
+
+-- | Undocumented member.
+dAccessPolicy :: Lens' Destination (Maybe Text)
+dAccessPolicy = lens _dAccessPolicy (\ s a -> s{_dAccessPolicy = a});
+
+-- | Undocumented member.
+dDestinationName :: Lens' Destination (Maybe Text)
+dDestinationName = lens _dDestinationName (\ s a -> s{_dDestinationName = a});
+
+-- | Undocumented member.
+dRoleARN :: Lens' Destination (Maybe Text)
+dRoleARN = lens _dRoleARN (\ s a -> s{_dRoleARN = a});
+
+instance FromJSON Destination where
+        parseJSON
+          = withObject "Destination"
+              (\ x ->
+                 Destination' <$>
+                   (x .:? "targetArn") <*> (x .:? "creationTime") <*>
+                     (x .:? "arn")
+                     <*> (x .:? "accessPolicy")
+                     <*> (x .:? "destinationName")
+                     <*> (x .:? "roleArn"))
+
+-- | Represents a matched event from a 'FilterLogEvents' request.
+--
+-- /See:/ 'filteredLogEvent' smart constructor.
+data FilteredLogEvent = FilteredLogEvent'
+    { _fleIngestionTime :: !(Maybe Nat)
+    , _fleLogStreamName :: !(Maybe Text)
+    , _fleMessage       :: !(Maybe Text)
+    , _fleTimestamp     :: !(Maybe Nat)
+    , _fleEventId       :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FilteredLogEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fleIngestionTime'
+--
+-- * 'fleLogStreamName'
+--
+-- * 'fleMessage'
+--
+-- * 'fleTimestamp'
+--
+-- * 'fleEventId'
+filteredLogEvent
+    :: FilteredLogEvent
+filteredLogEvent =
+    FilteredLogEvent'
+    { _fleIngestionTime = Nothing
+    , _fleLogStreamName = Nothing
+    , _fleMessage = Nothing
+    , _fleTimestamp = Nothing
+    , _fleEventId = Nothing
+    }
+
+-- | Undocumented member.
+fleIngestionTime :: Lens' FilteredLogEvent (Maybe Natural)
+fleIngestionTime = lens _fleIngestionTime (\ s a -> s{_fleIngestionTime = a}) . mapping _Nat;
+
+-- | The name of the log stream this event belongs to.
+fleLogStreamName :: Lens' FilteredLogEvent (Maybe Text)
+fleLogStreamName = lens _fleLogStreamName (\ s a -> s{_fleLogStreamName = a});
+
+-- | The data contained in the log event.
+fleMessage :: Lens' FilteredLogEvent (Maybe Text)
+fleMessage = lens _fleMessage (\ s a -> s{_fleMessage = a});
+
+-- | Undocumented member.
+fleTimestamp :: Lens' FilteredLogEvent (Maybe Natural)
+fleTimestamp = lens _fleTimestamp (\ s a -> s{_fleTimestamp = a}) . mapping _Nat;
+
+-- | A unique identifier for this event.
+fleEventId :: Lens' FilteredLogEvent (Maybe Text)
+fleEventId = lens _fleEventId (\ s a -> s{_fleEventId = a});
+
+instance FromJSON FilteredLogEvent where
+        parseJSON
+          = withObject "FilteredLogEvent"
+              (\ x ->
+                 FilteredLogEvent' <$>
+                   (x .:? "ingestionTime") <*> (x .:? "logStreamName")
+                     <*> (x .:? "message")
+                     <*> (x .:? "timestamp")
+                     <*> (x .:? "eventId"))
+
+-- | A log event is a record of some activity that was recorded by the
+-- application or resource being monitored. The log event record that
+-- Amazon CloudWatch Logs understands contains two properties: the
+-- timestamp of when the event occurred, and the raw event message.
+--
+-- /See:/ 'inputLogEvent' smart constructor.
+data InputLogEvent = InputLogEvent'
+    { _ileTimestamp :: !Nat
+    , _ileMessage   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InputLogEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ileTimestamp'
+--
+-- * 'ileMessage'
+inputLogEvent
+    :: Natural -- ^ 'ileTimestamp'
+    -> Text -- ^ 'ileMessage'
+    -> InputLogEvent
+inputLogEvent pTimestamp_ pMessage_ =
+    InputLogEvent'
+    { _ileTimestamp = _Nat # pTimestamp_
+    , _ileMessage = pMessage_
+    }
+
+-- | Undocumented member.
+ileTimestamp :: Lens' InputLogEvent Natural
+ileTimestamp = lens _ileTimestamp (\ s a -> s{_ileTimestamp = a}) . _Nat;
+
+-- | Undocumented member.
+ileMessage :: Lens' InputLogEvent Text
+ileMessage = lens _ileMessage (\ s a -> s{_ileMessage = a});
+
+instance ToJSON InputLogEvent where
+        toJSON InputLogEvent'{..}
+          = object
+              ["timestamp" .= _ileTimestamp,
+               "message" .= _ileMessage]
+
+-- | /See:/ 'logGroup' smart constructor.
+data LogGroup = LogGroup'
+    { _lgCreationTime      :: !(Maybe Nat)
+    , _lgMetricFilterCount :: !(Maybe Int)
+    , _lgArn               :: !(Maybe Text)
+    , _lgLogGroupName      :: !(Maybe Text)
+    , _lgRetentionInDays   :: !(Maybe Int)
+    , _lgStoredBytes       :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LogGroup' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lgCreationTime'
+--
+-- * 'lgMetricFilterCount'
+--
+-- * 'lgArn'
+--
+-- * 'lgLogGroupName'
+--
+-- * 'lgRetentionInDays'
+--
+-- * 'lgStoredBytes'
+logGroup
+    :: LogGroup
+logGroup =
+    LogGroup'
+    { _lgCreationTime = Nothing
+    , _lgMetricFilterCount = Nothing
+    , _lgArn = Nothing
+    , _lgLogGroupName = Nothing
+    , _lgRetentionInDays = Nothing
+    , _lgStoredBytes = Nothing
+    }
+
+-- | Undocumented member.
+lgCreationTime :: Lens' LogGroup (Maybe Natural)
+lgCreationTime = lens _lgCreationTime (\ s a -> s{_lgCreationTime = a}) . mapping _Nat;
+
+-- | Undocumented member.
+lgMetricFilterCount :: Lens' LogGroup (Maybe Int)
+lgMetricFilterCount = lens _lgMetricFilterCount (\ s a -> s{_lgMetricFilterCount = a});
+
+-- | Undocumented member.
+lgArn :: Lens' LogGroup (Maybe Text)
+lgArn = lens _lgArn (\ s a -> s{_lgArn = a});
+
+-- | Undocumented member.
+lgLogGroupName :: Lens' LogGroup (Maybe Text)
+lgLogGroupName = lens _lgLogGroupName (\ s a -> s{_lgLogGroupName = a});
+
+-- | Undocumented member.
+lgRetentionInDays :: Lens' LogGroup (Maybe Int)
+lgRetentionInDays = lens _lgRetentionInDays (\ s a -> s{_lgRetentionInDays = a});
+
+-- | Undocumented member.
+lgStoredBytes :: Lens' LogGroup (Maybe Natural)
+lgStoredBytes = lens _lgStoredBytes (\ s a -> s{_lgStoredBytes = a}) . mapping _Nat;
+
+instance FromJSON LogGroup where
+        parseJSON
+          = withObject "LogGroup"
+              (\ x ->
+                 LogGroup' <$>
+                   (x .:? "creationTime") <*>
+                     (x .:? "metricFilterCount")
+                     <*> (x .:? "arn")
+                     <*> (x .:? "logGroupName")
+                     <*> (x .:? "retentionInDays")
+                     <*> (x .:? "storedBytes"))
+
+-- | A log stream is sequence of log events from a single emitter of logs.
+--
+-- /See:/ 'logStream' smart constructor.
+data LogStream = LogStream'
+    { _lsCreationTime        :: !(Maybe Nat)
+    , _lsUploadSequenceToken :: !(Maybe Text)
+    , _lsArn                 :: !(Maybe Text)
+    , _lsFirstEventTimestamp :: !(Maybe Nat)
+    , _lsLogStreamName       :: !(Maybe Text)
+    , _lsStoredBytes         :: !(Maybe Nat)
+    , _lsLastIngestionTime   :: !(Maybe Nat)
+    , _lsLastEventTimestamp  :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LogStream' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lsCreationTime'
+--
+-- * 'lsUploadSequenceToken'
+--
+-- * 'lsArn'
+--
+-- * 'lsFirstEventTimestamp'
+--
+-- * 'lsLogStreamName'
+--
+-- * 'lsStoredBytes'
+--
+-- * 'lsLastIngestionTime'
+--
+-- * 'lsLastEventTimestamp'
+logStream
+    :: LogStream
+logStream =
+    LogStream'
+    { _lsCreationTime = Nothing
+    , _lsUploadSequenceToken = Nothing
+    , _lsArn = Nothing
+    , _lsFirstEventTimestamp = Nothing
+    , _lsLogStreamName = Nothing
+    , _lsStoredBytes = Nothing
+    , _lsLastIngestionTime = Nothing
+    , _lsLastEventTimestamp = Nothing
+    }
+
+-- | Undocumented member.
+lsCreationTime :: Lens' LogStream (Maybe Natural)
+lsCreationTime = lens _lsCreationTime (\ s a -> s{_lsCreationTime = a}) . mapping _Nat;
+
+-- | Undocumented member.
+lsUploadSequenceToken :: Lens' LogStream (Maybe Text)
+lsUploadSequenceToken = lens _lsUploadSequenceToken (\ s a -> s{_lsUploadSequenceToken = a});
+
+-- | Undocumented member.
+lsArn :: Lens' LogStream (Maybe Text)
+lsArn = lens _lsArn (\ s a -> s{_lsArn = a});
+
+-- | Undocumented member.
+lsFirstEventTimestamp :: Lens' LogStream (Maybe Natural)
+lsFirstEventTimestamp = lens _lsFirstEventTimestamp (\ s a -> s{_lsFirstEventTimestamp = a}) . mapping _Nat;
+
+-- | Undocumented member.
+lsLogStreamName :: Lens' LogStream (Maybe Text)
+lsLogStreamName = lens _lsLogStreamName (\ s a -> s{_lsLogStreamName = a});
+
+-- | Undocumented member.
+lsStoredBytes :: Lens' LogStream (Maybe Natural)
+lsStoredBytes = lens _lsStoredBytes (\ s a -> s{_lsStoredBytes = a}) . mapping _Nat;
+
+-- | Undocumented member.
+lsLastIngestionTime :: Lens' LogStream (Maybe Natural)
+lsLastIngestionTime = lens _lsLastIngestionTime (\ s a -> s{_lsLastIngestionTime = a}) . mapping _Nat;
+
+-- | Undocumented member.
+lsLastEventTimestamp :: Lens' LogStream (Maybe Natural)
+lsLastEventTimestamp = lens _lsLastEventTimestamp (\ s a -> s{_lsLastEventTimestamp = a}) . mapping _Nat;
+
+instance FromJSON LogStream where
+        parseJSON
+          = withObject "LogStream"
+              (\ x ->
+                 LogStream' <$>
+                   (x .:? "creationTime") <*>
+                     (x .:? "uploadSequenceToken")
+                     <*> (x .:? "arn")
+                     <*> (x .:? "firstEventTimestamp")
+                     <*> (x .:? "logStreamName")
+                     <*> (x .:? "storedBytes")
+                     <*> (x .:? "lastIngestionTime")
+                     <*> (x .:? "lastEventTimestamp"))
+
+-- | Metric filters can be used to express how Amazon CloudWatch Logs would
+-- extract metric observations from ingested log events and transform them
+-- to metric data in a CloudWatch metric.
+--
+-- /See:/ 'metricFilter' smart constructor.
+data MetricFilter = MetricFilter'
+    { _mfCreationTime          :: !(Maybe Nat)
+    , _mfFilterName            :: !(Maybe Text)
+    , _mfFilterPattern         :: !(Maybe Text)
+    , _mfMetricTransformations :: !(Maybe (List1 MetricTransformation))
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MetricFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mfCreationTime'
+--
+-- * 'mfFilterName'
+--
+-- * 'mfFilterPattern'
+--
+-- * 'mfMetricTransformations'
+metricFilter
+    :: MetricFilter
+metricFilter =
+    MetricFilter'
+    { _mfCreationTime = Nothing
+    , _mfFilterName = Nothing
+    , _mfFilterPattern = Nothing
+    , _mfMetricTransformations = Nothing
+    }
+
+-- | Undocumented member.
+mfCreationTime :: Lens' MetricFilter (Maybe Natural)
+mfCreationTime = lens _mfCreationTime (\ s a -> s{_mfCreationTime = a}) . mapping _Nat;
+
+-- | Undocumented member.
+mfFilterName :: Lens' MetricFilter (Maybe Text)
+mfFilterName = lens _mfFilterName (\ s a -> s{_mfFilterName = a});
+
+-- | Undocumented member.
+mfFilterPattern :: Lens' MetricFilter (Maybe Text)
+mfFilterPattern = lens _mfFilterPattern (\ s a -> s{_mfFilterPattern = a});
+
+-- | Undocumented member.
+mfMetricTransformations :: Lens' MetricFilter (Maybe (NonEmpty MetricTransformation))
+mfMetricTransformations = lens _mfMetricTransformations (\ s a -> s{_mfMetricTransformations = a}) . mapping _List1;
+
+instance FromJSON MetricFilter where
+        parseJSON
+          = withObject "MetricFilter"
+              (\ x ->
+                 MetricFilter' <$>
+                   (x .:? "creationTime") <*> (x .:? "filterName") <*>
+                     (x .:? "filterPattern")
+                     <*> (x .:? "metricTransformations"))
+
+-- | /See:/ 'metricFilterMatchRecord' smart constructor.
+data MetricFilterMatchRecord = MetricFilterMatchRecord'
+    { _mfmrExtractedValues :: !(Maybe (Map Text Text))
+    , _mfmrEventMessage    :: !(Maybe Text)
+    , _mfmrEventNumber     :: !(Maybe Integer)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MetricFilterMatchRecord' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mfmrExtractedValues'
+--
+-- * 'mfmrEventMessage'
+--
+-- * 'mfmrEventNumber'
+metricFilterMatchRecord
+    :: MetricFilterMatchRecord
+metricFilterMatchRecord =
+    MetricFilterMatchRecord'
+    { _mfmrExtractedValues = Nothing
+    , _mfmrEventMessage = Nothing
+    , _mfmrEventNumber = Nothing
+    }
+
+-- | Undocumented member.
+mfmrExtractedValues :: Lens' MetricFilterMatchRecord (HashMap Text Text)
+mfmrExtractedValues = lens _mfmrExtractedValues (\ s a -> s{_mfmrExtractedValues = a}) . _Default . _Map;
+
+-- | Undocumented member.
+mfmrEventMessage :: Lens' MetricFilterMatchRecord (Maybe Text)
+mfmrEventMessage = lens _mfmrEventMessage (\ s a -> s{_mfmrEventMessage = a});
+
+-- | Undocumented member.
+mfmrEventNumber :: Lens' MetricFilterMatchRecord (Maybe Integer)
+mfmrEventNumber = lens _mfmrEventNumber (\ s a -> s{_mfmrEventNumber = a});
+
+instance FromJSON MetricFilterMatchRecord where
+        parseJSON
+          = withObject "MetricFilterMatchRecord"
+              (\ x ->
+                 MetricFilterMatchRecord' <$>
+                   (x .:? "extractedValues" .!= mempty) <*>
+                     (x .:? "eventMessage")
+                     <*> (x .:? "eventNumber"))
+
+-- | /See:/ 'metricTransformation' smart constructor.
+data MetricTransformation = MetricTransformation'
+    { _mtMetricName      :: !Text
+    , _mtMetricNamespace :: !Text
+    , _mtMetricValue     :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MetricTransformation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mtMetricName'
+--
+-- * 'mtMetricNamespace'
+--
+-- * 'mtMetricValue'
+metricTransformation
+    :: Text -- ^ 'mtMetricName'
+    -> Text -- ^ 'mtMetricNamespace'
+    -> Text -- ^ 'mtMetricValue'
+    -> MetricTransformation
+metricTransformation pMetricName_ pMetricNamespace_ pMetricValue_ =
+    MetricTransformation'
+    { _mtMetricName = pMetricName_
+    , _mtMetricNamespace = pMetricNamespace_
+    , _mtMetricValue = pMetricValue_
+    }
+
+-- | Undocumented member.
+mtMetricName :: Lens' MetricTransformation Text
+mtMetricName = lens _mtMetricName (\ s a -> s{_mtMetricName = a});
+
+-- | Undocumented member.
+mtMetricNamespace :: Lens' MetricTransformation Text
+mtMetricNamespace = lens _mtMetricNamespace (\ s a -> s{_mtMetricNamespace = a});
+
+-- | Undocumented member.
+mtMetricValue :: Lens' MetricTransformation Text
+mtMetricValue = lens _mtMetricValue (\ s a -> s{_mtMetricValue = a});
+
+instance FromJSON MetricTransformation where
+        parseJSON
+          = withObject "MetricTransformation"
+              (\ x ->
+                 MetricTransformation' <$>
+                   (x .: "metricName") <*> (x .: "metricNamespace") <*>
+                     (x .: "metricValue"))
+
+instance ToJSON MetricTransformation where
+        toJSON MetricTransformation'{..}
+          = object
+              ["metricName" .= _mtMetricName,
+               "metricNamespace" .= _mtMetricNamespace,
+               "metricValue" .= _mtMetricValue]
+
+-- | /See:/ 'outputLogEvent' smart constructor.
+data OutputLogEvent = OutputLogEvent'
+    { _oleIngestionTime :: !(Maybe Nat)
+    , _oleMessage       :: !(Maybe Text)
+    , _oleTimestamp     :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OutputLogEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oleIngestionTime'
+--
+-- * 'oleMessage'
+--
+-- * 'oleTimestamp'
+outputLogEvent
+    :: OutputLogEvent
+outputLogEvent =
+    OutputLogEvent'
+    { _oleIngestionTime = Nothing
+    , _oleMessage = Nothing
+    , _oleTimestamp = Nothing
+    }
+
+-- | Undocumented member.
+oleIngestionTime :: Lens' OutputLogEvent (Maybe Natural)
+oleIngestionTime = lens _oleIngestionTime (\ s a -> s{_oleIngestionTime = a}) . mapping _Nat;
+
+-- | Undocumented member.
+oleMessage :: Lens' OutputLogEvent (Maybe Text)
+oleMessage = lens _oleMessage (\ s a -> s{_oleMessage = a});
+
+-- | Undocumented member.
+oleTimestamp :: Lens' OutputLogEvent (Maybe Natural)
+oleTimestamp = lens _oleTimestamp (\ s a -> s{_oleTimestamp = a}) . mapping _Nat;
+
+instance FromJSON OutputLogEvent where
+        parseJSON
+          = withObject "OutputLogEvent"
+              (\ x ->
+                 OutputLogEvent' <$>
+                   (x .:? "ingestionTime") <*> (x .:? "message") <*>
+                     (x .:? "timestamp"))
+
+-- | /See:/ 'rejectedLogEventsInfo' smart constructor.
+data RejectedLogEventsInfo = RejectedLogEventsInfo'
+    { _rleiTooOldLogEventEndIndex   :: !(Maybe Int)
+    , _rleiTooNewLogEventStartIndex :: !(Maybe Int)
+    , _rleiExpiredLogEventEndIndex  :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RejectedLogEventsInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rleiTooOldLogEventEndIndex'
+--
+-- * 'rleiTooNewLogEventStartIndex'
+--
+-- * 'rleiExpiredLogEventEndIndex'
+rejectedLogEventsInfo
+    :: RejectedLogEventsInfo
+rejectedLogEventsInfo =
+    RejectedLogEventsInfo'
+    { _rleiTooOldLogEventEndIndex = Nothing
+    , _rleiTooNewLogEventStartIndex = Nothing
+    , _rleiExpiredLogEventEndIndex = Nothing
+    }
+
+-- | Undocumented member.
+rleiTooOldLogEventEndIndex :: Lens' RejectedLogEventsInfo (Maybe Int)
+rleiTooOldLogEventEndIndex = lens _rleiTooOldLogEventEndIndex (\ s a -> s{_rleiTooOldLogEventEndIndex = a});
+
+-- | Undocumented member.
+rleiTooNewLogEventStartIndex :: Lens' RejectedLogEventsInfo (Maybe Int)
+rleiTooNewLogEventStartIndex = lens _rleiTooNewLogEventStartIndex (\ s a -> s{_rleiTooNewLogEventStartIndex = a});
+
+-- | Undocumented member.
+rleiExpiredLogEventEndIndex :: Lens' RejectedLogEventsInfo (Maybe Int)
+rleiExpiredLogEventEndIndex = lens _rleiExpiredLogEventEndIndex (\ s a -> s{_rleiExpiredLogEventEndIndex = a});
+
+instance FromJSON RejectedLogEventsInfo where
+        parseJSON
+          = withObject "RejectedLogEventsInfo"
+              (\ x ->
+                 RejectedLogEventsInfo' <$>
+                   (x .:? "tooOldLogEventEndIndex") <*>
+                     (x .:? "tooNewLogEventStartIndex")
+                     <*> (x .:? "expiredLogEventEndIndex"))
+
+-- | An object indicating the search status of a log stream in a
+-- 'FilterLogEvents' request.
+--
+-- /See:/ 'searchedLogStream' smart constructor.
+data SearchedLogStream = SearchedLogStream'
+    { _slsLogStreamName      :: !(Maybe Text)
+    , _slsSearchedCompletely :: !(Maybe Bool)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SearchedLogStream' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'slsLogStreamName'
+--
+-- * 'slsSearchedCompletely'
+searchedLogStream
+    :: SearchedLogStream
+searchedLogStream =
+    SearchedLogStream'
+    { _slsLogStreamName = Nothing
+    , _slsSearchedCompletely = Nothing
+    }
+
+-- | The name of the log stream.
+slsLogStreamName :: Lens' SearchedLogStream (Maybe Text)
+slsLogStreamName = lens _slsLogStreamName (\ s a -> s{_slsLogStreamName = a});
+
+-- | Indicates whether all the events in this log stream were searched or
+-- more data exists to search by paginating further.
+slsSearchedCompletely :: Lens' SearchedLogStream (Maybe Bool)
+slsSearchedCompletely = lens _slsSearchedCompletely (\ s a -> s{_slsSearchedCompletely = a});
+
+instance FromJSON SearchedLogStream where
+        parseJSON
+          = withObject "SearchedLogStream"
+              (\ x ->
+                 SearchedLogStream' <$>
+                   (x .:? "logStreamName") <*>
+                     (x .:? "searchedCompletely"))
+
+-- | /See:/ 'subscriptionFilter' smart constructor.
+data SubscriptionFilter = SubscriptionFilter'
+    { _sfCreationTime   :: !(Maybe Nat)
+    , _sfFilterName     :: !(Maybe Text)
+    , _sfDestinationARN :: !(Maybe Text)
+    , _sfLogGroupName   :: !(Maybe Text)
+    , _sfFilterPattern  :: !(Maybe Text)
+    , _sfRoleARN        :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SubscriptionFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sfCreationTime'
+--
+-- * 'sfFilterName'
+--
+-- * 'sfDestinationARN'
+--
+-- * 'sfLogGroupName'
+--
+-- * 'sfFilterPattern'
+--
+-- * 'sfRoleARN'
+subscriptionFilter
+    :: SubscriptionFilter
+subscriptionFilter =
+    SubscriptionFilter'
+    { _sfCreationTime = Nothing
+    , _sfFilterName = Nothing
+    , _sfDestinationARN = Nothing
+    , _sfLogGroupName = Nothing
+    , _sfFilterPattern = Nothing
+    , _sfRoleARN = Nothing
+    }
+
+-- | Undocumented member.
+sfCreationTime :: Lens' SubscriptionFilter (Maybe Natural)
+sfCreationTime = lens _sfCreationTime (\ s a -> s{_sfCreationTime = a}) . mapping _Nat;
+
+-- | Undocumented member.
+sfFilterName :: Lens' SubscriptionFilter (Maybe Text)
+sfFilterName = lens _sfFilterName (\ s a -> s{_sfFilterName = a});
+
+-- | Undocumented member.
+sfDestinationARN :: Lens' SubscriptionFilter (Maybe Text)
+sfDestinationARN = lens _sfDestinationARN (\ s a -> s{_sfDestinationARN = a});
+
+-- | Undocumented member.
+sfLogGroupName :: Lens' SubscriptionFilter (Maybe Text)
+sfLogGroupName = lens _sfLogGroupName (\ s a -> s{_sfLogGroupName = a});
+
+-- | Undocumented member.
+sfFilterPattern :: Lens' SubscriptionFilter (Maybe Text)
+sfFilterPattern = lens _sfFilterPattern (\ s a -> s{_sfFilterPattern = a});
+
+-- | Undocumented member.
+sfRoleARN :: Lens' SubscriptionFilter (Maybe Text)
+sfRoleARN = lens _sfRoleARN (\ s a -> s{_sfRoleARN = a});
+
+instance FromJSON SubscriptionFilter where
+        parseJSON
+          = withObject "SubscriptionFilter"
+              (\ x ->
+                 SubscriptionFilter' <$>
+                   (x .:? "creationTime") <*> (x .:? "filterName") <*>
+                     (x .:? "destinationArn")
+                     <*> (x .:? "logGroupName")
+                     <*> (x .:? "filterPattern")
+                     <*> (x .:? "roleArn"))
diff --git a/gen/Network/AWS/CloudWatchLogs/Types/Sum.hs b/gen/Network/AWS/CloudWatchLogs/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudWatchLogs/Types/Sum.hs
@@ -0,0 +1,45 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.CloudWatchLogs.Types.Sum
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.CloudWatchLogs.Types.Sum where
+
+import           Network.AWS.Prelude
+
+data OrderBy
+    = LastEventTime
+    | LogStreamName
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText OrderBy where
+    parser = takeLowerText >>= \case
+        "lasteventtime" -> pure LastEventTime
+        "logstreamname" -> pure LogStreamName
+        e -> fromTextError $ "Failure parsing OrderBy from value: '" <> e
+           <> "'. Accepted values: lasteventtime, logstreamname"
+
+instance ToText OrderBy where
+    toText = \case
+        LastEventTime -> "lasteventtime"
+        LogStreamName -> "logstreamname"
+
+instance Hashable     OrderBy
+instance ToByteString OrderBy
+instance ToQuery      OrderBy
+instance ToHeader     OrderBy
+
+instance ToJSON OrderBy where
+    toJSON = toJSONText
diff --git a/gen/Network/AWS/CloudWatchLogs/Waiters.hs b/gen/Network/AWS/CloudWatchLogs/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudWatchLogs/Waiters.hs
@@ -0,0 +1,20 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.CloudWatchLogs.Waiters
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.CloudWatchLogs.Waiters where
+
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.Prelude
+import           Network.AWS.Waiter
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,21 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Main (main) where
+
+import Test.Tasty
+import Test.AWS.CloudWatchLogs
+import Test.AWS.CloudWatchLogs.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "CloudWatchLogs"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/CloudWatchLogs.hs b/test/Test/AWS/CloudWatchLogs.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/CloudWatchLogs.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Module      : Test.AWS.CloudWatchLogs
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+module Test.AWS.CloudWatchLogs
+    ( tests
+    , fixtures
+    ) where
+
+import           Network.AWS.CloudWatchLogs
+import           Test.AWS.Gen.CloudWatchLogs
+import           Test.Tasty
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/CloudWatchLogs/Internal.hs b/test/Test/AWS/CloudWatchLogs/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/CloudWatchLogs/Internal.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Test.AWS.CloudWatchLogs.Internal
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+module Test.AWS.CloudWatchLogs.Internal where
+
+import Test.AWS.Prelude
diff --git a/test/Test/AWS/Gen/CloudWatchLogs.hs b/test/Test/AWS/Gen/CloudWatchLogs.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/CloudWatchLogs.hs
@@ -0,0 +1,413 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-orphans        #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.AWS.Gen.CloudWatchLogs
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.Gen.CloudWatchLogs where
+
+import Data.Proxy
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+import Network.AWS.CloudWatchLogs
+import Test.AWS.CloudWatchLogs.Internal
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ testDescribeDestinations $
+--             describeDestinations
+--
+--         , testDeleteDestination $
+--             deleteDestination
+--
+--         , testPutDestination $
+--             putDestination
+--
+--         , testDescribeSubscriptionFilters $
+--             describeSubscriptionFilters
+--
+--         , testGetLogEvents $
+--             getLogEvents
+--
+--         , testDescribeLogGroups $
+--             describeLogGroups
+--
+--         , testFilterLogEvents $
+--             filterLogEvents
+--
+--         , testDeleteLogStream $
+--             deleteLogStream
+--
+--         , testCreateLogStream $
+--             createLogStream
+--
+--         , testCreateLogGroup $
+--             createLogGroup
+--
+--         , testPutLogEvents $
+--             putLogEvents
+--
+--         , testDeleteSubscriptionFilter $
+--             deleteSubscriptionFilter
+--
+--         , testPutSubscriptionFilter $
+--             putSubscriptionFilter
+--
+--         , testDeleteLogGroup $
+--             deleteLogGroup
+--
+--         , testTestMetricFilter $
+--             testMetricFilter
+--
+--         , testDescribeMetricFilters $
+--             describeMetricFilters
+--
+--         , testDeleteMetricFilter $
+--             deleteMetricFilter
+--
+--         , testPutRetentionPolicy $
+--             putRetentionPolicy
+--
+--         , testDeleteRetentionPolicy $
+--             deleteRetentionPolicy
+--
+--         , testPutMetricFilter $
+--             putMetricFilter
+--
+--         , testPutDestinationPolicy $
+--             putDestinationPolicy
+--
+--         , testDescribeLogStreams $
+--             describeLogStreams
+--
+--           ]
+
+--     , testGroup "response"
+--         [ testDescribeDestinationsResponse $
+--             describeDestinationsResponse
+--
+--         , testDeleteDestinationResponse $
+--             deleteDestinationResponse
+--
+--         , testPutDestinationResponse $
+--             putDestinationResponse
+--
+--         , testDescribeSubscriptionFiltersResponse $
+--             describeSubscriptionFiltersResponse
+--
+--         , testGetLogEventsResponse $
+--             getLogEventsResponse
+--
+--         , testDescribeLogGroupsResponse $
+--             describeLogGroupsResponse
+--
+--         , testFilterLogEventsResponse $
+--             filterLogEventsResponse
+--
+--         , testDeleteLogStreamResponse $
+--             deleteLogStreamResponse
+--
+--         , testCreateLogStreamResponse $
+--             createLogStreamResponse
+--
+--         , testCreateLogGroupResponse $
+--             createLogGroupResponse
+--
+--         , testPutLogEventsResponse $
+--             putLogEventsResponse
+--
+--         , testDeleteSubscriptionFilterResponse $
+--             deleteSubscriptionFilterResponse
+--
+--         , testPutSubscriptionFilterResponse $
+--             putSubscriptionFilterResponse
+--
+--         , testDeleteLogGroupResponse $
+--             deleteLogGroupResponse
+--
+--         , testTestMetricFilterResponse $
+--             testMetricFilterResponse
+--
+--         , testDescribeMetricFiltersResponse $
+--             describeMetricFiltersResponse
+--
+--         , testDeleteMetricFilterResponse $
+--             deleteMetricFilterResponse
+--
+--         , testPutRetentionPolicyResponse $
+--             putRetentionPolicyResponse
+--
+--         , testDeleteRetentionPolicyResponse $
+--             deleteRetentionPolicyResponse
+--
+--         , testPutMetricFilterResponse $
+--             putMetricFilterResponse
+--
+--         , testPutDestinationPolicyResponse $
+--             putDestinationPolicyResponse
+--
+--         , testDescribeLogStreamsResponse $
+--             describeLogStreamsResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+testDescribeDestinations :: DescribeDestinations -> TestTree
+testDescribeDestinations = req
+    "DescribeDestinations"
+    "fixture/DescribeDestinations"
+
+testDeleteDestination :: DeleteDestination -> TestTree
+testDeleteDestination = req
+    "DeleteDestination"
+    "fixture/DeleteDestination"
+
+testPutDestination :: PutDestination -> TestTree
+testPutDestination = req
+    "PutDestination"
+    "fixture/PutDestination"
+
+testDescribeSubscriptionFilters :: DescribeSubscriptionFilters -> TestTree
+testDescribeSubscriptionFilters = req
+    "DescribeSubscriptionFilters"
+    "fixture/DescribeSubscriptionFilters"
+
+testGetLogEvents :: GetLogEvents -> TestTree
+testGetLogEvents = req
+    "GetLogEvents"
+    "fixture/GetLogEvents"
+
+testDescribeLogGroups :: DescribeLogGroups -> TestTree
+testDescribeLogGroups = req
+    "DescribeLogGroups"
+    "fixture/DescribeLogGroups"
+
+testFilterLogEvents :: FilterLogEvents -> TestTree
+testFilterLogEvents = req
+    "FilterLogEvents"
+    "fixture/FilterLogEvents"
+
+testDeleteLogStream :: DeleteLogStream -> TestTree
+testDeleteLogStream = req
+    "DeleteLogStream"
+    "fixture/DeleteLogStream"
+
+testCreateLogStream :: CreateLogStream -> TestTree
+testCreateLogStream = req
+    "CreateLogStream"
+    "fixture/CreateLogStream"
+
+testCreateLogGroup :: CreateLogGroup -> TestTree
+testCreateLogGroup = req
+    "CreateLogGroup"
+    "fixture/CreateLogGroup"
+
+testPutLogEvents :: PutLogEvents -> TestTree
+testPutLogEvents = req
+    "PutLogEvents"
+    "fixture/PutLogEvents"
+
+testDeleteSubscriptionFilter :: DeleteSubscriptionFilter -> TestTree
+testDeleteSubscriptionFilter = req
+    "DeleteSubscriptionFilter"
+    "fixture/DeleteSubscriptionFilter"
+
+testPutSubscriptionFilter :: PutSubscriptionFilter -> TestTree
+testPutSubscriptionFilter = req
+    "PutSubscriptionFilter"
+    "fixture/PutSubscriptionFilter"
+
+testDeleteLogGroup :: DeleteLogGroup -> TestTree
+testDeleteLogGroup = req
+    "DeleteLogGroup"
+    "fixture/DeleteLogGroup"
+
+testTestMetricFilter :: TestMetricFilter -> TestTree
+testTestMetricFilter = req
+    "TestMetricFilter"
+    "fixture/TestMetricFilter"
+
+testDescribeMetricFilters :: DescribeMetricFilters -> TestTree
+testDescribeMetricFilters = req
+    "DescribeMetricFilters"
+    "fixture/DescribeMetricFilters"
+
+testDeleteMetricFilter :: DeleteMetricFilter -> TestTree
+testDeleteMetricFilter = req
+    "DeleteMetricFilter"
+    "fixture/DeleteMetricFilter"
+
+testPutRetentionPolicy :: PutRetentionPolicy -> TestTree
+testPutRetentionPolicy = req
+    "PutRetentionPolicy"
+    "fixture/PutRetentionPolicy"
+
+testDeleteRetentionPolicy :: DeleteRetentionPolicy -> TestTree
+testDeleteRetentionPolicy = req
+    "DeleteRetentionPolicy"
+    "fixture/DeleteRetentionPolicy"
+
+testPutMetricFilter :: PutMetricFilter -> TestTree
+testPutMetricFilter = req
+    "PutMetricFilter"
+    "fixture/PutMetricFilter"
+
+testPutDestinationPolicy :: PutDestinationPolicy -> TestTree
+testPutDestinationPolicy = req
+    "PutDestinationPolicy"
+    "fixture/PutDestinationPolicy"
+
+testDescribeLogStreams :: DescribeLogStreams -> TestTree
+testDescribeLogStreams = req
+    "DescribeLogStreams"
+    "fixture/DescribeLogStreams"
+
+-- Responses
+
+testDescribeDestinationsResponse :: DescribeDestinationsResponse -> TestTree
+testDescribeDestinationsResponse = res
+    "DescribeDestinationsResponse"
+    "fixture/DescribeDestinationsResponse"
+    (Proxy :: Proxy DescribeDestinations)
+
+testDeleteDestinationResponse :: DeleteDestinationResponse -> TestTree
+testDeleteDestinationResponse = res
+    "DeleteDestinationResponse"
+    "fixture/DeleteDestinationResponse"
+    (Proxy :: Proxy DeleteDestination)
+
+testPutDestinationResponse :: PutDestinationResponse -> TestTree
+testPutDestinationResponse = res
+    "PutDestinationResponse"
+    "fixture/PutDestinationResponse"
+    (Proxy :: Proxy PutDestination)
+
+testDescribeSubscriptionFiltersResponse :: DescribeSubscriptionFiltersResponse -> TestTree
+testDescribeSubscriptionFiltersResponse = res
+    "DescribeSubscriptionFiltersResponse"
+    "fixture/DescribeSubscriptionFiltersResponse"
+    (Proxy :: Proxy DescribeSubscriptionFilters)
+
+testGetLogEventsResponse :: GetLogEventsResponse -> TestTree
+testGetLogEventsResponse = res
+    "GetLogEventsResponse"
+    "fixture/GetLogEventsResponse"
+    (Proxy :: Proxy GetLogEvents)
+
+testDescribeLogGroupsResponse :: DescribeLogGroupsResponse -> TestTree
+testDescribeLogGroupsResponse = res
+    "DescribeLogGroupsResponse"
+    "fixture/DescribeLogGroupsResponse"
+    (Proxy :: Proxy DescribeLogGroups)
+
+testFilterLogEventsResponse :: FilterLogEventsResponse -> TestTree
+testFilterLogEventsResponse = res
+    "FilterLogEventsResponse"
+    "fixture/FilterLogEventsResponse"
+    (Proxy :: Proxy FilterLogEvents)
+
+testDeleteLogStreamResponse :: DeleteLogStreamResponse -> TestTree
+testDeleteLogStreamResponse = res
+    "DeleteLogStreamResponse"
+    "fixture/DeleteLogStreamResponse"
+    (Proxy :: Proxy DeleteLogStream)
+
+testCreateLogStreamResponse :: CreateLogStreamResponse -> TestTree
+testCreateLogStreamResponse = res
+    "CreateLogStreamResponse"
+    "fixture/CreateLogStreamResponse"
+    (Proxy :: Proxy CreateLogStream)
+
+testCreateLogGroupResponse :: CreateLogGroupResponse -> TestTree
+testCreateLogGroupResponse = res
+    "CreateLogGroupResponse"
+    "fixture/CreateLogGroupResponse"
+    (Proxy :: Proxy CreateLogGroup)
+
+testPutLogEventsResponse :: PutLogEventsResponse -> TestTree
+testPutLogEventsResponse = res
+    "PutLogEventsResponse"
+    "fixture/PutLogEventsResponse"
+    (Proxy :: Proxy PutLogEvents)
+
+testDeleteSubscriptionFilterResponse :: DeleteSubscriptionFilterResponse -> TestTree
+testDeleteSubscriptionFilterResponse = res
+    "DeleteSubscriptionFilterResponse"
+    "fixture/DeleteSubscriptionFilterResponse"
+    (Proxy :: Proxy DeleteSubscriptionFilter)
+
+testPutSubscriptionFilterResponse :: PutSubscriptionFilterResponse -> TestTree
+testPutSubscriptionFilterResponse = res
+    "PutSubscriptionFilterResponse"
+    "fixture/PutSubscriptionFilterResponse"
+    (Proxy :: Proxy PutSubscriptionFilter)
+
+testDeleteLogGroupResponse :: DeleteLogGroupResponse -> TestTree
+testDeleteLogGroupResponse = res
+    "DeleteLogGroupResponse"
+    "fixture/DeleteLogGroupResponse"
+    (Proxy :: Proxy DeleteLogGroup)
+
+testTestMetricFilterResponse :: TestMetricFilterResponse -> TestTree
+testTestMetricFilterResponse = res
+    "TestMetricFilterResponse"
+    "fixture/TestMetricFilterResponse"
+    (Proxy :: Proxy TestMetricFilter)
+
+testDescribeMetricFiltersResponse :: DescribeMetricFiltersResponse -> TestTree
+testDescribeMetricFiltersResponse = res
+    "DescribeMetricFiltersResponse"
+    "fixture/DescribeMetricFiltersResponse"
+    (Proxy :: Proxy DescribeMetricFilters)
+
+testDeleteMetricFilterResponse :: DeleteMetricFilterResponse -> TestTree
+testDeleteMetricFilterResponse = res
+    "DeleteMetricFilterResponse"
+    "fixture/DeleteMetricFilterResponse"
+    (Proxy :: Proxy DeleteMetricFilter)
+
+testPutRetentionPolicyResponse :: PutRetentionPolicyResponse -> TestTree
+testPutRetentionPolicyResponse = res
+    "PutRetentionPolicyResponse"
+    "fixture/PutRetentionPolicyResponse"
+    (Proxy :: Proxy PutRetentionPolicy)
+
+testDeleteRetentionPolicyResponse :: DeleteRetentionPolicyResponse -> TestTree
+testDeleteRetentionPolicyResponse = res
+    "DeleteRetentionPolicyResponse"
+    "fixture/DeleteRetentionPolicyResponse"
+    (Proxy :: Proxy DeleteRetentionPolicy)
+
+testPutMetricFilterResponse :: PutMetricFilterResponse -> TestTree
+testPutMetricFilterResponse = res
+    "PutMetricFilterResponse"
+    "fixture/PutMetricFilterResponse"
+    (Proxy :: Proxy PutMetricFilter)
+
+testPutDestinationPolicyResponse :: PutDestinationPolicyResponse -> TestTree
+testPutDestinationPolicyResponse = res
+    "PutDestinationPolicyResponse"
+    "fixture/PutDestinationPolicyResponse"
+    (Proxy :: Proxy PutDestinationPolicy)
+
+testDescribeLogStreamsResponse :: DescribeLogStreamsResponse -> TestTree
+testDescribeLogStreamsResponse = res
+    "DescribeLogStreamsResponse"
+    "fixture/DescribeLogStreamsResponse"
+    (Proxy :: Proxy DescribeLogStreams)
