diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,22 +1,53 @@
 # Amazon CloudTrail 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
 
-CloudTrail is a web service that records AWS API calls for your AWS account
-and delivers log files to an Amazon S3 bucket. The recorded information
-includes the identity of the user, the start time of the AWS API call, the
-source IP address, the request parameters, and the response elements returned
-by the service.
+AWS CloudTrail
 
+This is the CloudTrail API Reference. It provides descriptions of
+actions, data types, common parameters, and common errors for
+CloudTrail.
+
+CloudTrail is a web service that records AWS API calls for your AWS
+account and delivers log files to an Amazon S3 bucket. The recorded
+information includes the identity of the user, the start time of the AWS
+API call, the source IP address, the request parameters, and the
+response elements returned by the service.
+
+As an alternative to using the API, you can use one of the AWS SDKs,
+which consist of libraries and sample code for various programming
+languages and platforms (Java, Ruby, .NET, iOS, Android, etc.). The SDKs
+provide a convenient way to create programmatic access to AWSCloudTrail.
+For example, the SDKs take care of cryptographically signing requests,
+managing errors, and retrying requests automatically. For information
+about the AWS SDKs, including how to download and install them, see the
+<http://aws.amazon.com/tools/ Tools for Amazon Web Services page>.
+
+See the CloudTrail User Guide for information about the data that is
+included with each AWS API call listed in the log files.
+
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-cloudtrail)
 and the [AWS API Reference](http://docs.aws.amazon.com/awscloudtrail/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-cloudtrail.cabal b/amazonka-cloudtrail.cabal
--- a/amazonka-cloudtrail.cabal
+++ b/amazonka-cloudtrail.cabal
@@ -1,29 +1,55 @@
 name:                  amazonka-cloudtrail
-version:               0.3.6
+version:               1.0.0
 synopsis:              Amazon CloudTrail 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:
-    CloudTrail is a web service that records AWS API calls for your AWS account
-    and delivers log files to an Amazon S3 bucket. The recorded information
-    includes the identity of the user, the start time of the AWS API call, the
-    source IP address, the request parameters, and the response elements returned
-    by the service.
+    AWS CloudTrail
 
+    This is the CloudTrail API Reference. It provides descriptions of
+    actions, data types, common parameters, and common errors for
+    CloudTrail.
+
+    CloudTrail is a web service that records AWS API calls for your AWS
+    account and delivers log files to an Amazon S3 bucket. The recorded
+    information includes the identity of the user, the start time of the AWS
+    API call, the source IP address, the request parameters, and the
+    response elements returned by the service.
+
+    As an alternative to using the API, you can use one of the AWS SDKs,
+    which consist of libraries and sample code for various programming
+    languages and platforms (Java, Ruby, .NET, iOS, Android, etc.). The SDKs
+    provide a convenient way to create programmatic access to AWSCloudTrail.
+    For example, the SDKs take care of cryptographically signing requests,
+    managing errors, and retrying requests automatically. For information
+    about the AWS SDKs, including how to download and install them, see the
+    <http://aws.amazon.com/tools/ Tools for Amazon Web Services page>.
+
+    See the CloudTrail User Guide for information about the data that is
+    included with each AWS API call listed in the log files.
     .
-    /See:/ <http://docs.aws.amazon.com/awscloudtrail/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.CloudTrail" and the <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/Welcome.html AWS API Reference>
+    to get started.
 
 source-repository head
     type:     git
@@ -46,9 +72,40 @@
         , Network.AWS.CloudTrail.StopLogging
         , Network.AWS.CloudTrail.Types
         , Network.AWS.CloudTrail.UpdateTrail
+        , Network.AWS.CloudTrail.Waiters
 
     other-modules:
+          Network.AWS.CloudTrail.Types.Product
+        , Network.AWS.CloudTrail.Types.Sum
 
     build-depends:
-          amazonka-core == 0.3.6.*
+          amazonka-core == 1.0.0.*
         , base          >= 4.7     && < 5
+
+test-suite amazonka-cloudtrail-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.CloudTrail
+        , Test.AWS.Gen.CloudTrail
+        , Test.AWS.CloudTrail.Internal
+
+    build-depends:
+          amazonka-core == 1.0.0
+        , amazonka-test == 1.0.0
+        , amazonka-cloudtrail == 1.0.0
+        , base
+        , bytestring
+        , lens
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/gen/Network/AWS/CloudTrail.hs b/gen/Network/AWS/CloudTrail.hs
--- a/gen/Network/AWS/CloudTrail.hs
+++ b/gen/Network/AWS/CloudTrail.hs
@@ -1,38 +1,206 @@
+{-# 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.CloudTrail
--- 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.
-
--- | CloudTrail is a web service that records AWS API calls for your AWS account
--- and delivers log files to an Amazon S3 bucket. The recorded information
--- includes the identity of the user, the start time of the AWS API call, the
--- source IP address, the request parameters, and the response elements returned
--- by the service.
+-- AWS CloudTrail
+--
+-- This is the CloudTrail API Reference. It provides descriptions of
+-- actions, data types, common parameters, and common errors for
+-- CloudTrail.
+--
+-- CloudTrail is a web service that records AWS API calls for your AWS
+-- account and delivers log files to an Amazon S3 bucket. The recorded
+-- information includes the identity of the user, the start time of the AWS
+-- API call, the source IP address, the request parameters, and the
+-- response elements returned by the service.
+--
+-- As an alternative to using the API, you can use one of the AWS SDKs,
+-- which consist of libraries and sample code for various programming
+-- languages and platforms (Java, Ruby, .NET, iOS, Android, etc.). The SDKs
+-- provide a convenient way to create programmatic access to AWSCloudTrail.
+-- For example, the SDKs take care of cryptographically signing requests,
+-- managing errors, and retrying requests automatically. For information
+-- about the AWS SDKs, including how to download and install them, see the
+-- <http://aws.amazon.com/tools/ Tools for Amazon Web Services page>.
+--
+-- See the CloudTrail User Guide for information about the data that is
+-- included with each AWS API call listed in the log files.
+--
+-- /See:/ <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/Welcome.html AWS API Reference>
 module Network.AWS.CloudTrail
-    ( module Network.AWS.CloudTrail.CreateTrail
-    , module Network.AWS.CloudTrail.DeleteTrail
+    (
+    -- * Service
+      CloudTrail
+
+    -- * Errors
+    -- $errors
+
+    -- ** InvalidTimeRangeException
+    , _InvalidTimeRangeException
+
+    -- ** InsufficientS3BucketPolicyException
+    , _InsufficientS3BucketPolicyException
+
+    -- ** MaximumNumberOfTrailsExceededException
+    , _MaximumNumberOfTrailsExceededException
+
+    -- ** InsufficientSNSTopicPolicyException
+    , _InsufficientSNSTopicPolicyException
+
+    -- ** InvalidCloudWatchLogsRoleARNException
+    , _InvalidCloudWatchLogsRoleARNException
+
+    -- ** InvalidTrailNameException
+    , _InvalidTrailNameException
+
+    -- ** InvalidLookupAttributesException
+    , _InvalidLookupAttributesException
+
+    -- ** TrailNotFoundException
+    , _TrailNotFoundException
+
+    -- ** CloudWatchLogsDeliveryUnavailableException
+    , _CloudWatchLogsDeliveryUnavailableException
+
+    -- ** InvalidSNSTopicNameException
+    , _InvalidSNSTopicNameException
+
+    -- ** InvalidCloudWatchLogsLogGroupARNException
+    , _InvalidCloudWatchLogsLogGroupARNException
+
+    -- ** InvalidS3BucketNameException
+    , _InvalidS3BucketNameException
+
+    -- ** InvalidNextTokenException
+    , _InvalidNextTokenException
+
+    -- ** S3BucketDoesNotExistException
+    , _S3BucketDoesNotExistException
+
+    -- ** InvalidMaxResultsException
+    , _InvalidMaxResultsException
+
+    -- ** TrailAlreadyExistsException
+    , _TrailAlreadyExistsException
+
+    -- ** InvalidS3PrefixException
+    , _InvalidS3PrefixException
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** DescribeTrails
     , module Network.AWS.CloudTrail.DescribeTrails
-    , module Network.AWS.CloudTrail.GetTrailStatus
+
+    -- ** LookupEvents
     , module Network.AWS.CloudTrail.LookupEvents
-    , module Network.AWS.CloudTrail.StartLogging
+
+    -- ** StopLogging
     , module Network.AWS.CloudTrail.StopLogging
-    , module Network.AWS.CloudTrail.Types
+
+    -- ** DeleteTrail
+    , module Network.AWS.CloudTrail.DeleteTrail
+
+    -- ** UpdateTrail
     , module Network.AWS.CloudTrail.UpdateTrail
+
+    -- ** CreateTrail
+    , module Network.AWS.CloudTrail.CreateTrail
+
+    -- ** GetTrailStatus
+    , module Network.AWS.CloudTrail.GetTrailStatus
+
+    -- ** StartLogging
+    , module Network.AWS.CloudTrail.StartLogging
+
+    -- * Types
+
+    -- ** LookupAttributeKey
+    , LookupAttributeKey (..)
+
+    -- ** Event
+    , Event
+    , event
+    , eUsername
+    , eEventTime
+    , eResources
+    , eCloudTrailEvent
+    , eEventName
+    , eEventId
+
+    -- ** LookupAttribute
+    , LookupAttribute
+    , lookupAttribute
+    , laAttributeKey
+    , laAttributeValue
+
+    -- ** Resource
+    , Resource
+    , resource
+    , rResourceType
+    , rResourceName
+
+    -- ** Trail
+    , Trail
+    , trail
+    , tS3KeyPrefix
+    , tSNSTopicName
+    , tCloudWatchLogsLogGroupARN
+    , tName
+    , tIncludeGlobalServiceEvents
+    , tCloudWatchLogsRoleARN
+    , tS3BucketName
     ) where
 
-import Network.AWS.CloudTrail.CreateTrail
-import Network.AWS.CloudTrail.DeleteTrail
-import Network.AWS.CloudTrail.DescribeTrails
-import Network.AWS.CloudTrail.GetTrailStatus
-import Network.AWS.CloudTrail.LookupEvents
-import Network.AWS.CloudTrail.StartLogging
-import Network.AWS.CloudTrail.StopLogging
-import Network.AWS.CloudTrail.Types
-import Network.AWS.CloudTrail.UpdateTrail
+import           Network.AWS.CloudTrail.CreateTrail
+import           Network.AWS.CloudTrail.DeleteTrail
+import           Network.AWS.CloudTrail.DescribeTrails
+import           Network.AWS.CloudTrail.GetTrailStatus
+import           Network.AWS.CloudTrail.LookupEvents
+import           Network.AWS.CloudTrail.StartLogging
+import           Network.AWS.CloudTrail.StopLogging
+import           Network.AWS.CloudTrail.Types
+import           Network.AWS.CloudTrail.UpdateTrail
+import           Network.AWS.CloudTrail.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 'CloudTrail'.
+-}
+
+{- $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/CloudTrail/CreateTrail.hs b/gen/Network/AWS/CloudTrail/CreateTrail.hs
--- a/gen/Network/AWS/CloudTrail/CreateTrail.hs
+++ b/gen/Network/AWS/CloudTrail/CreateTrail.hs
@@ -1,260 +1,270 @@
-{-# 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.CloudTrail.CreateTrail
--- 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.
-
--- | From the command line, use 'create-subscription'.
+-- From the command line, use 'create-subscription'.
 --
--- Creates a trail that specifies the settings for delivery of log data to an
--- Amazon S3 bucket.
+-- Creates a trail that specifies the settings for delivery of log data to
+-- an Amazon S3 bucket.
 --
--- <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_CreateTrail.html>
+-- /See:/ <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_CreateTrail.html AWS API Reference> for CreateTrail.
 module Network.AWS.CloudTrail.CreateTrail
     (
-    -- * Request
-      CreateTrail
-    -- ** Request constructor
-    , createTrail
-    -- ** Request lenses
-    , ctCloudWatchLogsLogGroupArn
-    , ctCloudWatchLogsRoleArn
+    -- * Creating a Request
+      createTrail
+    , CreateTrail
+    -- * Request Lenses
+    , ctS3KeyPrefix
+    , ctSNSTopicName
+    , ctCloudWatchLogsLogGroupARN
     , ctIncludeGlobalServiceEvents
+    , ctCloudWatchLogsRoleARN
     , ctName
     , ctS3BucketName
-    , ctS3KeyPrefix
-    , ctSnsTopicName
 
-    -- * Response
-    , CreateTrailResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createTrailResponse
-    -- ** Response lenses
-    , ctrCloudWatchLogsLogGroupArn
-    , ctrCloudWatchLogsRoleArn
-    , ctrIncludeGlobalServiceEvents
-    , ctrName
-    , ctrS3BucketName
-    , ctrS3KeyPrefix
-    , ctrSnsTopicName
+    , CreateTrailResponse
+    -- * Response Lenses
+    , ctrsS3KeyPrefix
+    , ctrsSNSTopicName
+    , ctrsCloudWatchLogsLogGroupARN
+    , ctrsName
+    , ctrsIncludeGlobalServiceEvents
+    , ctrsCloudWatchLogsRoleARN
+    , ctrsS3BucketName
+    , ctrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudTrail.Types
-import qualified GHC.Exts
-
-data CreateTrail = CreateTrail
-    { _ctCloudWatchLogsLogGroupArn  :: Maybe Text
-    , _ctCloudWatchLogsRoleArn      :: Maybe Text
-    , _ctIncludeGlobalServiceEvents :: Maybe Bool
-    , _ctName                       :: Text
-    , _ctS3BucketName               :: Text
-    , _ctS3KeyPrefix                :: Maybe Text
-    , _ctSnsTopicName               :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.CloudTrail.Types
+import           Network.AWS.CloudTrail.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'CreateTrail' constructor.
+-- | Specifies the settings for each trail.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'createTrail' smart constructor.
+data CreateTrail = CreateTrail'
+    { _ctS3KeyPrefix                :: !(Maybe Text)
+    , _ctSNSTopicName               :: !(Maybe Text)
+    , _ctCloudWatchLogsLogGroupARN  :: !(Maybe Text)
+    , _ctIncludeGlobalServiceEvents :: !(Maybe Bool)
+    , _ctCloudWatchLogsRoleARN      :: !(Maybe Text)
+    , _ctName                       :: !Text
+    , _ctS3BucketName               :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateTrail' with the minimum fields required to make a request.
 --
--- * 'ctCloudWatchLogsLogGroupArn' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ctCloudWatchLogsRoleArn' @::@ 'Maybe' 'Text'
+-- * 'ctS3KeyPrefix'
 --
--- * 'ctIncludeGlobalServiceEvents' @::@ 'Maybe' 'Bool'
+-- * 'ctSNSTopicName'
 --
--- * 'ctName' @::@ 'Text'
+-- * 'ctCloudWatchLogsLogGroupARN'
 --
--- * 'ctS3BucketName' @::@ 'Text'
+-- * 'ctIncludeGlobalServiceEvents'
 --
--- * 'ctS3KeyPrefix' @::@ 'Maybe' 'Text'
+-- * 'ctCloudWatchLogsRoleARN'
 --
--- * 'ctSnsTopicName' @::@ 'Maybe' 'Text'
+-- * 'ctName'
 --
-createTrail :: Text -- ^ 'ctName'
-            -> Text -- ^ 'ctS3BucketName'
-            -> CreateTrail
-createTrail p1 p2 = CreateTrail
-    { _ctName                       = p1
-    , _ctS3BucketName               = p2
-    , _ctS3KeyPrefix                = Nothing
-    , _ctSnsTopicName               = Nothing
+-- * 'ctS3BucketName'
+createTrail
+    :: Text -- ^ 'ctName'
+    -> Text -- ^ 'ctS3BucketName'
+    -> CreateTrail
+createTrail pName_ pS3BucketName_ =
+    CreateTrail'
+    { _ctS3KeyPrefix = Nothing
+    , _ctSNSTopicName = Nothing
+    , _ctCloudWatchLogsLogGroupARN = Nothing
     , _ctIncludeGlobalServiceEvents = Nothing
-    , _ctCloudWatchLogsLogGroupArn  = Nothing
-    , _ctCloudWatchLogsRoleArn      = Nothing
+    , _ctCloudWatchLogsRoleARN = Nothing
+    , _ctName = pName_
+    , _ctS3BucketName = pS3BucketName_
     }
 
--- | Specifies a log group name using an Amazon Resource Name (ARN), a unique
--- identifier that represents the log group to which CloudTrail logs will be
--- delivered. Not required unless you specify CloudWatchLogsRoleArn.
-ctCloudWatchLogsLogGroupArn :: Lens' CreateTrail (Maybe Text)
-ctCloudWatchLogsLogGroupArn =
-    lens _ctCloudWatchLogsLogGroupArn
-        (\s a -> s { _ctCloudWatchLogsLogGroupArn = a })
+-- | Specifies the Amazon S3 key prefix that precedes the name of the bucket
+-- you have designated for log file delivery.
+ctS3KeyPrefix :: Lens' CreateTrail (Maybe Text)
+ctS3KeyPrefix = lens _ctS3KeyPrefix (\ s a -> s{_ctS3KeyPrefix = a});
 
--- | Specifies the role for the CloudWatch Logs endpoint to assume to write to a
--- user’s log group.
-ctCloudWatchLogsRoleArn :: Lens' CreateTrail (Maybe Text)
-ctCloudWatchLogsRoleArn =
-    lens _ctCloudWatchLogsRoleArn (\s a -> s { _ctCloudWatchLogsRoleArn = a })
+-- | Specifies the name of the Amazon SNS topic defined for notification of
+-- log file delivery.
+ctSNSTopicName :: Lens' CreateTrail (Maybe Text)
+ctSNSTopicName = lens _ctSNSTopicName (\ s a -> s{_ctSNSTopicName = a});
 
--- | Specifies whether the trail is publishing events from global services such as
--- IAM to the log files.
+-- | Specifies a log group name using an Amazon Resource Name (ARN), a unique
+-- identifier that represents the log group to which CloudTrail logs will
+-- be delivered. Not required unless you specify CloudWatchLogsRoleArn.
+ctCloudWatchLogsLogGroupARN :: Lens' CreateTrail (Maybe Text)
+ctCloudWatchLogsLogGroupARN = lens _ctCloudWatchLogsLogGroupARN (\ s a -> s{_ctCloudWatchLogsLogGroupARN = a});
+
+-- | Specifies whether the trail is publishing events from global services
+-- such as IAM to the log files.
 ctIncludeGlobalServiceEvents :: Lens' CreateTrail (Maybe Bool)
-ctIncludeGlobalServiceEvents =
-    lens _ctIncludeGlobalServiceEvents
-        (\s a -> s { _ctIncludeGlobalServiceEvents = a })
+ctIncludeGlobalServiceEvents = lens _ctIncludeGlobalServiceEvents (\ s a -> s{_ctIncludeGlobalServiceEvents = a});
 
+-- | Specifies the role for the CloudWatch Logs endpoint to assume to write
+-- to a user’s log group.
+ctCloudWatchLogsRoleARN :: Lens' CreateTrail (Maybe Text)
+ctCloudWatchLogsRoleARN = lens _ctCloudWatchLogsRoleARN (\ s a -> s{_ctCloudWatchLogsRoleARN = a});
+
 -- | Specifies the name of the trail.
 ctName :: Lens' CreateTrail Text
-ctName = lens _ctName (\s a -> s { _ctName = a })
+ctName = lens _ctName (\ s a -> s{_ctName = a});
 
 -- | Specifies the name of the Amazon S3 bucket designated for publishing log
 -- files.
 ctS3BucketName :: Lens' CreateTrail Text
-ctS3BucketName = lens _ctS3BucketName (\s a -> s { _ctS3BucketName = a })
+ctS3BucketName = lens _ctS3BucketName (\ s a -> s{_ctS3BucketName = a});
 
--- | Specifies the Amazon S3 key prefix that precedes the name of the bucket you
--- have designated for log file delivery.
-ctS3KeyPrefix :: Lens' CreateTrail (Maybe Text)
-ctS3KeyPrefix = lens _ctS3KeyPrefix (\s a -> s { _ctS3KeyPrefix = a })
+instance AWSRequest CreateTrail where
+        type Sv CreateTrail = CloudTrail
+        type Rs CreateTrail = CreateTrailResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateTrailResponse' <$>
+                   (x .?> "S3KeyPrefix") <*> (x .?> "SnsTopicName") <*>
+                     (x .?> "CloudWatchLogsLogGroupArn")
+                     <*> (x .?> "Name")
+                     <*> (x .?> "IncludeGlobalServiceEvents")
+                     <*> (x .?> "CloudWatchLogsRoleArn")
+                     <*> (x .?> "S3BucketName")
+                     <*> (pure (fromEnum s)))
 
--- | Specifies the name of the Amazon SNS topic defined for notification of log
--- file delivery.
-ctSnsTopicName :: Lens' CreateTrail (Maybe Text)
-ctSnsTopicName = lens _ctSnsTopicName (\s a -> s { _ctSnsTopicName = a })
+instance ToHeaders CreateTrail where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("com.amazonaws.cloudtrail.v20131101.CloudTrail_20131101.CreateTrail"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
-data CreateTrailResponse = CreateTrailResponse
-    { _ctrCloudWatchLogsLogGroupArn  :: Maybe Text
-    , _ctrCloudWatchLogsRoleArn      :: Maybe Text
-    , _ctrIncludeGlobalServiceEvents :: Maybe Bool
-    , _ctrName                       :: Maybe Text
-    , _ctrS3BucketName               :: Maybe Text
-    , _ctrS3KeyPrefix                :: Maybe Text
-    , _ctrSnsTopicName               :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+instance ToJSON CreateTrail where
+        toJSON CreateTrail'{..}
+          = object
+              ["S3KeyPrefix" .= _ctS3KeyPrefix,
+               "SnsTopicName" .= _ctSNSTopicName,
+               "CloudWatchLogsLogGroupArn" .=
+                 _ctCloudWatchLogsLogGroupARN,
+               "IncludeGlobalServiceEvents" .=
+                 _ctIncludeGlobalServiceEvents,
+               "CloudWatchLogsRoleArn" .= _ctCloudWatchLogsRoleARN,
+               "Name" .= _ctName, "S3BucketName" .= _ctS3BucketName]
 
--- | 'CreateTrailResponse' constructor.
+instance ToPath CreateTrail where
+        toPath = const "/"
+
+instance ToQuery CreateTrail where
+        toQuery = const mempty
+
+-- | Returns the objects or data listed below if successful. Otherwise,
+-- returns an error.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'createTrailResponse' smart constructor.
+data CreateTrailResponse = CreateTrailResponse'
+    { _ctrsS3KeyPrefix                :: !(Maybe Text)
+    , _ctrsSNSTopicName               :: !(Maybe Text)
+    , _ctrsCloudWatchLogsLogGroupARN  :: !(Maybe Text)
+    , _ctrsName                       :: !(Maybe Text)
+    , _ctrsIncludeGlobalServiceEvents :: !(Maybe Bool)
+    , _ctrsCloudWatchLogsRoleARN      :: !(Maybe Text)
+    , _ctrsS3BucketName               :: !(Maybe Text)
+    , _ctrsStatus                     :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateTrailResponse' with the minimum fields required to make a request.
 --
--- * 'ctrCloudWatchLogsLogGroupArn' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ctrCloudWatchLogsRoleArn' @::@ 'Maybe' 'Text'
+-- * 'ctrsS3KeyPrefix'
 --
--- * 'ctrIncludeGlobalServiceEvents' @::@ 'Maybe' 'Bool'
+-- * 'ctrsSNSTopicName'
 --
--- * 'ctrName' @::@ 'Maybe' 'Text'
+-- * 'ctrsCloudWatchLogsLogGroupARN'
 --
--- * 'ctrS3BucketName' @::@ 'Maybe' 'Text'
+-- * 'ctrsName'
 --
--- * 'ctrS3KeyPrefix' @::@ 'Maybe' 'Text'
+-- * 'ctrsIncludeGlobalServiceEvents'
 --
--- * 'ctrSnsTopicName' @::@ 'Maybe' 'Text'
+-- * 'ctrsCloudWatchLogsRoleARN'
 --
-createTrailResponse :: CreateTrailResponse
-createTrailResponse = CreateTrailResponse
-    { _ctrName                       = Nothing
-    , _ctrS3BucketName               = Nothing
-    , _ctrS3KeyPrefix                = Nothing
-    , _ctrSnsTopicName               = Nothing
-    , _ctrIncludeGlobalServiceEvents = Nothing
-    , _ctrCloudWatchLogsLogGroupArn  = Nothing
-    , _ctrCloudWatchLogsRoleArn      = Nothing
+-- * 'ctrsS3BucketName'
+--
+-- * 'ctrsStatus'
+createTrailResponse
+    :: Int -- ^ 'ctrsStatus'
+    -> CreateTrailResponse
+createTrailResponse pStatus_ =
+    CreateTrailResponse'
+    { _ctrsS3KeyPrefix = Nothing
+    , _ctrsSNSTopicName = Nothing
+    , _ctrsCloudWatchLogsLogGroupARN = Nothing
+    , _ctrsName = Nothing
+    , _ctrsIncludeGlobalServiceEvents = Nothing
+    , _ctrsCloudWatchLogsRoleARN = Nothing
+    , _ctrsS3BucketName = Nothing
+    , _ctrsStatus = pStatus_
     }
 
--- | Specifies the Amazon Resource Name (ARN) of the log group to which CloudTrail
--- logs will be delivered.
-ctrCloudWatchLogsLogGroupArn :: Lens' CreateTrailResponse (Maybe Text)
-ctrCloudWatchLogsLogGroupArn =
-    lens _ctrCloudWatchLogsLogGroupArn
-        (\s a -> s { _ctrCloudWatchLogsLogGroupArn = a })
+-- | Specifies the Amazon S3 key prefix that precedes the name of the bucket
+-- you have designated for log file delivery.
+ctrsS3KeyPrefix :: Lens' CreateTrailResponse (Maybe Text)
+ctrsS3KeyPrefix = lens _ctrsS3KeyPrefix (\ s a -> s{_ctrsS3KeyPrefix = a});
 
--- | Specifies the role for the CloudWatch Logs endpoint to assume to write to a
--- user’s log group.
-ctrCloudWatchLogsRoleArn :: Lens' CreateTrailResponse (Maybe Text)
-ctrCloudWatchLogsRoleArn =
-    lens _ctrCloudWatchLogsRoleArn
-        (\s a -> s { _ctrCloudWatchLogsRoleArn = a })
+-- | Specifies the name of the Amazon SNS topic defined for notification of
+-- log file delivery.
+ctrsSNSTopicName :: Lens' CreateTrailResponse (Maybe Text)
+ctrsSNSTopicName = lens _ctrsSNSTopicName (\ s a -> s{_ctrsSNSTopicName = a});
 
--- | Specifies whether the trail is publishing events from global services such as
--- IAM to the log files.
-ctrIncludeGlobalServiceEvents :: Lens' CreateTrailResponse (Maybe Bool)
-ctrIncludeGlobalServiceEvents =
-    lens _ctrIncludeGlobalServiceEvents
-        (\s a -> s { _ctrIncludeGlobalServiceEvents = a })
+-- | Specifies the Amazon Resource Name (ARN) of the log group to which
+-- CloudTrail logs will be delivered.
+ctrsCloudWatchLogsLogGroupARN :: Lens' CreateTrailResponse (Maybe Text)
+ctrsCloudWatchLogsLogGroupARN = lens _ctrsCloudWatchLogsLogGroupARN (\ s a -> s{_ctrsCloudWatchLogsLogGroupARN = a});
 
 -- | Specifies the name of the trail.
-ctrName :: Lens' CreateTrailResponse (Maybe Text)
-ctrName = lens _ctrName (\s a -> s { _ctrName = a })
-
--- | Specifies the name of the Amazon S3 bucket designated for publishing log
--- files.
-ctrS3BucketName :: Lens' CreateTrailResponse (Maybe Text)
-ctrS3BucketName = lens _ctrS3BucketName (\s a -> s { _ctrS3BucketName = a })
-
--- | Specifies the Amazon S3 key prefix that precedes the name of the bucket you
--- have designated for log file delivery.
-ctrS3KeyPrefix :: Lens' CreateTrailResponse (Maybe Text)
-ctrS3KeyPrefix = lens _ctrS3KeyPrefix (\s a -> s { _ctrS3KeyPrefix = a })
-
--- | Specifies the name of the Amazon SNS topic defined for notification of log
--- file delivery.
-ctrSnsTopicName :: Lens' CreateTrailResponse (Maybe Text)
-ctrSnsTopicName = lens _ctrSnsTopicName (\s a -> s { _ctrSnsTopicName = a })
-
-instance ToPath CreateTrail where
-    toPath = const "/"
-
-instance ToQuery CreateTrail where
-    toQuery = const mempty
-
-instance ToHeaders CreateTrail
+ctrsName :: Lens' CreateTrailResponse (Maybe Text)
+ctrsName = lens _ctrsName (\ s a -> s{_ctrsName = a});
 
-instance ToJSON CreateTrail where
-    toJSON CreateTrail{..} = object
-        [ "Name"                       .= _ctName
-        , "S3BucketName"               .= _ctS3BucketName
-        , "S3KeyPrefix"                .= _ctS3KeyPrefix
-        , "SnsTopicName"               .= _ctSnsTopicName
-        , "IncludeGlobalServiceEvents" .= _ctIncludeGlobalServiceEvents
-        , "CloudWatchLogsLogGroupArn"  .= _ctCloudWatchLogsLogGroupArn
-        , "CloudWatchLogsRoleArn"      .= _ctCloudWatchLogsRoleArn
-        ]
+-- | Specifies whether the trail is publishing events from global services
+-- such as IAM to the log files.
+ctrsIncludeGlobalServiceEvents :: Lens' CreateTrailResponse (Maybe Bool)
+ctrsIncludeGlobalServiceEvents = lens _ctrsIncludeGlobalServiceEvents (\ s a -> s{_ctrsIncludeGlobalServiceEvents = a});
 
-instance AWSRequest CreateTrail where
-    type Sv CreateTrail = CloudTrail
-    type Rs CreateTrail = CreateTrailResponse
+-- | Specifies the role for the CloudWatch Logs endpoint to assume to write
+-- to a user’s log group.
+ctrsCloudWatchLogsRoleARN :: Lens' CreateTrailResponse (Maybe Text)
+ctrsCloudWatchLogsRoleARN = lens _ctrsCloudWatchLogsRoleARN (\ s a -> s{_ctrsCloudWatchLogsRoleARN = a});
 
-    request  = post "CreateTrail"
-    response = jsonResponse
+-- | Specifies the name of the Amazon S3 bucket designated for publishing log
+-- files.
+ctrsS3BucketName :: Lens' CreateTrailResponse (Maybe Text)
+ctrsS3BucketName = lens _ctrsS3BucketName (\ s a -> s{_ctrsS3BucketName = a});
 
-instance FromJSON CreateTrailResponse where
-    parseJSON = withObject "CreateTrailResponse" $ \o -> CreateTrailResponse
-        <$> o .:? "CloudWatchLogsLogGroupArn"
-        <*> o .:? "CloudWatchLogsRoleArn"
-        <*> o .:? "IncludeGlobalServiceEvents"
-        <*> o .:? "Name"
-        <*> o .:? "S3BucketName"
-        <*> o .:? "S3KeyPrefix"
-        <*> o .:? "SnsTopicName"
+-- | The response status code.
+ctrsStatus :: Lens' CreateTrailResponse Int
+ctrsStatus = lens _ctrsStatus (\ s a -> s{_ctrsStatus = a});
diff --git a/gen/Network/AWS/CloudTrail/DeleteTrail.hs b/gen/Network/AWS/CloudTrail/DeleteTrail.hs
--- a/gen/Network/AWS/CloudTrail/DeleteTrail.hs
+++ b/gen/Network/AWS/CloudTrail/DeleteTrail.hs
@@ -1,94 +1,120 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.CloudTrail.DeleteTrail
--- 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 trail.
+-- Deletes a trail.
 --
--- <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_DeleteTrail.html>
+-- /See:/ <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_DeleteTrail.html AWS API Reference> for DeleteTrail.
 module Network.AWS.CloudTrail.DeleteTrail
     (
-    -- * Request
-      DeleteTrail
-    -- ** Request constructor
-    , deleteTrail
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteTrail
+    , DeleteTrail
+    -- * Request Lenses
     , dtName
 
-    -- * Response
-    , DeleteTrailResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteTrailResponse
+    , DeleteTrailResponse
+    -- * Response Lenses
+    , drsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudTrail.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudTrail.Types
+import           Network.AWS.CloudTrail.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype DeleteTrail = DeleteTrail
+-- | The request that specifies the name of a trail to delete.
+--
+-- /See:/ 'deleteTrail' smart constructor.
+newtype DeleteTrail = DeleteTrail'
     { _dtName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteTrail' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteTrail' with the minimum fields required to make a request.
 --
--- * 'dtName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-deleteTrail :: Text -- ^ 'dtName'
-            -> DeleteTrail
-deleteTrail p1 = DeleteTrail
-    { _dtName = p1
+-- * 'dtName'
+deleteTrail
+    :: Text -- ^ 'dtName'
+    -> DeleteTrail
+deleteTrail pName_ =
+    DeleteTrail'
+    { _dtName = pName_
     }
 
 -- | The name of a trail to be deleted.
 dtName :: Lens' DeleteTrail Text
-dtName = lens _dtName (\s a -> s { _dtName = a })
+dtName = lens _dtName (\ s a -> s{_dtName = a});
 
-data DeleteTrailResponse = DeleteTrailResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteTrail where
+        type Sv DeleteTrail = CloudTrail
+        type Rs DeleteTrail = DeleteTrailResponse
+        request = postJSON
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteTrailResponse' <$> (pure (fromEnum s)))
 
--- | 'DeleteTrailResponse' constructor.
-deleteTrailResponse :: DeleteTrailResponse
-deleteTrailResponse = DeleteTrailResponse
+instance ToHeaders DeleteTrail where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("com.amazonaws.cloudtrail.v20131101.CloudTrail_20131101.DeleteTrail"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON DeleteTrail where
+        toJSON DeleteTrail'{..} = object ["Name" .= _dtName]
+
 instance ToPath DeleteTrail where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DeleteTrail where
-    toQuery = const mempty
-
-instance ToHeaders DeleteTrail
+        toQuery = const mempty
 
-instance ToJSON DeleteTrail where
-    toJSON DeleteTrail{..} = object
-        [ "Name" .= _dtName
-        ]
+-- | Returns the objects or data listed below if successful. Otherwise,
+-- returns an error.
+--
+-- /See:/ 'deleteTrailResponse' smart constructor.
+newtype DeleteTrailResponse = DeleteTrailResponse'
+    { _drsStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest DeleteTrail where
-    type Sv DeleteTrail = CloudTrail
-    type Rs DeleteTrail = DeleteTrailResponse
+-- | Creates a value of 'DeleteTrailResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drsStatus'
+deleteTrailResponse
+    :: Int -- ^ 'drsStatus'
+    -> DeleteTrailResponse
+deleteTrailResponse pStatus_ =
+    DeleteTrailResponse'
+    { _drsStatus = pStatus_
+    }
 
-    request  = post "DeleteTrail"
-    response = nullResponse DeleteTrailResponse
+-- | The response status code.
+drsStatus :: Lens' DeleteTrailResponse Int
+drsStatus = lens _drsStatus (\ s a -> s{_drsStatus = a});
diff --git a/gen/Network/AWS/CloudTrail/DescribeTrails.hs b/gen/Network/AWS/CloudTrail/DescribeTrails.hs
--- a/gen/Network/AWS/CloudTrail/DescribeTrails.hs
+++ b/gen/Network/AWS/CloudTrail/DescribeTrails.hs
@@ -1,124 +1,132 @@
-{-# 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.CloudTrail.DescribeTrails
--- 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 settings for the trail associated with the current region for your
--- account.
+-- Retrieves settings for the trail associated with the current region for
+-- your account.
 --
--- <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_DescribeTrails.html>
+-- /See:/ <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_DescribeTrails.html AWS API Reference> for DescribeTrails.
 module Network.AWS.CloudTrail.DescribeTrails
     (
-    -- * Request
-      DescribeTrails
-    -- ** Request constructor
-    , describeTrails
-    -- ** Request lenses
+    -- * Creating a Request
+      describeTrails
+    , DescribeTrails
+    -- * Request Lenses
     , dtTrailNameList
 
-    -- * Response
-    , DescribeTrailsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , describeTrailsResponse
-    -- ** Response lenses
-    , dtrTrailList
+    , DescribeTrailsResponse
+    -- * Response Lenses
+    , dtrsTrailList
+    , dtrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudTrail.Types
-import qualified GHC.Exts
-
-newtype DescribeTrails = DescribeTrails
-    { _dtTrailNameList :: List "trailNameList" Text
-    } deriving (Eq, Ord, Read, Show, Monoid, Semigroup)
-
-instance GHC.Exts.IsList DescribeTrails where
-    type Item DescribeTrails = Text
-
-    fromList = DescribeTrails . GHC.Exts.fromList
-    toList   = GHC.Exts.toList . _dtTrailNameList
+import           Network.AWS.CloudTrail.Types
+import           Network.AWS.CloudTrail.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'DescribeTrails' constructor.
+-- | Returns information about the trail.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'describeTrails' smart constructor.
+newtype DescribeTrails = DescribeTrails'
+    { _dtTrailNameList :: Maybe [Text]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeTrails' with the minimum fields required to make a request.
 --
--- * 'dtTrailNameList' @::@ ['Text']
+-- Use one of the following lenses to modify other fields as desired:
 --
-describeTrails :: DescribeTrails
-describeTrails = DescribeTrails
-    { _dtTrailNameList = mempty
+-- * 'dtTrailNameList'
+describeTrails
+    :: DescribeTrails
+describeTrails =
+    DescribeTrails'
+    { _dtTrailNameList = Nothing
     }
 
 -- | The trail returned.
 dtTrailNameList :: Lens' DescribeTrails [Text]
-dtTrailNameList = lens _dtTrailNameList (\s a -> s { _dtTrailNameList = a }) . _List
-
-newtype DescribeTrailsResponse = DescribeTrailsResponse
-    { _dtrTrailList :: List "trailList" Trail
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
-
-instance GHC.Exts.IsList DescribeTrailsResponse where
-    type Item DescribeTrailsResponse = Trail
+dtTrailNameList = lens _dtTrailNameList (\ s a -> s{_dtTrailNameList = a}) . _Default . _Coerce;
 
-    fromList = DescribeTrailsResponse . GHC.Exts.fromList
-    toList   = GHC.Exts.toList . _dtrTrailList
+instance AWSRequest DescribeTrails where
+        type Sv DescribeTrails = CloudTrail
+        type Rs DescribeTrails = DescribeTrailsResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeTrailsResponse' <$>
+                   (x .?> "trailList" .!@ mempty) <*>
+                     (pure (fromEnum s)))
 
--- | 'DescribeTrailsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dtrTrailList' @::@ ['Trail']
---
-describeTrailsResponse :: DescribeTrailsResponse
-describeTrailsResponse = DescribeTrailsResponse
-    { _dtrTrailList = mempty
-    }
+instance ToHeaders DescribeTrails where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("com.amazonaws.cloudtrail.v20131101.CloudTrail_20131101.DescribeTrails"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | The list of trails.
-dtrTrailList :: Lens' DescribeTrailsResponse [Trail]
-dtrTrailList = lens _dtrTrailList (\s a -> s { _dtrTrailList = a }) . _List
+instance ToJSON DescribeTrails where
+        toJSON DescribeTrails'{..}
+          = object ["trailNameList" .= _dtTrailNameList]
 
 instance ToPath DescribeTrails where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DescribeTrails where
-    toQuery = const mempty
-
-instance ToHeaders DescribeTrails
+        toQuery = const mempty
 
-instance ToJSON DescribeTrails where
-    toJSON DescribeTrails{..} = object
-        [ "trailNameList" .= _dtTrailNameList
-        ]
+-- | Returns the objects or data listed below if successful. Otherwise,
+-- returns an error.
+--
+-- /See:/ 'describeTrailsResponse' smart constructor.
+data DescribeTrailsResponse = DescribeTrailsResponse'
+    { _dtrsTrailList :: !(Maybe [Trail])
+    , _dtrsStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest DescribeTrails where
-    type Sv DescribeTrails = CloudTrail
-    type Rs DescribeTrails = DescribeTrailsResponse
+-- | Creates a value of 'DescribeTrailsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtrsTrailList'
+--
+-- * 'dtrsStatus'
+describeTrailsResponse
+    :: Int -- ^ 'dtrsStatus'
+    -> DescribeTrailsResponse
+describeTrailsResponse pStatus_ =
+    DescribeTrailsResponse'
+    { _dtrsTrailList = Nothing
+    , _dtrsStatus = pStatus_
+    }
 
-    request  = post "DescribeTrails"
-    response = jsonResponse
+-- | The list of trails.
+dtrsTrailList :: Lens' DescribeTrailsResponse [Trail]
+dtrsTrailList = lens _dtrsTrailList (\ s a -> s{_dtrsTrailList = a}) . _Default . _Coerce;
 
-instance FromJSON DescribeTrailsResponse where
-    parseJSON = withObject "DescribeTrailsResponse" $ \o -> DescribeTrailsResponse
-        <$> o .:? "trailList" .!= mempty
+-- | The response status code.
+dtrsStatus :: Lens' DescribeTrailsResponse Int
+dtrsStatus = lens _dtrsStatus (\ s a -> s{_dtrsStatus = a});
diff --git a/gen/Network/AWS/CloudTrail/GetTrailStatus.hs b/gen/Network/AWS/CloudTrail/GetTrailStatus.hs
--- a/gen/Network/AWS/CloudTrail/GetTrailStatus.hs
+++ b/gen/Network/AWS/CloudTrail/GetTrailStatus.hs
@@ -1,220 +1,228 @@
-{-# 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.CloudTrail.GetTrailStatus
--- 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 a JSON-formatted list of information about the specified trail.
+-- Returns a JSON-formatted list of information about the specified trail.
 -- Fields include information on delivery errors, Amazon SNS and Amazon S3
 -- errors, and start and stop logging times for each trail.
 --
--- <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_GetTrailStatus.html>
+-- /See:/ <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_GetTrailStatus.html AWS API Reference> for GetTrailStatus.
 module Network.AWS.CloudTrail.GetTrailStatus
     (
-    -- * Request
-      GetTrailStatus
-    -- ** Request constructor
-    , getTrailStatus
-    -- ** Request lenses
+    -- * Creating a Request
+      getTrailStatus
+    , GetTrailStatus
+    -- * Request Lenses
     , gtsName
 
-    -- * Response
-    , GetTrailStatusResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getTrailStatusResponse
-    -- ** Response lenses
-    , gtsrIsLogging
-    , gtsrLatestCloudWatchLogsDeliveryError
-    , gtsrLatestCloudWatchLogsDeliveryTime
-    , gtsrLatestDeliveryError
-    , gtsrLatestDeliveryTime
-    , gtsrLatestNotificationError
-    , gtsrLatestNotificationTime
-    , gtsrStartLoggingTime
-    , gtsrStopLoggingTime
+    , GetTrailStatusResponse
+    -- * Response Lenses
+    , gtsrsLatestDeliveryError
+    , gtsrsStartLoggingTime
+    , gtsrsLatestNotificationError
+    , gtsrsIsLogging
+    , gtsrsLatestDeliveryTime
+    , gtsrsLatestCloudWatchLogsDeliveryTime
+    , gtsrsLatestCloudWatchLogsDeliveryError
+    , gtsrsLatestNotificationTime
+    , gtsrsStopLoggingTime
+    , gtsrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudTrail.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudTrail.Types
+import           Network.AWS.CloudTrail.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype GetTrailStatus = GetTrailStatus
+-- | The name of a trail about which you want the current status.
+--
+-- /See:/ 'getTrailStatus' smart constructor.
+newtype GetTrailStatus = GetTrailStatus'
     { _gtsName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetTrailStatus' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetTrailStatus' with the minimum fields required to make a request.
 --
--- * 'gtsName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getTrailStatus :: Text -- ^ 'gtsName'
-               -> GetTrailStatus
-getTrailStatus p1 = GetTrailStatus
-    { _gtsName = p1
+-- * 'gtsName'
+getTrailStatus
+    :: Text -- ^ 'gtsName'
+    -> GetTrailStatus
+getTrailStatus pName_ =
+    GetTrailStatus'
+    { _gtsName = pName_
     }
 
 -- | The name of the trail for which you are requesting the current status.
 gtsName :: Lens' GetTrailStatus Text
-gtsName = lens _gtsName (\s a -> s { _gtsName = a })
+gtsName = lens _gtsName (\ s a -> s{_gtsName = a});
 
-data GetTrailStatusResponse = GetTrailStatusResponse
-    { _gtsrIsLogging                         :: Maybe Bool
-    , _gtsrLatestCloudWatchLogsDeliveryError :: Maybe Text
-    , _gtsrLatestCloudWatchLogsDeliveryTime  :: Maybe POSIX
-    , _gtsrLatestDeliveryError               :: Maybe Text
-    , _gtsrLatestDeliveryTime                :: Maybe POSIX
-    , _gtsrLatestNotificationError           :: Maybe Text
-    , _gtsrLatestNotificationTime            :: Maybe POSIX
-    , _gtsrStartLoggingTime                  :: Maybe POSIX
-    , _gtsrStopLoggingTime                   :: Maybe POSIX
-    } deriving (Eq, Ord, Read, Show)
+instance AWSRequest GetTrailStatus where
+        type Sv GetTrailStatus = CloudTrail
+        type Rs GetTrailStatus = GetTrailStatusResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetTrailStatusResponse' <$>
+                   (x .?> "LatestDeliveryError") <*>
+                     (x .?> "StartLoggingTime")
+                     <*> (x .?> "LatestNotificationError")
+                     <*> (x .?> "IsLogging")
+                     <*> (x .?> "LatestDeliveryTime")
+                     <*> (x .?> "LatestCloudWatchLogsDeliveryTime")
+                     <*> (x .?> "LatestCloudWatchLogsDeliveryError")
+                     <*> (x .?> "LatestNotificationTime")
+                     <*> (x .?> "StopLoggingTime")
+                     <*> (pure (fromEnum s)))
 
--- | 'GetTrailStatusResponse' constructor.
+instance ToHeaders GetTrailStatus where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("com.amazonaws.cloudtrail.v20131101.CloudTrail_20131101.GetTrailStatus"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetTrailStatus where
+        toJSON GetTrailStatus'{..}
+          = object ["Name" .= _gtsName]
+
+instance ToPath GetTrailStatus where
+        toPath = const "/"
+
+instance ToQuery GetTrailStatus where
+        toQuery = const mempty
+
+-- | Returns the objects or data listed below if successful. Otherwise,
+-- returns an error.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'getTrailStatusResponse' smart constructor.
+data GetTrailStatusResponse = GetTrailStatusResponse'
+    { _gtsrsLatestDeliveryError               :: !(Maybe Text)
+    , _gtsrsStartLoggingTime                  :: !(Maybe POSIX)
+    , _gtsrsLatestNotificationError           :: !(Maybe Text)
+    , _gtsrsIsLogging                         :: !(Maybe Bool)
+    , _gtsrsLatestDeliveryTime                :: !(Maybe POSIX)
+    , _gtsrsLatestCloudWatchLogsDeliveryTime  :: !(Maybe POSIX)
+    , _gtsrsLatestCloudWatchLogsDeliveryError :: !(Maybe Text)
+    , _gtsrsLatestNotificationTime            :: !(Maybe POSIX)
+    , _gtsrsStopLoggingTime                   :: !(Maybe POSIX)
+    , _gtsrsStatus                            :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetTrailStatusResponse' with the minimum fields required to make a request.
 --
--- * 'gtsrIsLogging' @::@ 'Maybe' 'Bool'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gtsrLatestCloudWatchLogsDeliveryError' @::@ 'Maybe' 'Text'
+-- * 'gtsrsLatestDeliveryError'
 --
--- * 'gtsrLatestCloudWatchLogsDeliveryTime' @::@ 'Maybe' 'UTCTime'
+-- * 'gtsrsStartLoggingTime'
 --
--- * 'gtsrLatestDeliveryError' @::@ 'Maybe' 'Text'
+-- * 'gtsrsLatestNotificationError'
 --
--- * 'gtsrLatestDeliveryTime' @::@ 'Maybe' 'UTCTime'
+-- * 'gtsrsIsLogging'
 --
--- * 'gtsrLatestNotificationError' @::@ 'Maybe' 'Text'
+-- * 'gtsrsLatestDeliveryTime'
 --
--- * 'gtsrLatestNotificationTime' @::@ 'Maybe' 'UTCTime'
+-- * 'gtsrsLatestCloudWatchLogsDeliveryTime'
 --
--- * 'gtsrStartLoggingTime' @::@ 'Maybe' 'UTCTime'
+-- * 'gtsrsLatestCloudWatchLogsDeliveryError'
 --
--- * 'gtsrStopLoggingTime' @::@ 'Maybe' 'UTCTime'
+-- * 'gtsrsLatestNotificationTime'
 --
-getTrailStatusResponse :: GetTrailStatusResponse
-getTrailStatusResponse = GetTrailStatusResponse
-    { _gtsrIsLogging                         = Nothing
-    , _gtsrLatestDeliveryError               = Nothing
-    , _gtsrLatestNotificationError           = Nothing
-    , _gtsrLatestDeliveryTime                = Nothing
-    , _gtsrLatestNotificationTime            = Nothing
-    , _gtsrStartLoggingTime                  = Nothing
-    , _gtsrStopLoggingTime                   = Nothing
-    , _gtsrLatestCloudWatchLogsDeliveryError = Nothing
-    , _gtsrLatestCloudWatchLogsDeliveryTime  = Nothing
+-- * 'gtsrsStopLoggingTime'
+--
+-- * 'gtsrsStatus'
+getTrailStatusResponse
+    :: Int -- ^ 'gtsrsStatus'
+    -> GetTrailStatusResponse
+getTrailStatusResponse pStatus_ =
+    GetTrailStatusResponse'
+    { _gtsrsLatestDeliveryError = Nothing
+    , _gtsrsStartLoggingTime = Nothing
+    , _gtsrsLatestNotificationError = Nothing
+    , _gtsrsIsLogging = Nothing
+    , _gtsrsLatestDeliveryTime = Nothing
+    , _gtsrsLatestCloudWatchLogsDeliveryTime = Nothing
+    , _gtsrsLatestCloudWatchLogsDeliveryError = Nothing
+    , _gtsrsLatestNotificationTime = Nothing
+    , _gtsrsStopLoggingTime = Nothing
+    , _gtsrsStatus = pStatus_
     }
 
--- | Whether the CloudTrail is currently logging AWS API calls.
-gtsrIsLogging :: Lens' GetTrailStatusResponse (Maybe Bool)
-gtsrIsLogging = lens _gtsrIsLogging (\s a -> s { _gtsrIsLogging = a })
-
--- | Displays any CloudWatch Logs error that CloudTrail encountered when
--- attempting to deliver logs to CloudWatch Logs.
-gtsrLatestCloudWatchLogsDeliveryError :: Lens' GetTrailStatusResponse (Maybe Text)
-gtsrLatestCloudWatchLogsDeliveryError =
-    lens _gtsrLatestCloudWatchLogsDeliveryError
-        (\s a -> s { _gtsrLatestCloudWatchLogsDeliveryError = a })
-
--- | Displays the most recent date and time when CloudTrail delivered logs to
--- CloudWatch Logs.
-gtsrLatestCloudWatchLogsDeliveryTime :: Lens' GetTrailStatusResponse (Maybe UTCTime)
-gtsrLatestCloudWatchLogsDeliveryTime =
-    lens _gtsrLatestCloudWatchLogsDeliveryTime
-        (\s a -> s { _gtsrLatestCloudWatchLogsDeliveryTime = a })
-            . mapping _Time
-
--- | Displays any Amazon S3 error that CloudTrail encountered when attempting to
--- deliver log files to the designated bucket. For more information see the
--- topic <http://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html Error Responses> in the Amazon S3 API Reference.
-gtsrLatestDeliveryError :: Lens' GetTrailStatusResponse (Maybe Text)
-gtsrLatestDeliveryError =
-    lens _gtsrLatestDeliveryError (\s a -> s { _gtsrLatestDeliveryError = a })
-
--- | Specifies the date and time that CloudTrail last delivered log files to an
--- account's Amazon S3 bucket.
-gtsrLatestDeliveryTime :: Lens' GetTrailStatusResponse (Maybe UTCTime)
-gtsrLatestDeliveryTime =
-    lens _gtsrLatestDeliveryTime (\s a -> s { _gtsrLatestDeliveryTime = a })
-        . mapping _Time
-
--- | Displays any Amazon SNS error that CloudTrail encountered when attempting to
--- send a notification. For more information about Amazon SNS errors, see the <http://docs.aws.amazon.com/sns/latest/dg/welcome.html Amazon SNS Developer Guide>.
-gtsrLatestNotificationError :: Lens' GetTrailStatusResponse (Maybe Text)
-gtsrLatestNotificationError =
-    lens _gtsrLatestNotificationError
-        (\s a -> s { _gtsrLatestNotificationError = a })
-
--- | Specifies the date and time of the most recent Amazon SNS notification that
--- CloudTrail has written a new log file to an account's Amazon S3 bucket.
-gtsrLatestNotificationTime :: Lens' GetTrailStatusResponse (Maybe UTCTime)
-gtsrLatestNotificationTime =
-    lens _gtsrLatestNotificationTime
-        (\s a -> s { _gtsrLatestNotificationTime = a })
-            . mapping _Time
+-- | Displays any Amazon S3 error that CloudTrail encountered when attempting
+-- to deliver log files to the designated bucket. For more information see
+-- the topic
+-- <http://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html Error Responses>
+-- in the Amazon S3 API Reference.
+gtsrsLatestDeliveryError :: Lens' GetTrailStatusResponse (Maybe Text)
+gtsrsLatestDeliveryError = lens _gtsrsLatestDeliveryError (\ s a -> s{_gtsrsLatestDeliveryError = a});
 
--- | Specifies the most recent date and time when CloudTrail started recording API
--- calls for an AWS account.
-gtsrStartLoggingTime :: Lens' GetTrailStatusResponse (Maybe UTCTime)
-gtsrStartLoggingTime =
-    lens _gtsrStartLoggingTime (\s a -> s { _gtsrStartLoggingTime = a })
-        . mapping _Time
+-- | Specifies the most recent date and time when CloudTrail started
+-- recording API calls for an AWS account.
+gtsrsStartLoggingTime :: Lens' GetTrailStatusResponse (Maybe UTCTime)
+gtsrsStartLoggingTime = lens _gtsrsStartLoggingTime (\ s a -> s{_gtsrsStartLoggingTime = a}) . mapping _Time;
 
--- | Specifies the most recent date and time when CloudTrail stopped recording API
--- calls for an AWS account.
-gtsrStopLoggingTime :: Lens' GetTrailStatusResponse (Maybe UTCTime)
-gtsrStopLoggingTime =
-    lens _gtsrStopLoggingTime (\s a -> s { _gtsrStopLoggingTime = a })
-        . mapping _Time
+-- | Displays any Amazon SNS error that CloudTrail encountered when
+-- attempting to send a notification. For more information about Amazon SNS
+-- errors, see the
+-- <http://docs.aws.amazon.com/sns/latest/dg/welcome.html Amazon SNS Developer Guide>.
+gtsrsLatestNotificationError :: Lens' GetTrailStatusResponse (Maybe Text)
+gtsrsLatestNotificationError = lens _gtsrsLatestNotificationError (\ s a -> s{_gtsrsLatestNotificationError = a});
 
-instance ToPath GetTrailStatus where
-    toPath = const "/"
+-- | Whether the CloudTrail is currently logging AWS API calls.
+gtsrsIsLogging :: Lens' GetTrailStatusResponse (Maybe Bool)
+gtsrsIsLogging = lens _gtsrsIsLogging (\ s a -> s{_gtsrsIsLogging = a});
 
-instance ToQuery GetTrailStatus where
-    toQuery = const mempty
+-- | Specifies the date and time that CloudTrail last delivered log files to
+-- an account\'s Amazon S3 bucket.
+gtsrsLatestDeliveryTime :: Lens' GetTrailStatusResponse (Maybe UTCTime)
+gtsrsLatestDeliveryTime = lens _gtsrsLatestDeliveryTime (\ s a -> s{_gtsrsLatestDeliveryTime = a}) . mapping _Time;
 
-instance ToHeaders GetTrailStatus
+-- | Displays the most recent date and time when CloudTrail delivered logs to
+-- CloudWatch Logs.
+gtsrsLatestCloudWatchLogsDeliveryTime :: Lens' GetTrailStatusResponse (Maybe UTCTime)
+gtsrsLatestCloudWatchLogsDeliveryTime = lens _gtsrsLatestCloudWatchLogsDeliveryTime (\ s a -> s{_gtsrsLatestCloudWatchLogsDeliveryTime = a}) . mapping _Time;
 
-instance ToJSON GetTrailStatus where
-    toJSON GetTrailStatus{..} = object
-        [ "Name" .= _gtsName
-        ]
+-- | Displays any CloudWatch Logs error that CloudTrail encountered when
+-- attempting to deliver logs to CloudWatch Logs.
+gtsrsLatestCloudWatchLogsDeliveryError :: Lens' GetTrailStatusResponse (Maybe Text)
+gtsrsLatestCloudWatchLogsDeliveryError = lens _gtsrsLatestCloudWatchLogsDeliveryError (\ s a -> s{_gtsrsLatestCloudWatchLogsDeliveryError = a});
 
-instance AWSRequest GetTrailStatus where
-    type Sv GetTrailStatus = CloudTrail
-    type Rs GetTrailStatus = GetTrailStatusResponse
+-- | Specifies the date and time of the most recent Amazon SNS notification
+-- that CloudTrail has written a new log file to an account\'s Amazon S3
+-- bucket.
+gtsrsLatestNotificationTime :: Lens' GetTrailStatusResponse (Maybe UTCTime)
+gtsrsLatestNotificationTime = lens _gtsrsLatestNotificationTime (\ s a -> s{_gtsrsLatestNotificationTime = a}) . mapping _Time;
 
-    request  = post "GetTrailStatus"
-    response = jsonResponse
+-- | Specifies the most recent date and time when CloudTrail stopped
+-- recording API calls for an AWS account.
+gtsrsStopLoggingTime :: Lens' GetTrailStatusResponse (Maybe UTCTime)
+gtsrsStopLoggingTime = lens _gtsrsStopLoggingTime (\ s a -> s{_gtsrsStopLoggingTime = a}) . mapping _Time;
 
-instance FromJSON GetTrailStatusResponse where
-    parseJSON = withObject "GetTrailStatusResponse" $ \o -> GetTrailStatusResponse
-        <$> o .:? "IsLogging"
-        <*> o .:? "LatestCloudWatchLogsDeliveryError"
-        <*> o .:? "LatestCloudWatchLogsDeliveryTime"
-        <*> o .:? "LatestDeliveryError"
-        <*> o .:? "LatestDeliveryTime"
-        <*> o .:? "LatestNotificationError"
-        <*> o .:? "LatestNotificationTime"
-        <*> o .:? "StartLoggingTime"
-        <*> o .:? "StopLoggingTime"
+-- | The response status code.
+gtsrsStatus :: Lens' GetTrailStatusResponse Int
+gtsrsStatus = lens _gtsrsStatus (\ s a -> s{_gtsrsStatus = a});
diff --git a/gen/Network/AWS/CloudTrail/LookupEvents.hs b/gen/Network/AWS/CloudTrail/LookupEvents.hs
--- a/gen/Network/AWS/CloudTrail/LookupEvents.hs
+++ b/gen/Network/AWS/CloudTrail/LookupEvents.hs
@@ -1,192 +1,210 @@
-{-# 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.CloudTrail.LookupEvents
--- 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.
-
--- | Looks up API activity events captured by CloudTrail that create, update, or
--- delete resources in your account. Events for a region can be looked up for
--- the times in which you had CloudTrail turned on in that region during the
--- last seven days. Lookup supports five different attributes: time range
--- (defined by a start time and end time), user name, event name, resource type,
--- and resource name. All attributes are optional. The maximum number of
--- attributes that can be specified in any one lookup request are time range and
--- one other attribute. The default number of results returned is 10, with a
--- maximum of 50 possible. The response includes a token that you can use to get
--- the next page of results. The rate of lookup requests is limited to one per
--- second per account.
+-- Looks up API activity events captured by CloudTrail that create, update,
+-- or delete resources in your account. Events for a region can be looked
+-- up for the times in which you had CloudTrail turned on in that region
+-- during the last seven days. Lookup supports five different attributes:
+-- time range (defined by a start time and end time), user name, event
+-- name, resource type, and resource name. All attributes are optional. The
+-- maximum number of attributes that can be specified in any one lookup
+-- request are time range and one other attribute. The default number of
+-- results returned is 10, with a maximum of 50 possible. The response
+-- includes a token that you can use to get the next page of results. The
+-- rate of lookup requests is limited to one per second per account.
 --
--- Events that occurred during the selected time range will not be available
--- for lookup if CloudTrail logging was not enabled when the events occurred.
+-- Events that occurred during the selected time range will not be
+-- available for lookup if CloudTrail logging was not enabled when the
+-- events occurred.
 --
--- <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_LookupEvents.html>
+-- /See:/ <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_LookupEvents.html AWS API Reference> for LookupEvents.
 module Network.AWS.CloudTrail.LookupEvents
     (
-    -- * Request
-      LookupEvents
-    -- ** Request constructor
-    , lookupEvents
-    -- ** Request lenses
-    , leEndTime
+    -- * Creating a Request
+      lookupEvents
+    , LookupEvents
+    -- * Request Lenses
+    , leStartTime
     , leLookupAttributes
-    , leMaxResults
     , leNextToken
-    , leStartTime
+    , leEndTime
+    , leMaxResults
 
-    -- * Response
-    , LookupEventsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , lookupEventsResponse
-    -- ** Response lenses
-    , lerEvents
-    , lerNextToken
+    , LookupEventsResponse
+    -- * Response Lenses
+    , lersNextToken
+    , lersEvents
+    , lersStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudTrail.Types
-import qualified GHC.Exts
-
-data LookupEvents = LookupEvents
-    { _leEndTime          :: Maybe POSIX
-    , _leLookupAttributes :: List "LookupAttributes" LookupAttribute
-    , _leMaxResults       :: Maybe Nat
-    , _leNextToken        :: Maybe Text
-    , _leStartTime        :: Maybe POSIX
-    } deriving (Eq, Read, Show)
+import           Network.AWS.CloudTrail.Types
+import           Network.AWS.CloudTrail.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'LookupEvents' constructor.
+-- | Contains a request for LookupEvents.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'lookupEvents' smart constructor.
+data LookupEvents = LookupEvents'
+    { _leStartTime        :: !(Maybe POSIX)
+    , _leLookupAttributes :: !(Maybe [LookupAttribute])
+    , _leNextToken        :: !(Maybe Text)
+    , _leEndTime          :: !(Maybe POSIX)
+    , _leMaxResults       :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LookupEvents' with the minimum fields required to make a request.
 --
--- * 'leEndTime' @::@ 'Maybe' 'UTCTime'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'leLookupAttributes' @::@ ['LookupAttribute']
+-- * 'leStartTime'
 --
--- * 'leMaxResults' @::@ 'Maybe' 'Natural'
+-- * 'leLookupAttributes'
 --
--- * 'leNextToken' @::@ 'Maybe' 'Text'
+-- * 'leNextToken'
 --
--- * 'leStartTime' @::@ 'Maybe' 'UTCTime'
+-- * 'leEndTime'
 --
-lookupEvents :: LookupEvents
-lookupEvents = LookupEvents
-    { _leLookupAttributes = mempty
-    , _leStartTime        = Nothing
-    , _leEndTime          = Nothing
-    , _leMaxResults       = Nothing
-    , _leNextToken        = Nothing
+-- * 'leMaxResults'
+lookupEvents
+    :: LookupEvents
+lookupEvents =
+    LookupEvents'
+    { _leStartTime = Nothing
+    , _leLookupAttributes = Nothing
+    , _leNextToken = Nothing
+    , _leEndTime = Nothing
+    , _leMaxResults = Nothing
     }
 
--- | Specifies that only events that occur before or at the specified time are
--- returned. If the specified end time is before the specified start time, an
--- error is returned.
-leEndTime :: Lens' LookupEvents (Maybe UTCTime)
-leEndTime = lens _leEndTime (\s a -> s { _leEndTime = a }) . mapping _Time
+-- | Specifies that only events that occur after or at the specified time are
+-- returned. If the specified start time is after the specified end time,
+-- an error is returned.
+leStartTime :: Lens' LookupEvents (Maybe UTCTime)
+leStartTime = lens _leStartTime (\ s a -> s{_leStartTime = a}) . mapping _Time;
 
--- | Contains a list of lookup attributes. Currently the list can contain only one
--- item.
+-- | Contains a list of lookup attributes. Currently the list can contain
+-- only one item.
 leLookupAttributes :: Lens' LookupEvents [LookupAttribute]
-leLookupAttributes =
-    lens _leLookupAttributes (\s a -> s { _leLookupAttributes = a })
-        . _List
-
--- | The number of events to return. Possible values are 1 through 50. The default
--- is 10.
-leMaxResults :: Lens' LookupEvents (Maybe Natural)
-leMaxResults = lens _leMaxResults (\s a -> s { _leMaxResults = a }) . mapping _Nat
+leLookupAttributes = lens _leLookupAttributes (\ s a -> s{_leLookupAttributes = a}) . _Default . _Coerce;
 
--- | The token to use to get the next page of results after a previous API call.
--- This token must be passed in with the same parameters that were specified in
--- the the original call. For example, if the original call specified an
--- AttributeKey of 'Username' with a value of 'root', the call with NextToken
--- should include those same parameters.
+-- | The token to use to get the next page of results after a previous API
+-- call. This token must be passed in with the same parameters that were
+-- specified in the the original call. For example, if the original call
+-- specified an AttributeKey of \'Username\' with a value of \'root\', the
+-- call with NextToken should include those same parameters.
 leNextToken :: Lens' LookupEvents (Maybe Text)
-leNextToken = lens _leNextToken (\s a -> s { _leNextToken = a })
+leNextToken = lens _leNextToken (\ s a -> s{_leNextToken = a});
 
--- | Specifies that only events that occur after or at the specified time are
--- returned. If the specified start time is after the specified end time, an
--- error is returned.
-leStartTime :: Lens' LookupEvents (Maybe UTCTime)
-leStartTime = lens _leStartTime (\s a -> s { _leStartTime = a }) . mapping _Time
+-- | Specifies that only events that occur before or at the specified time
+-- are returned. If the specified end time is before the specified start
+-- time, an error is returned.
+leEndTime :: Lens' LookupEvents (Maybe UTCTime)
+leEndTime = lens _leEndTime (\ s a -> s{_leEndTime = a}) . mapping _Time;
 
-data LookupEventsResponse = LookupEventsResponse
-    { _lerEvents    :: List "Events" Event
-    , _lerNextToken :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | The number of events to return. Possible values are 1 through 50. The
+-- default is 10.
+leMaxResults :: Lens' LookupEvents (Maybe Natural)
+leMaxResults = lens _leMaxResults (\ s a -> s{_leMaxResults = a}) . mapping _Nat;
 
--- | 'LookupEventsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lerEvents' @::@ ['Event']
---
--- * 'lerNextToken' @::@ 'Maybe' 'Text'
---
-lookupEventsResponse :: LookupEventsResponse
-lookupEventsResponse = LookupEventsResponse
-    { _lerEvents    = mempty
-    , _lerNextToken = Nothing
-    }
+instance AWSRequest LookupEvents where
+        type Sv LookupEvents = CloudTrail
+        type Rs LookupEvents = LookupEventsResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 LookupEventsResponse' <$>
+                   (x .?> "NextToken") <*> (x .?> "Events" .!@ mempty)
+                     <*> (pure (fromEnum s)))
 
--- | A list of events returned based on the lookup attributes specified and the
--- CloudTrail event. The events list is sorted by time. The most recent event is
--- listed first.
-lerEvents :: Lens' LookupEventsResponse [Event]
-lerEvents = lens _lerEvents (\s a -> s { _lerEvents = a }) . _List
+instance ToHeaders LookupEvents where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("com.amazonaws.cloudtrail.v20131101.CloudTrail_20131101.LookupEvents"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | The token to use to get the next page of results after a previous API call.
--- If the token does not appear, there are no more results to return. The token
--- must be passed in with the same parameters as the previous call. For example,
--- if the original call specified an AttributeKey of 'Username' with a value of
--- 'root', the call with NextToken should include those same parameters.
-lerNextToken :: Lens' LookupEventsResponse (Maybe Text)
-lerNextToken = lens _lerNextToken (\s a -> s { _lerNextToken = a })
+instance ToJSON LookupEvents where
+        toJSON LookupEvents'{..}
+          = object
+              ["StartTime" .= _leStartTime,
+               "LookupAttributes" .= _leLookupAttributes,
+               "NextToken" .= _leNextToken, "EndTime" .= _leEndTime,
+               "MaxResults" .= _leMaxResults]
 
 instance ToPath LookupEvents where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery LookupEvents where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders LookupEvents
+-- | Contains a response to a LookupEvents action.
+--
+-- /See:/ 'lookupEventsResponse' smart constructor.
+data LookupEventsResponse = LookupEventsResponse'
+    { _lersNextToken :: !(Maybe Text)
+    , _lersEvents    :: !(Maybe [Event])
+    , _lersStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON LookupEvents where
-    toJSON LookupEvents{..} = object
-        [ "LookupAttributes" .= _leLookupAttributes
-        , "StartTime"        .= _leStartTime
-        , "EndTime"          .= _leEndTime
-        , "MaxResults"       .= _leMaxResults
-        , "NextToken"        .= _leNextToken
-        ]
+-- | Creates a value of 'LookupEventsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lersNextToken'
+--
+-- * 'lersEvents'
+--
+-- * 'lersStatus'
+lookupEventsResponse
+    :: Int -- ^ 'lersStatus'
+    -> LookupEventsResponse
+lookupEventsResponse pStatus_ =
+    LookupEventsResponse'
+    { _lersNextToken = Nothing
+    , _lersEvents = Nothing
+    , _lersStatus = pStatus_
+    }
 
-instance AWSRequest LookupEvents where
-    type Sv LookupEvents = CloudTrail
-    type Rs LookupEvents = LookupEventsResponse
+-- | The token to use to get the next page of results after a previous API
+-- call. If the token does not appear, there are no more results to return.
+-- The token must be passed in with the same parameters as the previous
+-- call. For example, if the original call specified an AttributeKey of
+-- \'Username\' with a value of \'root\', the call with NextToken should
+-- include those same parameters.
+lersNextToken :: Lens' LookupEventsResponse (Maybe Text)
+lersNextToken = lens _lersNextToken (\ s a -> s{_lersNextToken = a});
 
-    request  = post "LookupEvents"
-    response = jsonResponse
+-- | A list of events returned based on the lookup attributes specified and
+-- the CloudTrail event. The events list is sorted by time. The most recent
+-- event is listed first.
+lersEvents :: Lens' LookupEventsResponse [Event]
+lersEvents = lens _lersEvents (\ s a -> s{_lersEvents = a}) . _Default . _Coerce;
 
-instance FromJSON LookupEventsResponse where
-    parseJSON = withObject "LookupEventsResponse" $ \o -> LookupEventsResponse
-        <$> o .:? "Events" .!= mempty
-        <*> o .:? "NextToken"
+-- | The response status code.
+lersStatus :: Lens' LookupEventsResponse Int
+lersStatus = lens _lersStatus (\ s a -> s{_lersStatus = a});
diff --git a/gen/Network/AWS/CloudTrail/StartLogging.hs b/gen/Network/AWS/CloudTrail/StartLogging.hs
--- a/gen/Network/AWS/CloudTrail/StartLogging.hs
+++ b/gen/Network/AWS/CloudTrail/StartLogging.hs
@@ -1,94 +1,120 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.CloudTrail.StartLogging
--- 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.
-
--- | Starts the recording of AWS API calls and log file delivery for a trail.
+-- Starts the recording of AWS API calls and log file delivery for a trail.
 --
--- <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_StartLogging.html>
+-- /See:/ <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_StartLogging.html AWS API Reference> for StartLogging.
 module Network.AWS.CloudTrail.StartLogging
     (
-    -- * Request
-      StartLogging
-    -- ** Request constructor
-    , startLogging
-    -- ** Request lenses
-    , sl1Name
+    -- * Creating a Request
+      startLogging
+    , StartLogging
+    -- * Request Lenses
+    , sName
 
-    -- * Response
-    , StartLoggingResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , startLoggingResponse
+    , StartLoggingResponse
+    -- * Response Lenses
+    , srsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudTrail.Types
-import qualified GHC.Exts
-
-newtype StartLogging = StartLogging
-    { _sl1Name :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+import           Network.AWS.CloudTrail.Types
+import           Network.AWS.CloudTrail.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'StartLogging' constructor.
+-- | The request to CloudTrail to start logging AWS API calls for an account.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'startLogging' smart constructor.
+newtype StartLogging = StartLogging'
+    { _sName :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StartLogging' with the minimum fields required to make a request.
 --
--- * 'sl1Name' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-startLogging :: Text -- ^ 'sl1Name'
-             -> StartLogging
-startLogging p1 = StartLogging
-    { _sl1Name = p1
+-- * 'sName'
+startLogging
+    :: Text -- ^ 'sName'
+    -> StartLogging
+startLogging pName_ =
+    StartLogging'
+    { _sName = pName_
     }
 
 -- | The name of the trail for which CloudTrail logs AWS API calls.
-sl1Name :: Lens' StartLogging Text
-sl1Name = lens _sl1Name (\s a -> s { _sl1Name = a })
+sName :: Lens' StartLogging Text
+sName = lens _sName (\ s a -> s{_sName = a});
 
-data StartLoggingResponse = StartLoggingResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest StartLogging where
+        type Sv StartLogging = CloudTrail
+        type Rs StartLogging = StartLoggingResponse
+        request = postJSON
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 StartLoggingResponse' <$> (pure (fromEnum s)))
 
--- | 'StartLoggingResponse' constructor.
-startLoggingResponse :: StartLoggingResponse
-startLoggingResponse = StartLoggingResponse
+instance ToHeaders StartLogging where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("com.amazonaws.cloudtrail.v20131101.CloudTrail_20131101.StartLogging"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON StartLogging where
+        toJSON StartLogging'{..} = object ["Name" .= _sName]
+
 instance ToPath StartLogging where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery StartLogging where
-    toQuery = const mempty
-
-instance ToHeaders StartLogging
+        toQuery = const mempty
 
-instance ToJSON StartLogging where
-    toJSON StartLogging{..} = object
-        [ "Name" .= _sl1Name
-        ]
+-- | Returns the objects or data listed below if successful. Otherwise,
+-- returns an error.
+--
+-- /See:/ 'startLoggingResponse' smart constructor.
+newtype StartLoggingResponse = StartLoggingResponse'
+    { _srsStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest StartLogging where
-    type Sv StartLogging = CloudTrail
-    type Rs StartLogging = StartLoggingResponse
+-- | Creates a value of 'StartLoggingResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srsStatus'
+startLoggingResponse
+    :: Int -- ^ 'srsStatus'
+    -> StartLoggingResponse
+startLoggingResponse pStatus_ =
+    StartLoggingResponse'
+    { _srsStatus = pStatus_
+    }
 
-    request  = post "StartLogging"
-    response = nullResponse StartLoggingResponse
+-- | The response status code.
+srsStatus :: Lens' StartLoggingResponse Int
+srsStatus = lens _srsStatus (\ s a -> s{_srsStatus = a});
diff --git a/gen/Network/AWS/CloudTrail/StopLogging.hs b/gen/Network/AWS/CloudTrail/StopLogging.hs
--- a/gen/Network/AWS/CloudTrail/StopLogging.hs
+++ b/gen/Network/AWS/CloudTrail/StopLogging.hs
@@ -1,98 +1,125 @@
-{-# 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.CloudTrail.StopLogging
--- 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.
-
--- | Suspends the recording of AWS API calls and log file delivery for the
+-- Suspends the recording of AWS API calls and log file delivery for the
 -- specified trail. Under most circumstances, there is no need to use this
--- action. You can update a trail without stopping it first. This action is the
--- only way to stop recording.
+-- action. You can update a trail without stopping it first. This action is
+-- the only way to stop recording.
 --
--- <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_StopLogging.html>
+-- /See:/ <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_StopLogging.html AWS API Reference> for StopLogging.
 module Network.AWS.CloudTrail.StopLogging
     (
-    -- * Request
-      StopLogging
-    -- ** Request constructor
-    , stopLogging
-    -- ** Request lenses
+    -- * Creating a Request
+      stopLogging
+    , StopLogging
+    -- * Request Lenses
     , slName
 
-    -- * Response
-    , StopLoggingResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , stopLoggingResponse
+    , StopLoggingResponse
+    -- * Response Lenses
+    , slrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudTrail.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudTrail.Types
+import           Network.AWS.CloudTrail.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype StopLogging = StopLogging
+-- | Passes the request to CloudTrail to stop logging AWS API calls for the
+-- specified account.
+--
+-- /See:/ 'stopLogging' smart constructor.
+newtype StopLogging = StopLogging'
     { _slName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'StopLogging' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'StopLogging' with the minimum fields required to make a request.
 --
--- * 'slName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-stopLogging :: Text -- ^ 'slName'
-            -> StopLogging
-stopLogging p1 = StopLogging
-    { _slName = p1
+-- * 'slName'
+stopLogging
+    :: Text -- ^ 'slName'
+    -> StopLogging
+stopLogging pName_ =
+    StopLogging'
+    { _slName = pName_
     }
 
--- | Communicates to CloudTrail the name of the trail for which to stop logging
--- AWS API calls.
+-- | Communicates to CloudTrail the name of the trail for which to stop
+-- logging AWS API calls.
 slName :: Lens' StopLogging Text
-slName = lens _slName (\s a -> s { _slName = a })
+slName = lens _slName (\ s a -> s{_slName = a});
 
-data StopLoggingResponse = StopLoggingResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest StopLogging where
+        type Sv StopLogging = CloudTrail
+        type Rs StopLogging = StopLoggingResponse
+        request = postJSON
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 StopLoggingResponse' <$> (pure (fromEnum s)))
 
--- | 'StopLoggingResponse' constructor.
-stopLoggingResponse :: StopLoggingResponse
-stopLoggingResponse = StopLoggingResponse
+instance ToHeaders StopLogging where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("com.amazonaws.cloudtrail.v20131101.CloudTrail_20131101.StopLogging"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON StopLogging where
+        toJSON StopLogging'{..} = object ["Name" .= _slName]
+
 instance ToPath StopLogging where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery StopLogging where
-    toQuery = const mempty
-
-instance ToHeaders StopLogging
+        toQuery = const mempty
 
-instance ToJSON StopLogging where
-    toJSON StopLogging{..} = object
-        [ "Name" .= _slName
-        ]
+-- | Returns the objects or data listed below if successful. Otherwise,
+-- returns an error.
+--
+-- /See:/ 'stopLoggingResponse' smart constructor.
+newtype StopLoggingResponse = StopLoggingResponse'
+    { _slrsStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest StopLogging where
-    type Sv StopLogging = CloudTrail
-    type Rs StopLogging = StopLoggingResponse
+-- | Creates a value of 'StopLoggingResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'slrsStatus'
+stopLoggingResponse
+    :: Int -- ^ 'slrsStatus'
+    -> StopLoggingResponse
+stopLoggingResponse pStatus_ =
+    StopLoggingResponse'
+    { _slrsStatus = pStatus_
+    }
 
-    request  = post "StopLogging"
-    response = nullResponse StopLoggingResponse
+-- | The response status code.
+slrsStatus :: Lens' StopLoggingResponse Int
+slrsStatus = lens _slrsStatus (\ s a -> s{_slrsStatus = a});
diff --git a/gen/Network/AWS/CloudTrail/Types.hs b/gen/Network/AWS/CloudTrail/Types.hs
--- a/gen/Network/AWS/CloudTrail/Types.hs
+++ b/gen/Network/AWS/CloudTrail/Types.hs
@@ -1,55 +1,52 @@
-{-# 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.CloudTrail.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.CloudTrail.Types
     (
     -- * Service
       CloudTrail
-    -- ** Error
-    , JSONError
 
+    -- * Errors
+    , _InvalidTimeRangeException
+    , _InsufficientS3BucketPolicyException
+    , _MaximumNumberOfTrailsExceededException
+    , _InsufficientSNSTopicPolicyException
+    , _InvalidCloudWatchLogsRoleARNException
+    , _InvalidTrailNameException
+    , _InvalidLookupAttributesException
+    , _TrailNotFoundException
+    , _CloudWatchLogsDeliveryUnavailableException
+    , _InvalidSNSTopicNameException
+    , _InvalidCloudWatchLogsLogGroupARNException
+    , _InvalidS3BucketNameException
+    , _InvalidNextTokenException
+    , _S3BucketDoesNotExistException
+    , _InvalidMaxResultsException
+    , _TrailAlreadyExistsException
+    , _InvalidS3PrefixException
+
+    -- * LookupAttributeKey
+    , LookupAttributeKey (..)
+
     -- * Event
     , Event
     , event
-    , eCloudTrailEvent
-    , eEventId
-    , eEventName
+    , eUsername
     , eEventTime
     , eResources
-    , eUsername
-
-    -- * Trail
-    , Trail
-    , trail
-    , tCloudWatchLogsLogGroupArn
-    , tCloudWatchLogsRoleArn
-    , tIncludeGlobalServiceEvents
-    , tName
-    , tS3BucketName
-    , tS3KeyPrefix
-    , tSnsTopicName
+    , eCloudTrailEvent
+    , eEventName
+    , eEventId
 
     -- * LookupAttribute
     , LookupAttribute
@@ -57,355 +54,151 @@
     , laAttributeKey
     , laAttributeValue
 
-    -- * LookupAttributeKey
-    , LookupAttributeKey (..)
-
     -- * Resource
     , Resource
     , resource
-    , rResourceName
     , rResourceType
+    , rResourceName
+
+    -- * Trail
+    , Trail
+    , trail
+    , tS3KeyPrefix
+    , tSNSTopicName
+    , tCloudWatchLogsLogGroupARN
+    , tName
+    , tIncludeGlobalServiceEvents
+    , tCloudWatchLogsRoleARN
+    , tS3BucketName
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Signing
-import qualified GHC.Exts
+import           Network.AWS.CloudTrail.Types.Product
+import           Network.AWS.CloudTrail.Types.Sum
+import           Network.AWS.Prelude
+import           Network.AWS.Sign.V4
 
--- | Version @2013-11-01@ of the Amazon CloudTrail service.
+-- | Version @2013-11-01@ of the Amazon CloudTrail SDK.
 data CloudTrail
 
 instance AWSService CloudTrail where
     type Sg CloudTrail = V4
-    type Er CloudTrail = JSONError
-
-    service = service'
+    service = const svc
       where
-        service' :: Service CloudTrail
-        service' = Service
-            { _svcAbbrev       = "CloudTrail"
-            , _svcPrefix       = "cloudtrail"
-            , _svcVersion      = "2013-11-01"
-            , _svcTargetPrefix = Just "com.amazonaws.cloudtrail.v20131101.CloudTrail_20131101"
-            , _svcJSONVersion  = Just "1.1"
-            , _svcHandle       = handle
-            , _svcRetry        = retry
+        svc =
+            Service
+            { _svcAbbrev = "CloudTrail"
+            , _svcPrefix = "cloudtrail"
+            , _svcVersion = "2013-11-01"
+            , _svcEndpoint = defaultEndpoint svc
+            , _svcTimeout = Just 70
+            , _svcStatus = statusSuccess
+            , _svcError = parseJSONError
+            , _svcRetry = retry
             }
-
-        handle :: Status
-               -> Maybe (LazyByteString -> ServiceError JSONError)
-        handle = jsonError statusSuccess service'
-
-        retry :: Retry CloudTrail
-        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 Event = Event
-    { _eCloudTrailEvent :: Maybe Text
-    , _eEventId         :: Maybe Text
-    , _eEventName       :: Maybe Text
-    , _eEventTime       :: Maybe POSIX
-    , _eResources       :: List "Resources" Resource
-    , _eUsername        :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'Event' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'eCloudTrailEvent' @::@ 'Maybe' 'Text'
---
--- * 'eEventId' @::@ 'Maybe' 'Text'
---
--- * 'eEventName' @::@ 'Maybe' 'Text'
---
--- * 'eEventTime' @::@ 'Maybe' 'UTCTime'
---
--- * 'eResources' @::@ ['Resource']
---
--- * 'eUsername' @::@ 'Maybe' 'Text'
---
-event :: Event
-event = Event
-    { _eEventId         = Nothing
-    , _eEventName       = Nothing
-    , _eEventTime       = Nothing
-    , _eUsername        = Nothing
-    , _eResources       = mempty
-    , _eCloudTrailEvent = Nothing
-    }
-
--- | A JSON string that contains a representation of the event returned.
-eCloudTrailEvent :: Lens' Event (Maybe Text)
-eCloudTrailEvent = lens _eCloudTrailEvent (\s a -> s { _eCloudTrailEvent = a })
-
--- | The CloudTrail ID of the event returned.
-eEventId :: Lens' Event (Maybe Text)
-eEventId = lens _eEventId (\s a -> s { _eEventId = a })
-
--- | The name of the event returned.
-eEventName :: Lens' Event (Maybe Text)
-eEventName = lens _eEventName (\s a -> s { _eEventName = a })
-
--- | The date and time of the event returned.
-eEventTime :: Lens' Event (Maybe UTCTime)
-eEventTime = lens _eEventTime (\s a -> s { _eEventTime = a }) . mapping _Time
-
--- | A list of resources referenced by the event returned.
-eResources :: Lens' Event [Resource]
-eResources = lens _eResources (\s a -> s { _eResources = a }) . _List
-
--- | A user name or role name of the requester that called the API in the event
--- returned.
-eUsername :: Lens' Event (Maybe Text)
-eUsername = lens _eUsername (\s a -> s { _eUsername = a })
-
-instance FromJSON Event where
-    parseJSON = withObject "Event" $ \o -> Event
-        <$> o .:? "CloudTrailEvent"
-        <*> o .:? "EventId"
-        <*> o .:? "EventName"
-        <*> o .:? "EventTime"
-        <*> o .:? "Resources" .!= mempty
-        <*> o .:? "Username"
-
-instance ToJSON Event where
-    toJSON Event{..} = object
-        [ "EventId"         .= _eEventId
-        , "EventName"       .= _eEventName
-        , "EventTime"       .= _eEventTime
-        , "Username"        .= _eUsername
-        , "Resources"       .= _eResources
-        , "CloudTrailEvent" .= _eCloudTrailEvent
-        ]
-
-data Trail = Trail
-    { _tCloudWatchLogsLogGroupArn  :: Maybe Text
-    , _tCloudWatchLogsRoleArn      :: Maybe Text
-    , _tIncludeGlobalServiceEvents :: Maybe Bool
-    , _tName                       :: Maybe Text
-    , _tS3BucketName               :: Maybe Text
-    , _tS3KeyPrefix                :: Maybe Text
-    , _tSnsTopicName               :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'Trail' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'tCloudWatchLogsLogGroupArn' @::@ 'Maybe' 'Text'
---
--- * 'tCloudWatchLogsRoleArn' @::@ 'Maybe' 'Text'
---
--- * 'tIncludeGlobalServiceEvents' @::@ 'Maybe' 'Bool'
---
--- * 'tName' @::@ 'Maybe' 'Text'
---
--- * 'tS3BucketName' @::@ 'Maybe' 'Text'
---
--- * 'tS3KeyPrefix' @::@ 'Maybe' 'Text'
---
--- * 'tSnsTopicName' @::@ 'Maybe' 'Text'
---
-trail :: Trail
-trail = Trail
-    { _tName                       = Nothing
-    , _tS3BucketName               = Nothing
-    , _tS3KeyPrefix                = Nothing
-    , _tSnsTopicName               = Nothing
-    , _tIncludeGlobalServiceEvents = Nothing
-    , _tCloudWatchLogsLogGroupArn  = Nothing
-    , _tCloudWatchLogsRoleArn      = Nothing
-    }
-
--- | Specifies an Amazon Resource Name (ARN), a unique identifier that represents
--- the log group to which CloudTrail logs will be delivered.
-tCloudWatchLogsLogGroupArn :: Lens' Trail (Maybe Text)
-tCloudWatchLogsLogGroupArn =
-    lens _tCloudWatchLogsLogGroupArn
-        (\s a -> s { _tCloudWatchLogsLogGroupArn = a })
-
--- | Specifies the role for the CloudWatch Logs endpoint to assume to write to a
--- user’s log group.
-tCloudWatchLogsRoleArn :: Lens' Trail (Maybe Text)
-tCloudWatchLogsRoleArn =
-    lens _tCloudWatchLogsRoleArn (\s a -> s { _tCloudWatchLogsRoleArn = a })
-
--- | Set to True to include AWS API calls from AWS global services such as IAM.
--- Otherwise, False.
-tIncludeGlobalServiceEvents :: Lens' Trail (Maybe Bool)
-tIncludeGlobalServiceEvents =
-    lens _tIncludeGlobalServiceEvents
-        (\s a -> s { _tIncludeGlobalServiceEvents = a })
-
--- | Name of the trail set by calling 'CreateTrail'.
-tName :: Lens' Trail (Maybe Text)
-tName = lens _tName (\s a -> s { _tName = a })
-
--- | Name of the Amazon S3 bucket into which CloudTrail delivers your trail files.
-tS3BucketName :: Lens' Trail (Maybe Text)
-tS3BucketName = lens _tS3BucketName (\s a -> s { _tS3BucketName = a })
-
--- | Value of the Amazon S3 prefix.
-tS3KeyPrefix :: Lens' Trail (Maybe Text)
-tS3KeyPrefix = lens _tS3KeyPrefix (\s a -> s { _tS3KeyPrefix = a })
-
--- | Name of the existing Amazon SNS topic that CloudTrail uses to notify the
--- account owner when new CloudTrail log files have been delivered.
-tSnsTopicName :: Lens' Trail (Maybe Text)
-tSnsTopicName = lens _tSnsTopicName (\s a -> s { _tSnsTopicName = a })
-
-instance FromJSON Trail where
-    parseJSON = withObject "Trail" $ \o -> Trail
-        <$> o .:? "CloudWatchLogsLogGroupArn"
-        <*> o .:? "CloudWatchLogsRoleArn"
-        <*> o .:? "IncludeGlobalServiceEvents"
-        <*> o .:? "Name"
-        <*> o .:? "S3BucketName"
-        <*> o .:? "S3KeyPrefix"
-        <*> o .:? "SnsTopicName"
-
-instance ToJSON Trail where
-    toJSON Trail{..} = object
-        [ "Name"                       .= _tName
-        , "S3BucketName"               .= _tS3BucketName
-        , "S3KeyPrefix"                .= _tS3KeyPrefix
-        , "SnsTopicName"               .= _tSnsTopicName
-        , "IncludeGlobalServiceEvents" .= _tIncludeGlobalServiceEvents
-        , "CloudWatchLogsLogGroupArn"  .= _tCloudWatchLogsLogGroupArn
-        , "CloudWatchLogsRoleArn"      .= _tCloudWatchLogsRoleArn
-        ]
-
-data LookupAttribute = LookupAttribute
-    { _laAttributeKey   :: LookupAttributeKey
-    , _laAttributeValue :: Text
-    } deriving (Eq, Read, Show)
-
--- | 'LookupAttribute' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'laAttributeKey' @::@ 'LookupAttributeKey'
---
--- * 'laAttributeValue' @::@ 'Text'
---
-lookupAttribute :: LookupAttributeKey -- ^ 'laAttributeKey'
-                -> Text -- ^ 'laAttributeValue'
-                -> LookupAttribute
-lookupAttribute p1 p2 = LookupAttribute
-    { _laAttributeKey   = p1
-    , _laAttributeValue = p2
-    }
+        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
 
--- | Specifies an attribute on which to filter the events returned.
-laAttributeKey :: Lens' LookupAttribute LookupAttributeKey
-laAttributeKey = lens _laAttributeKey (\s a -> s { _laAttributeKey = a })
+-- | Occurs if the timestamp values are invalid. Either the start time occurs
+-- after the end time or the time range is outside the range of possible
+-- values.
+_InvalidTimeRangeException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidTimeRangeException =
+    _ServiceError . hasStatus 400 . hasCode "InvalidTimeRange"
 
--- | Specifies a value for the specified AttributeKey.
-laAttributeValue :: Lens' LookupAttribute Text
-laAttributeValue = lens _laAttributeValue (\s a -> s { _laAttributeValue = a })
+-- | This exception is thrown when the policy on the S3 bucket is not
+-- sufficient.
+_InsufficientS3BucketPolicyException :: AsError a => Getting (First ServiceError) a ServiceError
+_InsufficientS3BucketPolicyException =
+    _ServiceError . hasStatus 403 . hasCode "InsufficientS3BucketPolicy"
 
-instance FromJSON LookupAttribute where
-    parseJSON = withObject "LookupAttribute" $ \o -> LookupAttribute
-        <$> o .:  "AttributeKey"
-        <*> o .:  "AttributeValue"
+-- | This exception is thrown when the maximum number of trails is reached.
+_MaximumNumberOfTrailsExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_MaximumNumberOfTrailsExceededException =
+    _ServiceError . hasStatus 403 . hasCode "MaximumNumberOfTrailsExceeded"
 
-instance ToJSON LookupAttribute where
-    toJSON LookupAttribute{..} = object
-        [ "AttributeKey"   .= _laAttributeKey
-        , "AttributeValue" .= _laAttributeValue
-        ]
+-- | This exception is thrown when the policy on the SNS topic is not
+-- sufficient.
+_InsufficientSNSTopicPolicyException :: AsError a => Getting (First ServiceError) a ServiceError
+_InsufficientSNSTopicPolicyException =
+    _ServiceError . hasStatus 403 . hasCode "InsufficientSnsTopicPolicy"
 
-data LookupAttributeKey
-    = EventId      -- ^ EventId
-    | EventName    -- ^ EventName
-    | ResourceName -- ^ ResourceName
-    | ResourceType -- ^ ResourceType
-    | Username     -- ^ Username
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
+-- | This exception is thrown when the provided role is not valid.
+_InvalidCloudWatchLogsRoleARNException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidCloudWatchLogsRoleARNException =
+    _ServiceError . hasStatus 400 . hasCode "InvalidCloudWatchLogsRoleArn"
 
-instance Hashable LookupAttributeKey
+-- | This exception is thrown when the provided trail name is not valid.
+_InvalidTrailNameException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidTrailNameException =
+    _ServiceError . hasStatus 400 . hasCode "InvalidTrailName"
 
-instance FromText LookupAttributeKey where
-    parser = takeLowerText >>= \case
-        "eventid"      -> pure EventId
-        "eventname"    -> pure EventName
-        "resourcename" -> pure ResourceName
-        "resourcetype" -> pure ResourceType
-        "username"     -> pure Username
-        e              -> fail $
-            "Failure parsing LookupAttributeKey from " ++ show e
+-- | Occurs when an invalid lookup attribute is specified.
+_InvalidLookupAttributesException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidLookupAttributesException =
+    _ServiceError . hasStatus 400 . hasCode "InvalidLookupAttributes"
 
-instance ToText LookupAttributeKey where
-    toText = \case
-        EventId      -> "EventId"
-        EventName    -> "EventName"
-        ResourceName -> "ResourceName"
-        ResourceType -> "ResourceType"
-        Username     -> "Username"
+-- | This exception is thrown when the trail with the given name is not
+-- found.
+_TrailNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_TrailNotFoundException =
+    _ServiceError . hasStatus 404 . hasCode "TrailNotFound"
 
-instance ToByteString LookupAttributeKey
-instance ToHeader     LookupAttributeKey
-instance ToQuery      LookupAttributeKey
+-- | Cannot set a CloudWatch Logs delivery for this region.
+_CloudWatchLogsDeliveryUnavailableException :: AsError a => Getting (First ServiceError) a ServiceError
+_CloudWatchLogsDeliveryUnavailableException =
+    _ServiceError . hasStatus 400 . hasCode "CloudWatchLogsDeliveryUnavailable"
 
-instance FromJSON LookupAttributeKey where
-    parseJSON = parseJSONText "LookupAttributeKey"
+-- | This exception is thrown when the provided SNS topic name is not valid.
+_InvalidSNSTopicNameException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidSNSTopicNameException =
+    _ServiceError . hasStatus 400 . hasCode "InvalidSnsTopicName"
 
-instance ToJSON LookupAttributeKey where
-    toJSON = toJSONText
+-- | This exception is thrown when the provided CloudWatch log group is not
+-- valid.
+_InvalidCloudWatchLogsLogGroupARNException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidCloudWatchLogsLogGroupARNException =
+    _ServiceError . hasStatus 400 . hasCode "InvalidCloudWatchLogsLogGroupArn"
 
-data Resource = Resource
-    { _rResourceName :: Maybe Text
-    , _rResourceType :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | This exception is thrown when the provided S3 bucket name is not valid.
+_InvalidS3BucketNameException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidS3BucketNameException =
+    _ServiceError . hasStatus 400 . hasCode "InvalidS3BucketName"
 
--- | 'Resource' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'rResourceName' @::@ 'Maybe' 'Text'
---
--- * 'rResourceType' @::@ 'Maybe' 'Text'
---
-resource :: Resource
-resource = Resource
-    { _rResourceType = Nothing
-    , _rResourceName = Nothing
-    }
+-- | Invalid token or token that was previously used in a request with
+-- different parameters. This exception is thrown if the token is invalid.
+_InvalidNextTokenException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidNextTokenException =
+    _ServiceError . hasStatus 400 . hasCode "InvalidNextToken"
 
--- | The name of the resource referenced by the event returned. These are
--- user-created names whose values will depend on the environment. For example,
--- the resource name might be "auto-scaling-test-group" for an Auto Scaling
--- Group or "i-1234567" for an EC2 Instance.
-rResourceName :: Lens' Resource (Maybe Text)
-rResourceName = lens _rResourceName (\s a -> s { _rResourceName = a })
+-- | This exception is thrown when the specified S3 bucket does not exist.
+_S3BucketDoesNotExistException :: AsError a => Getting (First ServiceError) a ServiceError
+_S3BucketDoesNotExistException =
+    _ServiceError . hasStatus 404 . hasCode "S3BucketDoesNotExist"
 
--- | The type of a resource referenced by the event returned. When the resource
--- type cannot be determined, null is returned. Some examples of resource types
--- are: Instance for EC2, Trail for CloudTrail, DBInstance for RDS, and AccessKey
--- for IAM. For a list of resource types supported for event lookup, see <http://docs.aws.amazon.com/awscloudtrail/latest/userguide/lookup_supported_resourcetypes.html Resource Types Supported for Event Lookup>.
-rResourceType :: Lens' Resource (Maybe Text)
-rResourceType = lens _rResourceType (\s a -> s { _rResourceType = a })
+-- | This exception is thrown if the limit specified is invalid.
+_InvalidMaxResultsException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidMaxResultsException =
+    _ServiceError . hasStatus 400 . hasCode "InvalidMaxResults"
 
-instance FromJSON Resource where
-    parseJSON = withObject "Resource" $ \o -> Resource
-        <$> o .:? "ResourceName"
-        <*> o .:? "ResourceType"
+-- | This exception is thrown when the specified trail already exists.
+_TrailAlreadyExistsException :: AsError a => Getting (First ServiceError) a ServiceError
+_TrailAlreadyExistsException =
+    _ServiceError . hasStatus 400 . hasCode "TrailAlreadyExists"
 
-instance ToJSON Resource where
-    toJSON Resource{..} = object
-        [ "ResourceType" .= _rResourceType
-        , "ResourceName" .= _rResourceName
-        ]
+-- | This exception is thrown when the provided S3 prefix is not valid.
+_InvalidS3PrefixException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidS3PrefixException =
+    _ServiceError . hasStatus 400 . hasCode "InvalidS3Prefix"
diff --git a/gen/Network/AWS/CloudTrail/Types/Product.hs b/gen/Network/AWS/CloudTrail/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudTrail/Types/Product.hs
@@ -0,0 +1,271 @@
+{-# 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.CloudTrail.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.CloudTrail.Types.Product where
+
+import           Network.AWS.CloudTrail.Types.Sum
+import           Network.AWS.Prelude
+
+-- | Contains information about an event that was returned by a lookup
+-- request. The result includes a representation of a CloudTrail event.
+--
+-- /See:/ 'event' smart constructor.
+data Event = Event'
+    { _eUsername        :: !(Maybe Text)
+    , _eEventTime       :: !(Maybe POSIX)
+    , _eResources       :: !(Maybe [Resource])
+    , _eCloudTrailEvent :: !(Maybe Text)
+    , _eEventName       :: !(Maybe Text)
+    , _eEventId         :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Event' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eUsername'
+--
+-- * 'eEventTime'
+--
+-- * 'eResources'
+--
+-- * 'eCloudTrailEvent'
+--
+-- * 'eEventName'
+--
+-- * 'eEventId'
+event
+    :: Event
+event =
+    Event'
+    { _eUsername = Nothing
+    , _eEventTime = Nothing
+    , _eResources = Nothing
+    , _eCloudTrailEvent = Nothing
+    , _eEventName = Nothing
+    , _eEventId = Nothing
+    }
+
+-- | A user name or role name of the requester that called the API in the
+-- event returned.
+eUsername :: Lens' Event (Maybe Text)
+eUsername = lens _eUsername (\ s a -> s{_eUsername = a});
+
+-- | The date and time of the event returned.
+eEventTime :: Lens' Event (Maybe UTCTime)
+eEventTime = lens _eEventTime (\ s a -> s{_eEventTime = a}) . mapping _Time;
+
+-- | A list of resources referenced by the event returned.
+eResources :: Lens' Event [Resource]
+eResources = lens _eResources (\ s a -> s{_eResources = a}) . _Default . _Coerce;
+
+-- | A JSON string that contains a representation of the event returned.
+eCloudTrailEvent :: Lens' Event (Maybe Text)
+eCloudTrailEvent = lens _eCloudTrailEvent (\ s a -> s{_eCloudTrailEvent = a});
+
+-- | The name of the event returned.
+eEventName :: Lens' Event (Maybe Text)
+eEventName = lens _eEventName (\ s a -> s{_eEventName = a});
+
+-- | The CloudTrail ID of the event returned.
+eEventId :: Lens' Event (Maybe Text)
+eEventId = lens _eEventId (\ s a -> s{_eEventId = a});
+
+instance FromJSON Event where
+        parseJSON
+          = withObject "Event"
+              (\ x ->
+                 Event' <$>
+                   (x .:? "Username") <*> (x .:? "EventTime") <*>
+                     (x .:? "Resources" .!= mempty)
+                     <*> (x .:? "CloudTrailEvent")
+                     <*> (x .:? "EventName")
+                     <*> (x .:? "EventId"))
+
+-- | Specifies an attribute and value that filter the events returned.
+--
+-- /See:/ 'lookupAttribute' smart constructor.
+data LookupAttribute = LookupAttribute'
+    { _laAttributeKey   :: !LookupAttributeKey
+    , _laAttributeValue :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LookupAttribute' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'laAttributeKey'
+--
+-- * 'laAttributeValue'
+lookupAttribute
+    :: LookupAttributeKey -- ^ 'laAttributeKey'
+    -> Text -- ^ 'laAttributeValue'
+    -> LookupAttribute
+lookupAttribute pAttributeKey_ pAttributeValue_ =
+    LookupAttribute'
+    { _laAttributeKey = pAttributeKey_
+    , _laAttributeValue = pAttributeValue_
+    }
+
+-- | Specifies an attribute on which to filter the events returned.
+laAttributeKey :: Lens' LookupAttribute LookupAttributeKey
+laAttributeKey = lens _laAttributeKey (\ s a -> s{_laAttributeKey = a});
+
+-- | Specifies a value for the specified AttributeKey.
+laAttributeValue :: Lens' LookupAttribute Text
+laAttributeValue = lens _laAttributeValue (\ s a -> s{_laAttributeValue = a});
+
+instance ToJSON LookupAttribute where
+        toJSON LookupAttribute'{..}
+          = object
+              ["AttributeKey" .= _laAttributeKey,
+               "AttributeValue" .= _laAttributeValue]
+
+-- | Specifies the type and name of a resource referenced by an event.
+--
+-- /See:/ 'resource' smart constructor.
+data Resource = Resource'
+    { _rResourceType :: !(Maybe Text)
+    , _rResourceName :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Resource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rResourceType'
+--
+-- * 'rResourceName'
+resource
+    :: Resource
+resource =
+    Resource'
+    { _rResourceType = Nothing
+    , _rResourceName = Nothing
+    }
+
+-- | The type of a resource referenced by the event returned. When the
+-- resource type cannot be determined, null is returned. Some examples of
+-- resource types are: __Instance__ for EC2, __Trail__ for CloudTrail,
+-- __DBInstance__ for RDS, and __AccessKey__ for IAM. For a list of
+-- resource types supported for event lookup, see
+-- <http://docs.aws.amazon.com/awscloudtrail/latest/userguide/lookup_supported_resourcetypes.html Resource Types Supported for Event Lookup>.
+rResourceType :: Lens' Resource (Maybe Text)
+rResourceType = lens _rResourceType (\ s a -> s{_rResourceType = a});
+
+-- | The name of the resource referenced by the event returned. These are
+-- user-created names whose values will depend on the environment. For
+-- example, the resource name might be \"auto-scaling-test-group\" for an
+-- Auto Scaling Group or \"i-1234567\" for an EC2 Instance.
+rResourceName :: Lens' Resource (Maybe Text)
+rResourceName = lens _rResourceName (\ s a -> s{_rResourceName = a});
+
+instance FromJSON Resource where
+        parseJSON
+          = withObject "Resource"
+              (\ x ->
+                 Resource' <$>
+                   (x .:? "ResourceType") <*> (x .:? "ResourceName"))
+
+-- | The settings for a trail.
+--
+-- /See:/ 'trail' smart constructor.
+data Trail = Trail'
+    { _tS3KeyPrefix                :: !(Maybe Text)
+    , _tSNSTopicName               :: !(Maybe Text)
+    , _tCloudWatchLogsLogGroupARN  :: !(Maybe Text)
+    , _tName                       :: !(Maybe Text)
+    , _tIncludeGlobalServiceEvents :: !(Maybe Bool)
+    , _tCloudWatchLogsRoleARN      :: !(Maybe Text)
+    , _tS3BucketName               :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Trail' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tS3KeyPrefix'
+--
+-- * 'tSNSTopicName'
+--
+-- * 'tCloudWatchLogsLogGroupARN'
+--
+-- * 'tName'
+--
+-- * 'tIncludeGlobalServiceEvents'
+--
+-- * 'tCloudWatchLogsRoleARN'
+--
+-- * 'tS3BucketName'
+trail
+    :: Trail
+trail =
+    Trail'
+    { _tS3KeyPrefix = Nothing
+    , _tSNSTopicName = Nothing
+    , _tCloudWatchLogsLogGroupARN = Nothing
+    , _tName = Nothing
+    , _tIncludeGlobalServiceEvents = Nothing
+    , _tCloudWatchLogsRoleARN = Nothing
+    , _tS3BucketName = Nothing
+    }
+
+-- | Value of the Amazon S3 prefix.
+tS3KeyPrefix :: Lens' Trail (Maybe Text)
+tS3KeyPrefix = lens _tS3KeyPrefix (\ s a -> s{_tS3KeyPrefix = a});
+
+-- | Name of the existing Amazon SNS topic that CloudTrail uses to notify the
+-- account owner when new CloudTrail log files have been delivered.
+tSNSTopicName :: Lens' Trail (Maybe Text)
+tSNSTopicName = lens _tSNSTopicName (\ s a -> s{_tSNSTopicName = a});
+
+-- | Specifies an Amazon Resource Name (ARN), a unique identifier that
+-- represents the log group to which CloudTrail logs will be delivered.
+tCloudWatchLogsLogGroupARN :: Lens' Trail (Maybe Text)
+tCloudWatchLogsLogGroupARN = lens _tCloudWatchLogsLogGroupARN (\ s a -> s{_tCloudWatchLogsLogGroupARN = a});
+
+-- | Name of the trail set by calling CreateTrail.
+tName :: Lens' Trail (Maybe Text)
+tName = lens _tName (\ s a -> s{_tName = a});
+
+-- | Set to __True__ to include AWS API calls from AWS global services such
+-- as IAM. Otherwise, __False__.
+tIncludeGlobalServiceEvents :: Lens' Trail (Maybe Bool)
+tIncludeGlobalServiceEvents = lens _tIncludeGlobalServiceEvents (\ s a -> s{_tIncludeGlobalServiceEvents = a});
+
+-- | Specifies the role for the CloudWatch Logs endpoint to assume to write
+-- to a user’s log group.
+tCloudWatchLogsRoleARN :: Lens' Trail (Maybe Text)
+tCloudWatchLogsRoleARN = lens _tCloudWatchLogsRoleARN (\ s a -> s{_tCloudWatchLogsRoleARN = a});
+
+-- | Name of the Amazon S3 bucket into which CloudTrail delivers your trail
+-- files.
+tS3BucketName :: Lens' Trail (Maybe Text)
+tS3BucketName = lens _tS3BucketName (\ s a -> s{_tS3BucketName = a});
+
+instance FromJSON Trail where
+        parseJSON
+          = withObject "Trail"
+              (\ x ->
+                 Trail' <$>
+                   (x .:? "S3KeyPrefix") <*> (x .:? "SnsTopicName") <*>
+                     (x .:? "CloudWatchLogsLogGroupArn")
+                     <*> (x .:? "Name")
+                     <*> (x .:? "IncludeGlobalServiceEvents")
+                     <*> (x .:? "CloudWatchLogsRoleArn")
+                     <*> (x .:? "S3BucketName"))
diff --git a/gen/Network/AWS/CloudTrail/Types/Sum.hs b/gen/Network/AWS/CloudTrail/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudTrail/Types/Sum.hs
@@ -0,0 +1,54 @@
+{-# 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.CloudTrail.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.CloudTrail.Types.Sum where
+
+import           Network.AWS.Prelude
+
+data LookupAttributeKey
+    = EventId
+    | EventName
+    | ResourceName
+    | ResourceType
+    | Username
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText LookupAttributeKey where
+    parser = takeLowerText >>= \case
+        "eventid" -> pure EventId
+        "eventname" -> pure EventName
+        "resourcename" -> pure ResourceName
+        "resourcetype" -> pure ResourceType
+        "username" -> pure Username
+        e -> fromTextError $ "Failure parsing LookupAttributeKey from value: '" <> e
+           <> "'. Accepted values: eventid, eventname, resourcename, resourcetype, username"
+
+instance ToText LookupAttributeKey where
+    toText = \case
+        EventId -> "eventid"
+        EventName -> "eventname"
+        ResourceName -> "resourcename"
+        ResourceType -> "resourcetype"
+        Username -> "username"
+
+instance Hashable     LookupAttributeKey
+instance ToByteString LookupAttributeKey
+instance ToQuery      LookupAttributeKey
+instance ToHeader     LookupAttributeKey
+
+instance ToJSON LookupAttributeKey where
+    toJSON = toJSONText
diff --git a/gen/Network/AWS/CloudTrail/UpdateTrail.hs b/gen/Network/AWS/CloudTrail/UpdateTrail.hs
--- a/gen/Network/AWS/CloudTrail/UpdateTrail.hs
+++ b/gen/Network/AWS/CloudTrail/UpdateTrail.hs
@@ -1,261 +1,272 @@
-{-# 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.CloudTrail.UpdateTrail
--- 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.
-
--- | From the command line, use 'update-subscription'.
+-- From the command line, use 'update-subscription'.
 --
--- Updates the settings that specify delivery of log files. Changes to a trail
--- do not require stopping the CloudTrail service. Use this action to designate
--- an existing bucket for log delivery. If the existing bucket has previously
--- been a target for CloudTrail log files, an IAM policy exists for the bucket.
+-- Updates the settings that specify delivery of log files. Changes to a
+-- trail do not require stopping the CloudTrail service. Use this action to
+-- designate an existing bucket for log delivery. If the existing bucket
+-- has previously been a target for CloudTrail log files, an IAM policy
+-- exists for the bucket.
 --
--- <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_UpdateTrail.html>
+-- /See:/ <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_UpdateTrail.html AWS API Reference> for UpdateTrail.
 module Network.AWS.CloudTrail.UpdateTrail
     (
-    -- * Request
-      UpdateTrail
-    -- ** Request constructor
-    , updateTrail
-    -- ** Request lenses
-    , utCloudWatchLogsLogGroupArn
-    , utCloudWatchLogsRoleArn
+    -- * Creating a Request
+      updateTrail
+    , UpdateTrail
+    -- * Request Lenses
+    , utS3KeyPrefix
+    , utSNSTopicName
+    , utCloudWatchLogsLogGroupARN
     , utIncludeGlobalServiceEvents
-    , utName
+    , utCloudWatchLogsRoleARN
     , utS3BucketName
-    , utS3KeyPrefix
-    , utSnsTopicName
+    , utName
 
-    -- * Response
-    , UpdateTrailResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , updateTrailResponse
-    -- ** Response lenses
-    , utrCloudWatchLogsLogGroupArn
-    , utrCloudWatchLogsRoleArn
-    , utrIncludeGlobalServiceEvents
-    , utrName
-    , utrS3BucketName
-    , utrS3KeyPrefix
-    , utrSnsTopicName
+    , UpdateTrailResponse
+    -- * Response Lenses
+    , utrsS3KeyPrefix
+    , utrsSNSTopicName
+    , utrsCloudWatchLogsLogGroupARN
+    , utrsName
+    , utrsIncludeGlobalServiceEvents
+    , utrsCloudWatchLogsRoleARN
+    , utrsS3BucketName
+    , utrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.CloudTrail.Types
-import qualified GHC.Exts
-
-data UpdateTrail = UpdateTrail
-    { _utCloudWatchLogsLogGroupArn  :: Maybe Text
-    , _utCloudWatchLogsRoleArn      :: Maybe Text
-    , _utIncludeGlobalServiceEvents :: Maybe Bool
-    , _utName                       :: Text
-    , _utS3BucketName               :: Maybe Text
-    , _utS3KeyPrefix                :: Maybe Text
-    , _utSnsTopicName               :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.CloudTrail.Types
+import           Network.AWS.CloudTrail.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'UpdateTrail' constructor.
+-- | Specifies settings to update for the trail.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'updateTrail' smart constructor.
+data UpdateTrail = UpdateTrail'
+    { _utS3KeyPrefix                :: !(Maybe Text)
+    , _utSNSTopicName               :: !(Maybe Text)
+    , _utCloudWatchLogsLogGroupARN  :: !(Maybe Text)
+    , _utIncludeGlobalServiceEvents :: !(Maybe Bool)
+    , _utCloudWatchLogsRoleARN      :: !(Maybe Text)
+    , _utS3BucketName               :: !(Maybe Text)
+    , _utName                       :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateTrail' with the minimum fields required to make a request.
 --
--- * 'utCloudWatchLogsLogGroupArn' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'utCloudWatchLogsRoleArn' @::@ 'Maybe' 'Text'
+-- * 'utS3KeyPrefix'
 --
--- * 'utIncludeGlobalServiceEvents' @::@ 'Maybe' 'Bool'
+-- * 'utSNSTopicName'
 --
--- * 'utName' @::@ 'Text'
+-- * 'utCloudWatchLogsLogGroupARN'
 --
--- * 'utS3BucketName' @::@ 'Maybe' 'Text'
+-- * 'utIncludeGlobalServiceEvents'
 --
--- * 'utS3KeyPrefix' @::@ 'Maybe' 'Text'
+-- * 'utCloudWatchLogsRoleARN'
 --
--- * 'utSnsTopicName' @::@ 'Maybe' 'Text'
+-- * 'utS3BucketName'
 --
-updateTrail :: Text -- ^ 'utName'
-            -> UpdateTrail
-updateTrail p1 = UpdateTrail
-    { _utName                       = p1
-    , _utS3BucketName               = Nothing
-    , _utS3KeyPrefix                = Nothing
-    , _utSnsTopicName               = Nothing
+-- * 'utName'
+updateTrail
+    :: Text -- ^ 'utName'
+    -> UpdateTrail
+updateTrail pName_ =
+    UpdateTrail'
+    { _utS3KeyPrefix = Nothing
+    , _utSNSTopicName = Nothing
+    , _utCloudWatchLogsLogGroupARN = Nothing
     , _utIncludeGlobalServiceEvents = Nothing
-    , _utCloudWatchLogsLogGroupArn  = Nothing
-    , _utCloudWatchLogsRoleArn      = Nothing
+    , _utCloudWatchLogsRoleARN = Nothing
+    , _utS3BucketName = Nothing
+    , _utName = pName_
     }
 
--- | Specifies a log group name using an Amazon Resource Name (ARN), a unique
--- identifier that represents the log group to which CloudTrail logs will be
--- delivered. Not required unless you specify CloudWatchLogsRoleArn.
-utCloudWatchLogsLogGroupArn :: Lens' UpdateTrail (Maybe Text)
-utCloudWatchLogsLogGroupArn =
-    lens _utCloudWatchLogsLogGroupArn
-        (\s a -> s { _utCloudWatchLogsLogGroupArn = a })
+-- | Specifies the Amazon S3 key prefix that precedes the name of the bucket
+-- you have designated for log file delivery.
+utS3KeyPrefix :: Lens' UpdateTrail (Maybe Text)
+utS3KeyPrefix = lens _utS3KeyPrefix (\ s a -> s{_utS3KeyPrefix = a});
 
--- | Specifies the role for the CloudWatch Logs endpoint to assume to write to a
--- user’s log group.
-utCloudWatchLogsRoleArn :: Lens' UpdateTrail (Maybe Text)
-utCloudWatchLogsRoleArn =
-    lens _utCloudWatchLogsRoleArn (\s a -> s { _utCloudWatchLogsRoleArn = a })
+-- | Specifies the name of the Amazon SNS topic defined for notification of
+-- log file delivery.
+utSNSTopicName :: Lens' UpdateTrail (Maybe Text)
+utSNSTopicName = lens _utSNSTopicName (\ s a -> s{_utSNSTopicName = a});
 
--- | Specifies whether the trail is publishing events from global services such as
--- IAM to the log files.
+-- | Specifies a log group name using an Amazon Resource Name (ARN), a unique
+-- identifier that represents the log group to which CloudTrail logs will
+-- be delivered. Not required unless you specify CloudWatchLogsRoleArn.
+utCloudWatchLogsLogGroupARN :: Lens' UpdateTrail (Maybe Text)
+utCloudWatchLogsLogGroupARN = lens _utCloudWatchLogsLogGroupARN (\ s a -> s{_utCloudWatchLogsLogGroupARN = a});
+
+-- | Specifies whether the trail is publishing events from global services
+-- such as IAM to the log files.
 utIncludeGlobalServiceEvents :: Lens' UpdateTrail (Maybe Bool)
-utIncludeGlobalServiceEvents =
-    lens _utIncludeGlobalServiceEvents
-        (\s a -> s { _utIncludeGlobalServiceEvents = a })
+utIncludeGlobalServiceEvents = lens _utIncludeGlobalServiceEvents (\ s a -> s{_utIncludeGlobalServiceEvents = a});
 
--- | Specifies the name of the trail.
-utName :: Lens' UpdateTrail Text
-utName = lens _utName (\s a -> s { _utName = a })
+-- | Specifies the role for the CloudWatch Logs endpoint to assume to write
+-- to a user’s log group.
+utCloudWatchLogsRoleARN :: Lens' UpdateTrail (Maybe Text)
+utCloudWatchLogsRoleARN = lens _utCloudWatchLogsRoleARN (\ s a -> s{_utCloudWatchLogsRoleARN = a});
 
 -- | Specifies the name of the Amazon S3 bucket designated for publishing log
 -- files.
 utS3BucketName :: Lens' UpdateTrail (Maybe Text)
-utS3BucketName = lens _utS3BucketName (\s a -> s { _utS3BucketName = a })
+utS3BucketName = lens _utS3BucketName (\ s a -> s{_utS3BucketName = a});
 
--- | Specifies the Amazon S3 key prefix that precedes the name of the bucket you
--- have designated for log file delivery.
-utS3KeyPrefix :: Lens' UpdateTrail (Maybe Text)
-utS3KeyPrefix = lens _utS3KeyPrefix (\s a -> s { _utS3KeyPrefix = a })
+-- | Specifies the name of the trail.
+utName :: Lens' UpdateTrail Text
+utName = lens _utName (\ s a -> s{_utName = a});
 
--- | Specifies the name of the Amazon SNS topic defined for notification of log
--- file delivery.
-utSnsTopicName :: Lens' UpdateTrail (Maybe Text)
-utSnsTopicName = lens _utSnsTopicName (\s a -> s { _utSnsTopicName = a })
+instance AWSRequest UpdateTrail where
+        type Sv UpdateTrail = CloudTrail
+        type Rs UpdateTrail = UpdateTrailResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdateTrailResponse' <$>
+                   (x .?> "S3KeyPrefix") <*> (x .?> "SnsTopicName") <*>
+                     (x .?> "CloudWatchLogsLogGroupArn")
+                     <*> (x .?> "Name")
+                     <*> (x .?> "IncludeGlobalServiceEvents")
+                     <*> (x .?> "CloudWatchLogsRoleArn")
+                     <*> (x .?> "S3BucketName")
+                     <*> (pure (fromEnum s)))
 
-data UpdateTrailResponse = UpdateTrailResponse
-    { _utrCloudWatchLogsLogGroupArn  :: Maybe Text
-    , _utrCloudWatchLogsRoleArn      :: Maybe Text
-    , _utrIncludeGlobalServiceEvents :: Maybe Bool
-    , _utrName                       :: Maybe Text
-    , _utrS3BucketName               :: Maybe Text
-    , _utrS3KeyPrefix                :: Maybe Text
-    , _utrSnsTopicName               :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+instance ToHeaders UpdateTrail where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("com.amazonaws.cloudtrail.v20131101.CloudTrail_20131101.UpdateTrail"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | 'UpdateTrailResponse' constructor.
+instance ToJSON UpdateTrail where
+        toJSON UpdateTrail'{..}
+          = object
+              ["S3KeyPrefix" .= _utS3KeyPrefix,
+               "SnsTopicName" .= _utSNSTopicName,
+               "CloudWatchLogsLogGroupArn" .=
+                 _utCloudWatchLogsLogGroupARN,
+               "IncludeGlobalServiceEvents" .=
+                 _utIncludeGlobalServiceEvents,
+               "CloudWatchLogsRoleArn" .= _utCloudWatchLogsRoleARN,
+               "S3BucketName" .= _utS3BucketName, "Name" .= _utName]
+
+instance ToPath UpdateTrail where
+        toPath = const "/"
+
+instance ToQuery UpdateTrail where
+        toQuery = const mempty
+
+-- | Returns the objects or data listed below if successful. Otherwise,
+-- returns an error.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'updateTrailResponse' smart constructor.
+data UpdateTrailResponse = UpdateTrailResponse'
+    { _utrsS3KeyPrefix                :: !(Maybe Text)
+    , _utrsSNSTopicName               :: !(Maybe Text)
+    , _utrsCloudWatchLogsLogGroupARN  :: !(Maybe Text)
+    , _utrsName                       :: !(Maybe Text)
+    , _utrsIncludeGlobalServiceEvents :: !(Maybe Bool)
+    , _utrsCloudWatchLogsRoleARN      :: !(Maybe Text)
+    , _utrsS3BucketName               :: !(Maybe Text)
+    , _utrsStatus                     :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateTrailResponse' with the minimum fields required to make a request.
 --
--- * 'utrCloudWatchLogsLogGroupArn' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'utrCloudWatchLogsRoleArn' @::@ 'Maybe' 'Text'
+-- * 'utrsS3KeyPrefix'
 --
--- * 'utrIncludeGlobalServiceEvents' @::@ 'Maybe' 'Bool'
+-- * 'utrsSNSTopicName'
 --
--- * 'utrName' @::@ 'Maybe' 'Text'
+-- * 'utrsCloudWatchLogsLogGroupARN'
 --
--- * 'utrS3BucketName' @::@ 'Maybe' 'Text'
+-- * 'utrsName'
 --
--- * 'utrS3KeyPrefix' @::@ 'Maybe' 'Text'
+-- * 'utrsIncludeGlobalServiceEvents'
 --
--- * 'utrSnsTopicName' @::@ 'Maybe' 'Text'
+-- * 'utrsCloudWatchLogsRoleARN'
 --
-updateTrailResponse :: UpdateTrailResponse
-updateTrailResponse = UpdateTrailResponse
-    { _utrName                       = Nothing
-    , _utrS3BucketName               = Nothing
-    , _utrS3KeyPrefix                = Nothing
-    , _utrSnsTopicName               = Nothing
-    , _utrIncludeGlobalServiceEvents = Nothing
-    , _utrCloudWatchLogsLogGroupArn  = Nothing
-    , _utrCloudWatchLogsRoleArn      = Nothing
+-- * 'utrsS3BucketName'
+--
+-- * 'utrsStatus'
+updateTrailResponse
+    :: Int -- ^ 'utrsStatus'
+    -> UpdateTrailResponse
+updateTrailResponse pStatus_ =
+    UpdateTrailResponse'
+    { _utrsS3KeyPrefix = Nothing
+    , _utrsSNSTopicName = Nothing
+    , _utrsCloudWatchLogsLogGroupARN = Nothing
+    , _utrsName = Nothing
+    , _utrsIncludeGlobalServiceEvents = Nothing
+    , _utrsCloudWatchLogsRoleARN = Nothing
+    , _utrsS3BucketName = Nothing
+    , _utrsStatus = pStatus_
     }
 
--- | Specifies the Amazon Resource Name (ARN) of the log group to which CloudTrail
--- logs will be delivered.
-utrCloudWatchLogsLogGroupArn :: Lens' UpdateTrailResponse (Maybe Text)
-utrCloudWatchLogsLogGroupArn =
-    lens _utrCloudWatchLogsLogGroupArn
-        (\s a -> s { _utrCloudWatchLogsLogGroupArn = a })
+-- | Specifies the Amazon S3 key prefix that precedes the name of the bucket
+-- you have designated for log file delivery.
+utrsS3KeyPrefix :: Lens' UpdateTrailResponse (Maybe Text)
+utrsS3KeyPrefix = lens _utrsS3KeyPrefix (\ s a -> s{_utrsS3KeyPrefix = a});
 
--- | Specifies the role for the CloudWatch Logs endpoint to assume to write to a
--- user’s log group.
-utrCloudWatchLogsRoleArn :: Lens' UpdateTrailResponse (Maybe Text)
-utrCloudWatchLogsRoleArn =
-    lens _utrCloudWatchLogsRoleArn
-        (\s a -> s { _utrCloudWatchLogsRoleArn = a })
+-- | Specifies the name of the Amazon SNS topic defined for notification of
+-- log file delivery.
+utrsSNSTopicName :: Lens' UpdateTrailResponse (Maybe Text)
+utrsSNSTopicName = lens _utrsSNSTopicName (\ s a -> s{_utrsSNSTopicName = a});
 
--- | Specifies whether the trail is publishing events from global services such as
--- IAM to the log files.
-utrIncludeGlobalServiceEvents :: Lens' UpdateTrailResponse (Maybe Bool)
-utrIncludeGlobalServiceEvents =
-    lens _utrIncludeGlobalServiceEvents
-        (\s a -> s { _utrIncludeGlobalServiceEvents = a })
+-- | Specifies the Amazon Resource Name (ARN) of the log group to which
+-- CloudTrail logs will be delivered.
+utrsCloudWatchLogsLogGroupARN :: Lens' UpdateTrailResponse (Maybe Text)
+utrsCloudWatchLogsLogGroupARN = lens _utrsCloudWatchLogsLogGroupARN (\ s a -> s{_utrsCloudWatchLogsLogGroupARN = a});
 
 -- | Specifies the name of the trail.
-utrName :: Lens' UpdateTrailResponse (Maybe Text)
-utrName = lens _utrName (\s a -> s { _utrName = a })
-
--- | Specifies the name of the Amazon S3 bucket designated for publishing log
--- files.
-utrS3BucketName :: Lens' UpdateTrailResponse (Maybe Text)
-utrS3BucketName = lens _utrS3BucketName (\s a -> s { _utrS3BucketName = a })
-
--- | Specifies the Amazon S3 key prefix that precedes the name of the bucket you
--- have designated for log file delivery.
-utrS3KeyPrefix :: Lens' UpdateTrailResponse (Maybe Text)
-utrS3KeyPrefix = lens _utrS3KeyPrefix (\s a -> s { _utrS3KeyPrefix = a })
-
--- | Specifies the name of the Amazon SNS topic defined for notification of log
--- file delivery.
-utrSnsTopicName :: Lens' UpdateTrailResponse (Maybe Text)
-utrSnsTopicName = lens _utrSnsTopicName (\s a -> s { _utrSnsTopicName = a })
-
-instance ToPath UpdateTrail where
-    toPath = const "/"
-
-instance ToQuery UpdateTrail where
-    toQuery = const mempty
-
-instance ToHeaders UpdateTrail
+utrsName :: Lens' UpdateTrailResponse (Maybe Text)
+utrsName = lens _utrsName (\ s a -> s{_utrsName = a});
 
-instance ToJSON UpdateTrail where
-    toJSON UpdateTrail{..} = object
-        [ "Name"                       .= _utName
-        , "S3BucketName"               .= _utS3BucketName
-        , "S3KeyPrefix"                .= _utS3KeyPrefix
-        , "SnsTopicName"               .= _utSnsTopicName
-        , "IncludeGlobalServiceEvents" .= _utIncludeGlobalServiceEvents
-        , "CloudWatchLogsLogGroupArn"  .= _utCloudWatchLogsLogGroupArn
-        , "CloudWatchLogsRoleArn"      .= _utCloudWatchLogsRoleArn
-        ]
+-- | Specifies whether the trail is publishing events from global services
+-- such as IAM to the log files.
+utrsIncludeGlobalServiceEvents :: Lens' UpdateTrailResponse (Maybe Bool)
+utrsIncludeGlobalServiceEvents = lens _utrsIncludeGlobalServiceEvents (\ s a -> s{_utrsIncludeGlobalServiceEvents = a});
 
-instance AWSRequest UpdateTrail where
-    type Sv UpdateTrail = CloudTrail
-    type Rs UpdateTrail = UpdateTrailResponse
+-- | Specifies the role for the CloudWatch Logs endpoint to assume to write
+-- to a user’s log group.
+utrsCloudWatchLogsRoleARN :: Lens' UpdateTrailResponse (Maybe Text)
+utrsCloudWatchLogsRoleARN = lens _utrsCloudWatchLogsRoleARN (\ s a -> s{_utrsCloudWatchLogsRoleARN = a});
 
-    request  = post "UpdateTrail"
-    response = jsonResponse
+-- | Specifies the name of the Amazon S3 bucket designated for publishing log
+-- files.
+utrsS3BucketName :: Lens' UpdateTrailResponse (Maybe Text)
+utrsS3BucketName = lens _utrsS3BucketName (\ s a -> s{_utrsS3BucketName = a});
 
-instance FromJSON UpdateTrailResponse where
-    parseJSON = withObject "UpdateTrailResponse" $ \o -> UpdateTrailResponse
-        <$> o .:? "CloudWatchLogsLogGroupArn"
-        <*> o .:? "CloudWatchLogsRoleArn"
-        <*> o .:? "IncludeGlobalServiceEvents"
-        <*> o .:? "Name"
-        <*> o .:? "S3BucketName"
-        <*> o .:? "S3KeyPrefix"
-        <*> o .:? "SnsTopicName"
+-- | The response status code.
+utrsStatus :: Lens' UpdateTrailResponse Int
+utrsStatus = lens _utrsStatus (\ s a -> s{_utrsStatus = a});
diff --git a/gen/Network/AWS/CloudTrail/Waiters.hs b/gen/Network/AWS/CloudTrail/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudTrail/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.CloudTrail.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.CloudTrail.Waiters where
+
+import           Network.AWS.CloudTrail.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.CloudTrail
+import Test.AWS.CloudTrail.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "CloudTrail"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/CloudTrail.hs b/test/Test/AWS/CloudTrail.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/CloudTrail.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Module      : Test.AWS.CloudTrail
+-- 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.CloudTrail
+    ( tests
+    , fixtures
+    ) where
+
+import           Network.AWS.CloudTrail
+import           Test.AWS.Gen.CloudTrail
+import           Test.Tasty
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/CloudTrail/Internal.hs b/test/Test/AWS/CloudTrail/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/CloudTrail/Internal.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Test.AWS.CloudTrail.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.CloudTrail.Internal where
+
+import Test.AWS.Prelude
diff --git a/test/Test/AWS/Gen/CloudTrail.hs b/test/Test/AWS/Gen/CloudTrail.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/CloudTrail.hs
@@ -0,0 +1,175 @@
+{-# 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.CloudTrail
+-- 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.CloudTrail where
+
+import Data.Proxy
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+import Network.AWS.CloudTrail
+import Test.AWS.CloudTrail.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"
+--         [ testDescribeTrails $
+--             describeTrails
+--
+--         , testLookupEvents $
+--             lookupEvents
+--
+--         , testStopLogging $
+--             stopLogging
+--
+--         , testDeleteTrail $
+--             deleteTrail
+--
+--         , testUpdateTrail $
+--             updateTrail
+--
+--         , testCreateTrail $
+--             createTrail
+--
+--         , testGetTrailStatus $
+--             getTrailStatus
+--
+--         , testStartLogging $
+--             startLogging
+--
+--           ]
+
+--     , testGroup "response"
+--         [ testDescribeTrailsResponse $
+--             describeTrailsResponse
+--
+--         , testLookupEventsResponse $
+--             lookupEventsResponse
+--
+--         , testStopLoggingResponse $
+--             stopLoggingResponse
+--
+--         , testDeleteTrailResponse $
+--             deleteTrailResponse
+--
+--         , testUpdateTrailResponse $
+--             updateTrailResponse
+--
+--         , testCreateTrailResponse $
+--             createTrailResponse
+--
+--         , testGetTrailStatusResponse $
+--             getTrailStatusResponse
+--
+--         , testStartLoggingResponse $
+--             startLoggingResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+testDescribeTrails :: DescribeTrails -> TestTree
+testDescribeTrails = req
+    "DescribeTrails"
+    "fixture/DescribeTrails"
+
+testLookupEvents :: LookupEvents -> TestTree
+testLookupEvents = req
+    "LookupEvents"
+    "fixture/LookupEvents"
+
+testStopLogging :: StopLogging -> TestTree
+testStopLogging = req
+    "StopLogging"
+    "fixture/StopLogging"
+
+testDeleteTrail :: DeleteTrail -> TestTree
+testDeleteTrail = req
+    "DeleteTrail"
+    "fixture/DeleteTrail"
+
+testUpdateTrail :: UpdateTrail -> TestTree
+testUpdateTrail = req
+    "UpdateTrail"
+    "fixture/UpdateTrail"
+
+testCreateTrail :: CreateTrail -> TestTree
+testCreateTrail = req
+    "CreateTrail"
+    "fixture/CreateTrail"
+
+testGetTrailStatus :: GetTrailStatus -> TestTree
+testGetTrailStatus = req
+    "GetTrailStatus"
+    "fixture/GetTrailStatus"
+
+testStartLogging :: StartLogging -> TestTree
+testStartLogging = req
+    "StartLogging"
+    "fixture/StartLogging"
+
+-- Responses
+
+testDescribeTrailsResponse :: DescribeTrailsResponse -> TestTree
+testDescribeTrailsResponse = res
+    "DescribeTrailsResponse"
+    "fixture/DescribeTrailsResponse"
+    (Proxy :: Proxy DescribeTrails)
+
+testLookupEventsResponse :: LookupEventsResponse -> TestTree
+testLookupEventsResponse = res
+    "LookupEventsResponse"
+    "fixture/LookupEventsResponse"
+    (Proxy :: Proxy LookupEvents)
+
+testStopLoggingResponse :: StopLoggingResponse -> TestTree
+testStopLoggingResponse = res
+    "StopLoggingResponse"
+    "fixture/StopLoggingResponse"
+    (Proxy :: Proxy StopLogging)
+
+testDeleteTrailResponse :: DeleteTrailResponse -> TestTree
+testDeleteTrailResponse = res
+    "DeleteTrailResponse"
+    "fixture/DeleteTrailResponse"
+    (Proxy :: Proxy DeleteTrail)
+
+testUpdateTrailResponse :: UpdateTrailResponse -> TestTree
+testUpdateTrailResponse = res
+    "UpdateTrailResponse"
+    "fixture/UpdateTrailResponse"
+    (Proxy :: Proxy UpdateTrail)
+
+testCreateTrailResponse :: CreateTrailResponse -> TestTree
+testCreateTrailResponse = res
+    "CreateTrailResponse"
+    "fixture/CreateTrailResponse"
+    (Proxy :: Proxy CreateTrail)
+
+testGetTrailStatusResponse :: GetTrailStatusResponse -> TestTree
+testGetTrailStatusResponse = res
+    "GetTrailStatusResponse"
+    "fixture/GetTrailStatusResponse"
+    (Proxy :: Proxy GetTrailStatus)
+
+testStartLoggingResponse :: StartLoggingResponse -> TestTree
+testStartLoggingResponse = res
+    "StartLoggingResponse"
+    "fixture/StartLoggingResponse"
+    (Proxy :: Proxy StartLogging)
