diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,28 +1,40 @@
 # Amazon Lambda 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
 
-AWS Lambda is a compute service that runs your code in response to events and
-automatically manages the compute resources for you, making it easy to build
-applications that respond quickly to new information. AWS Lambda starts
-running your code within milliseconds of an event such as an image upload,
-in-app activity, website click, or output from a connected device. You can
-also use AWS Lambda to create new back-end services where compute resources
-are automatically triggered based on custom requests. With AWS Lambda you pay
-only for the requests served and the compute time required to run your code.
-Billing is metered in increments of 100 milliseconds, making it
-cost-effective and easy to scale automatically from a few requests per day to
-thousands per second.
+AWS Lambda
 
+__Overview__
+
+This is the /AWS Lambda API Reference/. The AWS Lambda Developer Guide
+provides additional information. For the service overview, go to
+<http://docs.aws.amazon.com/lambda/latest/dg/welcome.html What is AWS Lambda>,
+and for information about how the service works, go to
+<http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html AWS Lambda: How it Works>
+in the /AWS Lambda Developer Guide/.
+
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-lambda)
 and the [AWS API Reference](http://docs.aws.amazon.com/lambda/latest/dg/API_Reference.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-lambda.cabal b/amazonka-lambda.cabal
--- a/amazonka-lambda.cabal
+++ b/amazonka-lambda.cabal
@@ -1,35 +1,42 @@
 name:                  amazonka-lambda
-version:               0.3.6
+version:               1.0.0
 synopsis:              Amazon Lambda 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:
-    AWS Lambda is a compute service that runs your code in response to events and
-    automatically manages the compute resources for you, making it easy to build
-    applications that respond quickly to new information. AWS Lambda starts
-    running your code within milliseconds of an event such as an image upload,
-    in-app activity, website click, or output from a connected device. You can
-    also use AWS Lambda to create new back-end services where compute resources
-    are automatically triggered based on custom requests. With AWS Lambda you pay
-    only for the requests served and the compute time required to run your code.
-    Billing is metered in increments of 100 milliseconds, making it
-    cost-effective and easy to scale automatically from a few requests per day to
-    thousands per second.
+    AWS Lambda
 
+    __Overview__
+
+    This is the /AWS Lambda API Reference/. The AWS Lambda Developer Guide
+    provides additional information. For the service overview, go to
+    <http://docs.aws.amazon.com/lambda/latest/dg/welcome.html What is AWS Lambda>,
+    and for information about how the service works, go to
+    <http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html AWS Lambda: How it Works>
+    in the /AWS Lambda Developer Guide/.
     .
-    /See:/ <http://docs.aws.amazon.com/lambda/latest/dg/API_Reference.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.Lambda" and the <http://docs.aws.amazon.com/lambda/latest/dg/API_Reference.html AWS API Reference>
+    to get started.
 
 source-repository head
     type:     git
@@ -53,7 +60,6 @@
         , Network.AWS.Lambda.GetFunctionConfiguration
         , Network.AWS.Lambda.GetPolicy
         , Network.AWS.Lambda.Invoke
-        , Network.AWS.Lambda.InvokeAsync
         , Network.AWS.Lambda.ListEventSourceMappings
         , Network.AWS.Lambda.ListFunctions
         , Network.AWS.Lambda.RemovePermission
@@ -61,9 +67,40 @@
         , Network.AWS.Lambda.UpdateEventSourceMapping
         , Network.AWS.Lambda.UpdateFunctionCode
         , Network.AWS.Lambda.UpdateFunctionConfiguration
+        , Network.AWS.Lambda.Waiters
 
     other-modules:
+          Network.AWS.Lambda.Types.Product
+        , Network.AWS.Lambda.Types.Sum
 
     build-depends:
-          amazonka-core == 0.3.6.*
+          amazonka-core == 1.0.0.*
         , base          >= 4.7     && < 5
+
+test-suite amazonka-lambda-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.Lambda
+        , Test.AWS.Gen.Lambda
+        , Test.AWS.Lambda.Internal
+
+    build-depends:
+          amazonka-core == 1.0.0
+        , amazonka-test == 1.0.0
+        , amazonka-lambda == 1.0.0
+        , base
+        , bytestring
+        , lens
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/gen/Network/AWS/Lambda.hs b/gen/Network/AWS/Lambda.hs
--- a/gen/Network/AWS/Lambda.hs
+++ b/gen/Network/AWS/Lambda.hs
@@ -1,62 +1,220 @@
+{-# 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.Lambda
--- 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.
-
--- | AWS Lambda is a compute service that runs your code in response to events and
--- automatically manages the compute resources for you, making it easy to build
--- applications that respond quickly to new information. AWS Lambda starts
--- running your code within milliseconds of an event such as an image upload,
--- in-app activity, website click, or output from a connected device. You can
--- also use AWS Lambda to create new back-end services where compute resources
--- are automatically triggered based on custom requests. With AWS Lambda you pay
--- only for the requests served and the compute time required to run your code.
--- Billing is metered in increments of 100 milliseconds, making it
--- cost-effective and easy to scale automatically from a few requests per day to
--- thousands per second.
+-- AWS Lambda
+--
+-- __Overview__
+--
+-- This is the /AWS Lambda API Reference/. The AWS Lambda Developer Guide
+-- provides additional information. For the service overview, go to
+-- <http://docs.aws.amazon.com/lambda/latest/dg/welcome.html What is AWS Lambda>,
+-- and for information about how the service works, go to
+-- <http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html AWS Lambda: How it Works>
+-- in the /AWS Lambda Developer Guide/.
+--
+-- /See:/ <http://docs.aws.amazon.com/lambda/latest/dg/API_Reference.html AWS API Reference>
 module Network.AWS.Lambda
-    ( module Network.AWS.Lambda.AddPermission
-    , module Network.AWS.Lambda.CreateEventSourceMapping
-    , module Network.AWS.Lambda.CreateFunction
+    (
+    -- * Service
+      Lambda
+
+    -- * Errors
+    -- $errors
+
+    -- ** PolicyLengthExceededException
+    , _PolicyLengthExceededException
+
+    -- ** UnsupportedMediaTypeException
+    , _UnsupportedMediaTypeException
+
+    -- ** InvalidRequestContentException
+    , _InvalidRequestContentException
+
+    -- ** InvalidParameterValueException
+    , _InvalidParameterValueException
+
+    -- ** RequestTooLargeException
+    , _RequestTooLargeException
+
+    -- ** TooManyRequestsException
+    , _TooManyRequestsException
+
+    -- ** ServiceException
+    , _ServiceException
+
+    -- ** CodeStorageExceededException
+    , _CodeStorageExceededException
+
+    -- ** ResourceConflictException
+    , _ResourceConflictException
+
+    -- ** ResourceNotFoundException
+    , _ResourceNotFoundException
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** GetFunctionConfiguration
+    , module Network.AWS.Lambda.GetFunctionConfiguration
+
+    -- ** UpdateEventSourceMapping
+    , module Network.AWS.Lambda.UpdateEventSourceMapping
+
+    -- ** DeleteEventSourceMapping
     , module Network.AWS.Lambda.DeleteEventSourceMapping
-    , module Network.AWS.Lambda.DeleteFunction
+
+    -- ** RemovePermission
+    , module Network.AWS.Lambda.RemovePermission
+
+    -- ** Invoke
+    , module Network.AWS.Lambda.Invoke
+
+    -- ** GetEventSourceMapping
     , module Network.AWS.Lambda.GetEventSourceMapping
+
+    -- ** CreateFunction
+    , module Network.AWS.Lambda.CreateFunction
+
+    -- ** CreateEventSourceMapping
+    , module Network.AWS.Lambda.CreateEventSourceMapping
+
+    -- ** GetFunction
     , module Network.AWS.Lambda.GetFunction
-    , module Network.AWS.Lambda.GetFunctionConfiguration
-    , module Network.AWS.Lambda.GetPolicy
-    , module Network.AWS.Lambda.Invoke
-    , module Network.AWS.Lambda.InvokeAsync
+
+    -- ** ListEventSourceMappings (Paginated)
     , module Network.AWS.Lambda.ListEventSourceMappings
+
+    -- ** AddPermission
+    , module Network.AWS.Lambda.AddPermission
+
+    -- ** DeleteFunction
+    , module Network.AWS.Lambda.DeleteFunction
+
+    -- ** UpdateFunctionConfiguration
+    , module Network.AWS.Lambda.UpdateFunctionConfiguration
+
+    -- ** ListFunctions (Paginated)
     , module Network.AWS.Lambda.ListFunctions
-    , module Network.AWS.Lambda.RemovePermission
-    , module Network.AWS.Lambda.Types
-    , module Network.AWS.Lambda.UpdateEventSourceMapping
+
+    -- ** UpdateFunctionCode
     , module Network.AWS.Lambda.UpdateFunctionCode
-    , module Network.AWS.Lambda.UpdateFunctionConfiguration
+
+    -- ** GetPolicy
+    , module Network.AWS.Lambda.GetPolicy
+
+    -- * Types
+
+    -- ** EventSourcePosition
+    , EventSourcePosition (..)
+
+    -- ** InvocationType
+    , InvocationType (..)
+
+    -- ** LogType
+    , LogType (..)
+
+    -- ** Runtime
+    , Runtime (..)
+
+    -- ** EventSourceMappingConfiguration
+    , EventSourceMappingConfiguration
+    , eventSourceMappingConfiguration
+    , esmcEventSourceARN
+    , esmcFunctionARN
+    , esmcState
+    , esmcUUId
+    , esmcLastProcessingResult
+    , esmcBatchSize
+    , esmcStateTransitionReason
+    , esmcLastModified
+
+    -- ** FunctionCode
+    , FunctionCode
+    , functionCode
+    , fcS3ObjectVersion
+    , fcS3Key
+    , fcZipFile
+    , fcS3Bucket
+
+    -- ** FunctionCodeLocation
+    , FunctionCodeLocation
+    , functionCodeLocation
+    , fclLocation
+    , fclRepositoryType
+
+    -- ** FunctionConfiguration
+    , FunctionConfiguration
+    , functionConfiguration
+    , fcRuntime
+    , fcMemorySize
+    , fcFunctionARN
+    , fcRole
+    , fcFunctionName
+    , fcCodeSize
+    , fcHandler
+    , fcTimeout
+    , fcLastModified
+    , fcDescription
     ) where
 
-import Network.AWS.Lambda.AddPermission
-import Network.AWS.Lambda.CreateEventSourceMapping
-import Network.AWS.Lambda.CreateFunction
-import Network.AWS.Lambda.DeleteEventSourceMapping
-import Network.AWS.Lambda.DeleteFunction
-import Network.AWS.Lambda.GetEventSourceMapping
-import Network.AWS.Lambda.GetFunction
-import Network.AWS.Lambda.GetFunctionConfiguration
-import Network.AWS.Lambda.GetPolicy
-import Network.AWS.Lambda.Invoke
-import Network.AWS.Lambda.InvokeAsync
-import Network.AWS.Lambda.ListEventSourceMappings
-import Network.AWS.Lambda.ListFunctions
-import Network.AWS.Lambda.RemovePermission
-import Network.AWS.Lambda.Types
-import Network.AWS.Lambda.UpdateEventSourceMapping
-import Network.AWS.Lambda.UpdateFunctionCode
-import Network.AWS.Lambda.UpdateFunctionConfiguration
+import           Network.AWS.Lambda.AddPermission
+import           Network.AWS.Lambda.CreateEventSourceMapping
+import           Network.AWS.Lambda.CreateFunction
+import           Network.AWS.Lambda.DeleteEventSourceMapping
+import           Network.AWS.Lambda.DeleteFunction
+import           Network.AWS.Lambda.GetEventSourceMapping
+import           Network.AWS.Lambda.GetFunction
+import           Network.AWS.Lambda.GetFunctionConfiguration
+import           Network.AWS.Lambda.GetPolicy
+import           Network.AWS.Lambda.Invoke
+import           Network.AWS.Lambda.ListEventSourceMappings
+import           Network.AWS.Lambda.ListFunctions
+import           Network.AWS.Lambda.RemovePermission
+import           Network.AWS.Lambda.Types
+import           Network.AWS.Lambda.UpdateEventSourceMapping
+import           Network.AWS.Lambda.UpdateFunctionCode
+import           Network.AWS.Lambda.UpdateFunctionConfiguration
+import           Network.AWS.Lambda.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 'Lambda'.
+-}
+
+{- $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/Lambda/AddPermission.hs b/gen/Network/AWS/Lambda/AddPermission.hs
--- a/gen/Network/AWS/Lambda/AddPermission.hs
+++ b/gen/Network/AWS/Lambda/AddPermission.hs
@@ -1,204 +1,219 @@
-{-# 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.Lambda.AddPermission
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Adds a permission to the access policy associated with the specified AWS
--- Lambda function. In a "push event" model, the access policy attached to the
--- Lambda function grants Amazon S3 or a user application permission for the
--- Lambda 'lambda:Invoke' action. For information about the push model, see <http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html AWSLambda: How it Works>. Each Lambda function has one access policy associated
--- with it. You can use the 'AddPermission' API to add a permission to the policy.
--- You have one access policy but it can have multiple permission statements.
+-- Adds a permission to the access policy associated with the specified AWS
+-- Lambda function. In a \"push event\" model, the access policy attached
+-- to the Lambda function grants Amazon S3 or a user application permission
+-- for the Lambda 'lambda:Invoke' action. For information about the push
+-- model, see
+-- <http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html AWS Lambda: How it Works>.
+-- Each Lambda function has one access policy associated with it. You can
+-- use the 'AddPermission' API to add a permission to the policy. You have
+-- one access policy but it can have multiple permission statements.
 --
--- This operation requires permission for the 'lambda:AddPermission' action.
+-- This operation requires permission for the 'lambda:AddPermission'
+-- action.
 --
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html>
+-- /See:/ <http://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html AWS API Reference> for AddPermission.
 module Network.AWS.Lambda.AddPermission
     (
-    -- * Request
-      AddPermission
-    -- ** Request constructor
-    , addPermission
-    -- ** Request lenses
-    , apAction
-    , apFunctionName
-    , apPrincipal
+    -- * Creating a Request
+      addPermission
+    , AddPermission
+    -- * Request Lenses
     , apSourceAccount
-    , apSourceArn
+    , apSourceARN
+    , apFunctionName
     , apStatementId
+    , apAction
+    , apPrincipal
 
-    -- * Response
-    , AddPermissionResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , addPermissionResponse
-    -- ** Response lenses
-    , aprStatement
+    , AddPermissionResponse
+    -- * Response Lenses
+    , aprsStatement
+    , aprsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
+import           Network.AWS.Lambda.Types
+import           Network.AWS.Lambda.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data AddPermission = AddPermission
-    { _apAction        :: Text
-    , _apFunctionName  :: Text
-    , _apPrincipal     :: Text
-    , _apSourceAccount :: Maybe Text
-    , _apSourceArn     :: Maybe Text
-    , _apStatementId   :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'addPermission' smart constructor.
+data AddPermission = AddPermission'
+    { _apSourceAccount :: !(Maybe Text)
+    , _apSourceARN     :: !(Maybe Text)
+    , _apFunctionName  :: !Text
+    , _apStatementId   :: !Text
+    , _apAction        :: !Text
+    , _apPrincipal     :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'AddPermission' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'AddPermission' with the minimum fields required to make a request.
 --
--- * 'apAction' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'apFunctionName' @::@ 'Text'
+-- * 'apSourceAccount'
 --
--- * 'apPrincipal' @::@ 'Text'
+-- * 'apSourceARN'
 --
--- * 'apSourceAccount' @::@ 'Maybe' 'Text'
+-- * 'apFunctionName'
 --
--- * 'apSourceArn' @::@ 'Maybe' 'Text'
+-- * 'apStatementId'
 --
--- * 'apStatementId' @::@ 'Text'
+-- * 'apAction'
 --
-addPermission :: Text -- ^ 'apFunctionName'
-              -> Text -- ^ 'apStatementId'
-              -> Text -- ^ 'apAction'
-              -> Text -- ^ 'apPrincipal'
-              -> AddPermission
-addPermission p1 p2 p3 p4 = AddPermission
-    { _apFunctionName  = p1
-    , _apStatementId   = p2
-    , _apAction        = p3
-    , _apPrincipal     = p4
-    , _apSourceArn     = Nothing
-    , _apSourceAccount = Nothing
+-- * 'apPrincipal'
+addPermission
+    :: Text -- ^ 'apFunctionName'
+    -> Text -- ^ 'apStatementId'
+    -> Text -- ^ 'apAction'
+    -> Text -- ^ 'apPrincipal'
+    -> AddPermission
+addPermission pFunctionName_ pStatementId_ pAction_ pPrincipal_ =
+    AddPermission'
+    { _apSourceAccount = Nothing
+    , _apSourceARN = Nothing
+    , _apFunctionName = pFunctionName_
+    , _apStatementId = pStatementId_
+    , _apAction = pAction_
+    , _apPrincipal = pPrincipal_
     }
 
--- | The AWS Lambda action you want to allow in this statement. Each Lambda action
--- is a string starting with "lambda:" followed by the API name (see 'Operations'). For example, "lambda:CreateFunction". You can use wildcard ("lambda:*") to grant permission for all AWS Lambda actions.
-apAction :: Lens' AddPermission Text
-apAction = lens _apAction (\s a -> s { _apAction = a })
+-- | The AWS account ID (without a hyphen) of the source owner. For example,
+-- if the 'SourceArn' identifies a bucket, then this is the bucket owner\'s
+-- account ID. You can use this additional condition to ensure the bucket
+-- you specify is owned by a specific account (it is possible the bucket
+-- owner deleted the bucket and some other AWS account created the bucket).
+-- You can also use this condition to specify all sources (that is, you
+-- don\'t specify the 'SourceArn') owned by a specific account.
+apSourceAccount :: Lens' AddPermission (Maybe Text)
+apSourceAccount = lens _apSourceAccount (\ s a -> s{_apSourceAccount = a});
 
--- | Name of the Lambda function whose access policy you are updating by adding a
--- new permission.
+-- | This is optional; however, when granting Amazon S3 permission to invoke
+-- your function, you should specify this field with the bucket Amazon
+-- Resource Name (ARN) as its value. This ensures that only events
+-- generated from the specified bucket can invoke the function.
 --
--- You can specify an unqualified function name (for example, "Thumbnail") or
--- you can specify Amazon Resource Name (ARN) of the function (for example,
--- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
--- allows you to specify only the account ID qualifier (for example,
--- "account-id:Thumbnail"). Note that the length constraint applies only to the
--- ARN. If you specify only the function name, it is limited to 64 character in
--- length.
-apFunctionName :: Lens' AddPermission Text
-apFunctionName = lens _apFunctionName (\s a -> s { _apFunctionName = a })
-
--- | The principal who is getting this permission. It can be Amazon S3 service
--- Principal ("s3.amazonaws.com") if you want Amazon S3 to invoke the function,
--- an AWS account ID if you are granting cross-account permission, or any valid
--- AWS service principal such as "sns.amazonaws.com". For example, you might
--- want to allow a custom application in another AWS account to push events to
--- AWS Lambda by invoking your function.
-apPrincipal :: Lens' AddPermission Text
-apPrincipal = lens _apPrincipal (\s a -> s { _apPrincipal = a })
-
--- | The AWS account ID (without a hyphen) of the source owner. If the 'SourceArn'
--- identifies a bucket, then this is the bucket owner's account ID. You can use
--- this additional condition to ensure the bucket you specify is owned by a
--- specific account (it is possible the bucket owner deleted the bucket and some
--- other AWS account created the bucket). You can also use this condition to
--- specify all sources (that is, you don't specify the 'SourceArn') owned by a
--- specific account.
-apSourceAccount :: Lens' AddPermission (Maybe Text)
-apSourceAccount = lens _apSourceAccount (\s a -> s { _apSourceAccount = a })
+-- If you add a permission for the Amazon S3 principal without providing
+-- the source ARN, any AWS account that creates a mapping to your function
+-- ARN can send events to invoke your Lambda function from Amazon S3.
+apSourceARN :: Lens' AddPermission (Maybe Text)
+apSourceARN = lens _apSourceARN (\ s a -> s{_apSourceARN = a});
 
--- | This is optional; however, when granting Amazon S3 permission to invoke your
--- function, you should specify this field with the bucket Amazon Resource Name
--- (ARN) as its value. This ensures that only events generated from the
--- specified bucket can invoke the function.
+-- | Name of the Lambda function whose access policy you are updating by
+-- adding a new permission.
 --
--- If you add a permission for the Amazon S3 principal without providing the
--- source ARN, any AWS account that creates a mapping to your function ARN can
--- send events to invoke your Lambda function from Amazon S3.
-apSourceArn :: Lens' AddPermission (Maybe Text)
-apSourceArn = lens _apSourceArn (\s a -> s { _apSourceArn = a })
+-- You can specify an unqualified function name (for example,
+-- \"Thumbnail\") or you can specify Amazon Resource Name (ARN) of the
+-- function (for example,
+-- \"arn:aws:lambda:us-west-2:account-id:function:ThumbNail\"). AWS Lambda
+-- also allows you to specify only the account ID qualifier (for example,
+-- \"account-id:Thumbnail\"). Note that the length constraint applies only
+-- to the ARN. If you specify only the function name, it is limited to 64
+-- character in length.
+apFunctionName :: Lens' AddPermission Text
+apFunctionName = lens _apFunctionName (\ s a -> s{_apFunctionName = a});
 
 -- | A unique statement identifier.
 apStatementId :: Lens' AddPermission Text
-apStatementId = lens _apStatementId (\s a -> s { _apStatementId = a })
+apStatementId = lens _apStatementId (\ s a -> s{_apStatementId = a});
 
-newtype AddPermissionResponse = AddPermissionResponse
-    { _aprStatement :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
+-- | The AWS Lambda action you want to allow in this statement. Each Lambda
+-- action is a string starting with \"lambda:\" followed by the API name
+-- (see Operations). For example, \"lambda:CreateFunction\". You can use
+-- wildcard (\"lambda:*\") to grant permission for all AWS Lambda actions.
+apAction :: Lens' AddPermission Text
+apAction = lens _apAction (\ s a -> s{_apAction = a});
 
--- | 'AddPermissionResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'aprStatement' @::@ 'Maybe' 'Text'
---
-addPermissionResponse :: AddPermissionResponse
-addPermissionResponse = AddPermissionResponse
-    { _aprStatement = Nothing
-    }
+-- | The principal who is getting this permission. It can be Amazon S3
+-- service Principal (\"s3.amazonaws.com\") if you want Amazon S3 to invoke
+-- the function, an AWS account ID if you are granting cross-account
+-- permission, or any valid AWS service principal such as
+-- \"sns.amazonaws.com\". For example, you might want to allow a custom
+-- application in another AWS account to push events to AWS Lambda by
+-- invoking your function.
+apPrincipal :: Lens' AddPermission Text
+apPrincipal = lens _apPrincipal (\ s a -> s{_apPrincipal = a});
 
--- | The permission statement you specified in the request. The response returns
--- the same as a string using "\" as an escape character in the JSON.
-aprStatement :: Lens' AddPermissionResponse (Maybe Text)
-aprStatement = lens _aprStatement (\s a -> s { _aprStatement = a })
+instance AWSRequest AddPermission where
+        type Sv AddPermission = Lambda
+        type Rs AddPermission = AddPermissionResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 AddPermissionResponse' <$>
+                   (x .?> "Statement") <*> (pure (fromEnum s)))
 
+instance ToHeaders AddPermission where
+        toHeaders = const mempty
+
+instance ToJSON AddPermission where
+        toJSON AddPermission'{..}
+          = object
+              ["SourceAccount" .= _apSourceAccount,
+               "SourceArn" .= _apSourceARN,
+               "StatementId" .= _apStatementId,
+               "Action" .= _apAction, "Principal" .= _apPrincipal]
+
 instance ToPath AddPermission where
-    toPath AddPermission{..} = mconcat
-        [ "/2015-03-31/functions/"
-        , toText _apFunctionName
-        , "/versions/HEAD/policy"
-        ]
+        toPath AddPermission'{..}
+          = mconcat
+              ["/2015-03-31/functions/", toBS _apFunctionName,
+               "/versions/HEAD/policy"]
 
 instance ToQuery AddPermission where
-    toQuery = const mempty
-
-instance ToHeaders AddPermission
+        toQuery = const mempty
 
-instance ToJSON AddPermission where
-    toJSON AddPermission{..} = object
-        [ "StatementId"   .= _apStatementId
-        , "Action"        .= _apAction
-        , "Principal"     .= _apPrincipal
-        , "SourceArn"     .= _apSourceArn
-        , "SourceAccount" .= _apSourceAccount
-        ]
+-- | /See:/ 'addPermissionResponse' smart constructor.
+data AddPermissionResponse = AddPermissionResponse'
+    { _aprsStatement :: !(Maybe Text)
+    , _aprsStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest AddPermission where
-    type Sv AddPermission = Lambda
-    type Rs AddPermission = AddPermissionResponse
+-- | Creates a value of 'AddPermissionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aprsStatement'
+--
+-- * 'aprsStatus'
+addPermissionResponse
+    :: Int -- ^ 'aprsStatus'
+    -> AddPermissionResponse
+addPermissionResponse pStatus_ =
+    AddPermissionResponse'
+    { _aprsStatement = Nothing
+    , _aprsStatus = pStatus_
+    }
 
-    request  = post
-    response = jsonResponse
+-- | The permission statement you specified in the request. The response
+-- returns the same as a string using \"\\\" as an escape character in the
+-- JSON.
+aprsStatement :: Lens' AddPermissionResponse (Maybe Text)
+aprsStatement = lens _aprsStatement (\ s a -> s{_aprsStatement = a});
 
-instance FromJSON AddPermissionResponse where
-    parseJSON = withObject "AddPermissionResponse" $ \o -> AddPermissionResponse
-        <$> o .:? "Statement"
+-- | The response status code.
+aprsStatus :: Lens' AddPermissionResponse Int
+aprsStatus = lens _aprsStatus (\ s a -> s{_aprsStatus = a});
diff --git a/gen/Network/AWS/Lambda/CreateEventSourceMapping.hs b/gen/Network/AWS/Lambda/CreateEventSourceMapping.hs
--- a/gen/Network/AWS/Lambda/CreateEventSourceMapping.hs
+++ b/gen/Network/AWS/Lambda/CreateEventSourceMapping.hs
@@ -1,270 +1,175 @@
-{-# 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.Lambda.CreateEventSourceMapping
--- 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.
-
--- | Identifies a stream as an event source for a Lambda function. It can be
+-- Identifies a stream as an event source for a Lambda function. It can be
 -- either an Amazon Kinesis stream or an Amazon DynamoDB stream. AWS Lambda
 -- invokes the specified function when records are posted to the stream.
 --
 -- This is the pull model, where AWS Lambda invokes the function. For more
--- information, go to <http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html AWS Lambda: How it Works> in the /AWS Lambda Developer Guide/.
+-- information, go to
+-- <http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html AWS Lambda: How it Works>
+-- in the /AWS Lambda Developer Guide/.
 --
--- This association between an Amazon Kinesis stream and a Lambda function is
--- called the event source mapping. You provide the configuration information
--- (for example, which stream to read from and which Lambda function to invoke)
--- for the event source mapping in the request body.
+-- This association between an Amazon Kinesis stream and a Lambda function
+-- is called the event source mapping. You provide the configuration
+-- information (for example, which stream to read from and which Lambda
+-- function to invoke) for the event source mapping in the request body.
 --
--- Each event source, such as an Amazon Kinesis or a DynamoDB stream, can be
--- associated with multiple AWS Lambda function. A given Lambda function can be
--- associated with multiple AWS event sources.
+-- Each event source, such as an Amazon Kinesis or a DynamoDB stream, can
+-- be associated with multiple AWS Lambda function. A given Lambda function
+-- can be associated with multiple AWS event sources.
 --
--- This operation requires permission for the 'lambda:CreateEventSourceMapping'
--- action.
+-- This operation requires permission for the
+-- 'lambda:CreateEventSourceMapping' action.
 --
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_CreateEventSourceMapping.html>
+-- /See:/ <http://docs.aws.amazon.com/lambda/latest/dg/API_CreateEventSourceMapping.html AWS API Reference> for CreateEventSourceMapping.
 module Network.AWS.Lambda.CreateEventSourceMapping
     (
-    -- * Request
-      CreateEventSourceMapping
-    -- ** Request constructor
-    , createEventSourceMapping
-    -- ** Request lenses
-    , cesmBatchSize
+    -- * Creating a Request
+      createEventSourceMapping
+    , CreateEventSourceMapping
+    -- * Request Lenses
     , cesmEnabled
-    , cesmEventSourceArn
+    , cesmBatchSize
+    , cesmEventSourceARN
     , cesmFunctionName
     , cesmStartingPosition
 
-    -- * Response
-    , CreateEventSourceMappingResponse
-    -- ** Response constructor
-    , createEventSourceMappingResponse
-    -- ** Response lenses
-    , cesmrBatchSize
-    , cesmrEventSourceArn
-    , cesmrFunctionArn
-    , cesmrLastModified
-    , cesmrLastProcessingResult
-    , cesmrState
-    , cesmrStateTransitionReason
-    , cesmrUUID
+    -- * Destructuring the Response
+    , eventSourceMappingConfiguration
+    , EventSourceMappingConfiguration
+    -- * Response Lenses
+    , esmcEventSourceARN
+    , esmcFunctionARN
+    , esmcState
+    , esmcUUId
+    , esmcLastProcessingResult
+    , esmcBatchSize
+    , esmcStateTransitionReason
+    , esmcLastModified
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
+import           Network.AWS.Lambda.Types
+import           Network.AWS.Lambda.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data CreateEventSourceMapping = CreateEventSourceMapping
-    { _cesmBatchSize        :: Maybe Nat
-    , _cesmEnabled          :: Maybe Bool
-    , _cesmEventSourceArn   :: Text
-    , _cesmFunctionName     :: Text
-    , _cesmStartingPosition :: EventSourcePosition
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'createEventSourceMapping' smart constructor.
+data CreateEventSourceMapping = CreateEventSourceMapping'
+    { _cesmEnabled          :: !(Maybe Bool)
+    , _cesmBatchSize        :: !(Maybe Nat)
+    , _cesmEventSourceARN   :: !Text
+    , _cesmFunctionName     :: !Text
+    , _cesmStartingPosition :: !EventSourcePosition
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CreateEventSourceMapping' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CreateEventSourceMapping' with the minimum fields required to make a request.
 --
--- * 'cesmBatchSize' @::@ 'Maybe' 'Natural'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cesmEnabled' @::@ 'Maybe' 'Bool'
+-- * 'cesmEnabled'
 --
--- * 'cesmEventSourceArn' @::@ 'Text'
+-- * 'cesmBatchSize'
 --
--- * 'cesmFunctionName' @::@ 'Text'
+-- * 'cesmEventSourceARN'
 --
--- * 'cesmStartingPosition' @::@ 'EventSourcePosition'
+-- * 'cesmFunctionName'
 --
-createEventSourceMapping :: Text -- ^ 'cesmEventSourceArn'
-                         -> Text -- ^ 'cesmFunctionName'
-                         -> EventSourcePosition -- ^ 'cesmStartingPosition'
-                         -> CreateEventSourceMapping
-createEventSourceMapping p1 p2 p3 = CreateEventSourceMapping
-    { _cesmEventSourceArn   = p1
-    , _cesmFunctionName     = p2
-    , _cesmStartingPosition = p3
-    , _cesmEnabled          = Nothing
-    , _cesmBatchSize        = Nothing
+-- * 'cesmStartingPosition'
+createEventSourceMapping
+    :: Text -- ^ 'cesmEventSourceARN'
+    -> Text -- ^ 'cesmFunctionName'
+    -> EventSourcePosition -- ^ 'cesmStartingPosition'
+    -> CreateEventSourceMapping
+createEventSourceMapping pEventSourceARN_ pFunctionName_ pStartingPosition_ =
+    CreateEventSourceMapping'
+    { _cesmEnabled = Nothing
+    , _cesmBatchSize = Nothing
+    , _cesmEventSourceARN = pEventSourceARN_
+    , _cesmFunctionName = pFunctionName_
+    , _cesmStartingPosition = pStartingPosition_
     }
 
--- | The largest number of records that AWS Lambda will retrieve from your event
--- source at the time of invoking your function. Your function receives an event
--- with all the retrieved records. The default is 100 records.
-cesmBatchSize :: Lens' CreateEventSourceMapping (Maybe Natural)
-cesmBatchSize = lens _cesmBatchSize (\s a -> s { _cesmBatchSize = a }) . mapping _Nat
-
--- | Indicates whether AWS Lambda should begin polling the event source.
+-- | Indicates whether AWS Lambda should begin polling the event source, the
+-- default is not enabled.
 cesmEnabled :: Lens' CreateEventSourceMapping (Maybe Bool)
-cesmEnabled = lens _cesmEnabled (\s a -> s { _cesmEnabled = a })
+cesmEnabled = lens _cesmEnabled (\ s a -> s{_cesmEnabled = a});
 
--- | The Amazon Resource Name (ARN) of the Amazon Kinesis or the Amazon DynamoDB
--- stream that is the event source. Any record added to this stream could cause
--- AWS Lambda to invoke your Lambda function, it depends on the 'BatchSize'. AWS
--- Lambda POSTs the Amazon Kinesis event, containing records, to your Lambda
--- function as JSON.
-cesmEventSourceArn :: Lens' CreateEventSourceMapping Text
-cesmEventSourceArn =
-    lens _cesmEventSourceArn (\s a -> s { _cesmEventSourceArn = a })
+-- | The largest number of records that AWS Lambda will retrieve from your
+-- event source at the time of invoking your function. Your function
+-- receives an event with all the retrieved records. The default is 100
+-- records.
+cesmBatchSize :: Lens' CreateEventSourceMapping (Maybe Natural)
+cesmBatchSize = lens _cesmBatchSize (\ s a -> s{_cesmBatchSize = a}) . mapping _Nat;
 
--- | The Lambda function to invoke when AWS Lambda detects an event on the stream.
+-- | The Amazon Resource Name (ARN) of the Amazon Kinesis or the Amazon
+-- DynamoDB stream that is the event source. Any record added to this
+-- stream could cause AWS Lambda to invoke your Lambda function, it depends
+-- on the 'BatchSize'. AWS Lambda POSTs the Amazon Kinesis event,
+-- containing records, to your Lambda function as JSON.
+cesmEventSourceARN :: Lens' CreateEventSourceMapping Text
+cesmEventSourceARN = lens _cesmEventSourceARN (\ s a -> s{_cesmEventSourceARN = a});
+
+-- | The Lambda function to invoke when AWS Lambda detects an event on the
+-- stream.
 --
--- You can specify an unqualified function name (for example, "Thumbnail") or
--- you can specify Amazon Resource Name (ARN) of the function (for example,
--- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
--- allows you to specify only the account ID qualifier (for example,
--- "account-id:Thumbnail"). Note that the length constraint applies only to the
--- ARN. If you specify only the function name, it is limited to 64 character in
--- length.
+-- You can specify an unqualified function name (for example,
+-- \"Thumbnail\") or you can specify Amazon Resource Name (ARN) of the
+-- function (for example,
+-- \"arn:aws:lambda:us-west-2:account-id:function:ThumbNail\"). AWS Lambda
+-- also allows you to specify only the account ID qualifier (for example,
+-- \"account-id:Thumbnail\"). Note that the length constraint applies only
+-- to the ARN. If you specify only the function name, it is limited to 64
+-- character in length.
 cesmFunctionName :: Lens' CreateEventSourceMapping Text
-cesmFunctionName = lens _cesmFunctionName (\s a -> s { _cesmFunctionName = a })
+cesmFunctionName = lens _cesmFunctionName (\ s a -> s{_cesmFunctionName = a});
 
--- | The position in the stream where AWS Lambda should start reading. For more
--- information, go to <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html#Kinesis-GetShardIterator-request-ShardIteratorType ShardIteratorType> in the /Amazon Kinesis API Reference/.
+-- | The position in the stream where AWS Lambda should start reading. For
+-- more information, go to
+-- <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html#Kinesis-GetShardIterator-request-ShardIteratorType ShardIteratorType>
+-- in the /Amazon Kinesis API Reference/.
 cesmStartingPosition :: Lens' CreateEventSourceMapping EventSourcePosition
-cesmStartingPosition =
-    lens _cesmStartingPosition (\s a -> s { _cesmStartingPosition = a })
-
-data CreateEventSourceMappingResponse = CreateEventSourceMappingResponse
-    { _cesmrBatchSize             :: Maybe Nat
-    , _cesmrEventSourceArn        :: Maybe Text
-    , _cesmrFunctionArn           :: Maybe Text
-    , _cesmrLastModified          :: Maybe POSIX
-    , _cesmrLastProcessingResult  :: Maybe Text
-    , _cesmrState                 :: Maybe Text
-    , _cesmrStateTransitionReason :: Maybe Text
-    , _cesmrUUID                  :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'CreateEventSourceMappingResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cesmrBatchSize' @::@ 'Maybe' 'Natural'
---
--- * 'cesmrEventSourceArn' @::@ 'Maybe' 'Text'
---
--- * 'cesmrFunctionArn' @::@ 'Maybe' 'Text'
---
--- * 'cesmrLastModified' @::@ 'Maybe' 'UTCTime'
---
--- * 'cesmrLastProcessingResult' @::@ 'Maybe' 'Text'
---
--- * 'cesmrState' @::@ 'Maybe' 'Text'
---
--- * 'cesmrStateTransitionReason' @::@ 'Maybe' 'Text'
---
--- * 'cesmrUUID' @::@ 'Maybe' 'Text'
---
-createEventSourceMappingResponse :: CreateEventSourceMappingResponse
-createEventSourceMappingResponse = CreateEventSourceMappingResponse
-    { _cesmrUUID                  = Nothing
-    , _cesmrBatchSize             = Nothing
-    , _cesmrEventSourceArn        = Nothing
-    , _cesmrFunctionArn           = Nothing
-    , _cesmrLastModified          = Nothing
-    , _cesmrLastProcessingResult  = Nothing
-    , _cesmrState                 = Nothing
-    , _cesmrStateTransitionReason = Nothing
-    }
-
--- | The largest number of records that AWS Lambda will retrieve from your event
--- source at the time of invoking your function. Your function receives an event
--- with all the retrieved records.
-cesmrBatchSize :: Lens' CreateEventSourceMappingResponse (Maybe Natural)
-cesmrBatchSize = lens _cesmrBatchSize (\s a -> s { _cesmrBatchSize = a }) . mapping _Nat
-
--- | The Amazon Resource Name (ARN) of the Amazon Kinesis stream that is the
--- source of events.
-cesmrEventSourceArn :: Lens' CreateEventSourceMappingResponse (Maybe Text)
-cesmrEventSourceArn =
-    lens _cesmrEventSourceArn (\s a -> s { _cesmrEventSourceArn = a })
-
--- | The Lambda function to invoke when AWS Lambda detects an event on the stream.
-cesmrFunctionArn :: Lens' CreateEventSourceMappingResponse (Maybe Text)
-cesmrFunctionArn = lens _cesmrFunctionArn (\s a -> s { _cesmrFunctionArn = a })
-
--- | The UTC time string indicating the last time the event mapping was updated.
-cesmrLastModified :: Lens' CreateEventSourceMappingResponse (Maybe UTCTime)
-cesmrLastModified =
-    lens _cesmrLastModified (\s a -> s { _cesmrLastModified = a })
-        . mapping _Time
-
--- | The result of the last AWS Lambda invocation of your Lambda function.
-cesmrLastProcessingResult :: Lens' CreateEventSourceMappingResponse (Maybe Text)
-cesmrLastProcessingResult =
-    lens _cesmrLastProcessingResult
-        (\s a -> s { _cesmrLastProcessingResult = a })
+cesmStartingPosition = lens _cesmStartingPosition (\ s a -> s{_cesmStartingPosition = a});
 
--- | The state of the event source mapping. It can be "Creating", "Enabled",
--- "Disabled", "Enabling", "Disabling", "Updating", or "Deleting".
-cesmrState :: Lens' CreateEventSourceMappingResponse (Maybe Text)
-cesmrState = lens _cesmrState (\s a -> s { _cesmrState = a })
+instance AWSRequest CreateEventSourceMapping where
+        type Sv CreateEventSourceMapping = Lambda
+        type Rs CreateEventSourceMapping =
+             EventSourceMappingConfiguration
+        request = postJSON
+        response = receiveJSON (\ s h x -> eitherParseJSON x)
 
--- | The reason the event source mapping is in its current state. It is either
--- user-requested or an AWS Lambda-initiated state transition.
-cesmrStateTransitionReason :: Lens' CreateEventSourceMappingResponse (Maybe Text)
-cesmrStateTransitionReason =
-    lens _cesmrStateTransitionReason
-        (\s a -> s { _cesmrStateTransitionReason = a })
+instance ToHeaders CreateEventSourceMapping where
+        toHeaders = const mempty
 
--- | The AWS Lambda assigned opaque identifier for the mapping.
-cesmrUUID :: Lens' CreateEventSourceMappingResponse (Maybe Text)
-cesmrUUID = lens _cesmrUUID (\s a -> s { _cesmrUUID = a })
+instance ToJSON CreateEventSourceMapping where
+        toJSON CreateEventSourceMapping'{..}
+          = object
+              ["Enabled" .= _cesmEnabled,
+               "BatchSize" .= _cesmBatchSize,
+               "EventSourceArn" .= _cesmEventSourceARN,
+               "FunctionName" .= _cesmFunctionName,
+               "StartingPosition" .= _cesmStartingPosition]
 
 instance ToPath CreateEventSourceMapping where
-    toPath = const "/2015-03-31/event-source-mappings/"
+        toPath = const "/2015-03-31/event-source-mappings/"
 
 instance ToQuery CreateEventSourceMapping where
-    toQuery = const mempty
-
-instance ToHeaders CreateEventSourceMapping
-
-instance ToJSON CreateEventSourceMapping where
-    toJSON CreateEventSourceMapping{..} = object
-        [ "EventSourceArn"   .= _cesmEventSourceArn
-        , "FunctionName"     .= _cesmFunctionName
-        , "Enabled"          .= _cesmEnabled
-        , "BatchSize"        .= _cesmBatchSize
-        , "StartingPosition" .= _cesmStartingPosition
-        ]
-
-instance AWSRequest CreateEventSourceMapping where
-    type Sv CreateEventSourceMapping = Lambda
-    type Rs CreateEventSourceMapping = CreateEventSourceMappingResponse
-
-    request  = post
-    response = jsonResponse
-
-instance FromJSON CreateEventSourceMappingResponse where
-    parseJSON = withObject "CreateEventSourceMappingResponse" $ \o -> CreateEventSourceMappingResponse
-        <$> o .:? "BatchSize"
-        <*> o .:? "EventSourceArn"
-        <*> o .:? "FunctionArn"
-        <*> o .:? "LastModified"
-        <*> o .:? "LastProcessingResult"
-        <*> o .:? "State"
-        <*> o .:? "StateTransitionReason"
-        <*> o .:? "UUID"
+        toQuery = const mempty
diff --git a/gen/Network/AWS/Lambda/CreateFunction.hs b/gen/Network/AWS/Lambda/CreateFunction.hs
--- a/gen/Network/AWS/Lambda/CreateFunction.hs
+++ b/gen/Network/AWS/Lambda/CreateFunction.hs
@@ -1,306 +1,198 @@
-{-# 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.Lambda.CreateFunction
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Creates a new Lambda function. The function metadata is created from the
--- request parameters, and the code for the function is provided by a .zip file
--- in the request body. If the function name already exists, the operation will
--- fail. Note that the function name is case-sensitive.
+-- Creates a new Lambda function. The function metadata is created from the
+-- request parameters, and the code for the function is provided by a .zip
+-- file in the request body. If the function name already exists, the
+-- operation will fail. Note that the function name is case-sensitive.
 --
--- This operation requires permission for the 'lambda:CreateFunction' action.
+-- This operation requires permission for the 'lambda:CreateFunction'
+-- action.
 --
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html>
+-- /See:/ <http://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html AWS API Reference> for CreateFunction.
 module Network.AWS.Lambda.CreateFunction
     (
-    -- * Request
-      CreateFunction
-    -- ** Request constructor
-    , createFunction
-    -- ** Request lenses
-    , cfCode
+    -- * Creating a Request
+      createFunction
+    , CreateFunction
+    -- * Request Lenses
+    , cfMemorySize
+    , cfTimeout
     , cfDescription
     , cfFunctionName
-    , cfHandler
-    , cfMemorySize
-    , cfRole
     , cfRuntime
-    , cfTimeout
+    , cfRole
+    , cfHandler
+    , cfCode
 
-    -- * Response
-    , CreateFunctionResponse
-    -- ** Response constructor
-    , createFunctionResponse
-    -- ** Response lenses
-    , cfrCodeSize
-    , cfrDescription
-    , cfrFunctionArn
-    , cfrFunctionName
-    , cfrHandler
-    , cfrLastModified
-    , cfrMemorySize
-    , cfrRole
-    , cfrRuntime
-    , cfrTimeout
+    -- * Destructuring the Response
+    , functionConfiguration
+    , FunctionConfiguration
+    -- * Response Lenses
+    , fcRuntime
+    , fcMemorySize
+    , fcFunctionARN
+    , fcRole
+    , fcFunctionName
+    , fcCodeSize
+    , fcHandler
+    , fcTimeout
+    , fcLastModified
+    , fcDescription
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
+import           Network.AWS.Lambda.Types
+import           Network.AWS.Lambda.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data CreateFunction = CreateFunction
-    { _cfCode         :: FunctionCode
-    , _cfDescription  :: Maybe Text
-    , _cfFunctionName :: Text
-    , _cfHandler      :: Text
-    , _cfMemorySize   :: Maybe Nat
-    , _cfRole         :: Text
-    , _cfRuntime      :: Runtime
-    , _cfTimeout      :: Maybe Nat
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'createFunction' smart constructor.
+data CreateFunction = CreateFunction'
+    { _cfMemorySize   :: !(Maybe Nat)
+    , _cfTimeout      :: !(Maybe Nat)
+    , _cfDescription  :: !(Maybe Text)
+    , _cfFunctionName :: !Text
+    , _cfRuntime      :: !Runtime
+    , _cfRole         :: !Text
+    , _cfHandler      :: !Text
+    , _cfCode         :: !FunctionCode
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CreateFunction' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CreateFunction' with the minimum fields required to make a request.
 --
--- * 'cfCode' @::@ 'FunctionCode'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cfDescription' @::@ 'Maybe' 'Text'
+-- * 'cfMemorySize'
 --
--- * 'cfFunctionName' @::@ 'Text'
+-- * 'cfTimeout'
 --
--- * 'cfHandler' @::@ 'Text'
+-- * 'cfDescription'
 --
--- * 'cfMemorySize' @::@ 'Maybe' 'Natural'
+-- * 'cfFunctionName'
 --
--- * 'cfRole' @::@ 'Text'
+-- * 'cfRuntime'
 --
--- * 'cfRuntime' @::@ 'Runtime'
+-- * 'cfRole'
 --
--- * 'cfTimeout' @::@ 'Maybe' 'Natural'
+-- * 'cfHandler'
 --
-createFunction :: Text -- ^ 'cfFunctionName'
-               -> Runtime -- ^ 'cfRuntime'
-               -> Text -- ^ 'cfRole'
-               -> Text -- ^ 'cfHandler'
-               -> FunctionCode -- ^ 'cfCode'
-               -> CreateFunction
-createFunction p1 p2 p3 p4 p5 = CreateFunction
-    { _cfFunctionName = p1
-    , _cfRuntime      = p2
-    , _cfRole         = p3
-    , _cfHandler      = p4
-    , _cfCode         = p5
-    , _cfDescription  = Nothing
-    , _cfTimeout      = Nothing
-    , _cfMemorySize   = Nothing
+-- * 'cfCode'
+createFunction
+    :: Text -- ^ 'cfFunctionName'
+    -> Runtime -- ^ 'cfRuntime'
+    -> Text -- ^ 'cfRole'
+    -> Text -- ^ 'cfHandler'
+    -> FunctionCode -- ^ 'cfCode'
+    -> CreateFunction
+createFunction pFunctionName_ pRuntime_ pRole_ pHandler_ pCode_ =
+    CreateFunction'
+    { _cfMemorySize = Nothing
+    , _cfTimeout = Nothing
+    , _cfDescription = Nothing
+    , _cfFunctionName = pFunctionName_
+    , _cfRuntime = pRuntime_
+    , _cfRole = pRole_
+    , _cfHandler = pHandler_
+    , _cfCode = pCode_
     }
 
--- | A structure that includes ZipFile.
-cfCode :: Lens' CreateFunction FunctionCode
-cfCode = lens _cfCode (\s a -> s { _cfCode = a })
+-- | The amount of memory, in MB, your Lambda function is given. Lambda uses
+-- this memory size to infer the amount of CPU and memory allocated to your
+-- function. Your function use-case determines your CPU and memory
+-- requirements. For example, a database operation might need less memory
+-- compared to an image processing function. The default value is 128 MB.
+-- The value must be a multiple of 64 MB.
+cfMemorySize :: Lens' CreateFunction (Maybe Natural)
+cfMemorySize = lens _cfMemorySize (\ s a -> s{_cfMemorySize = a}) . mapping _Nat;
 
--- | A short, user-defined function description. Lambda does not use this value.
--- Assign a meaningful description as you see fit.
+-- | The function execution time at which Lambda should terminate the
+-- function. Because the execution time has cost implications, we recommend
+-- you set this value based on your expected execution time. The default is
+-- 3 seconds.
+cfTimeout :: Lens' CreateFunction (Maybe Natural)
+cfTimeout = lens _cfTimeout (\ s a -> s{_cfTimeout = a}) . mapping _Nat;
+
+-- | A short, user-defined function description. Lambda does not use this
+-- value. Assign a meaningful description as you see fit.
 cfDescription :: Lens' CreateFunction (Maybe Text)
-cfDescription = lens _cfDescription (\s a -> s { _cfDescription = a })
+cfDescription = lens _cfDescription (\ s a -> s{_cfDescription = a});
 
 -- | The name you want to assign to the function you are uploading. You can
--- specify an unqualified function name (for example, "Thumbnail") or you can
--- specify Amazon Resource Name (ARN) of the function (for example,
--- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
--- allows you to specify only the account ID qualifier (for example,
--- "account-id:Thumbnail"). Note that the length constraint applies only to the
--- ARN. If you specify only the function name, it is limited to 64 character in
--- length. The function names appear in the console and are returned in the 'ListFunctions' API. Function names are used to specify functions to other AWS Lambda APIs,
--- such as 'Invoke'.
+-- specify an unqualified function name (for example, \"Thumbnail\") or you
+-- can specify Amazon Resource Name (ARN) of the function (for example,
+-- \"arn:aws:lambda:us-west-2:account-id:function:ThumbNail\"). AWS Lambda
+-- also allows you to specify only the account ID qualifier (for example,
+-- \"account-id:Thumbnail\"). Note that the length constraint applies only
+-- to the ARN. If you specify only the function name, it is limited to 64
+-- character in length. The function names appear in the console and are
+-- returned in the ListFunctions API. Function names are used to specify
+-- functions to other AWS Lambda APIs, such as Invoke.
 cfFunctionName :: Lens' CreateFunction Text
-cfFunctionName = lens _cfFunctionName (\s a -> s { _cfFunctionName = a })
-
--- | The function within your code that Lambda calls to begin execution. For
--- Node.js, it is the /module-name/./export/ value in your function.
-cfHandler :: Lens' CreateFunction Text
-cfHandler = lens _cfHandler (\s a -> s { _cfHandler = a })
-
--- | The amount of memory, in MB, your Lambda function is given. Lambda uses this
--- memory size to infer the amount of CPU and memory allocated to your function.
--- Your function use-case determines your CPU and memory requirements. For
--- example, a database operation might need less memory compared to an image
--- processing function. The default value is 128 MB. The value must be a
--- multiple of 64 MB.
-cfMemorySize :: Lens' CreateFunction (Maybe Natural)
-cfMemorySize = lens _cfMemorySize (\s a -> s { _cfMemorySize = a }) . mapping _Nat
-
--- | The Amazon Resource Name (ARN) of the IAM role that Lambda assumes when it
--- executes your function to access any other Amazon Web Services (AWS)
--- resources. For more information, see <http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html AWS Lambda: How it Works>
-cfRole :: Lens' CreateFunction Text
-cfRole = lens _cfRole (\s a -> s { _cfRole = a })
+cfFunctionName = lens _cfFunctionName (\ s a -> s{_cfFunctionName = a});
 
--- | The runtime environment for the Lambda function you are uploading. Currently,
--- Lambda supports only "nodejs" as the runtime.
+-- | The runtime environment for the Lambda function you are uploading.
+-- Currently, Lambda supports \"java\" and \"nodejs\" as the runtime.
 cfRuntime :: Lens' CreateFunction Runtime
-cfRuntime = lens _cfRuntime (\s a -> s { _cfRuntime = a })
-
--- | The function execution time at which Lambda should terminate the function.
--- Because the execution time has cost implications, we recommend you set this
--- value based on your expected execution time. The default is 3 seconds.
-cfTimeout :: Lens' CreateFunction (Maybe Natural)
-cfTimeout = lens _cfTimeout (\s a -> s { _cfTimeout = a }) . mapping _Nat
-
-data CreateFunctionResponse = CreateFunctionResponse
-    { _cfrCodeSize     :: Maybe Integer
-    , _cfrDescription  :: Maybe Text
-    , _cfrFunctionArn  :: Maybe Text
-    , _cfrFunctionName :: Maybe Text
-    , _cfrHandler      :: Maybe Text
-    , _cfrLastModified :: Maybe Text
-    , _cfrMemorySize   :: Maybe Nat
-    , _cfrRole         :: Maybe Text
-    , _cfrRuntime      :: Maybe Runtime
-    , _cfrTimeout      :: Maybe Nat
-    } deriving (Eq, Read, Show)
-
--- | 'CreateFunctionResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cfrCodeSize' @::@ 'Maybe' 'Integer'
---
--- * 'cfrDescription' @::@ 'Maybe' 'Text'
---
--- * 'cfrFunctionArn' @::@ 'Maybe' 'Text'
---
--- * 'cfrFunctionName' @::@ 'Maybe' 'Text'
---
--- * 'cfrHandler' @::@ 'Maybe' 'Text'
---
--- * 'cfrLastModified' @::@ 'Maybe' 'Text'
---
--- * 'cfrMemorySize' @::@ 'Maybe' 'Natural'
---
--- * 'cfrRole' @::@ 'Maybe' 'Text'
---
--- * 'cfrRuntime' @::@ 'Maybe' 'Runtime'
---
--- * 'cfrTimeout' @::@ 'Maybe' 'Natural'
---
-createFunctionResponse :: CreateFunctionResponse
-createFunctionResponse = CreateFunctionResponse
-    { _cfrFunctionName = Nothing
-    , _cfrFunctionArn  = Nothing
-    , _cfrRuntime      = Nothing
-    , _cfrRole         = Nothing
-    , _cfrHandler      = Nothing
-    , _cfrCodeSize     = Nothing
-    , _cfrDescription  = Nothing
-    , _cfrTimeout      = Nothing
-    , _cfrMemorySize   = Nothing
-    , _cfrLastModified = Nothing
-    }
-
--- | The size, in bytes, of the function .zip file you uploaded.
-cfrCodeSize :: Lens' CreateFunctionResponse (Maybe Integer)
-cfrCodeSize = lens _cfrCodeSize (\s a -> s { _cfrCodeSize = a })
-
--- | The user-provided description.
-cfrDescription :: Lens' CreateFunctionResponse (Maybe Text)
-cfrDescription = lens _cfrDescription (\s a -> s { _cfrDescription = a })
-
--- | The Amazon Resource Name (ARN) assigned to the function.
-cfrFunctionArn :: Lens' CreateFunctionResponse (Maybe Text)
-cfrFunctionArn = lens _cfrFunctionArn (\s a -> s { _cfrFunctionArn = a })
-
--- | The name of the function.
-cfrFunctionName :: Lens' CreateFunctionResponse (Maybe Text)
-cfrFunctionName = lens _cfrFunctionName (\s a -> s { _cfrFunctionName = a })
+cfRuntime = lens _cfRuntime (\ s a -> s{_cfRuntime = a});
 
--- | The function Lambda calls to begin executing your function.
-cfrHandler :: Lens' CreateFunctionResponse (Maybe Text)
-cfrHandler = lens _cfrHandler (\s a -> s { _cfrHandler = a })
+-- | The Amazon Resource Name (ARN) of the IAM role that Lambda assumes when
+-- it executes your function to access any other Amazon Web Services (AWS)
+-- resources. For more information, see
+-- <http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html AWS Lambda: How it Works>
+cfRole :: Lens' CreateFunction Text
+cfRole = lens _cfRole (\ s a -> s{_cfRole = a});
 
--- | The timestamp of the last time you updated the function.
-cfrLastModified :: Lens' CreateFunctionResponse (Maybe Text)
-cfrLastModified = lens _cfrLastModified (\s a -> s { _cfrLastModified = a })
+-- | The function within your code that Lambda calls to begin execution. For
+-- Node.js, it is the /module-name/./export/ value in your function. For
+-- Java, it can be 'package.class-name::handler' or 'package.class-name'.
+-- For more information, see
+-- <http://docs.aws.amazon.com/lambda/latest/dg/java-programming-model-handler-types.html Lambda Function Handler (Java)>.
+cfHandler :: Lens' CreateFunction Text
+cfHandler = lens _cfHandler (\ s a -> s{_cfHandler = a});
 
--- | The memory size, in MB, you configured for the function. Must be a multiple
--- of 64 MB.
-cfrMemorySize :: Lens' CreateFunctionResponse (Maybe Natural)
-cfrMemorySize = lens _cfrMemorySize (\s a -> s { _cfrMemorySize = a }) . mapping _Nat
+-- | The code for the Lambda function.
+cfCode :: Lens' CreateFunction FunctionCode
+cfCode = lens _cfCode (\ s a -> s{_cfCode = a});
 
--- | The Amazon Resource Name (ARN) of the IAM role that Lambda assumes when it
--- executes your function to access any other Amazon Web Services (AWS)
--- resources.
-cfrRole :: Lens' CreateFunctionResponse (Maybe Text)
-cfrRole = lens _cfrRole (\s a -> s { _cfrRole = a })
+instance AWSRequest CreateFunction where
+        type Sv CreateFunction = Lambda
+        type Rs CreateFunction = FunctionConfiguration
+        request = postJSON
+        response = receiveJSON (\ s h x -> eitherParseJSON x)
 
--- | The runtime environment for the Lambda function.
-cfrRuntime :: Lens' CreateFunctionResponse (Maybe Runtime)
-cfrRuntime = lens _cfrRuntime (\s a -> s { _cfrRuntime = a })
+instance ToHeaders CreateFunction where
+        toHeaders = const mempty
 
--- | The function execution time at which Lambda should terminate the function.
--- Because the execution time has cost implications, we recommend you set this
--- value based on your expected execution time. The default is 3 seconds.
-cfrTimeout :: Lens' CreateFunctionResponse (Maybe Natural)
-cfrTimeout = lens _cfrTimeout (\s a -> s { _cfrTimeout = a }) . mapping _Nat
+instance ToJSON CreateFunction where
+        toJSON CreateFunction'{..}
+          = object
+              ["MemorySize" .= _cfMemorySize,
+               "Timeout" .= _cfTimeout,
+               "Description" .= _cfDescription,
+               "FunctionName" .= _cfFunctionName,
+               "Runtime" .= _cfRuntime, "Role" .= _cfRole,
+               "Handler" .= _cfHandler, "Code" .= _cfCode]
 
 instance ToPath CreateFunction where
-    toPath = const "/2015-03-31/functions"
+        toPath = const "/2015-03-31/functions"
 
 instance ToQuery CreateFunction where
-    toQuery = const mempty
-
-instance ToHeaders CreateFunction
-
-instance ToJSON CreateFunction where
-    toJSON CreateFunction{..} = object
-        [ "FunctionName" .= _cfFunctionName
-        , "Runtime"      .= _cfRuntime
-        , "Role"         .= _cfRole
-        , "Handler"      .= _cfHandler
-        , "Description"  .= _cfDescription
-        , "Timeout"      .= _cfTimeout
-        , "MemorySize"   .= _cfMemorySize
-        , "Code"         .= _cfCode
-        ]
-
-instance AWSRequest CreateFunction where
-    type Sv CreateFunction = Lambda
-    type Rs CreateFunction = CreateFunctionResponse
-
-    request  = post
-    response = jsonResponse
-
-instance FromJSON CreateFunctionResponse where
-    parseJSON = withObject "CreateFunctionResponse" $ \o -> CreateFunctionResponse
-        <$> o .:? "CodeSize"
-        <*> o .:? "Description"
-        <*> o .:? "FunctionArn"
-        <*> o .:? "FunctionName"
-        <*> o .:? "Handler"
-        <*> o .:? "LastModified"
-        <*> o .:? "MemorySize"
-        <*> o .:? "Role"
-        <*> o .:? "Runtime"
-        <*> o .:? "Timeout"
+        toQuery = const mempty
diff --git a/gen/Network/AWS/Lambda/DeleteEventSourceMapping.hs b/gen/Network/AWS/Lambda/DeleteEventSourceMapping.hs
--- a/gen/Network/AWS/Lambda/DeleteEventSourceMapping.hs
+++ b/gen/Network/AWS/Lambda/DeleteEventSourceMapping.hs
@@ -1,199 +1,95 @@
-{-# 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.Lambda.DeleteEventSourceMapping
--- 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.
-
--- | Removes an event source mapping. This means AWS Lambda will no longer invoke
--- the function for events in the associated source.
+-- Removes an event source mapping. This means AWS Lambda will no longer
+-- invoke the function for events in the associated source.
 --
--- This operation requires permission for the 'lambda:DeleteEventSourceMapping'
--- action.
+-- This operation requires permission for the
+-- 'lambda:DeleteEventSourceMapping' action.
 --
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_DeleteEventSourceMapping.html>
+-- /See:/ <http://docs.aws.amazon.com/lambda/latest/dg/API_DeleteEventSourceMapping.html AWS API Reference> for DeleteEventSourceMapping.
 module Network.AWS.Lambda.DeleteEventSourceMapping
     (
-    -- * Request
-      DeleteEventSourceMapping
-    -- ** Request constructor
-    , deleteEventSourceMapping
-    -- ** Request lenses
-    , desmUUID
+    -- * Creating a Request
+      deleteEventSourceMapping
+    , DeleteEventSourceMapping
+    -- * Request Lenses
+    , desmUUId
 
-    -- * Response
-    , DeleteEventSourceMappingResponse
-    -- ** Response constructor
-    , deleteEventSourceMappingResponse
-    -- ** Response lenses
-    , desmrBatchSize
-    , desmrEventSourceArn
-    , desmrFunctionArn
-    , desmrLastModified
-    , desmrLastProcessingResult
-    , desmrState
-    , desmrStateTransitionReason
-    , desmrUUID
+    -- * Destructuring the Response
+    , eventSourceMappingConfiguration
+    , EventSourceMappingConfiguration
+    -- * Response Lenses
+    , esmcEventSourceARN
+    , esmcFunctionARN
+    , esmcState
+    , esmcUUId
+    , esmcLastProcessingResult
+    , esmcBatchSize
+    , esmcStateTransitionReason
+    , esmcLastModified
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
+import           Network.AWS.Lambda.Types
+import           Network.AWS.Lambda.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype DeleteEventSourceMapping = DeleteEventSourceMapping
-    { _desmUUID :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'deleteEventSourceMapping' smart constructor.
+newtype DeleteEventSourceMapping = DeleteEventSourceMapping'
+    { _desmUUId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteEventSourceMapping' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteEventSourceMapping' with the minimum fields required to make a request.
 --
--- * 'desmUUID' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-deleteEventSourceMapping :: Text -- ^ 'desmUUID'
-                         -> DeleteEventSourceMapping
-deleteEventSourceMapping p1 = DeleteEventSourceMapping
-    { _desmUUID = p1
+-- * 'desmUUId'
+deleteEventSourceMapping
+    :: Text -- ^ 'desmUUId'
+    -> DeleteEventSourceMapping
+deleteEventSourceMapping pUUId_ =
+    DeleteEventSourceMapping'
+    { _desmUUId = pUUId_
     }
 
 -- | The event source mapping ID.
-desmUUID :: Lens' DeleteEventSourceMapping Text
-desmUUID = lens _desmUUID (\s a -> s { _desmUUID = a })
-
-data DeleteEventSourceMappingResponse = DeleteEventSourceMappingResponse
-    { _desmrBatchSize             :: Maybe Nat
-    , _desmrEventSourceArn        :: Maybe Text
-    , _desmrFunctionArn           :: Maybe Text
-    , _desmrLastModified          :: Maybe POSIX
-    , _desmrLastProcessingResult  :: Maybe Text
-    , _desmrState                 :: Maybe Text
-    , _desmrStateTransitionReason :: Maybe Text
-    , _desmrUUID                  :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'DeleteEventSourceMappingResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'desmrBatchSize' @::@ 'Maybe' 'Natural'
---
--- * 'desmrEventSourceArn' @::@ 'Maybe' 'Text'
---
--- * 'desmrFunctionArn' @::@ 'Maybe' 'Text'
---
--- * 'desmrLastModified' @::@ 'Maybe' 'UTCTime'
---
--- * 'desmrLastProcessingResult' @::@ 'Maybe' 'Text'
---
--- * 'desmrState' @::@ 'Maybe' 'Text'
---
--- * 'desmrStateTransitionReason' @::@ 'Maybe' 'Text'
---
--- * 'desmrUUID' @::@ 'Maybe' 'Text'
---
-deleteEventSourceMappingResponse :: DeleteEventSourceMappingResponse
-deleteEventSourceMappingResponse = DeleteEventSourceMappingResponse
-    { _desmrUUID                  = Nothing
-    , _desmrBatchSize             = Nothing
-    , _desmrEventSourceArn        = Nothing
-    , _desmrFunctionArn           = Nothing
-    , _desmrLastModified          = Nothing
-    , _desmrLastProcessingResult  = Nothing
-    , _desmrState                 = Nothing
-    , _desmrStateTransitionReason = Nothing
-    }
-
--- | The largest number of records that AWS Lambda will retrieve from your event
--- source at the time of invoking your function. Your function receives an event
--- with all the retrieved records.
-desmrBatchSize :: Lens' DeleteEventSourceMappingResponse (Maybe Natural)
-desmrBatchSize = lens _desmrBatchSize (\s a -> s { _desmrBatchSize = a }) . mapping _Nat
-
--- | The Amazon Resource Name (ARN) of the Amazon Kinesis stream that is the
--- source of events.
-desmrEventSourceArn :: Lens' DeleteEventSourceMappingResponse (Maybe Text)
-desmrEventSourceArn =
-    lens _desmrEventSourceArn (\s a -> s { _desmrEventSourceArn = a })
-
--- | The Lambda function to invoke when AWS Lambda detects an event on the stream.
-desmrFunctionArn :: Lens' DeleteEventSourceMappingResponse (Maybe Text)
-desmrFunctionArn = lens _desmrFunctionArn (\s a -> s { _desmrFunctionArn = a })
-
--- | The UTC time string indicating the last time the event mapping was updated.
-desmrLastModified :: Lens' DeleteEventSourceMappingResponse (Maybe UTCTime)
-desmrLastModified =
-    lens _desmrLastModified (\s a -> s { _desmrLastModified = a })
-        . mapping _Time
-
--- | The result of the last AWS Lambda invocation of your Lambda function.
-desmrLastProcessingResult :: Lens' DeleteEventSourceMappingResponse (Maybe Text)
-desmrLastProcessingResult =
-    lens _desmrLastProcessingResult
-        (\s a -> s { _desmrLastProcessingResult = a })
-
--- | The state of the event source mapping. It can be "Creating", "Enabled",
--- "Disabled", "Enabling", "Disabling", "Updating", or "Deleting".
-desmrState :: Lens' DeleteEventSourceMappingResponse (Maybe Text)
-desmrState = lens _desmrState (\s a -> s { _desmrState = a })
+desmUUId :: Lens' DeleteEventSourceMapping Text
+desmUUId = lens _desmUUId (\ s a -> s{_desmUUId = a});
 
--- | The reason the event source mapping is in its current state. It is either
--- user-requested or an AWS Lambda-initiated state transition.
-desmrStateTransitionReason :: Lens' DeleteEventSourceMappingResponse (Maybe Text)
-desmrStateTransitionReason =
-    lens _desmrStateTransitionReason
-        (\s a -> s { _desmrStateTransitionReason = a })
+instance AWSRequest DeleteEventSourceMapping where
+        type Sv DeleteEventSourceMapping = Lambda
+        type Rs DeleteEventSourceMapping =
+             EventSourceMappingConfiguration
+        request = delete
+        response = receiveJSON (\ s h x -> eitherParseJSON x)
 
--- | The AWS Lambda assigned opaque identifier for the mapping.
-desmrUUID :: Lens' DeleteEventSourceMappingResponse (Maybe Text)
-desmrUUID = lens _desmrUUID (\s a -> s { _desmrUUID = a })
+instance ToHeaders DeleteEventSourceMapping where
+        toHeaders = const mempty
 
 instance ToPath DeleteEventSourceMapping where
-    toPath DeleteEventSourceMapping{..} = mconcat
-        [ "/2015-03-31/event-source-mappings/"
-        , toText _desmUUID
-        ]
+        toPath DeleteEventSourceMapping'{..}
+          = mconcat
+              ["/2015-03-31/event-source-mappings/",
+               toBS _desmUUId]
 
 instance ToQuery DeleteEventSourceMapping where
-    toQuery = const mempty
-
-instance ToHeaders DeleteEventSourceMapping
-
-instance ToJSON DeleteEventSourceMapping where
-    toJSON = const (toJSON Empty)
-
-instance AWSRequest DeleteEventSourceMapping where
-    type Sv DeleteEventSourceMapping = Lambda
-    type Rs DeleteEventSourceMapping = DeleteEventSourceMappingResponse
-
-    request  = delete
-    response = jsonResponse
-
-instance FromJSON DeleteEventSourceMappingResponse where
-    parseJSON = withObject "DeleteEventSourceMappingResponse" $ \o -> DeleteEventSourceMappingResponse
-        <$> o .:? "BatchSize"
-        <*> o .:? "EventSourceArn"
-        <*> o .:? "FunctionArn"
-        <*> o .:? "LastModified"
-        <*> o .:? "LastProcessingResult"
-        <*> o .:? "State"
-        <*> o .:? "StateTransitionReason"
-        <*> o .:? "UUID"
+        toQuery = const mempty
diff --git a/gen/Network/AWS/Lambda/DeleteFunction.hs b/gen/Network/AWS/Lambda/DeleteFunction.hs
--- a/gen/Network/AWS/Lambda/DeleteFunction.hs
+++ b/gen/Network/AWS/Lambda/DeleteFunction.hs
@@ -1,108 +1,106 @@
-{-# 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.Lambda.DeleteFunction
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deletes the specified Lambda function code and configuration.
+-- Deletes the specified Lambda function code and configuration.
 --
--- When you delete a function the associated access policy is also deleted. You
--- will need to delete the event source mappings explicitly.
+-- When you delete a function the associated access policy is also deleted.
+-- You will need to delete the event source mappings explicitly.
 --
--- This operation requires permission for the 'lambda:DeleteFunction' action.
+-- This operation requires permission for the 'lambda:DeleteFunction'
+-- action.
 --
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_DeleteFunction.html>
+-- /See:/ <http://docs.aws.amazon.com/lambda/latest/dg/API_DeleteFunction.html AWS API Reference> for DeleteFunction.
 module Network.AWS.Lambda.DeleteFunction
     (
-    -- * Request
-      DeleteFunction
-    -- ** Request constructor
-    , deleteFunction
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteFunction
+    , DeleteFunction
+    -- * Request Lenses
     , dfFunctionName
 
-    -- * Response
-    , DeleteFunctionResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteFunctionResponse
+    , DeleteFunctionResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
+import           Network.AWS.Lambda.Types
+import           Network.AWS.Lambda.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype DeleteFunction = DeleteFunction
+-- | /See:/ 'deleteFunction' smart constructor.
+newtype DeleteFunction = DeleteFunction'
     { _dfFunctionName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteFunction' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteFunction' with the minimum fields required to make a request.
 --
--- * 'dfFunctionName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-deleteFunction :: Text -- ^ 'dfFunctionName'
-               -> DeleteFunction
-deleteFunction p1 = DeleteFunction
-    { _dfFunctionName = p1
+-- * 'dfFunctionName'
+deleteFunction
+    :: Text -- ^ 'dfFunctionName'
+    -> DeleteFunction
+deleteFunction pFunctionName_ =
+    DeleteFunction'
+    { _dfFunctionName = pFunctionName_
     }
 
 -- | The Lambda function to delete.
 --
--- You can specify an unqualified function name (for example, "Thumbnail") or
--- you can specify Amazon Resource Name (ARN) of the function (for example,
--- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
--- allows you to specify only the account ID qualifier (for example,
--- "account-id:Thumbnail"). Note that the length constraint applies only to the
--- ARN. If you specify only the function name, it is limited to 64 character in
--- length.
+-- You can specify an unqualified function name (for example,
+-- \"Thumbnail\") or you can specify Amazon Resource Name (ARN) of the
+-- function (for example,
+-- \"arn:aws:lambda:us-west-2:account-id:function:ThumbNail\"). AWS Lambda
+-- also allows you to specify only the account ID qualifier (for example,
+-- \"account-id:Thumbnail\"). Note that the length constraint applies only
+-- to the ARN. If you specify only the function name, it is limited to 64
+-- character in length.
 dfFunctionName :: Lens' DeleteFunction Text
-dfFunctionName = lens _dfFunctionName (\s a -> s { _dfFunctionName = a })
+dfFunctionName = lens _dfFunctionName (\ s a -> s{_dfFunctionName = a});
 
-data DeleteFunctionResponse = DeleteFunctionResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteFunction where
+        type Sv DeleteFunction = Lambda
+        type Rs DeleteFunction = DeleteFunctionResponse
+        request = delete
+        response = receiveNull DeleteFunctionResponse'
 
--- | 'DeleteFunctionResponse' constructor.
-deleteFunctionResponse :: DeleteFunctionResponse
-deleteFunctionResponse = DeleteFunctionResponse
+instance ToHeaders DeleteFunction where
+        toHeaders = const mempty
 
 instance ToPath DeleteFunction where
-    toPath DeleteFunction{..} = mconcat
-        [ "/2015-03-31/functions/"
-        , toText _dfFunctionName
-        ]
+        toPath DeleteFunction'{..}
+          = mconcat
+              ["/2015-03-31/functions/", toBS _dfFunctionName]
 
 instance ToQuery DeleteFunction where
-    toQuery = const mempty
-
-instance ToHeaders DeleteFunction
-
-instance ToJSON DeleteFunction where
-    toJSON = const (toJSON Empty)
+        toQuery = const mempty
 
-instance AWSRequest DeleteFunction where
-    type Sv DeleteFunction = Lambda
-    type Rs DeleteFunction = DeleteFunctionResponse
+-- | /See:/ 'deleteFunctionResponse' smart constructor.
+data DeleteFunctionResponse =
+    DeleteFunctionResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = delete
-    response = nullResponse DeleteFunctionResponse
+-- | Creates a value of 'DeleteFunctionResponse' with the minimum fields required to make a request.
+--
+deleteFunctionResponse
+    :: DeleteFunctionResponse
+deleteFunctionResponse = DeleteFunctionResponse'
diff --git a/gen/Network/AWS/Lambda/GetEventSourceMapping.hs b/gen/Network/AWS/Lambda/GetEventSourceMapping.hs
--- a/gen/Network/AWS/Lambda/GetEventSourceMapping.hs
+++ b/gen/Network/AWS/Lambda/GetEventSourceMapping.hs
@@ -1,198 +1,95 @@
-{-# 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.Lambda.GetEventSourceMapping
--- 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 configuration information for the specified event source mapping (see 'CreateEventSourceMapping').
+-- Returns configuration information for the specified event source mapping
+-- (see CreateEventSourceMapping).
 --
--- This operation requires permission for the 'lambda:GetEventSourceMapping'
--- action.
+-- This operation requires permission for the
+-- 'lambda:GetEventSourceMapping' action.
 --
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_GetEventSourceMapping.html>
+-- /See:/ <http://docs.aws.amazon.com/lambda/latest/dg/API_GetEventSourceMapping.html AWS API Reference> for GetEventSourceMapping.
 module Network.AWS.Lambda.GetEventSourceMapping
     (
-    -- * Request
-      GetEventSourceMapping
-    -- ** Request constructor
-    , getEventSourceMapping
-    -- ** Request lenses
-    , gesmUUID
+    -- * Creating a Request
+      getEventSourceMapping
+    , GetEventSourceMapping
+    -- * Request Lenses
+    , gesmUUId
 
-    -- * Response
-    , GetEventSourceMappingResponse
-    -- ** Response constructor
-    , getEventSourceMappingResponse
-    -- ** Response lenses
-    , gesmrBatchSize
-    , gesmrEventSourceArn
-    , gesmrFunctionArn
-    , gesmrLastModified
-    , gesmrLastProcessingResult
-    , gesmrState
-    , gesmrStateTransitionReason
-    , gesmrUUID
+    -- * Destructuring the Response
+    , eventSourceMappingConfiguration
+    , EventSourceMappingConfiguration
+    -- * Response Lenses
+    , esmcEventSourceARN
+    , esmcFunctionARN
+    , esmcState
+    , esmcUUId
+    , esmcLastProcessingResult
+    , esmcBatchSize
+    , esmcStateTransitionReason
+    , esmcLastModified
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
+import           Network.AWS.Lambda.Types
+import           Network.AWS.Lambda.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype GetEventSourceMapping = GetEventSourceMapping
-    { _gesmUUID :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'getEventSourceMapping' smart constructor.
+newtype GetEventSourceMapping = GetEventSourceMapping'
+    { _gesmUUId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetEventSourceMapping' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetEventSourceMapping' with the minimum fields required to make a request.
 --
--- * 'gesmUUID' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getEventSourceMapping :: Text -- ^ 'gesmUUID'
-                      -> GetEventSourceMapping
-getEventSourceMapping p1 = GetEventSourceMapping
-    { _gesmUUID = p1
+-- * 'gesmUUId'
+getEventSourceMapping
+    :: Text -- ^ 'gesmUUId'
+    -> GetEventSourceMapping
+getEventSourceMapping pUUId_ =
+    GetEventSourceMapping'
+    { _gesmUUId = pUUId_
     }
 
 -- | The AWS Lambda assigned ID of the event source mapping.
-gesmUUID :: Lens' GetEventSourceMapping Text
-gesmUUID = lens _gesmUUID (\s a -> s { _gesmUUID = a })
-
-data GetEventSourceMappingResponse = GetEventSourceMappingResponse
-    { _gesmrBatchSize             :: Maybe Nat
-    , _gesmrEventSourceArn        :: Maybe Text
-    , _gesmrFunctionArn           :: Maybe Text
-    , _gesmrLastModified          :: Maybe POSIX
-    , _gesmrLastProcessingResult  :: Maybe Text
-    , _gesmrState                 :: Maybe Text
-    , _gesmrStateTransitionReason :: Maybe Text
-    , _gesmrUUID                  :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'GetEventSourceMappingResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gesmrBatchSize' @::@ 'Maybe' 'Natural'
---
--- * 'gesmrEventSourceArn' @::@ 'Maybe' 'Text'
---
--- * 'gesmrFunctionArn' @::@ 'Maybe' 'Text'
---
--- * 'gesmrLastModified' @::@ 'Maybe' 'UTCTime'
---
--- * 'gesmrLastProcessingResult' @::@ 'Maybe' 'Text'
---
--- * 'gesmrState' @::@ 'Maybe' 'Text'
---
--- * 'gesmrStateTransitionReason' @::@ 'Maybe' 'Text'
---
--- * 'gesmrUUID' @::@ 'Maybe' 'Text'
---
-getEventSourceMappingResponse :: GetEventSourceMappingResponse
-getEventSourceMappingResponse = GetEventSourceMappingResponse
-    { _gesmrUUID                  = Nothing
-    , _gesmrBatchSize             = Nothing
-    , _gesmrEventSourceArn        = Nothing
-    , _gesmrFunctionArn           = Nothing
-    , _gesmrLastModified          = Nothing
-    , _gesmrLastProcessingResult  = Nothing
-    , _gesmrState                 = Nothing
-    , _gesmrStateTransitionReason = Nothing
-    }
-
--- | The largest number of records that AWS Lambda will retrieve from your event
--- source at the time of invoking your function. Your function receives an event
--- with all the retrieved records.
-gesmrBatchSize :: Lens' GetEventSourceMappingResponse (Maybe Natural)
-gesmrBatchSize = lens _gesmrBatchSize (\s a -> s { _gesmrBatchSize = a }) . mapping _Nat
-
--- | The Amazon Resource Name (ARN) of the Amazon Kinesis stream that is the
--- source of events.
-gesmrEventSourceArn :: Lens' GetEventSourceMappingResponse (Maybe Text)
-gesmrEventSourceArn =
-    lens _gesmrEventSourceArn (\s a -> s { _gesmrEventSourceArn = a })
-
--- | The Lambda function to invoke when AWS Lambda detects an event on the stream.
-gesmrFunctionArn :: Lens' GetEventSourceMappingResponse (Maybe Text)
-gesmrFunctionArn = lens _gesmrFunctionArn (\s a -> s { _gesmrFunctionArn = a })
-
--- | The UTC time string indicating the last time the event mapping was updated.
-gesmrLastModified :: Lens' GetEventSourceMappingResponse (Maybe UTCTime)
-gesmrLastModified =
-    lens _gesmrLastModified (\s a -> s { _gesmrLastModified = a })
-        . mapping _Time
-
--- | The result of the last AWS Lambda invocation of your Lambda function.
-gesmrLastProcessingResult :: Lens' GetEventSourceMappingResponse (Maybe Text)
-gesmrLastProcessingResult =
-    lens _gesmrLastProcessingResult
-        (\s a -> s { _gesmrLastProcessingResult = a })
-
--- | The state of the event source mapping. It can be "Creating", "Enabled",
--- "Disabled", "Enabling", "Disabling", "Updating", or "Deleting".
-gesmrState :: Lens' GetEventSourceMappingResponse (Maybe Text)
-gesmrState = lens _gesmrState (\s a -> s { _gesmrState = a })
+gesmUUId :: Lens' GetEventSourceMapping Text
+gesmUUId = lens _gesmUUId (\ s a -> s{_gesmUUId = a});
 
--- | The reason the event source mapping is in its current state. It is either
--- user-requested or an AWS Lambda-initiated state transition.
-gesmrStateTransitionReason :: Lens' GetEventSourceMappingResponse (Maybe Text)
-gesmrStateTransitionReason =
-    lens _gesmrStateTransitionReason
-        (\s a -> s { _gesmrStateTransitionReason = a })
+instance AWSRequest GetEventSourceMapping where
+        type Sv GetEventSourceMapping = Lambda
+        type Rs GetEventSourceMapping =
+             EventSourceMappingConfiguration
+        request = get
+        response = receiveJSON (\ s h x -> eitherParseJSON x)
 
--- | The AWS Lambda assigned opaque identifier for the mapping.
-gesmrUUID :: Lens' GetEventSourceMappingResponse (Maybe Text)
-gesmrUUID = lens _gesmrUUID (\s a -> s { _gesmrUUID = a })
+instance ToHeaders GetEventSourceMapping where
+        toHeaders = const mempty
 
 instance ToPath GetEventSourceMapping where
-    toPath GetEventSourceMapping{..} = mconcat
-        [ "/2015-03-31/event-source-mappings/"
-        , toText _gesmUUID
-        ]
+        toPath GetEventSourceMapping'{..}
+          = mconcat
+              ["/2015-03-31/event-source-mappings/",
+               toBS _gesmUUId]
 
 instance ToQuery GetEventSourceMapping where
-    toQuery = const mempty
-
-instance ToHeaders GetEventSourceMapping
-
-instance ToJSON GetEventSourceMapping where
-    toJSON = const (toJSON Empty)
-
-instance AWSRequest GetEventSourceMapping where
-    type Sv GetEventSourceMapping = Lambda
-    type Rs GetEventSourceMapping = GetEventSourceMappingResponse
-
-    request  = get
-    response = jsonResponse
-
-instance FromJSON GetEventSourceMappingResponse where
-    parseJSON = withObject "GetEventSourceMappingResponse" $ \o -> GetEventSourceMappingResponse
-        <$> o .:? "BatchSize"
-        <*> o .:? "EventSourceArn"
-        <*> o .:? "FunctionArn"
-        <*> o .:? "LastModified"
-        <*> o .:? "LastProcessingResult"
-        <*> o .:? "State"
-        <*> o .:? "StateTransitionReason"
-        <*> o .:? "UUID"
+        toQuery = const mempty
diff --git a/gen/Network/AWS/Lambda/GetFunction.hs b/gen/Network/AWS/Lambda/GetFunction.hs
--- a/gen/Network/AWS/Lambda/GetFunction.hs
+++ b/gen/Network/AWS/Lambda/GetFunction.hs
@@ -1,136 +1,146 @@
-{-# 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.Lambda.GetFunction
--- 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 the configuration information of the Lambda function and a presigned
--- URL link to the .zip file you uploaded with 'CreateFunction' so you can
--- download the .zip file. Note that the URL is valid for up to 10 minutes. The
--- configuration information is the same information you provided as parameters
--- when uploading the function.
+-- Returns the configuration information of the Lambda function and a
+-- presigned URL link to the .zip file you uploaded with CreateFunction so
+-- you can download the .zip file. Note that the URL is valid for up to 10
+-- minutes. The configuration information is the same information you
+-- provided as parameters when uploading the function.
 --
 -- This operation requires permission for the 'lambda:GetFunction' action.
 --
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_GetFunction.html>
+-- /See:/ <http://docs.aws.amazon.com/lambda/latest/dg/API_GetFunction.html AWS API Reference> for GetFunction.
 module Network.AWS.Lambda.GetFunction
     (
-    -- * Request
-      GetFunction
-    -- ** Request constructor
-    , getFunction
-    -- ** Request lenses
+    -- * Creating a Request
+      getFunction
+    , GetFunction
+    -- * Request Lenses
     , gfFunctionName
 
-    -- * Response
-    , GetFunctionResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getFunctionResponse
-    -- ** Response lenses
-    , gfrCode
-    , gfrConfiguration
+    , GetFunctionResponse
+    -- * Response Lenses
+    , gfrsCode
+    , gfrsConfiguration
+    , gfrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
+import           Network.AWS.Lambda.Types
+import           Network.AWS.Lambda.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype GetFunction = GetFunction
+-- | /See:/ 'getFunction' smart constructor.
+newtype GetFunction = GetFunction'
     { _gfFunctionName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetFunction' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetFunction' with the minimum fields required to make a request.
 --
--- * 'gfFunctionName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getFunction :: Text -- ^ 'gfFunctionName'
-            -> GetFunction
-getFunction p1 = GetFunction
-    { _gfFunctionName = p1
+-- * 'gfFunctionName'
+getFunction
+    :: Text -- ^ 'gfFunctionName'
+    -> GetFunction
+getFunction pFunctionName_ =
+    GetFunction'
+    { _gfFunctionName = pFunctionName_
     }
 
 -- | The Lambda function name.
 --
--- You can specify an unqualified function name (for example, "Thumbnail") or
--- you can specify Amazon Resource Name (ARN) of the function (for example,
--- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
--- allows you to specify only the account ID qualifier (for example,
--- "account-id:Thumbnail"). Note that the length constraint applies only to the
--- ARN. If you specify only the function name, it is limited to 64 character in
--- length.
+-- You can specify an unqualified function name (for example,
+-- \"Thumbnail\") or you can specify Amazon Resource Name (ARN) of the
+-- function (for example,
+-- \"arn:aws:lambda:us-west-2:account-id:function:ThumbNail\"). AWS Lambda
+-- also allows you to specify only the account ID qualifier (for example,
+-- \"account-id:Thumbnail\"). Note that the length constraint applies only
+-- to the ARN. If you specify only the function name, it is limited to 64
+-- character in length.
 gfFunctionName :: Lens' GetFunction Text
-gfFunctionName = lens _gfFunctionName (\s a -> s { _gfFunctionName = a })
-
-data GetFunctionResponse = GetFunctionResponse
-    { _gfrCode          :: Maybe FunctionCodeLocation
-    , _gfrConfiguration :: Maybe FunctionConfiguration
-    } deriving (Eq, Read, Show)
-
--- | 'GetFunctionResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gfrCode' @::@ 'Maybe' 'FunctionCodeLocation'
---
--- * 'gfrConfiguration' @::@ 'Maybe' 'FunctionConfiguration'
---
-getFunctionResponse :: GetFunctionResponse
-getFunctionResponse = GetFunctionResponse
-    { _gfrConfiguration = Nothing
-    , _gfrCode          = Nothing
-    }
+gfFunctionName = lens _gfFunctionName (\ s a -> s{_gfFunctionName = a});
 
-gfrCode :: Lens' GetFunctionResponse (Maybe FunctionCodeLocation)
-gfrCode = lens _gfrCode (\s a -> s { _gfrCode = a })
+instance AWSRequest GetFunction where
+        type Sv GetFunction = Lambda
+        type Rs GetFunction = GetFunctionResponse
+        request = get
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetFunctionResponse' <$>
+                   (x .?> "Code") <*> (x .?> "Configuration") <*>
+                     (pure (fromEnum s)))
 
-gfrConfiguration :: Lens' GetFunctionResponse (Maybe FunctionConfiguration)
-gfrConfiguration = lens _gfrConfiguration (\s a -> s { _gfrConfiguration = a })
+instance ToHeaders GetFunction where
+        toHeaders = const mempty
 
 instance ToPath GetFunction where
-    toPath GetFunction{..} = mconcat
-        [ "/2015-03-31/functions/"
-        , toText _gfFunctionName
-        , "/versions/HEAD"
-        ]
+        toPath GetFunction'{..}
+          = mconcat
+              ["/2015-03-31/functions/", toBS _gfFunctionName,
+               "/versions/HEAD"]
 
 instance ToQuery GetFunction where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders GetFunction
+-- | This response contains the object for the Lambda function location (see
+-- API_FunctionCodeLocation
+--
+-- /See:/ 'getFunctionResponse' smart constructor.
+data GetFunctionResponse = GetFunctionResponse'
+    { _gfrsCode          :: !(Maybe FunctionCodeLocation)
+    , _gfrsConfiguration :: !(Maybe FunctionConfiguration)
+    , _gfrsStatus        :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON GetFunction where
-    toJSON = const (toJSON Empty)
+-- | Creates a value of 'GetFunctionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gfrsCode'
+--
+-- * 'gfrsConfiguration'
+--
+-- * 'gfrsStatus'
+getFunctionResponse
+    :: Int -- ^ 'gfrsStatus'
+    -> GetFunctionResponse
+getFunctionResponse pStatus_ =
+    GetFunctionResponse'
+    { _gfrsCode = Nothing
+    , _gfrsConfiguration = Nothing
+    , _gfrsStatus = pStatus_
+    }
 
-instance AWSRequest GetFunction where
-    type Sv GetFunction = Lambda
-    type Rs GetFunction = GetFunctionResponse
+-- | Undocumented member.
+gfrsCode :: Lens' GetFunctionResponse (Maybe FunctionCodeLocation)
+gfrsCode = lens _gfrsCode (\ s a -> s{_gfrsCode = a});
 
-    request  = get
-    response = jsonResponse
+-- | Undocumented member.
+gfrsConfiguration :: Lens' GetFunctionResponse (Maybe FunctionConfiguration)
+gfrsConfiguration = lens _gfrsConfiguration (\ s a -> s{_gfrsConfiguration = a});
 
-instance FromJSON GetFunctionResponse where
-    parseJSON = withObject "GetFunctionResponse" $ \o -> GetFunctionResponse
-        <$> o .:? "Code"
-        <*> o .:? "Configuration"
+-- | The response status code.
+gfrsStatus :: Lens' GetFunctionResponse Int
+gfrsStatus = lens _gfrsStatus (\ s a -> s{_gfrsStatus = a});
diff --git a/gen/Network/AWS/Lambda/GetFunctionConfiguration.hs b/gen/Network/AWS/Lambda/GetFunctionConfiguration.hs
--- a/gen/Network/AWS/Lambda/GetFunctionConfiguration.hs
+++ b/gen/Network/AWS/Lambda/GetFunctionConfiguration.hs
@@ -1,222 +1,108 @@
-{-# 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.Lambda.GetFunctionConfiguration
--- 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 the configuration information of the Lambda function. This the same
--- information you provided as parameters when uploading the function by using 'CreateFunction'.
+-- Returns the configuration information of the Lambda function. This the
+-- same information you provided as parameters when uploading the function
+-- by using CreateFunction.
 --
--- This operation requires permission for the 'lambda:GetFunctionConfiguration'
--- operation.
+-- This operation requires permission for the
+-- 'lambda:GetFunctionConfiguration' operation.
 --
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_GetFunctionConfiguration.html>
+-- /See:/ <http://docs.aws.amazon.com/lambda/latest/dg/API_GetFunctionConfiguration.html AWS API Reference> for GetFunctionConfiguration.
 module Network.AWS.Lambda.GetFunctionConfiguration
     (
-    -- * Request
-      GetFunctionConfiguration
-    -- ** Request constructor
-    , getFunctionConfiguration
-    -- ** Request lenses
+    -- * Creating a Request
+      getFunctionConfiguration
+    , GetFunctionConfiguration
+    -- * Request Lenses
     , gfcFunctionName
 
-    -- * Response
-    , GetFunctionConfigurationResponse
-    -- ** Response constructor
-    , getFunctionConfigurationResponse
-    -- ** Response lenses
-    , gfcrCodeSize
-    , gfcrDescription
-    , gfcrFunctionArn
-    , gfcrFunctionName
-    , gfcrHandler
-    , gfcrLastModified
-    , gfcrMemorySize
-    , gfcrRole
-    , gfcrRuntime
-    , gfcrTimeout
+    -- * Destructuring the Response
+    , functionConfiguration
+    , FunctionConfiguration
+    -- * Response Lenses
+    , fcRuntime
+    , fcMemorySize
+    , fcFunctionARN
+    , fcRole
+    , fcFunctionName
+    , fcCodeSize
+    , fcHandler
+    , fcTimeout
+    , fcLastModified
+    , fcDescription
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
+import           Network.AWS.Lambda.Types
+import           Network.AWS.Lambda.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype GetFunctionConfiguration = GetFunctionConfiguration
+-- | /See:/ 'getFunctionConfiguration' smart constructor.
+newtype GetFunctionConfiguration = GetFunctionConfiguration'
     { _gfcFunctionName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetFunctionConfiguration' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetFunctionConfiguration' with the minimum fields required to make a request.
 --
--- * 'gfcFunctionName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getFunctionConfiguration :: Text -- ^ 'gfcFunctionName'
-                         -> GetFunctionConfiguration
-getFunctionConfiguration p1 = GetFunctionConfiguration
-    { _gfcFunctionName = p1
+-- * 'gfcFunctionName'
+getFunctionConfiguration
+    :: Text -- ^ 'gfcFunctionName'
+    -> GetFunctionConfiguration
+getFunctionConfiguration pFunctionName_ =
+    GetFunctionConfiguration'
+    { _gfcFunctionName = pFunctionName_
     }
 
 -- | The name of the Lambda function for which you want to retrieve the
 -- configuration information.
 --
--- You can specify an unqualified function name (for example, "Thumbnail") or
--- you can specify Amazon Resource Name (ARN) of the function (for example,
--- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
--- allows you to specify only the account ID qualifier (for example,
--- "account-id:Thumbnail"). Note that the length constraint applies only to the
--- ARN. If you specify only the function name, it is limited to 64 character in
--- length.
+-- You can specify an unqualified function name (for example,
+-- \"Thumbnail\") or you can specify Amazon Resource Name (ARN) of the
+-- function (for example,
+-- \"arn:aws:lambda:us-west-2:account-id:function:ThumbNail\"). AWS Lambda
+-- also allows you to specify only the account ID qualifier (for example,
+-- \"account-id:Thumbnail\"). Note that the length constraint applies only
+-- to the ARN. If you specify only the function name, it is limited to 64
+-- character in length.
 gfcFunctionName :: Lens' GetFunctionConfiguration Text
-gfcFunctionName = lens _gfcFunctionName (\s a -> s { _gfcFunctionName = a })
-
-data GetFunctionConfigurationResponse = GetFunctionConfigurationResponse
-    { _gfcrCodeSize     :: Maybe Integer
-    , _gfcrDescription  :: Maybe Text
-    , _gfcrFunctionArn  :: Maybe Text
-    , _gfcrFunctionName :: Maybe Text
-    , _gfcrHandler      :: Maybe Text
-    , _gfcrLastModified :: Maybe Text
-    , _gfcrMemorySize   :: Maybe Nat
-    , _gfcrRole         :: Maybe Text
-    , _gfcrRuntime      :: Maybe Runtime
-    , _gfcrTimeout      :: Maybe Nat
-    } deriving (Eq, Read, Show)
-
--- | 'GetFunctionConfigurationResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gfcrCodeSize' @::@ 'Maybe' 'Integer'
---
--- * 'gfcrDescription' @::@ 'Maybe' 'Text'
---
--- * 'gfcrFunctionArn' @::@ 'Maybe' 'Text'
---
--- * 'gfcrFunctionName' @::@ 'Maybe' 'Text'
---
--- * 'gfcrHandler' @::@ 'Maybe' 'Text'
---
--- * 'gfcrLastModified' @::@ 'Maybe' 'Text'
---
--- * 'gfcrMemorySize' @::@ 'Maybe' 'Natural'
---
--- * 'gfcrRole' @::@ 'Maybe' 'Text'
---
--- * 'gfcrRuntime' @::@ 'Maybe' 'Runtime'
---
--- * 'gfcrTimeout' @::@ 'Maybe' 'Natural'
---
-getFunctionConfigurationResponse :: GetFunctionConfigurationResponse
-getFunctionConfigurationResponse = GetFunctionConfigurationResponse
-    { _gfcrFunctionName = Nothing
-    , _gfcrFunctionArn  = Nothing
-    , _gfcrRuntime      = Nothing
-    , _gfcrRole         = Nothing
-    , _gfcrHandler      = Nothing
-    , _gfcrCodeSize     = Nothing
-    , _gfcrDescription  = Nothing
-    , _gfcrTimeout      = Nothing
-    , _gfcrMemorySize   = Nothing
-    , _gfcrLastModified = Nothing
-    }
-
--- | The size, in bytes, of the function .zip file you uploaded.
-gfcrCodeSize :: Lens' GetFunctionConfigurationResponse (Maybe Integer)
-gfcrCodeSize = lens _gfcrCodeSize (\s a -> s { _gfcrCodeSize = a })
-
--- | The user-provided description.
-gfcrDescription :: Lens' GetFunctionConfigurationResponse (Maybe Text)
-gfcrDescription = lens _gfcrDescription (\s a -> s { _gfcrDescription = a })
-
--- | The Amazon Resource Name (ARN) assigned to the function.
-gfcrFunctionArn :: Lens' GetFunctionConfigurationResponse (Maybe Text)
-gfcrFunctionArn = lens _gfcrFunctionArn (\s a -> s { _gfcrFunctionArn = a })
-
--- | The name of the function.
-gfcrFunctionName :: Lens' GetFunctionConfigurationResponse (Maybe Text)
-gfcrFunctionName = lens _gfcrFunctionName (\s a -> s { _gfcrFunctionName = a })
-
--- | The function Lambda calls to begin executing your function.
-gfcrHandler :: Lens' GetFunctionConfigurationResponse (Maybe Text)
-gfcrHandler = lens _gfcrHandler (\s a -> s { _gfcrHandler = a })
-
--- | The timestamp of the last time you updated the function.
-gfcrLastModified :: Lens' GetFunctionConfigurationResponse (Maybe Text)
-gfcrLastModified = lens _gfcrLastModified (\s a -> s { _gfcrLastModified = a })
-
--- | The memory size, in MB, you configured for the function. Must be a multiple
--- of 64 MB.
-gfcrMemorySize :: Lens' GetFunctionConfigurationResponse (Maybe Natural)
-gfcrMemorySize = lens _gfcrMemorySize (\s a -> s { _gfcrMemorySize = a }) . mapping _Nat
-
--- | The Amazon Resource Name (ARN) of the IAM role that Lambda assumes when it
--- executes your function to access any other Amazon Web Services (AWS)
--- resources.
-gfcrRole :: Lens' GetFunctionConfigurationResponse (Maybe Text)
-gfcrRole = lens _gfcrRole (\s a -> s { _gfcrRole = a })
+gfcFunctionName = lens _gfcFunctionName (\ s a -> s{_gfcFunctionName = a});
 
--- | The runtime environment for the Lambda function.
-gfcrRuntime :: Lens' GetFunctionConfigurationResponse (Maybe Runtime)
-gfcrRuntime = lens _gfcrRuntime (\s a -> s { _gfcrRuntime = a })
+instance AWSRequest GetFunctionConfiguration where
+        type Sv GetFunctionConfiguration = Lambda
+        type Rs GetFunctionConfiguration =
+             FunctionConfiguration
+        request = get
+        response = receiveJSON (\ s h x -> eitherParseJSON x)
 
--- | The function execution time at which Lambda should terminate the function.
--- Because the execution time has cost implications, we recommend you set this
--- value based on your expected execution time. The default is 3 seconds.
-gfcrTimeout :: Lens' GetFunctionConfigurationResponse (Maybe Natural)
-gfcrTimeout = lens _gfcrTimeout (\s a -> s { _gfcrTimeout = a }) . mapping _Nat
+instance ToHeaders GetFunctionConfiguration where
+        toHeaders = const mempty
 
 instance ToPath GetFunctionConfiguration where
-    toPath GetFunctionConfiguration{..} = mconcat
-        [ "/2015-03-31/functions/"
-        , toText _gfcFunctionName
-        , "/versions/HEAD/configuration"
-        ]
+        toPath GetFunctionConfiguration'{..}
+          = mconcat
+              ["/2015-03-31/functions/", toBS _gfcFunctionName,
+               "/versions/HEAD/configuration"]
 
 instance ToQuery GetFunctionConfiguration where
-    toQuery = const mempty
-
-instance ToHeaders GetFunctionConfiguration
-
-instance ToJSON GetFunctionConfiguration where
-    toJSON = const (toJSON Empty)
-
-instance AWSRequest GetFunctionConfiguration where
-    type Sv GetFunctionConfiguration = Lambda
-    type Rs GetFunctionConfiguration = GetFunctionConfigurationResponse
-
-    request  = get
-    response = jsonResponse
-
-instance FromJSON GetFunctionConfigurationResponse where
-    parseJSON = withObject "GetFunctionConfigurationResponse" $ \o -> GetFunctionConfigurationResponse
-        <$> o .:? "CodeSize"
-        <*> o .:? "Description"
-        <*> o .:? "FunctionArn"
-        <*> o .:? "FunctionName"
-        <*> o .:? "Handler"
-        <*> o .:? "LastModified"
-        <*> o .:? "MemorySize"
-        <*> o .:? "Role"
-        <*> o .:? "Runtime"
-        <*> o .:? "Timeout"
+        toQuery = const mempty
diff --git a/gen/Network/AWS/Lambda/GetPolicy.hs b/gen/Network/AWS/Lambda/GetPolicy.hs
--- a/gen/Network/AWS/Lambda/GetPolicy.hs
+++ b/gen/Network/AWS/Lambda/GetPolicy.hs
@@ -1,125 +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.Lambda.GetPolicy
--- 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 the access policy, containing a list of permissions granted via the 'AddPermission' API, associated with the specified bucket.
+-- Returns the access policy, containing a list of permissions granted via
+-- the 'AddPermission' API, associated with the specified bucket.
 --
 -- You need permission for the 'lambda:GetPolicy action.'
 --
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_GetPolicy.html>
+-- /See:/ <http://docs.aws.amazon.com/lambda/latest/dg/API_GetPolicy.html AWS API Reference> for GetPolicy.
 module Network.AWS.Lambda.GetPolicy
     (
-    -- * Request
-      GetPolicy
-    -- ** Request constructor
-    , getPolicy
-    -- ** Request lenses
+    -- * Creating a Request
+      getPolicy
+    , GetPolicy
+    -- * Request Lenses
     , gpFunctionName
 
-    -- * Response
-    , GetPolicyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getPolicyResponse
-    -- ** Response lenses
-    , gprPolicy
+    , GetPolicyResponse
+    -- * Response Lenses
+    , gprsPolicy
+    , gprsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
+import           Network.AWS.Lambda.Types
+import           Network.AWS.Lambda.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype GetPolicy = GetPolicy
+-- | /See:/ 'getPolicy' smart constructor.
+newtype GetPolicy = GetPolicy'
     { _gpFunctionName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetPolicy' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetPolicy' with the minimum fields required to make a request.
 --
--- * 'gpFunctionName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getPolicy :: Text -- ^ 'gpFunctionName'
-          -> GetPolicy
-getPolicy p1 = GetPolicy
-    { _gpFunctionName = p1
+-- * 'gpFunctionName'
+getPolicy
+    :: Text -- ^ 'gpFunctionName'
+    -> GetPolicy
+getPolicy pFunctionName_ =
+    GetPolicy'
+    { _gpFunctionName = pFunctionName_
     }
 
 -- | Function name whose access policy you want to retrieve.
 --
--- You can specify an unqualified function name (for example, "Thumbnail") or
--- you can specify Amazon Resource Name (ARN) of the function (for example,
--- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
--- allows you to specify only the account ID qualifier (for example,
--- "account-id:Thumbnail"). Note that the length constraint applies only to the
--- ARN. If you specify only the function name, it is limited to 64 character in
--- length.
+-- You can specify an unqualified function name (for example,
+-- \"Thumbnail\") or you can specify Amazon Resource Name (ARN) of the
+-- function (for example,
+-- \"arn:aws:lambda:us-west-2:account-id:function:ThumbNail\"). AWS Lambda
+-- also allows you to specify only the account ID qualifier (for example,
+-- \"account-id:Thumbnail\"). Note that the length constraint applies only
+-- to the ARN. If you specify only the function name, it is limited to 64
+-- character in length.
 gpFunctionName :: Lens' GetPolicy Text
-gpFunctionName = lens _gpFunctionName (\s a -> s { _gpFunctionName = a })
-
-newtype GetPolicyResponse = GetPolicyResponse
-    { _gprPolicy :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
+gpFunctionName = lens _gpFunctionName (\ s a -> s{_gpFunctionName = a});
 
--- | 'GetPolicyResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gprPolicy' @::@ 'Maybe' 'Text'
---
-getPolicyResponse :: GetPolicyResponse
-getPolicyResponse = GetPolicyResponse
-    { _gprPolicy = Nothing
-    }
+instance AWSRequest GetPolicy where
+        type Sv GetPolicy = Lambda
+        type Rs GetPolicy = GetPolicyResponse
+        request = get
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetPolicyResponse' <$>
+                   (x .?> "Policy") <*> (pure (fromEnum s)))
 
--- | The access policy associated with the specified function. The response
--- returns the same as a string using "\" as an escape character in the JSON.
-gprPolicy :: Lens' GetPolicyResponse (Maybe Text)
-gprPolicy = lens _gprPolicy (\s a -> s { _gprPolicy = a })
+instance ToHeaders GetPolicy where
+        toHeaders = const mempty
 
 instance ToPath GetPolicy where
-    toPath GetPolicy{..} = mconcat
-        [ "/2015-03-31/functions/"
-        , toText _gpFunctionName
-        , "/versions/HEAD/policy"
-        ]
+        toPath GetPolicy'{..}
+          = mconcat
+              ["/2015-03-31/functions/", toBS _gpFunctionName,
+               "/versions/HEAD/policy"]
 
 instance ToQuery GetPolicy where
-    toQuery = const mempty
-
-instance ToHeaders GetPolicy
+        toQuery = const mempty
 
-instance ToJSON GetPolicy where
-    toJSON = const (toJSON Empty)
+-- | /See:/ 'getPolicyResponse' smart constructor.
+data GetPolicyResponse = GetPolicyResponse'
+    { _gprsPolicy :: !(Maybe Text)
+    , _gprsStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetPolicy where
-    type Sv GetPolicy = Lambda
-    type Rs GetPolicy = GetPolicyResponse
+-- | Creates a value of 'GetPolicyResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gprsPolicy'
+--
+-- * 'gprsStatus'
+getPolicyResponse
+    :: Int -- ^ 'gprsStatus'
+    -> GetPolicyResponse
+getPolicyResponse pStatus_ =
+    GetPolicyResponse'
+    { _gprsPolicy = Nothing
+    , _gprsStatus = pStatus_
+    }
 
-    request  = get
-    response = jsonResponse
+-- | The access policy associated with the specified function. The response
+-- returns the same as a string using \"\\\" as an escape character in the
+-- JSON.
+gprsPolicy :: Lens' GetPolicyResponse (Maybe Text)
+gprsPolicy = lens _gprsPolicy (\ s a -> s{_gprsPolicy = a});
 
-instance FromJSON GetPolicyResponse where
-    parseJSON = withObject "GetPolicyResponse" $ \o -> GetPolicyResponse
-        <$> o .:? "Policy"
+-- | The response status code.
+gprsStatus :: Lens' GetPolicyResponse Int
+gprsStatus = lens _gprsStatus (\ s a -> s{_gprsStatus = a});
diff --git a/gen/Network/AWS/Lambda/Invoke.hs b/gen/Network/AWS/Lambda/Invoke.hs
--- a/gen/Network/AWS/Lambda/Invoke.hs
+++ b/gen/Network/AWS/Lambda/Invoke.hs
@@ -1,221 +1,232 @@
-{-# 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.Lambda.Invoke
--- 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.
-
--- | Invokes a specified Lambda function.
+-- Invokes a specified Lambda function.
 --
--- This operation requires permission for the 'lambda:InvokeFunction' action.
+-- This operation requires permission for the 'lambda:InvokeFunction'
+-- action.
 --
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html>
+-- /See:/ <http://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html AWS API Reference> for Invoke.
 module Network.AWS.Lambda.Invoke
     (
-    -- * Request
-      Invoke
-    -- ** Request constructor
-    , invoke
-    -- ** Request lenses
-    , iClientContext
-    , iFunctionName
+    -- * Creating a Request
+      invoke
+    , Invoke
+    -- * Request Lenses
     , iInvocationType
-    , iLogType
     , iPayload
+    , iLogType
+    , iClientContext
+    , iFunctionName
 
-    -- * Response
-    , InvokeResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , invokeResponse
-    -- ** Response lenses
-    , irFunctionError
-    , irLogResult
-    , irPayload
-    , irStatusCode
+    , InvokeResponse
+    -- * Response Lenses
+    , irsFunctionError
+    , irsLogResult
+    , irsPayload
+    , irsStatusCode
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
+import           Network.AWS.Lambda.Types
+import           Network.AWS.Lambda.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data Invoke = Invoke
-    { _iClientContext  :: Maybe Text
-    , _iFunctionName   :: Text
-    , _iInvocationType :: Maybe InvocationType
-    , _iLogType        :: Maybe LogType
-    , _iPayload        :: Maybe Object
-    } deriving (Eq, Show)
+-- | /See:/ 'invoke' smart constructor.
+data Invoke = Invoke'
+    { _iInvocationType :: !(Maybe InvocationType)
+    , _iPayload        :: !(Maybe Base64)
+    , _iLogType        :: !(Maybe LogType)
+    , _iClientContext  :: !(Maybe Text)
+    , _iFunctionName   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'Invoke' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'Invoke' with the minimum fields required to make a request.
 --
--- * 'iClientContext' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'iFunctionName' @::@ 'Text'
+-- * 'iInvocationType'
 --
--- * 'iInvocationType' @::@ 'Maybe' 'InvocationType'
+-- * 'iPayload'
 --
--- * 'iLogType' @::@ 'Maybe' 'LogType'
+-- * 'iLogType'
 --
--- * 'iPayload' @::@ 'Maybe' 'Object'
+-- * 'iClientContext'
 --
-invoke :: Text -- ^ 'iFunctionName'
-       -> Invoke
-invoke p1 = Invoke
-    { _iFunctionName   = p1
-    , _iInvocationType = Nothing
-    , _iLogType        = Nothing
-    , _iClientContext  = Nothing
-    , _iPayload        = Nothing
+-- * 'iFunctionName'
+invoke
+    :: Text -- ^ 'iFunctionName'
+    -> Invoke
+invoke pFunctionName_ =
+    Invoke'
+    { _iInvocationType = Nothing
+    , _iPayload = Nothing
+    , _iLogType = Nothing
+    , _iClientContext = Nothing
+    , _iFunctionName = pFunctionName_
     }
 
--- | Using the 'ClientContext' you can pass client-specific information to the
--- Lambda function you are invoking. You can then process the client information
--- in your Lambda function as you choose through the context variable. For an
--- example of a ClientContext JSON, go to <http://docs.aws.amazon.com/mobileanalytics/latest/ug/PutEvents.html PutEvents> in the /Amazon MobileAnalytics API Reference and User Guide/.
+-- | By default, the 'Invoke' API assumes \"RequestResponse\" invocation
+-- type. You can optionally request asynchronous execution by specifying
+-- \"Event\" as the 'InvocationType'. You can also use this parameter to
+-- request AWS Lambda to not execute the function but do some verification,
+-- such as if the caller is authorized to invoke the function and if the
+-- inputs are valid. You request this by specifying \"DryRun\" as the
+-- 'InvocationType'. This is useful in a cross-account scenario when you
+-- want to verify access to a function without running it.
+iInvocationType :: Lens' Invoke (Maybe InvocationType)
+iInvocationType = lens _iInvocationType (\ s a -> s{_iInvocationType = a});
+
+-- | JSON that you want to provide to your Lambda function as input.
+iPayload :: Lens' Invoke (Maybe ByteString)
+iPayload = lens _iPayload (\ s a -> s{_iPayload = a}) . mapping _Base64;
+
+-- | You can set this optional parameter to \"Tail\" in the request only if
+-- you specify the 'InvocationType' parameter with value
+-- \"RequestResponse\". In this case, AWS Lambda returns the base64-encoded
+-- last 4 KB of log data produced by your Lambda function in the
+-- 'x-amz-log-results' header.
+iLogType :: Lens' Invoke (Maybe LogType)
+iLogType = lens _iLogType (\ s a -> s{_iLogType = a});
+
+-- | Using the 'ClientContext' you can pass client-specific information to
+-- the Lambda function you are invoking. You can then process the client
+-- information in your Lambda function as you choose through the context
+-- variable. For an example of a ClientContext JSON, go to
+-- <http://docs.aws.amazon.com/mobileanalytics/latest/ug/PutEvents.html PutEvents>
+-- in the /Amazon Mobile Analytics API Reference and User Guide/.
 --
 -- The ClientContext JSON must be base64-encoded.
 iClientContext :: Lens' Invoke (Maybe Text)
-iClientContext = lens _iClientContext (\s a -> s { _iClientContext = a })
+iClientContext = lens _iClientContext (\ s a -> s{_iClientContext = a});
 
 -- | The Lambda function name.
 --
--- You can specify an unqualified function name (for example, "Thumbnail") or
--- you can specify Amazon Resource Name (ARN) of the function (for example,
--- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
--- allows you to specify only the account ID qualifier (for example,
--- "account-id:Thumbnail"). Note that the length constraint applies only to the
--- ARN. If you specify only the function name, it is limited to 64 character in
--- length.
+-- You can specify an unqualified function name (for example,
+-- \"Thumbnail\") or you can specify Amazon Resource Name (ARN) of the
+-- function (for example,
+-- \"arn:aws:lambda:us-west-2:account-id:function:ThumbNail\"). AWS Lambda
+-- also allows you to specify only the account ID qualifier (for example,
+-- \"account-id:Thumbnail\"). Note that the length constraint applies only
+-- to the ARN. If you specify only the function name, it is limited to 64
+-- character in length.
 iFunctionName :: Lens' Invoke Text
-iFunctionName = lens _iFunctionName (\s a -> s { _iFunctionName = a })
+iFunctionName = lens _iFunctionName (\ s a -> s{_iFunctionName = a});
 
--- | By default, the 'Invoke' API assumes "RequestResponse" invocation type. You can
--- optionally request asynchronous execution by specifying "Event" as the 'InvocationType'. You can also use this parameter to request AWS Lambda to not execute the
--- function but do some verification, such as if the caller is authorized to
--- invoke the function and if the inputs are valid. You request this by
--- specifying "DryRun" as the 'InvocationType'. This is useful in a cross-account
--- scenario when you want to verify access to a function without running it.
-iInvocationType :: Lens' Invoke (Maybe InvocationType)
-iInvocationType = lens _iInvocationType (\s a -> s { _iInvocationType = a })
+instance AWSRequest Invoke where
+        type Sv Invoke = Lambda
+        type Rs Invoke = InvokeResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 InvokeResponse' <$>
+                   (h .#? "X-Amz-Function-Error") <*>
+                     (h .#? "X-Amz-Log-Result")
+                     <*> (x .?> "Payload")
+                     <*> (pure (fromEnum s)))
 
--- | You can set this optional parameter to "Tail" in the request only if you
--- specify the 'InvocationType' parameter with value "RequestResponse". In this
--- case, AWS Lambda returns the base64-encoded last 4 KB of log data produced by
--- your Lambda function in the 'x-amz-log-results' header.
-iLogType :: Lens' Invoke (Maybe LogType)
-iLogType = lens _iLogType (\s a -> s { _iLogType = a })
+instance ToHeaders Invoke where
+        toHeaders Invoke'{..}
+          = mconcat
+              ["X-Amz-Invocation-Type" =# _iInvocationType,
+               "X-Amz-Log-Type" =# _iLogType,
+               "X-Amz-Client-Context" =# _iClientContext]
 
--- | JSON that you want to provide to your Lambda function as input.
-iPayload :: Lens' Invoke (Maybe Object)
-iPayload = lens _iPayload (\s a -> s { _iPayload = a })
+instance ToJSON Invoke where
+        toJSON Invoke'{..} = object ["Payload" .= _iPayload]
 
-data InvokeResponse = InvokeResponse
-    { _irFunctionError :: Maybe Text
-    , _irLogResult     :: Maybe Text
-    , _irPayload       :: Maybe Object
-    , _irStatusCode    :: Maybe Int
-    } deriving (Eq, Show)
+instance ToPath Invoke where
+        toPath Invoke'{..}
+          = mconcat
+              ["/2015-03-31/functions/", toBS _iFunctionName,
+               "/invocations"]
 
--- | 'InvokeResponse' constructor.
+instance ToQuery Invoke where
+        toQuery = const mempty
+
+-- | Upon success, returns an empty response. Otherwise, throws an exception.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'invokeResponse' smart constructor.
+data InvokeResponse = InvokeResponse'
+    { _irsFunctionError :: !(Maybe Text)
+    , _irsLogResult     :: !(Maybe Text)
+    , _irsPayload       :: !(Maybe Base64)
+    , _irsStatusCode    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InvokeResponse' with the minimum fields required to make a request.
 --
--- * 'irFunctionError' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'irLogResult' @::@ 'Maybe' 'Text'
+-- * 'irsFunctionError'
 --
--- * 'irPayload' @::@ 'Maybe' 'Object'
+-- * 'irsLogResult'
 --
--- * 'irStatusCode' @::@ 'Maybe' 'Int'
+-- * 'irsPayload'
 --
-invokeResponse :: InvokeResponse
-invokeResponse = InvokeResponse
-    { _irStatusCode    = Nothing
-    , _irFunctionError = Nothing
-    , _irLogResult     = Nothing
-    , _irPayload       = Nothing
+-- * 'irsStatusCode'
+invokeResponse
+    :: Int -- ^ 'irsStatusCode'
+    -> InvokeResponse
+invokeResponse pStatusCode_ =
+    InvokeResponse'
+    { _irsFunctionError = Nothing
+    , _irsLogResult = Nothing
+    , _irsPayload = Nothing
+    , _irsStatusCode = pStatusCode_
     }
 
--- | Indicates whether an error occurred while executing the Lambda function. If
--- an error occurred this field will have one of two values; 'Handled' or 'Unhandled'
--- . 'Handled' errors are errors that are reported by the function while the 'Unhandled' errors are those detected and reported by AWS Lambda. Unhandled errors
--- include out of memory errors and function timeouts. For information about how
--- to report an 'Handled' error, see <http://docs.aws.amazon.com/lambda/latest/dg/programming-model.html Programming Model>.
-irFunctionError :: Lens' InvokeResponse (Maybe Text)
-irFunctionError = lens _irFunctionError (\s a -> s { _irFunctionError = a })
+-- | Indicates whether an error occurred while executing the Lambda function.
+-- If an error occurred this field will have one of two values; 'Handled'
+-- or 'Unhandled'. 'Handled' errors are errors that are reported by the
+-- function while the 'Unhandled' errors are those detected and reported by
+-- AWS Lambda. Unhandled errors include out of memory errors and function
+-- timeouts. For information about how to report an 'Handled' error, see
+-- <http://docs.aws.amazon.com/lambda/latest/dg/programming-model.html Programming Model>.
+irsFunctionError :: Lens' InvokeResponse (Maybe Text)
+irsFunctionError = lens _irsFunctionError (\ s a -> s{_irsFunctionError = a});
 
--- | It is the base64-encoded logs for the Lambda function invocation. This is
--- present only if the invocation type is "RequestResponse" and the logs were
--- requested.
-irLogResult :: Lens' InvokeResponse (Maybe Text)
-irLogResult = lens _irLogResult (\s a -> s { _irLogResult = a })
+-- | It is the base64-encoded logs for the Lambda function invocation. This
+-- is present only if the invocation type is \"RequestResponse\" and the
+-- logs were requested.
+irsLogResult :: Lens' InvokeResponse (Maybe Text)
+irsLogResult = lens _irsLogResult (\ s a -> s{_irsLogResult = a});
 
--- | It is the JSON representation of the object returned by the Lambda function.
--- In This is present only if the invocation type is "RequestResponse".
+-- | It is the JSON representation of the object returned by the Lambda
+-- function. In This is present only if the invocation type is
+-- \"RequestResponse\".
 --
--- In the event of a function error this field contains a message describing
--- the error. For the 'Handled' errors the Lambda function will report this
--- message. For 'Unhandled' errors AWS Lambda reports the message.
-irPayload :: Lens' InvokeResponse (Maybe Object)
-irPayload = lens _irPayload (\s a -> s { _irPayload = a })
-
--- | The HTTP status code will be in the 200 range for successful request. For the
--- "RequestResonse" invocation type this status code will be 200. For the
--- "Event" invocation type this status code will be 202. For the "DryRun"
--- invocation type the status code will be 204.
-irStatusCode :: Lens' InvokeResponse (Maybe Int)
-irStatusCode = lens _irStatusCode (\s a -> s { _irStatusCode = a })
-
-instance ToPath Invoke where
-    toPath Invoke{..} = mconcat
-        [ "/2015-03-31/functions/"
-        , toText _iFunctionName
-        , "/invocations"
-        ]
-
-instance ToQuery Invoke where
-    toQuery = const mempty
-
-instance ToHeaders Invoke where
-    toHeaders Invoke{..} = mconcat
-        [ "X-Amz-Invocation-Type" =: _iInvocationType
-        , "X-Amz-Log-Type"        =: _iLogType
-        , "X-Amz-Client-Context"  =: _iClientContext
-        ]
-
-instance ToJSON Invoke where
-    toJSON Invoke{..} = object
-        [ "Payload" .= _iPayload
-        ]
-
-instance AWSRequest Invoke where
-    type Sv Invoke = Lambda
-    type Rs Invoke = InvokeResponse
+-- In the event of a function error this field contains a message
+-- describing the error. For the 'Handled' errors the Lambda function will
+-- report this message. For 'Unhandled' errors AWS Lambda reports the
+-- message.
+irsPayload :: Lens' InvokeResponse (Maybe ByteString)
+irsPayload = lens _irsPayload (\ s a -> s{_irsPayload = a}) . mapping _Base64;
 
-    request  = post
-    response = jsonHeaderResponse $ \h s o -> InvokeResponse
-        <$> h ~:? "X-Amz-Function-Error"
-        <*> h ~:? "X-Amz-Log-Result"
-        <*> pure (Just o)
-        <*> pure (Just s)
+-- | The HTTP status code will be in the 200 range for successful request.
+-- For the \"RequestResonse\" invocation type this status code will be 200.
+-- For the \"Event\" invocation type this status code will be 202. For the
+-- \"DryRun\" invocation type the status code will be 204.
+irsStatusCode :: Lens' InvokeResponse Int
+irsStatusCode = lens _irsStatusCode (\ s a -> s{_irsStatusCode = a});
diff --git a/gen/Network/AWS/Lambda/InvokeAsync.hs b/gen/Network/AWS/Lambda/InvokeAsync.hs
deleted file mode 100644
--- a/gen/Network/AWS/Lambda/InvokeAsync.hs
+++ /dev/null
@@ -1,130 +0,0 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.Lambda.InvokeAsync
--- 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/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | This API is deprecated. We recommend you use 'Invoke' API (see 'Invoke'). Submits
--- an invocation request to AWS Lambda. Upon receiving the request, Lambda
--- executes the specified function asynchronously. To see the logs generated by
--- the Lambda function execution, see the CloudWatch logs console.
---
--- This operation requires permission for the 'lambda:InvokeFunction' action.
---
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_InvokeAsync.html>
-module Network.AWS.Lambda.InvokeAsync
-    (
-    -- * Request
-      InvokeAsync
-    -- ** Request constructor
-    , invokeAsync
-    -- ** Request lenses
-    , iaFunctionName
-    , iaInvokeArgs
-
-    -- * Response
-    , InvokeAsyncResponse
-    -- ** Response constructor
-    , invokeAsyncResponse
-    -- ** Response lenses
-    , iarStatus
-    ) where
-
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
-
-data InvokeAsync = InvokeAsync
-    { _iaFunctionName :: Text
-    , _iaInvokeArgs   :: RqBody
-    } deriving (Show)
-
--- | 'InvokeAsync' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'iaFunctionName' @::@ 'Text'
---
--- * 'iaInvokeArgs' @::@ 'RqBody'
---
-invokeAsync :: Text -- ^ 'iaFunctionName'
-            -> RqBody -- ^ 'iaInvokeArgs'
-            -> InvokeAsync
-invokeAsync p1 p2 = InvokeAsync
-    { _iaFunctionName = p1
-    , _iaInvokeArgs   = p2
-    }
-
--- | The Lambda function name.
-iaFunctionName :: Lens' InvokeAsync Text
-iaFunctionName = lens _iaFunctionName (\s a -> s { _iaFunctionName = a })
-
--- | JSON that you want to provide to your Lambda function as input.
-iaInvokeArgs :: Lens' InvokeAsync RqBody
-iaInvokeArgs = lens _iaInvokeArgs (\s a -> s { _iaInvokeArgs = a })
-
-newtype InvokeAsyncResponse = InvokeAsyncResponse
-    { _iarStatus :: Int
-    } deriving (Eq, Ord, Read, Show, Enum, Num, Integral, Real)
-
--- | 'InvokeAsyncResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'iarStatus' @::@ 'Int'
---
-invokeAsyncResponse :: Int -- ^ 'iarStatus'
-                    -> InvokeAsyncResponse
-invokeAsyncResponse p1 = InvokeAsyncResponse
-    { _iarStatus = p1
-    }
-
--- | It will be 202 upon success.
-iarStatus :: Lens' InvokeAsyncResponse Int
-iarStatus = lens _iarStatus (\s a -> s { _iarStatus = a })
-
-instance ToPath InvokeAsync where
-    toPath InvokeAsync{..} = mconcat
-        [ "/2014-11-13/functions/"
-        , toText _iaFunctionName
-        , "/invoke-async/"
-        ]
-
-instance ToQuery InvokeAsync where
-    toQuery = const mempty
-
-instance ToHeaders InvokeAsync
-
-instance ToBody InvokeAsync where
-    toBody = toBody . _iaInvokeArgs
-
-instance AWSRequest InvokeAsync where
-    type Sv InvokeAsync = Lambda
-    type Rs InvokeAsync = InvokeAsyncResponse
-
-    request  = stream POST
-    response = jsonResponse
-
-instance FromJSON InvokeAsyncResponse where
-    parseJSON = withObject "InvokeAsyncResponse" $ \o -> InvokeAsyncResponse
-        <$> o .:  "Status"
diff --git a/gen/Network/AWS/Lambda/ListEventSourceMappings.hs b/gen/Network/AWS/Lambda/ListEventSourceMappings.hs
--- a/gen/Network/AWS/Lambda/ListEventSourceMappings.hs
+++ b/gen/Network/AWS/Lambda/ListEventSourceMappings.hs
@@ -1,178 +1,191 @@
-{-# 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.Lambda.ListEventSourceMappings
--- 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 list of event source mappings you created using the 'CreateEventSourceMapping' (see 'CreateEventSourceMapping'), where you identify a stream as an event
--- source. This list does not include Amazon S3 event sources.
+-- Returns a list of event source mappings you created using the
+-- 'CreateEventSourceMapping' (see CreateEventSourceMapping), where you
+-- identify a stream as an event source. This list does not include Amazon
+-- S3 event sources.
 --
 -- For each mapping, the API returns configuration information. You can
 -- optionally specify filters to retrieve specific event source mappings.
 --
--- This operation requires permission for the 'lambda:ListEventSourceMappings'
--- action.
+-- This operation requires permission for the
+-- 'lambda:ListEventSourceMappings' action.
 --
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_ListEventSourceMappings.html>
+-- /See:/ <http://docs.aws.amazon.com/lambda/latest/dg/API_ListEventSourceMappings.html AWS API Reference> for ListEventSourceMappings.
+--
+-- This operation returns paginated results.
 module Network.AWS.Lambda.ListEventSourceMappings
     (
-    -- * Request
-      ListEventSourceMappings
-    -- ** Request constructor
-    , listEventSourceMappings
-    -- ** Request lenses
-    , lesmEventSourceArn
-    , lesmFunctionName
-    , lesmMarker
+    -- * Creating a Request
+      listEventSourceMappings
+    , ListEventSourceMappings
+    -- * Request Lenses
+    , lesmEventSourceARN
     , lesmMaxItems
+    , lesmMarker
+    , lesmFunctionName
 
-    -- * Response
-    , ListEventSourceMappingsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listEventSourceMappingsResponse
-    -- ** Response lenses
-    , lesmrEventSourceMappings
-    , lesmrNextMarker
+    , ListEventSourceMappingsResponse
+    -- * Response Lenses
+    , lesmrsEventSourceMappings
+    , lesmrsNextMarker
+    , lesmrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
+import           Network.AWS.Lambda.Types
+import           Network.AWS.Lambda.Types.Product
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data ListEventSourceMappings = ListEventSourceMappings
-    { _lesmEventSourceArn :: Maybe Text
-    , _lesmFunctionName   :: Maybe Text
-    , _lesmMarker         :: Maybe Text
-    , _lesmMaxItems       :: Maybe Nat
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'listEventSourceMappings' smart constructor.
+data ListEventSourceMappings = ListEventSourceMappings'
+    { _lesmEventSourceARN :: !(Maybe Text)
+    , _lesmMaxItems       :: !(Maybe Nat)
+    , _lesmMarker         :: !(Maybe Text)
+    , _lesmFunctionName   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListEventSourceMappings' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ListEventSourceMappings' with the minimum fields required to make a request.
 --
--- * 'lesmEventSourceArn' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lesmFunctionName' @::@ 'Maybe' 'Text'
+-- * 'lesmEventSourceARN'
 --
--- * 'lesmMarker' @::@ 'Maybe' 'Text'
+-- * 'lesmMaxItems'
 --
--- * 'lesmMaxItems' @::@ 'Maybe' 'Natural'
+-- * 'lesmMarker'
 --
-listEventSourceMappings :: ListEventSourceMappings
-listEventSourceMappings = ListEventSourceMappings
-    { _lesmEventSourceArn = Nothing
-    , _lesmFunctionName   = Nothing
-    , _lesmMarker         = Nothing
-    , _lesmMaxItems       = Nothing
+-- * 'lesmFunctionName'
+listEventSourceMappings
+    :: ListEventSourceMappings
+listEventSourceMappings =
+    ListEventSourceMappings'
+    { _lesmEventSourceARN = Nothing
+    , _lesmMaxItems = Nothing
+    , _lesmMarker = Nothing
+    , _lesmFunctionName = Nothing
     }
 
 -- | The Amazon Resource Name (ARN) of the Amazon Kinesis stream.
-lesmEventSourceArn :: Lens' ListEventSourceMappings (Maybe Text)
-lesmEventSourceArn =
-    lens _lesmEventSourceArn (\s a -> s { _lesmEventSourceArn = a })
+lesmEventSourceARN :: Lens' ListEventSourceMappings (Maybe Text)
+lesmEventSourceARN = lens _lesmEventSourceARN (\ s a -> s{_lesmEventSourceARN = a});
 
+-- | Optional integer. Specifies the maximum number of event sources to
+-- return in response. This value must be greater than 0.
+lesmMaxItems :: Lens' ListEventSourceMappings (Maybe Natural)
+lesmMaxItems = lens _lesmMaxItems (\ s a -> s{_lesmMaxItems = a}) . mapping _Nat;
+
+-- | Optional string. An opaque pagination token returned from a previous
+-- 'ListEventSourceMappings' operation. If present, specifies to continue
+-- the list from where the returning call left off.
+lesmMarker :: Lens' ListEventSourceMappings (Maybe Text)
+lesmMarker = lens _lesmMarker (\ s a -> s{_lesmMarker = a});
+
 -- | The name of the Lambda function.
 --
--- You can specify an unqualified function name (for example, "Thumbnail") or
--- you can specify Amazon Resource Name (ARN) of the function (for example,
--- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
--- allows you to specify only the account ID qualifier (for example,
--- "account-id:Thumbnail"). Note that the length constraint applies only to the
--- ARN. If you specify only the function name, it is limited to 64 character in
--- length.
+-- You can specify an unqualified function name (for example,
+-- \"Thumbnail\") or you can specify Amazon Resource Name (ARN) of the
+-- function (for example,
+-- \"arn:aws:lambda:us-west-2:account-id:function:ThumbNail\"). AWS Lambda
+-- also allows you to specify only the account ID qualifier (for example,
+-- \"account-id:Thumbnail\"). Note that the length constraint applies only
+-- to the ARN. If you specify only the function name, it is limited to 64
+-- character in length.
 lesmFunctionName :: Lens' ListEventSourceMappings (Maybe Text)
-lesmFunctionName = lens _lesmFunctionName (\s a -> s { _lesmFunctionName = a })
+lesmFunctionName = lens _lesmFunctionName (\ s a -> s{_lesmFunctionName = a});
 
--- | Optional string. An opaque pagination token returned from a previous 'ListEventSourceMappings' operation. If present, specifies to continue the list from where the
--- returning call left off.
-lesmMarker :: Lens' ListEventSourceMappings (Maybe Text)
-lesmMarker = lens _lesmMarker (\s a -> s { _lesmMarker = a })
+instance AWSPager ListEventSourceMappings where
+        page rq rs
+          | stop (rs ^. lesmrsNextMarker) = Nothing
+          | stop (rs ^. lesmrsEventSourceMappings) = Nothing
+          | otherwise =
+            Just $ rq & lesmMarker .~ rs ^. lesmrsNextMarker
 
--- | Optional integer. Specifies the maximum number of event sources to return in
--- response. This value must be greater than 0.
-lesmMaxItems :: Lens' ListEventSourceMappings (Maybe Natural)
-lesmMaxItems = lens _lesmMaxItems (\s a -> s { _lesmMaxItems = a }) . mapping _Nat
+instance AWSRequest ListEventSourceMappings where
+        type Sv ListEventSourceMappings = Lambda
+        type Rs ListEventSourceMappings =
+             ListEventSourceMappingsResponse
+        request = get
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListEventSourceMappingsResponse' <$>
+                   (x .?> "EventSourceMappings" .!@ mempty) <*>
+                     (x .?> "NextMarker")
+                     <*> (pure (fromEnum s)))
 
-data ListEventSourceMappingsResponse = ListEventSourceMappingsResponse
-    { _lesmrEventSourceMappings :: List "EventSourceMappings" EventSourceMappingConfiguration
-    , _lesmrNextMarker          :: Maybe Text
-    } deriving (Eq, Read, Show)
+instance ToHeaders ListEventSourceMappings where
+        toHeaders = const mempty
 
--- | 'ListEventSourceMappingsResponse' constructor.
+instance ToPath ListEventSourceMappings where
+        toPath = const "/2015-03-31/event-source-mappings/"
+
+instance ToQuery ListEventSourceMappings where
+        toQuery ListEventSourceMappings'{..}
+          = mconcat
+              ["EventSourceArn" =: _lesmEventSourceARN,
+               "MaxItems" =: _lesmMaxItems, "Marker" =: _lesmMarker,
+               "FunctionName" =: _lesmFunctionName]
+
+-- | Contains a list of event sources (see
+-- API_EventSourceMappingConfiguration)
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listEventSourceMappingsResponse' smart constructor.
+data ListEventSourceMappingsResponse = ListEventSourceMappingsResponse'
+    { _lesmrsEventSourceMappings :: !(Maybe [EventSourceMappingConfiguration])
+    , _lesmrsNextMarker          :: !(Maybe Text)
+    , _lesmrsStatus              :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListEventSourceMappingsResponse' with the minimum fields required to make a request.
 --
--- * 'lesmrEventSourceMappings' @::@ ['EventSourceMappingConfiguration']
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lesmrNextMarker' @::@ 'Maybe' 'Text'
+-- * 'lesmrsEventSourceMappings'
 --
-listEventSourceMappingsResponse :: ListEventSourceMappingsResponse
-listEventSourceMappingsResponse = ListEventSourceMappingsResponse
-    { _lesmrNextMarker          = Nothing
-    , _lesmrEventSourceMappings = mempty
+-- * 'lesmrsNextMarker'
+--
+-- * 'lesmrsStatus'
+listEventSourceMappingsResponse
+    :: Int -- ^ 'lesmrsStatus'
+    -> ListEventSourceMappingsResponse
+listEventSourceMappingsResponse pStatus_ =
+    ListEventSourceMappingsResponse'
+    { _lesmrsEventSourceMappings = Nothing
+    , _lesmrsNextMarker = Nothing
+    , _lesmrsStatus = pStatus_
     }
 
 -- | An array of 'EventSourceMappingConfiguration' objects.
-lesmrEventSourceMappings :: Lens' ListEventSourceMappingsResponse [EventSourceMappingConfiguration]
-lesmrEventSourceMappings =
-    lens _lesmrEventSourceMappings
-        (\s a -> s { _lesmrEventSourceMappings = a })
-            . _List
+lesmrsEventSourceMappings :: Lens' ListEventSourceMappingsResponse [EventSourceMappingConfiguration]
+lesmrsEventSourceMappings = lens _lesmrsEventSourceMappings (\ s a -> s{_lesmrsEventSourceMappings = a}) . _Default . _Coerce;
 
 -- | A string, present if there are more event source mappings.
-lesmrNextMarker :: Lens' ListEventSourceMappingsResponse (Maybe Text)
-lesmrNextMarker = lens _lesmrNextMarker (\s a -> s { _lesmrNextMarker = a })
-
-instance ToPath ListEventSourceMappings where
-    toPath = const "/2015-03-31/event-source-mappings/"
-
-instance ToQuery ListEventSourceMappings where
-    toQuery ListEventSourceMappings{..} = mconcat
-        [ "EventSourceArn" =? _lesmEventSourceArn
-        , "FunctionName"   =? _lesmFunctionName
-        , "Marker"         =? _lesmMarker
-        , "MaxItems"       =? _lesmMaxItems
-        ]
-
-instance ToHeaders ListEventSourceMappings
-
-instance ToJSON ListEventSourceMappings where
-    toJSON = const (toJSON Empty)
-
-instance AWSRequest ListEventSourceMappings where
-    type Sv ListEventSourceMappings = Lambda
-    type Rs ListEventSourceMappings = ListEventSourceMappingsResponse
-
-    request  = get
-    response = jsonResponse
-
-instance FromJSON ListEventSourceMappingsResponse where
-    parseJSON = withObject "ListEventSourceMappingsResponse" $ \o -> ListEventSourceMappingsResponse
-        <$> o .:? "EventSourceMappings" .!= mempty
-        <*> o .:? "NextMarker"
+lesmrsNextMarker :: Lens' ListEventSourceMappingsResponse (Maybe Text)
+lesmrsNextMarker = lens _lesmrsNextMarker (\ s a -> s{_lesmrsNextMarker = a});
 
-instance AWSPager ListEventSourceMappings where
-    page rq rs
-        | stop (rs ^. lesmrNextMarker) = Nothing
-        | otherwise = (\x -> rq & lesmMarker ?~ x)
-            <$> (rs ^. lesmrNextMarker)
+-- | The response status code.
+lesmrsStatus :: Lens' ListEventSourceMappingsResponse Int
+lesmrsStatus = lens _lesmrsStatus (\ s a -> s{_lesmrsStatus = a});
diff --git a/gen/Network/AWS/Lambda/ListFunctions.hs b/gen/Network/AWS/Lambda/ListFunctions.hs
--- a/gen/Network/AWS/Lambda/ListFunctions.hs
+++ b/gen/Network/AWS/Lambda/ListFunctions.hs
@@ -1,142 +1,157 @@
-{-# 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.Lambda.ListFunctions
--- 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 list of your Lambda functions. For each function, the response
--- includes the function configuration information. You must use 'GetFunction' to
--- retrieve the code for your function.
+-- Returns a list of your Lambda functions. For each function, the response
+-- includes the function configuration information. You must use
+-- GetFunction to retrieve the code for your function.
 --
--- This operation requires permission for the 'lambda:ListFunctions' action.
+-- This operation requires permission for the 'lambda:ListFunctions'
+-- action.
 --
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_ListFunctions.html>
+-- /See:/ <http://docs.aws.amazon.com/lambda/latest/dg/API_ListFunctions.html AWS API Reference> for ListFunctions.
+--
+-- This operation returns paginated results.
 module Network.AWS.Lambda.ListFunctions
     (
-    -- * Request
-      ListFunctions
-    -- ** Request constructor
-    , listFunctions
-    -- ** Request lenses
-    , lfMarker
+    -- * Creating a Request
+      listFunctions
+    , ListFunctions
+    -- * Request Lenses
     , lfMaxItems
+    , lfMarker
 
-    -- * Response
-    , ListFunctionsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listFunctionsResponse
-    -- ** Response lenses
-    , lfrFunctions
-    , lfrNextMarker
+    , ListFunctionsResponse
+    -- * Response Lenses
+    , lfrsNextMarker
+    , lfrsFunctions
+    , lfrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
+import           Network.AWS.Lambda.Types
+import           Network.AWS.Lambda.Types.Product
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data ListFunctions = ListFunctions
-    { _lfMarker   :: Maybe Text
-    , _lfMaxItems :: Maybe Nat
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'listFunctions' smart constructor.
+data ListFunctions = ListFunctions'
+    { _lfMaxItems :: !(Maybe Nat)
+    , _lfMarker   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListFunctions' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ListFunctions' with the minimum fields required to make a request.
 --
--- * 'lfMarker' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lfMaxItems' @::@ 'Maybe' 'Natural'
+-- * 'lfMaxItems'
 --
-listFunctions :: ListFunctions
-listFunctions = ListFunctions
-    { _lfMarker   = Nothing
-    , _lfMaxItems = Nothing
+-- * 'lfMarker'
+listFunctions
+    :: ListFunctions
+listFunctions =
+    ListFunctions'
+    { _lfMaxItems = Nothing
+    , _lfMarker = Nothing
     }
 
--- | Optional string. An opaque pagination token returned from a previous 'ListFunctions' operation. If present, indicates where to continue the listing.
-lfMarker :: Lens' ListFunctions (Maybe Text)
-lfMarker = lens _lfMarker (\s a -> s { _lfMarker = a })
-
--- | Optional integer. Specifies the maximum number of AWS Lambda functions to
--- return in response. This parameter value must be greater than 0.
+-- | Optional integer. Specifies the maximum number of AWS Lambda functions
+-- to return in response. This parameter value must be greater than 0.
 lfMaxItems :: Lens' ListFunctions (Maybe Natural)
-lfMaxItems = lens _lfMaxItems (\s a -> s { _lfMaxItems = a }) . mapping _Nat
+lfMaxItems = lens _lfMaxItems (\ s a -> s{_lfMaxItems = a}) . mapping _Nat;
 
-data ListFunctionsResponse = ListFunctionsResponse
-    { _lfrFunctions  :: List "Functions" FunctionConfiguration
-    , _lfrNextMarker :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | Optional string. An opaque pagination token returned from a previous
+-- 'ListFunctions' operation. If present, indicates where to continue the
+-- listing.
+lfMarker :: Lens' ListFunctions (Maybe Text)
+lfMarker = lens _lfMarker (\ s a -> s{_lfMarker = a});
 
--- | 'ListFunctionsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lfrFunctions' @::@ ['FunctionConfiguration']
---
--- * 'lfrNextMarker' @::@ 'Maybe' 'Text'
---
-listFunctionsResponse :: ListFunctionsResponse
-listFunctionsResponse = ListFunctionsResponse
-    { _lfrNextMarker = Nothing
-    , _lfrFunctions  = mempty
-    }
+instance AWSPager ListFunctions where
+        page rq rs
+          | stop (rs ^. lfrsNextMarker) = Nothing
+          | stop (rs ^. lfrsFunctions) = Nothing
+          | otherwise =
+            Just $ rq & lfMarker .~ rs ^. lfrsNextMarker
 
--- | A list of Lambda functions.
-lfrFunctions :: Lens' ListFunctionsResponse [FunctionConfiguration]
-lfrFunctions = lens _lfrFunctions (\s a -> s { _lfrFunctions = a }) . _List
+instance AWSRequest ListFunctions where
+        type Sv ListFunctions = Lambda
+        type Rs ListFunctions = ListFunctionsResponse
+        request = get
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListFunctionsResponse' <$>
+                   (x .?> "NextMarker") <*>
+                     (x .?> "Functions" .!@ mempty)
+                     <*> (pure (fromEnum s)))
 
--- | A string, present if there are more functions.
-lfrNextMarker :: Lens' ListFunctionsResponse (Maybe Text)
-lfrNextMarker = lens _lfrNextMarker (\s a -> s { _lfrNextMarker = a })
+instance ToHeaders ListFunctions where
+        toHeaders = const mempty
 
 instance ToPath ListFunctions where
-    toPath = const "/2015-03-31/functions/"
+        toPath = const "/2015-03-31/functions/"
 
 instance ToQuery ListFunctions where
-    toQuery ListFunctions{..} = mconcat
-        [ "Marker"   =? _lfMarker
-        , "MaxItems" =? _lfMaxItems
-        ]
-
-instance ToHeaders ListFunctions
+        toQuery ListFunctions'{..}
+          = mconcat
+              ["MaxItems" =: _lfMaxItems, "Marker" =: _lfMarker]
 
-instance ToJSON ListFunctions where
-    toJSON = const (toJSON Empty)
+-- | Contains a list of AWS Lambda function configurations (see
+-- FunctionConfiguration.
+--
+-- /See:/ 'listFunctionsResponse' smart constructor.
+data ListFunctionsResponse = ListFunctionsResponse'
+    { _lfrsNextMarker :: !(Maybe Text)
+    , _lfrsFunctions  :: !(Maybe [FunctionConfiguration])
+    , _lfrsStatus     :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest ListFunctions where
-    type Sv ListFunctions = Lambda
-    type Rs ListFunctions = ListFunctionsResponse
+-- | Creates a value of 'ListFunctionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lfrsNextMarker'
+--
+-- * 'lfrsFunctions'
+--
+-- * 'lfrsStatus'
+listFunctionsResponse
+    :: Int -- ^ 'lfrsStatus'
+    -> ListFunctionsResponse
+listFunctionsResponse pStatus_ =
+    ListFunctionsResponse'
+    { _lfrsNextMarker = Nothing
+    , _lfrsFunctions = Nothing
+    , _lfrsStatus = pStatus_
+    }
 
-    request  = get
-    response = jsonResponse
+-- | A string, present if there are more functions.
+lfrsNextMarker :: Lens' ListFunctionsResponse (Maybe Text)
+lfrsNextMarker = lens _lfrsNextMarker (\ s a -> s{_lfrsNextMarker = a});
 
-instance FromJSON ListFunctionsResponse where
-    parseJSON = withObject "ListFunctionsResponse" $ \o -> ListFunctionsResponse
-        <$> o .:? "Functions" .!= mempty
-        <*> o .:? "NextMarker"
+-- | A list of Lambda functions.
+lfrsFunctions :: Lens' ListFunctionsResponse [FunctionConfiguration]
+lfrsFunctions = lens _lfrsFunctions (\ s a -> s{_lfrsFunctions = a}) . _Default . _Coerce;
 
-instance AWSPager ListFunctions where
-    page rq rs
-        | stop (rs ^. lfrNextMarker) = Nothing
-        | otherwise = (\x -> rq & lfMarker ?~ x)
-            <$> (rs ^. lfrNextMarker)
+-- | The response status code.
+lfrsStatus :: Lens' ListFunctionsResponse Int
+lfrsStatus = lens _lfrsStatus (\ s a -> s{_lfrsStatus = a});
diff --git a/gen/Network/AWS/Lambda/RemovePermission.hs b/gen/Network/AWS/Lambda/RemovePermission.hs
--- a/gen/Network/AWS/Lambda/RemovePermission.hs
+++ b/gen/Network/AWS/Lambda/RemovePermission.hs
@@ -1,121 +1,118 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.Lambda.RemovePermission
--- 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.
-
--- | You can remove individual permissions from an access policy associated with a
--- Lambda function by providing a Statement ID.
+-- You can remove individual permissions from an access policy associated
+-- with a Lambda function by providing a Statement ID.
 --
--- Note that removal of a permission will cause an active event source to lose
--- permission to the function.
+-- Note that removal of a permission will cause an active event source to
+-- lose permission to the function.
 --
 -- You need permission for the 'lambda:RemovePermission' action.
 --
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_RemovePermission.html>
+-- /See:/ <http://docs.aws.amazon.com/lambda/latest/dg/API_RemovePermission.html AWS API Reference> for RemovePermission.
 module Network.AWS.Lambda.RemovePermission
     (
-    -- * Request
-      RemovePermission
-    -- ** Request constructor
-    , removePermission
-    -- ** Request lenses
+    -- * Creating a Request
+      removePermission
+    , RemovePermission
+    -- * Request Lenses
     , rpFunctionName
     , rpStatementId
 
-    -- * Response
-    , RemovePermissionResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , removePermissionResponse
+    , RemovePermissionResponse
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
+import           Network.AWS.Lambda.Types
+import           Network.AWS.Lambda.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data RemovePermission = RemovePermission
-    { _rpFunctionName :: Text
-    , _rpStatementId  :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'removePermission' smart constructor.
+data RemovePermission = RemovePermission'
+    { _rpFunctionName :: !Text
+    , _rpStatementId  :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'RemovePermission' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'RemovePermission' with the minimum fields required to make a request.
 --
--- * 'rpFunctionName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'rpStatementId' @::@ 'Text'
+-- * 'rpFunctionName'
 --
-removePermission :: Text -- ^ 'rpFunctionName'
-                 -> Text -- ^ 'rpStatementId'
-                 -> RemovePermission
-removePermission p1 p2 = RemovePermission
-    { _rpFunctionName = p1
-    , _rpStatementId  = p2
+-- * 'rpStatementId'
+removePermission
+    :: Text -- ^ 'rpFunctionName'
+    -> Text -- ^ 'rpStatementId'
+    -> RemovePermission
+removePermission pFunctionName_ pStatementId_ =
+    RemovePermission'
+    { _rpFunctionName = pFunctionName_
+    , _rpStatementId = pStatementId_
     }
 
--- | Lambda function whose access policy you want to remove a permission from.
+-- | Lambda function whose access policy you want to remove a permission
+-- from.
 --
--- You can specify an unqualified function name (for example, "Thumbnail") or
--- you can specify Amazon Resource Name (ARN) of the function (for example,
--- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
--- allows you to specify only the account ID qualifier (for example,
--- "account-id:Thumbnail"). Note that the length constraint applies only to the
--- ARN. If you specify only the function name, it is limited to 64 character in
--- length.
+-- You can specify an unqualified function name (for example,
+-- \"Thumbnail\") or you can specify Amazon Resource Name (ARN) of the
+-- function (for example,
+-- \"arn:aws:lambda:us-west-2:account-id:function:ThumbNail\"). AWS Lambda
+-- also allows you to specify only the account ID qualifier (for example,
+-- \"account-id:Thumbnail\"). Note that the length constraint applies only
+-- to the ARN. If you specify only the function name, it is limited to 64
+-- character in length.
 rpFunctionName :: Lens' RemovePermission Text
-rpFunctionName = lens _rpFunctionName (\s a -> s { _rpFunctionName = a })
+rpFunctionName = lens _rpFunctionName (\ s a -> s{_rpFunctionName = a});
 
 -- | Statement ID of the permission to remove.
 rpStatementId :: Lens' RemovePermission Text
-rpStatementId = lens _rpStatementId (\s a -> s { _rpStatementId = a })
+rpStatementId = lens _rpStatementId (\ s a -> s{_rpStatementId = a});
 
-data RemovePermissionResponse = RemovePermissionResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest RemovePermission where
+        type Sv RemovePermission = Lambda
+        type Rs RemovePermission = RemovePermissionResponse
+        request = delete
+        response = receiveNull RemovePermissionResponse'
 
--- | 'RemovePermissionResponse' constructor.
-removePermissionResponse :: RemovePermissionResponse
-removePermissionResponse = RemovePermissionResponse
+instance ToHeaders RemovePermission where
+        toHeaders = const mempty
 
 instance ToPath RemovePermission where
-    toPath RemovePermission{..} = mconcat
-        [ "/2015-03-31/functions/"
-        , toText _rpFunctionName
-        , "/versions/HEAD/policy/"
-        , toText _rpStatementId
-        ]
+        toPath RemovePermission'{..}
+          = mconcat
+              ["/2015-03-31/functions/", toBS _rpFunctionName,
+               "/versions/HEAD/policy/", toBS _rpStatementId]
 
 instance ToQuery RemovePermission where
-    toQuery = const mempty
-
-instance ToHeaders RemovePermission
-
-instance ToJSON RemovePermission where
-    toJSON = const (toJSON Empty)
+        toQuery = const mempty
 
-instance AWSRequest RemovePermission where
-    type Sv RemovePermission = Lambda
-    type Rs RemovePermission = RemovePermissionResponse
+-- | /See:/ 'removePermissionResponse' smart constructor.
+data RemovePermissionResponse =
+    RemovePermissionResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = delete
-    response = nullResponse RemovePermissionResponse
+-- | Creates a value of 'RemovePermissionResponse' with the minimum fields required to make a request.
+--
+removePermissionResponse
+    :: RemovePermissionResponse
+removePermissionResponse = RemovePermissionResponse'
diff --git a/gen/Network/AWS/Lambda/Types.hs b/gen/Network/AWS/Lambda/Types.hs
--- a/gen/Network/AWS/Lambda/Types.hs
+++ b/gen/Network/AWS/Lambda/Types.hs
@@ -1,37 +1,32 @@
-{-# 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.Lambda.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.Lambda.Types
     (
     -- * Service
       Lambda
-    -- ** Error
-    , JSONError
 
-    -- * Runtime
-    , Runtime (..)
+    -- * Errors
+    , _PolicyLengthExceededException
+    , _UnsupportedMediaTypeException
+    , _InvalidRequestContentException
+    , _InvalidParameterValueException
+    , _RequestTooLargeException
+    , _TooManyRequestsException
+    , _ServiceException
+    , _CodeStorageExceededException
+    , _ResourceConflictException
+    , _ResourceNotFoundException
 
     -- * EventSourcePosition
     , EventSourcePosition (..)
@@ -42,13 +37,28 @@
     -- * LogType
     , LogType (..)
 
+    -- * Runtime
+    , Runtime (..)
+
+    -- * EventSourceMappingConfiguration
+    , EventSourceMappingConfiguration
+    , eventSourceMappingConfiguration
+    , esmcEventSourceARN
+    , esmcFunctionARN
+    , esmcState
+    , esmcUUId
+    , esmcLastProcessingResult
+    , esmcBatchSize
+    , esmcStateTransitionReason
+    , esmcLastModified
+
     -- * FunctionCode
     , FunctionCode
     , functionCode
-    , fcS3Bucket
-    , fcS3Key
     , fcS3ObjectVersion
+    , fcS3Key
     , fcZipFile
+    , fcS3Bucket
 
     -- * FunctionCodeLocation
     , FunctionCodeLocation
@@ -59,519 +69,106 @@
     -- * FunctionConfiguration
     , FunctionConfiguration
     , functionConfiguration
-    , fcCodeSize
-    , fcDescription
-    , fcFunctionArn
-    , fcFunctionName
-    , fcHandler
-    , fcLastModified
+    , fcRuntime
     , fcMemorySize
+    , fcFunctionARN
     , fcRole
-    , fcRuntime
+    , fcFunctionName
+    , fcCodeSize
+    , fcHandler
     , fcTimeout
-
-    -- * EventSourceMappingConfiguration
-    , EventSourceMappingConfiguration
-    , eventSourceMappingConfiguration
-    , esmcBatchSize
-    , esmcEventSourceArn
-    , esmcFunctionArn
-    , esmcLastModified
-    , esmcLastProcessingResult
-    , esmcState
-    , esmcStateTransitionReason
-    , esmcUUID
+    , fcLastModified
+    , fcDescription
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Signing
-import qualified GHC.Exts
+import           Network.AWS.Lambda.Types.Product
+import           Network.AWS.Lambda.Types.Sum
+import           Network.AWS.Prelude
+import           Network.AWS.Sign.V4
 
--- | Version @2015-03-31@ of the Amazon Lambda service.
+-- | Version @2015-03-31@ of the Amazon Lambda SDK.
 data Lambda
 
 instance AWSService Lambda where
     type Sg Lambda = V4
-    type Er Lambda = JSONError
-
-    service = service'
+    service = const svc
       where
-        service' :: Service Lambda
-        service' = Service
-            { _svcAbbrev       = "Lambda"
-            , _svcPrefix       = "lambda"
-            , _svcVersion      = "2015-03-31"
-            , _svcTargetPrefix = Nothing
-            , _svcJSONVersion  = Nothing
-            , _svcHandle       = handle
-            , _svcRetry        = retry
+        svc =
+            Service
+            { _svcAbbrev = "Lambda"
+            , _svcPrefix = "lambda"
+            , _svcVersion = "2015-03-31"
+            , _svcEndpoint = defaultEndpoint svc
+            , _svcTimeout = Just 70
+            , _svcStatus = statusSuccess
+            , _svcError = parseJSONError
+            , _svcRetry = retry
             }
-
-        handle :: Status
-               -> Maybe (LazyByteString -> ServiceError JSONError)
-        handle = jsonError statusSuccess service'
-
-        retry :: Retry Lambda
-        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 Runtime
-    = Nodejs -- ^ nodejs
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable Runtime
-
-instance FromText Runtime where
-    parser = takeLowerText >>= \case
-        "nodejs" -> pure Nodejs
-        e        -> fail $
-            "Failure parsing Runtime from " ++ show e
-
-instance ToText Runtime where
-    toText Nodejs = "nodejs"
-
-instance ToByteString Runtime
-instance ToHeader     Runtime
-instance ToQuery      Runtime
-
-instance FromJSON Runtime where
-    parseJSON = parseJSONText "Runtime"
-
-instance ToJSON Runtime where
-    toJSON = toJSONText
-
-data EventSourcePosition
-    = Latest      -- ^ LATEST
-    | TrimHorizon -- ^ TRIM_HORIZON
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable EventSourcePosition
-
-instance FromText EventSourcePosition where
-    parser = takeLowerText >>= \case
-        "latest"       -> pure Latest
-        "trim_horizon" -> pure TrimHorizon
-        e              -> fail $
-            "Failure parsing EventSourcePosition from " ++ show e
-
-instance ToText EventSourcePosition where
-    toText = \case
-        Latest      -> "LATEST"
-        TrimHorizon -> "TRIM_HORIZON"
-
-instance ToByteString EventSourcePosition
-instance ToHeader     EventSourcePosition
-instance ToQuery      EventSourcePosition
-
-instance FromJSON EventSourcePosition where
-    parseJSON = parseJSONText "EventSourcePosition"
-
-instance ToJSON EventSourcePosition where
-    toJSON = toJSONText
-
-data InvocationType
-    = DryRun          -- ^ DryRun
-    | Event           -- ^ Event
-    | RequestResponse -- ^ RequestResponse
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable InvocationType
-
-instance FromText InvocationType where
-    parser = takeLowerText >>= \case
-        "dryrun"          -> pure DryRun
-        "event"           -> pure Event
-        "requestresponse" -> pure RequestResponse
-        e                 -> fail $
-            "Failure parsing InvocationType from " ++ show e
-
-instance ToText InvocationType where
-    toText = \case
-        DryRun          -> "DryRun"
-        Event           -> "Event"
-        RequestResponse -> "RequestResponse"
-
-instance ToByteString InvocationType
-instance ToHeader     InvocationType
-instance ToQuery      InvocationType
-
-instance FromJSON InvocationType where
-    parseJSON = parseJSONText "InvocationType"
-
-instance ToJSON InvocationType where
-    toJSON = toJSONText
-
-data LogType
-    = None  -- ^ None
-    | Tail' -- ^ Tail
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable LogType
-
-instance FromText LogType where
-    parser = takeLowerText >>= \case
-        "none" -> pure None
-        "tail" -> pure Tail'
-        e      -> fail $
-            "Failure parsing LogType from " ++ show e
-
-instance ToText LogType where
-    toText = \case
-        None  -> "None"
-        Tail' -> "Tail"
-
-instance ToByteString LogType
-instance ToHeader     LogType
-instance ToQuery      LogType
-
-instance FromJSON LogType where
-    parseJSON = parseJSONText "LogType"
-
-instance ToJSON LogType where
-    toJSON = toJSONText
-
-data FunctionCode = FunctionCode
-    { _fcS3Bucket        :: Maybe Text
-    , _fcS3Key           :: Maybe Text
-    , _fcS3ObjectVersion :: Maybe Text
-    , _fcZipFile         :: Maybe Base64
-    } deriving (Eq, Read, Show)
-
--- | 'FunctionCode' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'fcS3Bucket' @::@ 'Maybe' 'Text'
---
--- * 'fcS3Key' @::@ 'Maybe' 'Text'
---
--- * 'fcS3ObjectVersion' @::@ 'Maybe' 'Text'
---
--- * 'fcZipFile' @::@ 'Maybe' 'Base64'
---
-functionCode :: FunctionCode
-functionCode = FunctionCode
-    { _fcZipFile         = Nothing
-    , _fcS3Bucket        = Nothing
-    , _fcS3Key           = Nothing
-    , _fcS3ObjectVersion = Nothing
-    }
-
--- | Amazon S3 bucket name where the .zip file containing your deployment package
--- is stored. This bucket must reside in the same AWS region where you are
--- creating the Lambda function.
-fcS3Bucket :: Lens' FunctionCode (Maybe Text)
-fcS3Bucket = lens _fcS3Bucket (\s a -> s { _fcS3Bucket = a })
-
--- | The Amazon S3 object (the deployment package) key name you want to upload.
-fcS3Key :: Lens' FunctionCode (Maybe Text)
-fcS3Key = lens _fcS3Key (\s a -> s { _fcS3Key = a })
-
--- | The Amazon S3 object (the deployment package) version you want to upload.
-fcS3ObjectVersion :: Lens' FunctionCode (Maybe Text)
-fcS3ObjectVersion =
-    lens _fcS3ObjectVersion (\s a -> s { _fcS3ObjectVersion = a })
-
--- | A base64-encoded .zip file containing your deployment package. For more
--- information about creating a .zip file, go to <http://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role.html Execution Permissions> in the /AWS Lambda Developer Guide/.
-fcZipFile :: Lens' FunctionCode (Maybe Base64)
-fcZipFile = lens _fcZipFile (\s a -> s { _fcZipFile = a })
-
-instance FromJSON FunctionCode where
-    parseJSON = withObject "FunctionCode" $ \o -> FunctionCode
-        <$> o .:? "S3Bucket"
-        <*> o .:? "S3Key"
-        <*> o .:? "S3ObjectVersion"
-        <*> o .:? "ZipFile"
-
-instance ToJSON FunctionCode where
-    toJSON FunctionCode{..} = object
-        [ "ZipFile"         .= _fcZipFile
-        , "S3Bucket"        .= _fcS3Bucket
-        , "S3Key"           .= _fcS3Key
-        , "S3ObjectVersion" .= _fcS3ObjectVersion
-        ]
-
-data FunctionCodeLocation = FunctionCodeLocation
-    { _fclLocation       :: Maybe Text
-    , _fclRepositoryType :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'FunctionCodeLocation' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'fclLocation' @::@ 'Maybe' 'Text'
---
--- * 'fclRepositoryType' @::@ 'Maybe' 'Text'
---
-functionCodeLocation :: FunctionCodeLocation
-functionCodeLocation = FunctionCodeLocation
-    { _fclRepositoryType = Nothing
-    , _fclLocation       = Nothing
-    }
-
--- | The presigned URL you can use to download the function's .zip file that you
--- previously uploaded. The URL is valid for up to 10 minutes.
-fclLocation :: Lens' FunctionCodeLocation (Maybe Text)
-fclLocation = lens _fclLocation (\s a -> s { _fclLocation = a })
-
--- | The repository from which you can download the function.
-fclRepositoryType :: Lens' FunctionCodeLocation (Maybe Text)
-fclRepositoryType =
-    lens _fclRepositoryType (\s a -> s { _fclRepositoryType = a })
-
-instance FromJSON FunctionCodeLocation where
-    parseJSON = withObject "FunctionCodeLocation" $ \o -> FunctionCodeLocation
-        <$> o .:? "Location"
-        <*> o .:? "RepositoryType"
-
-instance ToJSON FunctionCodeLocation where
-    toJSON FunctionCodeLocation{..} = object
-        [ "RepositoryType" .= _fclRepositoryType
-        , "Location"       .= _fclLocation
-        ]
-
-data FunctionConfiguration = FunctionConfiguration
-    { _fcCodeSize     :: Maybe Integer
-    , _fcDescription  :: Maybe Text
-    , _fcFunctionArn  :: Maybe Text
-    , _fcFunctionName :: Maybe Text
-    , _fcHandler      :: Maybe Text
-    , _fcLastModified :: Maybe Text
-    , _fcMemorySize   :: Maybe Nat
-    , _fcRole         :: Maybe Text
-    , _fcRuntime      :: Maybe Runtime
-    , _fcTimeout      :: Maybe Nat
-    } deriving (Eq, Read, Show)
-
--- | 'FunctionConfiguration' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'fcCodeSize' @::@ 'Maybe' 'Integer'
---
--- * 'fcDescription' @::@ 'Maybe' 'Text'
---
--- * 'fcFunctionArn' @::@ 'Maybe' 'Text'
---
--- * 'fcFunctionName' @::@ 'Maybe' 'Text'
---
--- * 'fcHandler' @::@ 'Maybe' 'Text'
---
--- * 'fcLastModified' @::@ 'Maybe' 'Text'
---
--- * 'fcMemorySize' @::@ 'Maybe' 'Natural'
---
--- * 'fcRole' @::@ 'Maybe' 'Text'
---
--- * 'fcRuntime' @::@ 'Maybe' 'Runtime'
---
--- * 'fcTimeout' @::@ 'Maybe' 'Natural'
---
-functionConfiguration :: FunctionConfiguration
-functionConfiguration = FunctionConfiguration
-    { _fcFunctionName = Nothing
-    , _fcFunctionArn  = Nothing
-    , _fcRuntime      = Nothing
-    , _fcRole         = Nothing
-    , _fcHandler      = Nothing
-    , _fcCodeSize     = Nothing
-    , _fcDescription  = Nothing
-    , _fcTimeout      = Nothing
-    , _fcMemorySize   = Nothing
-    , _fcLastModified = Nothing
-    }
-
--- | The size, in bytes, of the function .zip file you uploaded.
-fcCodeSize :: Lens' FunctionConfiguration (Maybe Integer)
-fcCodeSize = lens _fcCodeSize (\s a -> s { _fcCodeSize = a })
-
--- | The user-provided description.
-fcDescription :: Lens' FunctionConfiguration (Maybe Text)
-fcDescription = lens _fcDescription (\s a -> s { _fcDescription = a })
-
--- | The Amazon Resource Name (ARN) assigned to the function.
-fcFunctionArn :: Lens' FunctionConfiguration (Maybe Text)
-fcFunctionArn = lens _fcFunctionArn (\s a -> s { _fcFunctionArn = a })
-
--- | The name of the function.
-fcFunctionName :: Lens' FunctionConfiguration (Maybe Text)
-fcFunctionName = lens _fcFunctionName (\s a -> s { _fcFunctionName = a })
-
--- | The function Lambda calls to begin executing your function.
-fcHandler :: Lens' FunctionConfiguration (Maybe Text)
-fcHandler = lens _fcHandler (\s a -> s { _fcHandler = a })
-
--- | The timestamp of the last time you updated the function.
-fcLastModified :: Lens' FunctionConfiguration (Maybe Text)
-fcLastModified = lens _fcLastModified (\s a -> s { _fcLastModified = a })
-
--- | The memory size, in MB, you configured for the function. Must be a multiple
--- of 64 MB.
-fcMemorySize :: Lens' FunctionConfiguration (Maybe Natural)
-fcMemorySize = lens _fcMemorySize (\s a -> s { _fcMemorySize = a }) . mapping _Nat
-
--- | The Amazon Resource Name (ARN) of the IAM role that Lambda assumes when it
--- executes your function to access any other Amazon Web Services (AWS)
--- resources.
-fcRole :: Lens' FunctionConfiguration (Maybe Text)
-fcRole = lens _fcRole (\s a -> s { _fcRole = a })
-
--- | The runtime environment for the Lambda function.
-fcRuntime :: Lens' FunctionConfiguration (Maybe Runtime)
-fcRuntime = lens _fcRuntime (\s a -> s { _fcRuntime = a })
-
--- | The function execution time at which Lambda should terminate the function.
--- Because the execution time has cost implications, we recommend you set this
--- value based on your expected execution time. The default is 3 seconds.
-fcTimeout :: Lens' FunctionConfiguration (Maybe Natural)
-fcTimeout = lens _fcTimeout (\s a -> s { _fcTimeout = a }) . mapping _Nat
-
-instance FromJSON FunctionConfiguration where
-    parseJSON = withObject "FunctionConfiguration" $ \o -> FunctionConfiguration
-        <$> o .:? "CodeSize"
-        <*> o .:? "Description"
-        <*> o .:? "FunctionArn"
-        <*> o .:? "FunctionName"
-        <*> o .:? "Handler"
-        <*> o .:? "LastModified"
-        <*> o .:? "MemorySize"
-        <*> o .:? "Role"
-        <*> o .:? "Runtime"
-        <*> o .:? "Timeout"
-
-instance ToJSON FunctionConfiguration where
-    toJSON FunctionConfiguration{..} = object
-        [ "FunctionName" .= _fcFunctionName
-        , "FunctionArn"  .= _fcFunctionArn
-        , "Runtime"      .= _fcRuntime
-        , "Role"         .= _fcRole
-        , "Handler"      .= _fcHandler
-        , "CodeSize"     .= _fcCodeSize
-        , "Description"  .= _fcDescription
-        , "Timeout"      .= _fcTimeout
-        , "MemorySize"   .= _fcMemorySize
-        , "LastModified" .= _fcLastModified
-        ]
-
-data EventSourceMappingConfiguration = EventSourceMappingConfiguration
-    { _esmcBatchSize             :: Maybe Nat
-    , _esmcEventSourceArn        :: Maybe Text
-    , _esmcFunctionArn           :: Maybe Text
-    , _esmcLastModified          :: Maybe POSIX
-    , _esmcLastProcessingResult  :: Maybe Text
-    , _esmcState                 :: Maybe Text
-    , _esmcStateTransitionReason :: Maybe Text
-    , _esmcUUID                  :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'EventSourceMappingConfiguration' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'esmcBatchSize' @::@ 'Maybe' 'Natural'
---
--- * 'esmcEventSourceArn' @::@ 'Maybe' 'Text'
---
--- * 'esmcFunctionArn' @::@ 'Maybe' 'Text'
---
--- * 'esmcLastModified' @::@ 'Maybe' 'UTCTime'
---
--- * 'esmcLastProcessingResult' @::@ 'Maybe' 'Text'
---
--- * 'esmcState' @::@ 'Maybe' 'Text'
---
--- * 'esmcStateTransitionReason' @::@ 'Maybe' 'Text'
---
--- * 'esmcUUID' @::@ 'Maybe' 'Text'
---
-eventSourceMappingConfiguration :: EventSourceMappingConfiguration
-eventSourceMappingConfiguration = EventSourceMappingConfiguration
-    { _esmcUUID                  = Nothing
-    , _esmcBatchSize             = Nothing
-    , _esmcEventSourceArn        = Nothing
-    , _esmcFunctionArn           = Nothing
-    , _esmcLastModified          = Nothing
-    , _esmcLastProcessingResult  = Nothing
-    , _esmcState                 = Nothing
-    , _esmcStateTransitionReason = Nothing
-    }
+        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
 
--- | The largest number of records that AWS Lambda will retrieve from your event
--- source at the time of invoking your function. Your function receives an event
--- with all the retrieved records.
-esmcBatchSize :: Lens' EventSourceMappingConfiguration (Maybe Natural)
-esmcBatchSize = lens _esmcBatchSize (\s a -> s { _esmcBatchSize = a }) . mapping _Nat
+-- | Lambda function access policy is limited to 20 KB.
+_PolicyLengthExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_PolicyLengthExceededException =
+    _ServiceError . hasStatus 400 . hasCode "PolicyLengthExceededException"
 
--- | The Amazon Resource Name (ARN) of the Amazon Kinesis stream that is the
--- source of events.
-esmcEventSourceArn :: Lens' EventSourceMappingConfiguration (Maybe Text)
-esmcEventSourceArn =
-    lens _esmcEventSourceArn (\s a -> s { _esmcEventSourceArn = a })
+-- | Prism for UnsupportedMediaTypeException' errors.
+_UnsupportedMediaTypeException :: AsError a => Getting (First ServiceError) a ServiceError
+_UnsupportedMediaTypeException =
+    _ServiceError . hasStatus 415 . hasCode "UnsupportedMediaTypeException"
 
--- | The Lambda function to invoke when AWS Lambda detects an event on the stream.
-esmcFunctionArn :: Lens' EventSourceMappingConfiguration (Maybe Text)
-esmcFunctionArn = lens _esmcFunctionArn (\s a -> s { _esmcFunctionArn = a })
+-- | The request body could not be parsed as JSON.
+_InvalidRequestContentException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidRequestContentException =
+    _ServiceError . hasStatus 400 . hasCode "InvalidRequestContentException"
 
--- | The UTC time string indicating the last time the event mapping was updated.
-esmcLastModified :: Lens' EventSourceMappingConfiguration (Maybe UTCTime)
-esmcLastModified = lens _esmcLastModified (\s a -> s { _esmcLastModified = a }) . mapping _Time
+-- | One of the parameters in the request is invalid. For example, if you
+-- provided an IAM role for AWS Lambda to assume in the 'CreateFunction' or
+-- the 'UpdateFunctionConfiguration' API, that AWS Lambda is unable to
+-- assume you will get this exception.
+_InvalidParameterValueException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidParameterValueException =
+    _ServiceError . hasStatus 400 . hasCode "InvalidParameterValueException"
 
--- | The result of the last AWS Lambda invocation of your Lambda function.
-esmcLastProcessingResult :: Lens' EventSourceMappingConfiguration (Maybe Text)
-esmcLastProcessingResult =
-    lens _esmcLastProcessingResult
-        (\s a -> s { _esmcLastProcessingResult = a })
+-- | Prism for RequestTooLargeException' errors.
+_RequestTooLargeException :: AsError a => Getting (First ServiceError) a ServiceError
+_RequestTooLargeException =
+    _ServiceError . hasStatus 413 . hasCode "RequestTooLargeException"
 
--- | The state of the event source mapping. It can be "Creating", "Enabled",
--- "Disabled", "Enabling", "Disabling", "Updating", or "Deleting".
-esmcState :: Lens' EventSourceMappingConfiguration (Maybe Text)
-esmcState = lens _esmcState (\s a -> s { _esmcState = a })
+-- | Prism for TooManyRequestsException' errors.
+_TooManyRequestsException :: AsError a => Getting (First ServiceError) a ServiceError
+_TooManyRequestsException =
+    _ServiceError . hasStatus 429 . hasCode "TooManyRequestsException"
 
--- | The reason the event source mapping is in its current state. It is either
--- user-requested or an AWS Lambda-initiated state transition.
-esmcStateTransitionReason :: Lens' EventSourceMappingConfiguration (Maybe Text)
-esmcStateTransitionReason =
-    lens _esmcStateTransitionReason
-        (\s a -> s { _esmcStateTransitionReason = a })
+-- | The AWS Lambda service encountered an internal error.
+_ServiceException :: AsError a => Getting (First ServiceError) a ServiceError
+_ServiceException = _ServiceError . hasStatus 500 . hasCode "ServiceException"
 
--- | The AWS Lambda assigned opaque identifier for the mapping.
-esmcUUID :: Lens' EventSourceMappingConfiguration (Maybe Text)
-esmcUUID = lens _esmcUUID (\s a -> s { _esmcUUID = a })
+-- | Prism for CodeStorageExceededException' errors.
+_CodeStorageExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_CodeStorageExceededException =
+    _ServiceError . hasStatus 400 . hasCode "CodeStorageExceededException"
 
-instance FromJSON EventSourceMappingConfiguration where
-    parseJSON = withObject "EventSourceMappingConfiguration" $ \o -> EventSourceMappingConfiguration
-        <$> o .:? "BatchSize"
-        <*> o .:? "EventSourceArn"
-        <*> o .:? "FunctionArn"
-        <*> o .:? "LastModified"
-        <*> o .:? "LastProcessingResult"
-        <*> o .:? "State"
-        <*> o .:? "StateTransitionReason"
-        <*> o .:? "UUID"
+-- | The resource already exists.
+_ResourceConflictException :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceConflictException =
+    _ServiceError . hasStatus 409 . hasCode "ResourceConflictException"
 
-instance ToJSON EventSourceMappingConfiguration where
-    toJSON EventSourceMappingConfiguration{..} = object
-        [ "UUID"                  .= _esmcUUID
-        , "BatchSize"             .= _esmcBatchSize
-        , "EventSourceArn"        .= _esmcEventSourceArn
-        , "FunctionArn"           .= _esmcFunctionArn
-        , "LastModified"          .= _esmcLastModified
-        , "LastProcessingResult"  .= _esmcLastProcessingResult
-        , "State"                 .= _esmcState
-        , "StateTransitionReason" .= _esmcStateTransitionReason
-        ]
+-- | The resource (for example, a Lambda function or access policy statement)
+-- specified in the request does not exist.
+_ResourceNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceNotFoundException =
+    _ServiceError . hasStatus 404 . hasCode "ResourceNotFoundException"
diff --git a/gen/Network/AWS/Lambda/Types/Product.hs b/gen/Network/AWS/Lambda/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Lambda/Types/Product.hs
@@ -0,0 +1,340 @@
+{-# 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.Lambda.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.Lambda.Types.Product where
+
+import           Network.AWS.Lambda.Types.Sum
+import           Network.AWS.Prelude
+
+-- | Describes mapping between an Amazon Kinesis stream and a Lambda
+-- function.
+--
+-- /See:/ 'eventSourceMappingConfiguration' smart constructor.
+data EventSourceMappingConfiguration = EventSourceMappingConfiguration'
+    { _esmcEventSourceARN        :: !(Maybe Text)
+    , _esmcFunctionARN           :: !(Maybe Text)
+    , _esmcState                 :: !(Maybe Text)
+    , _esmcUUId                  :: !(Maybe Text)
+    , _esmcLastProcessingResult  :: !(Maybe Text)
+    , _esmcBatchSize             :: !(Maybe Nat)
+    , _esmcStateTransitionReason :: !(Maybe Text)
+    , _esmcLastModified          :: !(Maybe POSIX)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventSourceMappingConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'esmcEventSourceARN'
+--
+-- * 'esmcFunctionARN'
+--
+-- * 'esmcState'
+--
+-- * 'esmcUUId'
+--
+-- * 'esmcLastProcessingResult'
+--
+-- * 'esmcBatchSize'
+--
+-- * 'esmcStateTransitionReason'
+--
+-- * 'esmcLastModified'
+eventSourceMappingConfiguration
+    :: EventSourceMappingConfiguration
+eventSourceMappingConfiguration =
+    EventSourceMappingConfiguration'
+    { _esmcEventSourceARN = Nothing
+    , _esmcFunctionARN = Nothing
+    , _esmcState = Nothing
+    , _esmcUUId = Nothing
+    , _esmcLastProcessingResult = Nothing
+    , _esmcBatchSize = Nothing
+    , _esmcStateTransitionReason = Nothing
+    , _esmcLastModified = Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the Amazon Kinesis stream that is the
+-- source of events.
+esmcEventSourceARN :: Lens' EventSourceMappingConfiguration (Maybe Text)
+esmcEventSourceARN = lens _esmcEventSourceARN (\ s a -> s{_esmcEventSourceARN = a});
+
+-- | The Lambda function to invoke when AWS Lambda detects an event on the
+-- stream.
+esmcFunctionARN :: Lens' EventSourceMappingConfiguration (Maybe Text)
+esmcFunctionARN = lens _esmcFunctionARN (\ s a -> s{_esmcFunctionARN = a});
+
+-- | The state of the event source mapping. It can be \"Creating\",
+-- \"Enabled\", \"Disabled\", \"Enabling\", \"Disabling\", \"Updating\", or
+-- \"Deleting\".
+esmcState :: Lens' EventSourceMappingConfiguration (Maybe Text)
+esmcState = lens _esmcState (\ s a -> s{_esmcState = a});
+
+-- | The AWS Lambda assigned opaque identifier for the mapping.
+esmcUUId :: Lens' EventSourceMappingConfiguration (Maybe Text)
+esmcUUId = lens _esmcUUId (\ s a -> s{_esmcUUId = a});
+
+-- | The result of the last AWS Lambda invocation of your Lambda function.
+esmcLastProcessingResult :: Lens' EventSourceMappingConfiguration (Maybe Text)
+esmcLastProcessingResult = lens _esmcLastProcessingResult (\ s a -> s{_esmcLastProcessingResult = a});
+
+-- | The largest number of records that AWS Lambda will retrieve from your
+-- event source at the time of invoking your function. Your function
+-- receives an event with all the retrieved records.
+esmcBatchSize :: Lens' EventSourceMappingConfiguration (Maybe Natural)
+esmcBatchSize = lens _esmcBatchSize (\ s a -> s{_esmcBatchSize = a}) . mapping _Nat;
+
+-- | The reason the event source mapping is in its current state. It is
+-- either user-requested or an AWS Lambda-initiated state transition.
+esmcStateTransitionReason :: Lens' EventSourceMappingConfiguration (Maybe Text)
+esmcStateTransitionReason = lens _esmcStateTransitionReason (\ s a -> s{_esmcStateTransitionReason = a});
+
+-- | The UTC time string indicating the last time the event mapping was
+-- updated.
+esmcLastModified :: Lens' EventSourceMappingConfiguration (Maybe UTCTime)
+esmcLastModified = lens _esmcLastModified (\ s a -> s{_esmcLastModified = a}) . mapping _Time;
+
+instance FromJSON EventSourceMappingConfiguration
+         where
+        parseJSON
+          = withObject "EventSourceMappingConfiguration"
+              (\ x ->
+                 EventSourceMappingConfiguration' <$>
+                   (x .:? "EventSourceArn") <*> (x .:? "FunctionArn")
+                     <*> (x .:? "State")
+                     <*> (x .:? "UUID")
+                     <*> (x .:? "LastProcessingResult")
+                     <*> (x .:? "BatchSize")
+                     <*> (x .:? "StateTransitionReason")
+                     <*> (x .:? "LastModified"))
+
+-- | The code for the Lambda function.
+--
+-- /See:/ 'functionCode' smart constructor.
+data FunctionCode = FunctionCode'
+    { _fcS3ObjectVersion :: !(Maybe Text)
+    , _fcS3Key           :: !(Maybe Text)
+    , _fcZipFile         :: !(Maybe Base64)
+    , _fcS3Bucket        :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FunctionCode' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fcS3ObjectVersion'
+--
+-- * 'fcS3Key'
+--
+-- * 'fcZipFile'
+--
+-- * 'fcS3Bucket'
+functionCode
+    :: FunctionCode
+functionCode =
+    FunctionCode'
+    { _fcS3ObjectVersion = Nothing
+    , _fcS3Key = Nothing
+    , _fcZipFile = Nothing
+    , _fcS3Bucket = Nothing
+    }
+
+-- | The Amazon S3 object (the deployment package) version you want to
+-- upload.
+fcS3ObjectVersion :: Lens' FunctionCode (Maybe Text)
+fcS3ObjectVersion = lens _fcS3ObjectVersion (\ s a -> s{_fcS3ObjectVersion = a});
+
+-- | The Amazon S3 object (the deployment package) key name you want to
+-- upload.
+fcS3Key :: Lens' FunctionCode (Maybe Text)
+fcS3Key = lens _fcS3Key (\ s a -> s{_fcS3Key = a});
+
+-- | A base64-encoded .zip file containing your deployment package. For more
+-- information about creating a .zip file, go to
+-- <http://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role.html Execution Permissions>
+-- in the /AWS Lambda Developer Guide/.
+fcZipFile :: Lens' FunctionCode (Maybe ByteString)
+fcZipFile = lens _fcZipFile (\ s a -> s{_fcZipFile = a}) . mapping _Base64;
+
+-- | Amazon S3 bucket name where the .zip file containing your deployment
+-- package is stored. This bucket must reside in the same AWS region where
+-- you are creating the Lambda function.
+fcS3Bucket :: Lens' FunctionCode (Maybe Text)
+fcS3Bucket = lens _fcS3Bucket (\ s a -> s{_fcS3Bucket = a});
+
+instance ToJSON FunctionCode where
+        toJSON FunctionCode'{..}
+          = object
+              ["S3ObjectVersion" .= _fcS3ObjectVersion,
+               "S3Key" .= _fcS3Key, "ZipFile" .= _fcZipFile,
+               "S3Bucket" .= _fcS3Bucket]
+
+-- | The object for the Lambda function location.
+--
+-- /See:/ 'functionCodeLocation' smart constructor.
+data FunctionCodeLocation = FunctionCodeLocation'
+    { _fclLocation       :: !(Maybe Text)
+    , _fclRepositoryType :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FunctionCodeLocation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fclLocation'
+--
+-- * 'fclRepositoryType'
+functionCodeLocation
+    :: FunctionCodeLocation
+functionCodeLocation =
+    FunctionCodeLocation'
+    { _fclLocation = Nothing
+    , _fclRepositoryType = Nothing
+    }
+
+-- | The presigned URL you can use to download the function\'s .zip file that
+-- you previously uploaded. The URL is valid for up to 10 minutes.
+fclLocation :: Lens' FunctionCodeLocation (Maybe Text)
+fclLocation = lens _fclLocation (\ s a -> s{_fclLocation = a});
+
+-- | The repository from which you can download the function.
+fclRepositoryType :: Lens' FunctionCodeLocation (Maybe Text)
+fclRepositoryType = lens _fclRepositoryType (\ s a -> s{_fclRepositoryType = a});
+
+instance FromJSON FunctionCodeLocation where
+        parseJSON
+          = withObject "FunctionCodeLocation"
+              (\ x ->
+                 FunctionCodeLocation' <$>
+                   (x .:? "Location") <*> (x .:? "RepositoryType"))
+
+-- | A complex type that describes function metadata.
+--
+-- /See:/ 'functionConfiguration' smart constructor.
+data FunctionConfiguration = FunctionConfiguration'
+    { _fcRuntime      :: !(Maybe Runtime)
+    , _fcMemorySize   :: !(Maybe Nat)
+    , _fcFunctionARN  :: !(Maybe Text)
+    , _fcRole         :: !(Maybe Text)
+    , _fcFunctionName :: !(Maybe Text)
+    , _fcCodeSize     :: !(Maybe Integer)
+    , _fcHandler      :: !(Maybe Text)
+    , _fcTimeout      :: !(Maybe Nat)
+    , _fcLastModified :: !(Maybe Text)
+    , _fcDescription  :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FunctionConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fcRuntime'
+--
+-- * 'fcMemorySize'
+--
+-- * 'fcFunctionARN'
+--
+-- * 'fcRole'
+--
+-- * 'fcFunctionName'
+--
+-- * 'fcCodeSize'
+--
+-- * 'fcHandler'
+--
+-- * 'fcTimeout'
+--
+-- * 'fcLastModified'
+--
+-- * 'fcDescription'
+functionConfiguration
+    :: FunctionConfiguration
+functionConfiguration =
+    FunctionConfiguration'
+    { _fcRuntime = Nothing
+    , _fcMemorySize = Nothing
+    , _fcFunctionARN = Nothing
+    , _fcRole = Nothing
+    , _fcFunctionName = Nothing
+    , _fcCodeSize = Nothing
+    , _fcHandler = Nothing
+    , _fcTimeout = Nothing
+    , _fcLastModified = Nothing
+    , _fcDescription = Nothing
+    }
+
+-- | The runtime environment for the Lambda function.
+fcRuntime :: Lens' FunctionConfiguration (Maybe Runtime)
+fcRuntime = lens _fcRuntime (\ s a -> s{_fcRuntime = a});
+
+-- | The memory size, in MB, you configured for the function. Must be a
+-- multiple of 64 MB.
+fcMemorySize :: Lens' FunctionConfiguration (Maybe Natural)
+fcMemorySize = lens _fcMemorySize (\ s a -> s{_fcMemorySize = a}) . mapping _Nat;
+
+-- | The Amazon Resource Name (ARN) assigned to the function.
+fcFunctionARN :: Lens' FunctionConfiguration (Maybe Text)
+fcFunctionARN = lens _fcFunctionARN (\ s a -> s{_fcFunctionARN = a});
+
+-- | The Amazon Resource Name (ARN) of the IAM role that Lambda assumes when
+-- it executes your function to access any other Amazon Web Services (AWS)
+-- resources.
+fcRole :: Lens' FunctionConfiguration (Maybe Text)
+fcRole = lens _fcRole (\ s a -> s{_fcRole = a});
+
+-- | The name of the function.
+fcFunctionName :: Lens' FunctionConfiguration (Maybe Text)
+fcFunctionName = lens _fcFunctionName (\ s a -> s{_fcFunctionName = a});
+
+-- | The size, in bytes, of the function .zip file you uploaded.
+fcCodeSize :: Lens' FunctionConfiguration (Maybe Integer)
+fcCodeSize = lens _fcCodeSize (\ s a -> s{_fcCodeSize = a});
+
+-- | The function Lambda calls to begin executing your function.
+fcHandler :: Lens' FunctionConfiguration (Maybe Text)
+fcHandler = lens _fcHandler (\ s a -> s{_fcHandler = a});
+
+-- | The function execution time at which Lambda should terminate the
+-- function. Because the execution time has cost implications, we recommend
+-- you set this value based on your expected execution time. The default is
+-- 3 seconds.
+fcTimeout :: Lens' FunctionConfiguration (Maybe Natural)
+fcTimeout = lens _fcTimeout (\ s a -> s{_fcTimeout = a}) . mapping _Nat;
+
+-- | The timestamp of the last time you updated the function.
+fcLastModified :: Lens' FunctionConfiguration (Maybe Text)
+fcLastModified = lens _fcLastModified (\ s a -> s{_fcLastModified = a});
+
+-- | The user-provided description.
+fcDescription :: Lens' FunctionConfiguration (Maybe Text)
+fcDescription = lens _fcDescription (\ s a -> s{_fcDescription = a});
+
+instance FromJSON FunctionConfiguration where
+        parseJSON
+          = withObject "FunctionConfiguration"
+              (\ x ->
+                 FunctionConfiguration' <$>
+                   (x .:? "Runtime") <*> (x .:? "MemorySize") <*>
+                     (x .:? "FunctionArn")
+                     <*> (x .:? "Role")
+                     <*> (x .:? "FunctionName")
+                     <*> (x .:? "CodeSize")
+                     <*> (x .:? "Handler")
+                     <*> (x .:? "Timeout")
+                     <*> (x .:? "LastModified")
+                     <*> (x .:? "Description"))
diff --git a/gen/Network/AWS/Lambda/Types/Sum.hs b/gen/Network/AWS/Lambda/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Lambda/Types/Sum.hs
@@ -0,0 +1,126 @@
+{-# 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.Lambda.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.Lambda.Types.Sum where
+
+import           Network.AWS.Prelude
+
+data EventSourcePosition
+    = Latest
+    | TrimHorizon
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText EventSourcePosition where
+    parser = takeLowerText >>= \case
+        "latest" -> pure Latest
+        "trim_horizon" -> pure TrimHorizon
+        e -> fromTextError $ "Failure parsing EventSourcePosition from value: '" <> e
+           <> "'. Accepted values: latest, trim_horizon"
+
+instance ToText EventSourcePosition where
+    toText = \case
+        Latest -> "latest"
+        TrimHorizon -> "trim_horizon"
+
+instance Hashable     EventSourcePosition
+instance ToByteString EventSourcePosition
+instance ToQuery      EventSourcePosition
+instance ToHeader     EventSourcePosition
+
+instance ToJSON EventSourcePosition where
+    toJSON = toJSONText
+
+data InvocationType
+    = DryRun
+    | Event
+    | RequestResponse
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText InvocationType where
+    parser = takeLowerText >>= \case
+        "dryrun" -> pure DryRun
+        "event" -> pure Event
+        "requestresponse" -> pure RequestResponse
+        e -> fromTextError $ "Failure parsing InvocationType from value: '" <> e
+           <> "'. Accepted values: dryrun, event, requestresponse"
+
+instance ToText InvocationType where
+    toText = \case
+        DryRun -> "dryrun"
+        Event -> "event"
+        RequestResponse -> "requestresponse"
+
+instance Hashable     InvocationType
+instance ToByteString InvocationType
+instance ToQuery      InvocationType
+instance ToHeader     InvocationType
+
+instance ToJSON InvocationType where
+    toJSON = toJSONText
+
+data LogType
+    = None
+    | Tail
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText LogType where
+    parser = takeLowerText >>= \case
+        "none" -> pure None
+        "tail" -> pure Tail
+        e -> fromTextError $ "Failure parsing LogType from value: '" <> e
+           <> "'. Accepted values: none, tail"
+
+instance ToText LogType where
+    toText = \case
+        None -> "none"
+        Tail -> "tail"
+
+instance Hashable     LogType
+instance ToByteString LogType
+instance ToQuery      LogType
+instance ToHeader     LogType
+
+instance ToJSON LogType where
+    toJSON = toJSONText
+
+data Runtime
+    = JAVA8
+    | Nodejs
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText Runtime where
+    parser = takeLowerText >>= \case
+        "java8" -> pure JAVA8
+        "nodejs" -> pure Nodejs
+        e -> fromTextError $ "Failure parsing Runtime from value: '" <> e
+           <> "'. Accepted values: java8, nodejs"
+
+instance ToText Runtime where
+    toText = \case
+        JAVA8 -> "java8"
+        Nodejs -> "nodejs"
+
+instance Hashable     Runtime
+instance ToByteString Runtime
+instance ToQuery      Runtime
+instance ToHeader     Runtime
+
+instance ToJSON Runtime where
+    toJSON = toJSONText
+
+instance FromJSON Runtime where
+    parseJSON = parseJSONText "Runtime"
diff --git a/gen/Network/AWS/Lambda/UpdateEventSourceMapping.hs b/gen/Network/AWS/Lambda/UpdateEventSourceMapping.hs
--- a/gen/Network/AWS/Lambda/UpdateEventSourceMapping.hs
+++ b/gen/Network/AWS/Lambda/UpdateEventSourceMapping.hs
@@ -1,242 +1,143 @@
-{-# 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.Lambda.UpdateEventSourceMapping
--- 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.
-
--- | You can update an event source mapping. This is useful if you want to change
--- the parameters of the existing mapping without losing your position in the
--- stream. You can change which function will receive the stream records, but to
--- change the stream itself, you must create a new mapping.
+-- You can update an event source mapping. This is useful if you want to
+-- change the parameters of the existing mapping without losing your
+-- position in the stream. You can change which function will receive the
+-- stream records, but to change the stream itself, you must create a new
+-- mapping.
 --
--- This operation requires permission for the 'lambda:UpdateEventSourceMapping'
--- action.
+-- This operation requires permission for the
+-- 'lambda:UpdateEventSourceMapping' action.
 --
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_UpdateEventSourceMapping.html>
+-- /See:/ <http://docs.aws.amazon.com/lambda/latest/dg/API_UpdateEventSourceMapping.html AWS API Reference> for UpdateEventSourceMapping.
 module Network.AWS.Lambda.UpdateEventSourceMapping
     (
-    -- * Request
-      UpdateEventSourceMapping
-    -- ** Request constructor
-    , updateEventSourceMapping
-    -- ** Request lenses
-    , uesmBatchSize
+    -- * Creating a Request
+      updateEventSourceMapping
+    , UpdateEventSourceMapping
+    -- * Request Lenses
     , uesmEnabled
+    , uesmBatchSize
     , uesmFunctionName
-    , uesmUUID
+    , uesmUUId
 
-    -- * Response
-    , UpdateEventSourceMappingResponse
-    -- ** Response constructor
-    , updateEventSourceMappingResponse
-    -- ** Response lenses
-    , uesmrBatchSize
-    , uesmrEventSourceArn
-    , uesmrFunctionArn
-    , uesmrLastModified
-    , uesmrLastProcessingResult
-    , uesmrState
-    , uesmrStateTransitionReason
-    , uesmrUUID
+    -- * Destructuring the Response
+    , eventSourceMappingConfiguration
+    , EventSourceMappingConfiguration
+    -- * Response Lenses
+    , esmcEventSourceARN
+    , esmcFunctionARN
+    , esmcState
+    , esmcUUId
+    , esmcLastProcessingResult
+    , esmcBatchSize
+    , esmcStateTransitionReason
+    , esmcLastModified
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
+import           Network.AWS.Lambda.Types
+import           Network.AWS.Lambda.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data UpdateEventSourceMapping = UpdateEventSourceMapping
-    { _uesmBatchSize    :: Maybe Nat
-    , _uesmEnabled      :: Maybe Bool
-    , _uesmFunctionName :: Maybe Text
-    , _uesmUUID         :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'updateEventSourceMapping' smart constructor.
+data UpdateEventSourceMapping = UpdateEventSourceMapping'
+    { _uesmEnabled      :: !(Maybe Bool)
+    , _uesmBatchSize    :: !(Maybe Nat)
+    , _uesmFunctionName :: !(Maybe Text)
+    , _uesmUUId         :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'UpdateEventSourceMapping' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'UpdateEventSourceMapping' with the minimum fields required to make a request.
 --
--- * 'uesmBatchSize' @::@ 'Maybe' 'Natural'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'uesmEnabled' @::@ 'Maybe' 'Bool'
+-- * 'uesmEnabled'
 --
--- * 'uesmFunctionName' @::@ 'Maybe' 'Text'
+-- * 'uesmBatchSize'
 --
--- * 'uesmUUID' @::@ 'Text'
+-- * 'uesmFunctionName'
 --
-updateEventSourceMapping :: Text -- ^ 'uesmUUID'
-                         -> UpdateEventSourceMapping
-updateEventSourceMapping p1 = UpdateEventSourceMapping
-    { _uesmUUID         = p1
+-- * 'uesmUUId'
+updateEventSourceMapping
+    :: Text -- ^ 'uesmUUId'
+    -> UpdateEventSourceMapping
+updateEventSourceMapping pUUId_ =
+    UpdateEventSourceMapping'
+    { _uesmEnabled = Nothing
+    , _uesmBatchSize = Nothing
     , _uesmFunctionName = Nothing
-    , _uesmEnabled      = Nothing
-    , _uesmBatchSize    = Nothing
+    , _uesmUUId = pUUId_
     }
 
--- | The maximum number of stream records that can be sent to your Lambda function
--- for a single invocation.
-uesmBatchSize :: Lens' UpdateEventSourceMapping (Maybe Natural)
-uesmBatchSize = lens _uesmBatchSize (\s a -> s { _uesmBatchSize = a }) . mapping _Nat
-
 -- | Specifies whether AWS Lambda should actively poll the stream or not. If
 -- disabled, AWS Lambda will not poll the stream.
 uesmEnabled :: Lens' UpdateEventSourceMapping (Maybe Bool)
-uesmEnabled = lens _uesmEnabled (\s a -> s { _uesmEnabled = a })
+uesmEnabled = lens _uesmEnabled (\ s a -> s{_uesmEnabled = a});
 
+-- | The maximum number of stream records that can be sent to your Lambda
+-- function for a single invocation.
+uesmBatchSize :: Lens' UpdateEventSourceMapping (Maybe Natural)
+uesmBatchSize = lens _uesmBatchSize (\ s a -> s{_uesmBatchSize = a}) . mapping _Nat;
+
 -- | The Lambda function to which you want the stream records sent.
 --
--- You can specify an unqualified function name (for example, "Thumbnail") or
--- you can specify Amazon Resource Name (ARN) of the function (for example,
--- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
--- allows you to specify only the account ID qualifier (for example,
--- "account-id:Thumbnail"). Note that the length constraint applies only to the
--- ARN. If you specify only the function name, it is limited to 64 character in
--- length.
+-- You can specify an unqualified function name (for example,
+-- \"Thumbnail\") or you can specify Amazon Resource Name (ARN) of the
+-- function (for example,
+-- \"arn:aws:lambda:us-west-2:account-id:function:ThumbNail\"). AWS Lambda
+-- also allows you to specify only the account ID qualifier (for example,
+-- \"account-id:Thumbnail\"). Note that the length constraint applies only
+-- to the ARN. If you specify only the function name, it is limited to 64
+-- character in length.
 uesmFunctionName :: Lens' UpdateEventSourceMapping (Maybe Text)
-uesmFunctionName = lens _uesmFunctionName (\s a -> s { _uesmFunctionName = a })
+uesmFunctionName = lens _uesmFunctionName (\ s a -> s{_uesmFunctionName = a});
 
 -- | The event source mapping identifier.
-uesmUUID :: Lens' UpdateEventSourceMapping Text
-uesmUUID = lens _uesmUUID (\s a -> s { _uesmUUID = a })
-
-data UpdateEventSourceMappingResponse = UpdateEventSourceMappingResponse
-    { _uesmrBatchSize             :: Maybe Nat
-    , _uesmrEventSourceArn        :: Maybe Text
-    , _uesmrFunctionArn           :: Maybe Text
-    , _uesmrLastModified          :: Maybe POSIX
-    , _uesmrLastProcessingResult  :: Maybe Text
-    , _uesmrState                 :: Maybe Text
-    , _uesmrStateTransitionReason :: Maybe Text
-    , _uesmrUUID                  :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'UpdateEventSourceMappingResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'uesmrBatchSize' @::@ 'Maybe' 'Natural'
---
--- * 'uesmrEventSourceArn' @::@ 'Maybe' 'Text'
---
--- * 'uesmrFunctionArn' @::@ 'Maybe' 'Text'
---
--- * 'uesmrLastModified' @::@ 'Maybe' 'UTCTime'
---
--- * 'uesmrLastProcessingResult' @::@ 'Maybe' 'Text'
---
--- * 'uesmrState' @::@ 'Maybe' 'Text'
---
--- * 'uesmrStateTransitionReason' @::@ 'Maybe' 'Text'
---
--- * 'uesmrUUID' @::@ 'Maybe' 'Text'
---
-updateEventSourceMappingResponse :: UpdateEventSourceMappingResponse
-updateEventSourceMappingResponse = UpdateEventSourceMappingResponse
-    { _uesmrUUID                  = Nothing
-    , _uesmrBatchSize             = Nothing
-    , _uesmrEventSourceArn        = Nothing
-    , _uesmrFunctionArn           = Nothing
-    , _uesmrLastModified          = Nothing
-    , _uesmrLastProcessingResult  = Nothing
-    , _uesmrState                 = Nothing
-    , _uesmrStateTransitionReason = Nothing
-    }
-
--- | The largest number of records that AWS Lambda will retrieve from your event
--- source at the time of invoking your function. Your function receives an event
--- with all the retrieved records.
-uesmrBatchSize :: Lens' UpdateEventSourceMappingResponse (Maybe Natural)
-uesmrBatchSize = lens _uesmrBatchSize (\s a -> s { _uesmrBatchSize = a }) . mapping _Nat
-
--- | The Amazon Resource Name (ARN) of the Amazon Kinesis stream that is the
--- source of events.
-uesmrEventSourceArn :: Lens' UpdateEventSourceMappingResponse (Maybe Text)
-uesmrEventSourceArn =
-    lens _uesmrEventSourceArn (\s a -> s { _uesmrEventSourceArn = a })
-
--- | The Lambda function to invoke when AWS Lambda detects an event on the stream.
-uesmrFunctionArn :: Lens' UpdateEventSourceMappingResponse (Maybe Text)
-uesmrFunctionArn = lens _uesmrFunctionArn (\s a -> s { _uesmrFunctionArn = a })
-
--- | The UTC time string indicating the last time the event mapping was updated.
-uesmrLastModified :: Lens' UpdateEventSourceMappingResponse (Maybe UTCTime)
-uesmrLastModified =
-    lens _uesmrLastModified (\s a -> s { _uesmrLastModified = a })
-        . mapping _Time
-
--- | The result of the last AWS Lambda invocation of your Lambda function.
-uesmrLastProcessingResult :: Lens' UpdateEventSourceMappingResponse (Maybe Text)
-uesmrLastProcessingResult =
-    lens _uesmrLastProcessingResult
-        (\s a -> s { _uesmrLastProcessingResult = a })
+uesmUUId :: Lens' UpdateEventSourceMapping Text
+uesmUUId = lens _uesmUUId (\ s a -> s{_uesmUUId = a});
 
--- | The state of the event source mapping. It can be "Creating", "Enabled",
--- "Disabled", "Enabling", "Disabling", "Updating", or "Deleting".
-uesmrState :: Lens' UpdateEventSourceMappingResponse (Maybe Text)
-uesmrState = lens _uesmrState (\s a -> s { _uesmrState = a })
+instance AWSRequest UpdateEventSourceMapping where
+        type Sv UpdateEventSourceMapping = Lambda
+        type Rs UpdateEventSourceMapping =
+             EventSourceMappingConfiguration
+        request = putJSON
+        response = receiveJSON (\ s h x -> eitherParseJSON x)
 
--- | The reason the event source mapping is in its current state. It is either
--- user-requested or an AWS Lambda-initiated state transition.
-uesmrStateTransitionReason :: Lens' UpdateEventSourceMappingResponse (Maybe Text)
-uesmrStateTransitionReason =
-    lens _uesmrStateTransitionReason
-        (\s a -> s { _uesmrStateTransitionReason = a })
+instance ToHeaders UpdateEventSourceMapping where
+        toHeaders = const mempty
 
--- | The AWS Lambda assigned opaque identifier for the mapping.
-uesmrUUID :: Lens' UpdateEventSourceMappingResponse (Maybe Text)
-uesmrUUID = lens _uesmrUUID (\s a -> s { _uesmrUUID = a })
+instance ToJSON UpdateEventSourceMapping where
+        toJSON UpdateEventSourceMapping'{..}
+          = object
+              ["Enabled" .= _uesmEnabled,
+               "BatchSize" .= _uesmBatchSize,
+               "FunctionName" .= _uesmFunctionName]
 
 instance ToPath UpdateEventSourceMapping where
-    toPath UpdateEventSourceMapping{..} = mconcat
-        [ "/2015-03-31/event-source-mappings/"
-        , toText _uesmUUID
-        ]
+        toPath UpdateEventSourceMapping'{..}
+          = mconcat
+              ["/2015-03-31/event-source-mappings/",
+               toBS _uesmUUId]
 
 instance ToQuery UpdateEventSourceMapping where
-    toQuery = const mempty
-
-instance ToHeaders UpdateEventSourceMapping
-
-instance ToJSON UpdateEventSourceMapping where
-    toJSON UpdateEventSourceMapping{..} = object
-        [ "FunctionName" .= _uesmFunctionName
-        , "Enabled"      .= _uesmEnabled
-        , "BatchSize"    .= _uesmBatchSize
-        ]
-
-instance AWSRequest UpdateEventSourceMapping where
-    type Sv UpdateEventSourceMapping = Lambda
-    type Rs UpdateEventSourceMapping = UpdateEventSourceMappingResponse
-
-    request  = put
-    response = jsonResponse
-
-instance FromJSON UpdateEventSourceMappingResponse where
-    parseJSON = withObject "UpdateEventSourceMappingResponse" $ \o -> UpdateEventSourceMappingResponse
-        <$> o .:? "BatchSize"
-        <*> o .:? "EventSourceArn"
-        <*> o .:? "FunctionArn"
-        <*> o .:? "LastModified"
-        <*> o .:? "LastProcessingResult"
-        <*> o .:? "State"
-        <*> o .:? "StateTransitionReason"
-        <*> o .:? "UUID"
+        toQuery = const mempty
diff --git a/gen/Network/AWS/Lambda/UpdateFunctionCode.hs b/gen/Network/AWS/Lambda/UpdateFunctionCode.hs
--- a/gen/Network/AWS/Lambda/UpdateFunctionCode.hs
+++ b/gen/Network/AWS/Lambda/UpdateFunctionCode.hs
@@ -1,265 +1,153 @@
-{-# 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.Lambda.UpdateFunctionCode
--- 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.
-
--- | Updates the code for the specified Lambda function. This operation must only
--- be used on an existing Lambda function and cannot be used to update the
--- function configuration.
+-- Updates the code for the specified Lambda function. This operation must
+-- only be used on an existing Lambda function and cannot be used to update
+-- the function configuration.
 --
--- This operation requires permission for the 'lambda:UpdateFunctionCode' action.
+-- This operation requires permission for the 'lambda:UpdateFunctionCode'
+-- action.
 --
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_UpdateFunctionCode.html>
+-- /See:/ <http://docs.aws.amazon.com/lambda/latest/dg/API_UpdateFunctionCode.html AWS API Reference> for UpdateFunctionCode.
 module Network.AWS.Lambda.UpdateFunctionCode
     (
-    -- * Request
-      UpdateFunctionCode
-    -- ** Request constructor
-    , updateFunctionCode
-    -- ** Request lenses
-    , ufc1FunctionName
-    , ufc1S3Bucket
-    , ufc1S3Key
-    , ufc1S3ObjectVersion
-    , ufc1ZipFile
+    -- * Creating a Request
+      updateFunctionCode
+    , UpdateFunctionCode
+    -- * Request Lenses
+    , uS3ObjectVersion
+    , uS3Key
+    , uZipFile
+    , uS3Bucket
+    , uFunctionName
 
-    -- * Response
-    , UpdateFunctionCodeResponse
-    -- ** Response constructor
-    , updateFunctionCodeResponse
-    -- ** Response lenses
-    , ufcrCodeSize
-    , ufcrDescription
-    , ufcrFunctionArn
-    , ufcrFunctionName
-    , ufcrHandler
-    , ufcrLastModified
-    , ufcrMemorySize
-    , ufcrRole
-    , ufcrRuntime
-    , ufcrTimeout
+    -- * Destructuring the Response
+    , functionConfiguration
+    , FunctionConfiguration
+    -- * Response Lenses
+    , fcRuntime
+    , fcMemorySize
+    , fcFunctionARN
+    , fcRole
+    , fcFunctionName
+    , fcCodeSize
+    , fcHandler
+    , fcTimeout
+    , fcLastModified
+    , fcDescription
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
+import           Network.AWS.Lambda.Types
+import           Network.AWS.Lambda.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data UpdateFunctionCode = UpdateFunctionCode
-    { _ufc1FunctionName    :: Text
-    , _ufc1S3Bucket        :: Maybe Text
-    , _ufc1S3Key           :: Maybe Text
-    , _ufc1S3ObjectVersion :: Maybe Text
-    , _ufc1ZipFile         :: Maybe Base64
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'updateFunctionCode' smart constructor.
+data UpdateFunctionCode = UpdateFunctionCode'
+    { _uS3ObjectVersion :: !(Maybe Text)
+    , _uS3Key           :: !(Maybe Text)
+    , _uZipFile         :: !(Maybe Base64)
+    , _uS3Bucket        :: !(Maybe Text)
+    , _uFunctionName    :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'UpdateFunctionCode' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'UpdateFunctionCode' with the minimum fields required to make a request.
 --
--- * 'ufc1FunctionName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ufc1S3Bucket' @::@ 'Maybe' 'Text'
+-- * 'uS3ObjectVersion'
 --
--- * 'ufc1S3Key' @::@ 'Maybe' 'Text'
+-- * 'uS3Key'
 --
--- * 'ufc1S3ObjectVersion' @::@ 'Maybe' 'Text'
+-- * 'uZipFile'
 --
--- * 'ufc1ZipFile' @::@ 'Maybe' 'Base64'
+-- * 'uS3Bucket'
 --
-updateFunctionCode :: Text -- ^ 'ufc1FunctionName'
-                   -> UpdateFunctionCode
-updateFunctionCode p1 = UpdateFunctionCode
-    { _ufc1FunctionName    = p1
-    , _ufc1ZipFile         = Nothing
-    , _ufc1S3Bucket        = Nothing
-    , _ufc1S3Key           = Nothing
-    , _ufc1S3ObjectVersion = Nothing
+-- * 'uFunctionName'
+updateFunctionCode
+    :: Text -- ^ 'uFunctionName'
+    -> UpdateFunctionCode
+updateFunctionCode pFunctionName_ =
+    UpdateFunctionCode'
+    { _uS3ObjectVersion = Nothing
+    , _uS3Key = Nothing
+    , _uZipFile = Nothing
+    , _uS3Bucket = Nothing
+    , _uFunctionName = pFunctionName_
     }
 
--- | The existing Lambda function name whose code you want to replace.
---
--- You can specify an unqualified function name (for example, "Thumbnail") or
--- you can specify Amazon Resource Name (ARN) of the function (for example,
--- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
--- allows you to specify only the account ID qualifier (for example,
--- "account-id:Thumbnail"). Note that the length constraint applies only to the
--- ARN. If you specify only the function name, it is limited to 64 character in
--- length.
-ufc1FunctionName :: Lens' UpdateFunctionCode Text
-ufc1FunctionName = lens _ufc1FunctionName (\s a -> s { _ufc1FunctionName = a })
-
--- | Amazon S3 bucket name where the .zip file containing your deployment package
--- is stored. This bucket must reside in the same AWS region where you are
--- creating the Lambda function.
-ufc1S3Bucket :: Lens' UpdateFunctionCode (Maybe Text)
-ufc1S3Bucket = lens _ufc1S3Bucket (\s a -> s { _ufc1S3Bucket = a })
-
--- | The Amazon S3 object (the deployment package) key name you want to upload.
-ufc1S3Key :: Lens' UpdateFunctionCode (Maybe Text)
-ufc1S3Key = lens _ufc1S3Key (\s a -> s { _ufc1S3Key = a })
+-- | The Amazon S3 object (the deployment package) version you want to
+-- upload.
+uS3ObjectVersion :: Lens' UpdateFunctionCode (Maybe Text)
+uS3ObjectVersion = lens _uS3ObjectVersion (\ s a -> s{_uS3ObjectVersion = a});
 
--- | The Amazon S3 object (the deployment package) version you want to upload.
-ufc1S3ObjectVersion :: Lens' UpdateFunctionCode (Maybe Text)
-ufc1S3ObjectVersion =
-    lens _ufc1S3ObjectVersion (\s a -> s { _ufc1S3ObjectVersion = a })
+-- | The Amazon S3 object (the deployment package) key name you want to
+-- upload.
+uS3Key :: Lens' UpdateFunctionCode (Maybe Text)
+uS3Key = lens _uS3Key (\ s a -> s{_uS3Key = a});
 
 -- | Based64-encoded .zip file containing your packaged source code.
-ufc1ZipFile :: Lens' UpdateFunctionCode (Maybe Base64)
-ufc1ZipFile = lens _ufc1ZipFile (\s a -> s { _ufc1ZipFile = a })
+uZipFile :: Lens' UpdateFunctionCode (Maybe ByteString)
+uZipFile = lens _uZipFile (\ s a -> s{_uZipFile = a}) . mapping _Base64;
 
-data UpdateFunctionCodeResponse = UpdateFunctionCodeResponse
-    { _ufcrCodeSize     :: Maybe Integer
-    , _ufcrDescription  :: Maybe Text
-    , _ufcrFunctionArn  :: Maybe Text
-    , _ufcrFunctionName :: Maybe Text
-    , _ufcrHandler      :: Maybe Text
-    , _ufcrLastModified :: Maybe Text
-    , _ufcrMemorySize   :: Maybe Nat
-    , _ufcrRole         :: Maybe Text
-    , _ufcrRuntime      :: Maybe Runtime
-    , _ufcrTimeout      :: Maybe Nat
-    } deriving (Eq, Read, Show)
+-- | Amazon S3 bucket name where the .zip file containing your deployment
+-- package is stored. This bucket must reside in the same AWS region where
+-- you are creating the Lambda function.
+uS3Bucket :: Lens' UpdateFunctionCode (Maybe Text)
+uS3Bucket = lens _uS3Bucket (\ s a -> s{_uS3Bucket = a});
 
--- | 'UpdateFunctionCodeResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ufcrCodeSize' @::@ 'Maybe' 'Integer'
---
--- * 'ufcrDescription' @::@ 'Maybe' 'Text'
---
--- * 'ufcrFunctionArn' @::@ 'Maybe' 'Text'
---
--- * 'ufcrFunctionName' @::@ 'Maybe' 'Text'
---
--- * 'ufcrHandler' @::@ 'Maybe' 'Text'
---
--- * 'ufcrLastModified' @::@ 'Maybe' 'Text'
---
--- * 'ufcrMemorySize' @::@ 'Maybe' 'Natural'
---
--- * 'ufcrRole' @::@ 'Maybe' 'Text'
---
--- * 'ufcrRuntime' @::@ 'Maybe' 'Runtime'
---
--- * 'ufcrTimeout' @::@ 'Maybe' 'Natural'
+-- | The existing Lambda function name whose code you want to replace.
 --
-updateFunctionCodeResponse :: UpdateFunctionCodeResponse
-updateFunctionCodeResponse = UpdateFunctionCodeResponse
-    { _ufcrFunctionName = Nothing
-    , _ufcrFunctionArn  = Nothing
-    , _ufcrRuntime      = Nothing
-    , _ufcrRole         = Nothing
-    , _ufcrHandler      = Nothing
-    , _ufcrCodeSize     = Nothing
-    , _ufcrDescription  = Nothing
-    , _ufcrTimeout      = Nothing
-    , _ufcrMemorySize   = Nothing
-    , _ufcrLastModified = Nothing
-    }
-
--- | The size, in bytes, of the function .zip file you uploaded.
-ufcrCodeSize :: Lens' UpdateFunctionCodeResponse (Maybe Integer)
-ufcrCodeSize = lens _ufcrCodeSize (\s a -> s { _ufcrCodeSize = a })
-
--- | The user-provided description.
-ufcrDescription :: Lens' UpdateFunctionCodeResponse (Maybe Text)
-ufcrDescription = lens _ufcrDescription (\s a -> s { _ufcrDescription = a })
-
--- | The Amazon Resource Name (ARN) assigned to the function.
-ufcrFunctionArn :: Lens' UpdateFunctionCodeResponse (Maybe Text)
-ufcrFunctionArn = lens _ufcrFunctionArn (\s a -> s { _ufcrFunctionArn = a })
-
--- | The name of the function.
-ufcrFunctionName :: Lens' UpdateFunctionCodeResponse (Maybe Text)
-ufcrFunctionName = lens _ufcrFunctionName (\s a -> s { _ufcrFunctionName = a })
-
--- | The function Lambda calls to begin executing your function.
-ufcrHandler :: Lens' UpdateFunctionCodeResponse (Maybe Text)
-ufcrHandler = lens _ufcrHandler (\s a -> s { _ufcrHandler = a })
-
--- | The timestamp of the last time you updated the function.
-ufcrLastModified :: Lens' UpdateFunctionCodeResponse (Maybe Text)
-ufcrLastModified = lens _ufcrLastModified (\s a -> s { _ufcrLastModified = a })
-
--- | The memory size, in MB, you configured for the function. Must be a multiple
--- of 64 MB.
-ufcrMemorySize :: Lens' UpdateFunctionCodeResponse (Maybe Natural)
-ufcrMemorySize = lens _ufcrMemorySize (\s a -> s { _ufcrMemorySize = a }) . mapping _Nat
+-- You can specify an unqualified function name (for example,
+-- \"Thumbnail\") or you can specify Amazon Resource Name (ARN) of the
+-- function (for example,
+-- \"arn:aws:lambda:us-west-2:account-id:function:ThumbNail\"). AWS Lambda
+-- also allows you to specify only the account ID qualifier (for example,
+-- \"account-id:Thumbnail\"). Note that the length constraint applies only
+-- to the ARN. If you specify only the function name, it is limited to 64
+-- character in length.
+uFunctionName :: Lens' UpdateFunctionCode Text
+uFunctionName = lens _uFunctionName (\ s a -> s{_uFunctionName = a});
 
--- | The Amazon Resource Name (ARN) of the IAM role that Lambda assumes when it
--- executes your function to access any other Amazon Web Services (AWS)
--- resources.
-ufcrRole :: Lens' UpdateFunctionCodeResponse (Maybe Text)
-ufcrRole = lens _ufcrRole (\s a -> s { _ufcrRole = a })
+instance AWSRequest UpdateFunctionCode where
+        type Sv UpdateFunctionCode = Lambda
+        type Rs UpdateFunctionCode = FunctionConfiguration
+        request = putJSON
+        response = receiveJSON (\ s h x -> eitherParseJSON x)
 
--- | The runtime environment for the Lambda function.
-ufcrRuntime :: Lens' UpdateFunctionCodeResponse (Maybe Runtime)
-ufcrRuntime = lens _ufcrRuntime (\s a -> s { _ufcrRuntime = a })
+instance ToHeaders UpdateFunctionCode where
+        toHeaders = const mempty
 
--- | The function execution time at which Lambda should terminate the function.
--- Because the execution time has cost implications, we recommend you set this
--- value based on your expected execution time. The default is 3 seconds.
-ufcrTimeout :: Lens' UpdateFunctionCodeResponse (Maybe Natural)
-ufcrTimeout = lens _ufcrTimeout (\s a -> s { _ufcrTimeout = a }) . mapping _Nat
+instance ToJSON UpdateFunctionCode where
+        toJSON UpdateFunctionCode'{..}
+          = object
+              ["S3ObjectVersion" .= _uS3ObjectVersion,
+               "S3Key" .= _uS3Key, "ZipFile" .= _uZipFile,
+               "S3Bucket" .= _uS3Bucket]
 
 instance ToPath UpdateFunctionCode where
-    toPath UpdateFunctionCode{..} = mconcat
-        [ "/2015-03-31/functions/"
-        , toText _ufc1FunctionName
-        , "/versions/HEAD/code"
-        ]
+        toPath UpdateFunctionCode'{..}
+          = mconcat
+              ["/2015-03-31/functions/", toBS _uFunctionName,
+               "/versions/HEAD/code"]
 
 instance ToQuery UpdateFunctionCode where
-    toQuery = const mempty
-
-instance ToHeaders UpdateFunctionCode
-
-instance ToJSON UpdateFunctionCode where
-    toJSON UpdateFunctionCode{..} = object
-        [ "ZipFile"         .= _ufc1ZipFile
-        , "S3Bucket"        .= _ufc1S3Bucket
-        , "S3Key"           .= _ufc1S3Key
-        , "S3ObjectVersion" .= _ufc1S3ObjectVersion
-        ]
-
-instance AWSRequest UpdateFunctionCode where
-    type Sv UpdateFunctionCode = Lambda
-    type Rs UpdateFunctionCode = UpdateFunctionCodeResponse
-
-    request  = put
-    response = jsonResponse
-
-instance FromJSON UpdateFunctionCodeResponse where
-    parseJSON = withObject "UpdateFunctionCodeResponse" $ \o -> UpdateFunctionCodeResponse
-        <$> o .:? "CodeSize"
-        <*> o .:? "Description"
-        <*> o .:? "FunctionArn"
-        <*> o .:? "FunctionName"
-        <*> o .:? "Handler"
-        <*> o .:? "LastModified"
-        <*> o .:? "MemorySize"
-        <*> o .:? "Role"
-        <*> o .:? "Runtime"
-        <*> o .:? "Timeout"
+        toQuery = const mempty
diff --git a/gen/Network/AWS/Lambda/UpdateFunctionConfiguration.hs b/gen/Network/AWS/Lambda/UpdateFunctionConfiguration.hs
--- a/gen/Network/AWS/Lambda/UpdateFunctionConfiguration.hs
+++ b/gen/Network/AWS/Lambda/UpdateFunctionConfiguration.hs
@@ -1,286 +1,172 @@
-{-# 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.Lambda.UpdateFunctionConfiguration
--- 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.
-
--- | Updates the configuration parameters for the specified Lambda function by
--- using the values provided in the request. You provide only the parameters you
--- want to change. This operation must only be used on an existing Lambda
--- function and cannot be used to update the function's code.
+-- Updates the configuration parameters for the specified Lambda function
+-- by using the values provided in the request. You provide only the
+-- parameters you want to change. This operation must only be used on an
+-- existing Lambda function and cannot be used to update the function\'s
+-- code.
 --
--- This operation requires permission for the 'lambda:UpdateFunctionConfiguration'
--- action.
+-- This operation requires permission for the
+-- 'lambda:UpdateFunctionConfiguration' action.
 --
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_UpdateFunctionConfiguration.html>
+-- /See:/ <http://docs.aws.amazon.com/lambda/latest/dg/API_UpdateFunctionConfiguration.html AWS API Reference> for UpdateFunctionConfiguration.
 module Network.AWS.Lambda.UpdateFunctionConfiguration
     (
-    -- * Request
-      UpdateFunctionConfiguration
-    -- ** Request constructor
-    , updateFunctionConfiguration
-    -- ** Request lenses
-    , ufcDescription
-    , ufcFunctionName
-    , ufcHandler
+    -- * Creating a Request
+      updateFunctionConfiguration
+    , UpdateFunctionConfiguration
+    -- * Request Lenses
     , ufcMemorySize
     , ufcRole
+    , ufcHandler
     , ufcTimeout
+    , ufcDescription
+    , ufcFunctionName
 
-    -- * Response
-    , UpdateFunctionConfigurationResponse
-    -- ** Response constructor
-    , updateFunctionConfigurationResponse
-    -- ** Response lenses
-    , ufcr1CodeSize
-    , ufcr1Description
-    , ufcr1FunctionArn
-    , ufcr1FunctionName
-    , ufcr1Handler
-    , ufcr1LastModified
-    , ufcr1MemorySize
-    , ufcr1Role
-    , ufcr1Runtime
-    , ufcr1Timeout
+    -- * Destructuring the Response
+    , functionConfiguration
+    , FunctionConfiguration
+    -- * Response Lenses
+    , fcRuntime
+    , fcMemorySize
+    , fcFunctionARN
+    , fcRole
+    , fcFunctionName
+    , fcCodeSize
+    , fcHandler
+    , fcTimeout
+    , fcLastModified
+    , fcDescription
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
+import           Network.AWS.Lambda.Types
+import           Network.AWS.Lambda.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data UpdateFunctionConfiguration = UpdateFunctionConfiguration
-    { _ufcDescription  :: Maybe Text
-    , _ufcFunctionName :: Text
-    , _ufcHandler      :: Maybe Text
-    , _ufcMemorySize   :: Maybe Nat
-    , _ufcRole         :: Maybe Text
-    , _ufcTimeout      :: Maybe Nat
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'updateFunctionConfiguration' smart constructor.
+data UpdateFunctionConfiguration = UpdateFunctionConfiguration'
+    { _ufcMemorySize   :: !(Maybe Nat)
+    , _ufcRole         :: !(Maybe Text)
+    , _ufcHandler      :: !(Maybe Text)
+    , _ufcTimeout      :: !(Maybe Nat)
+    , _ufcDescription  :: !(Maybe Text)
+    , _ufcFunctionName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'UpdateFunctionConfiguration' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'UpdateFunctionConfiguration' with the minimum fields required to make a request.
 --
--- * 'ufcDescription' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ufcFunctionName' @::@ 'Text'
+-- * 'ufcMemorySize'
 --
--- * 'ufcHandler' @::@ 'Maybe' 'Text'
+-- * 'ufcRole'
 --
--- * 'ufcMemorySize' @::@ 'Maybe' 'Natural'
+-- * 'ufcHandler'
 --
--- * 'ufcRole' @::@ 'Maybe' 'Text'
+-- * 'ufcTimeout'
 --
--- * 'ufcTimeout' @::@ 'Maybe' 'Natural'
+-- * 'ufcDescription'
 --
-updateFunctionConfiguration :: Text -- ^ 'ufcFunctionName'
-                            -> UpdateFunctionConfiguration
-updateFunctionConfiguration p1 = UpdateFunctionConfiguration
-    { _ufcFunctionName = p1
-    , _ufcRole         = Nothing
-    , _ufcHandler      = Nothing
-    , _ufcDescription  = Nothing
-    , _ufcTimeout      = Nothing
-    , _ufcMemorySize   = Nothing
+-- * 'ufcFunctionName'
+updateFunctionConfiguration
+    :: Text -- ^ 'ufcFunctionName'
+    -> UpdateFunctionConfiguration
+updateFunctionConfiguration pFunctionName_ =
+    UpdateFunctionConfiguration'
+    { _ufcMemorySize = Nothing
+    , _ufcRole = Nothing
+    , _ufcHandler = Nothing
+    , _ufcTimeout = Nothing
+    , _ufcDescription = Nothing
+    , _ufcFunctionName = pFunctionName_
     }
 
--- | A short user-defined function description. AWS Lambda does not use this
--- value. Assign a meaningful description as you see fit.
-ufcDescription :: Lens' UpdateFunctionConfiguration (Maybe Text)
-ufcDescription = lens _ufcDescription (\s a -> s { _ufcDescription = a })
-
--- | The name of the Lambda function.
---
--- You can specify an unqualified function name (for example, "Thumbnail") or
--- you can specify Amazon Resource Name (ARN) of the function (for example,
--- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
--- allows you to specify only the account ID qualifier (for example,
--- "account-id:Thumbnail"). Note that the length constraint applies only to the
--- ARN. If you specify only the function name, it is limited to 64 character in
--- length.
-ufcFunctionName :: Lens' UpdateFunctionConfiguration Text
-ufcFunctionName = lens _ufcFunctionName (\s a -> s { _ufcFunctionName = a })
-
--- | The function that Lambda calls to begin executing your function. For Node.js,
--- it is the /module-name.export/ value in your function.
-ufcHandler :: Lens' UpdateFunctionConfiguration (Maybe Text)
-ufcHandler = lens _ufcHandler (\s a -> s { _ufcHandler = a })
-
--- | The amount of memory, in MB, your Lambda function is given. AWS Lambda uses
--- this memory size to infer the amount of CPU allocated to your function. Your
--- function use-case determines your CPU and memory requirements. For example, a
--- database operation might need less memory compared to an image processing
--- function. The default value is 128 MB. The value must be a multiple of 64 MB.
+-- | The amount of memory, in MB, your Lambda function is given. AWS Lambda
+-- uses this memory size to infer the amount of CPU allocated to your
+-- function. Your function use-case determines your CPU and memory
+-- requirements. For example, a database operation might need less memory
+-- compared to an image processing function. The default value is 128 MB.
+-- The value must be a multiple of 64 MB.
 ufcMemorySize :: Lens' UpdateFunctionConfiguration (Maybe Natural)
-ufcMemorySize = lens _ufcMemorySize (\s a -> s { _ufcMemorySize = a }) . mapping _Nat
+ufcMemorySize = lens _ufcMemorySize (\ s a -> s{_ufcMemorySize = a}) . mapping _Nat;
 
--- | The Amazon Resource Name (ARN) of the IAM role that Lambda will assume when
--- it executes your function.
+-- | The Amazon Resource Name (ARN) of the IAM role that Lambda will assume
+-- when it executes your function.
 ufcRole :: Lens' UpdateFunctionConfiguration (Maybe Text)
-ufcRole = lens _ufcRole (\s a -> s { _ufcRole = a })
+ufcRole = lens _ufcRole (\ s a -> s{_ufcRole = a});
 
+-- | The function that Lambda calls to begin executing your function. For
+-- Node.js, it is the /module-name.export/ value in your function.
+ufcHandler :: Lens' UpdateFunctionConfiguration (Maybe Text)
+ufcHandler = lens _ufcHandler (\ s a -> s{_ufcHandler = a});
+
 -- | The function execution time at which AWS Lambda should terminate the
--- function. Because the execution time has cost implications, we recommend you
--- set this value based on your expected execution time. The default is 3
--- seconds.
+-- function. Because the execution time has cost implications, we recommend
+-- you set this value based on your expected execution time. The default is
+-- 3 seconds.
 ufcTimeout :: Lens' UpdateFunctionConfiguration (Maybe Natural)
-ufcTimeout = lens _ufcTimeout (\s a -> s { _ufcTimeout = a }) . mapping _Nat
+ufcTimeout = lens _ufcTimeout (\ s a -> s{_ufcTimeout = a}) . mapping _Nat;
 
-data UpdateFunctionConfigurationResponse = UpdateFunctionConfigurationResponse
-    { _ufcr1CodeSize     :: Maybe Integer
-    , _ufcr1Description  :: Maybe Text
-    , _ufcr1FunctionArn  :: Maybe Text
-    , _ufcr1FunctionName :: Maybe Text
-    , _ufcr1Handler      :: Maybe Text
-    , _ufcr1LastModified :: Maybe Text
-    , _ufcr1MemorySize   :: Maybe Nat
-    , _ufcr1Role         :: Maybe Text
-    , _ufcr1Runtime      :: Maybe Runtime
-    , _ufcr1Timeout      :: Maybe Nat
-    } deriving (Eq, Read, Show)
+-- | A short user-defined function description. AWS Lambda does not use this
+-- value. Assign a meaningful description as you see fit.
+ufcDescription :: Lens' UpdateFunctionConfiguration (Maybe Text)
+ufcDescription = lens _ufcDescription (\ s a -> s{_ufcDescription = a});
 
--- | 'UpdateFunctionConfigurationResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ufcr1CodeSize' @::@ 'Maybe' 'Integer'
---
--- * 'ufcr1Description' @::@ 'Maybe' 'Text'
---
--- * 'ufcr1FunctionArn' @::@ 'Maybe' 'Text'
---
--- * 'ufcr1FunctionName' @::@ 'Maybe' 'Text'
---
--- * 'ufcr1Handler' @::@ 'Maybe' 'Text'
---
--- * 'ufcr1LastModified' @::@ 'Maybe' 'Text'
---
--- * 'ufcr1MemorySize' @::@ 'Maybe' 'Natural'
---
--- * 'ufcr1Role' @::@ 'Maybe' 'Text'
---
--- * 'ufcr1Runtime' @::@ 'Maybe' 'Runtime'
---
--- * 'ufcr1Timeout' @::@ 'Maybe' 'Natural'
+-- | The name of the Lambda function.
 --
-updateFunctionConfigurationResponse :: UpdateFunctionConfigurationResponse
-updateFunctionConfigurationResponse = UpdateFunctionConfigurationResponse
-    { _ufcr1FunctionName = Nothing
-    , _ufcr1FunctionArn  = Nothing
-    , _ufcr1Runtime      = Nothing
-    , _ufcr1Role         = Nothing
-    , _ufcr1Handler      = Nothing
-    , _ufcr1CodeSize     = Nothing
-    , _ufcr1Description  = Nothing
-    , _ufcr1Timeout      = Nothing
-    , _ufcr1MemorySize   = Nothing
-    , _ufcr1LastModified = Nothing
-    }
-
--- | The size, in bytes, of the function .zip file you uploaded.
-ufcr1CodeSize :: Lens' UpdateFunctionConfigurationResponse (Maybe Integer)
-ufcr1CodeSize = lens _ufcr1CodeSize (\s a -> s { _ufcr1CodeSize = a })
-
--- | The user-provided description.
-ufcr1Description :: Lens' UpdateFunctionConfigurationResponse (Maybe Text)
-ufcr1Description = lens _ufcr1Description (\s a -> s { _ufcr1Description = a })
-
--- | The Amazon Resource Name (ARN) assigned to the function.
-ufcr1FunctionArn :: Lens' UpdateFunctionConfigurationResponse (Maybe Text)
-ufcr1FunctionArn = lens _ufcr1FunctionArn (\s a -> s { _ufcr1FunctionArn = a })
-
--- | The name of the function.
-ufcr1FunctionName :: Lens' UpdateFunctionConfigurationResponse (Maybe Text)
-ufcr1FunctionName =
-    lens _ufcr1FunctionName (\s a -> s { _ufcr1FunctionName = a })
-
--- | The function Lambda calls to begin executing your function.
-ufcr1Handler :: Lens' UpdateFunctionConfigurationResponse (Maybe Text)
-ufcr1Handler = lens _ufcr1Handler (\s a -> s { _ufcr1Handler = a })
-
--- | The timestamp of the last time you updated the function.
-ufcr1LastModified :: Lens' UpdateFunctionConfigurationResponse (Maybe Text)
-ufcr1LastModified =
-    lens _ufcr1LastModified (\s a -> s { _ufcr1LastModified = a })
-
--- | The memory size, in MB, you configured for the function. Must be a multiple
--- of 64 MB.
-ufcr1MemorySize :: Lens' UpdateFunctionConfigurationResponse (Maybe Natural)
-ufcr1MemorySize = lens _ufcr1MemorySize (\s a -> s { _ufcr1MemorySize = a }) . mapping _Nat
+-- You can specify an unqualified function name (for example,
+-- \"Thumbnail\") or you can specify Amazon Resource Name (ARN) of the
+-- function (for example,
+-- \"arn:aws:lambda:us-west-2:account-id:function:ThumbNail\"). AWS Lambda
+-- also allows you to specify only the account ID qualifier (for example,
+-- \"account-id:Thumbnail\"). Note that the length constraint applies only
+-- to the ARN. If you specify only the function name, it is limited to 64
+-- character in length.
+ufcFunctionName :: Lens' UpdateFunctionConfiguration Text
+ufcFunctionName = lens _ufcFunctionName (\ s a -> s{_ufcFunctionName = a});
 
--- | The Amazon Resource Name (ARN) of the IAM role that Lambda assumes when it
--- executes your function to access any other Amazon Web Services (AWS)
--- resources.
-ufcr1Role :: Lens' UpdateFunctionConfigurationResponse (Maybe Text)
-ufcr1Role = lens _ufcr1Role (\s a -> s { _ufcr1Role = a })
+instance AWSRequest UpdateFunctionConfiguration where
+        type Sv UpdateFunctionConfiguration = Lambda
+        type Rs UpdateFunctionConfiguration =
+             FunctionConfiguration
+        request = putJSON
+        response = receiveJSON (\ s h x -> eitherParseJSON x)
 
--- | The runtime environment for the Lambda function.
-ufcr1Runtime :: Lens' UpdateFunctionConfigurationResponse (Maybe Runtime)
-ufcr1Runtime = lens _ufcr1Runtime (\s a -> s { _ufcr1Runtime = a })
+instance ToHeaders UpdateFunctionConfiguration where
+        toHeaders = const mempty
 
--- | The function execution time at which Lambda should terminate the function.
--- Because the execution time has cost implications, we recommend you set this
--- value based on your expected execution time. The default is 3 seconds.
-ufcr1Timeout :: Lens' UpdateFunctionConfigurationResponse (Maybe Natural)
-ufcr1Timeout = lens _ufcr1Timeout (\s a -> s { _ufcr1Timeout = a }) . mapping _Nat
+instance ToJSON UpdateFunctionConfiguration where
+        toJSON UpdateFunctionConfiguration'{..}
+          = object
+              ["MemorySize" .= _ufcMemorySize, "Role" .= _ufcRole,
+               "Handler" .= _ufcHandler, "Timeout" .= _ufcTimeout,
+               "Description" .= _ufcDescription]
 
 instance ToPath UpdateFunctionConfiguration where
-    toPath UpdateFunctionConfiguration{..} = mconcat
-        [ "/2015-03-31/functions/"
-        , toText _ufcFunctionName
-        , "/versions/HEAD/configuration"
-        ]
+        toPath UpdateFunctionConfiguration'{..}
+          = mconcat
+              ["/2015-03-31/functions/", toBS _ufcFunctionName,
+               "/versions/HEAD/configuration"]
 
 instance ToQuery UpdateFunctionConfiguration where
-    toQuery = const mempty
-
-instance ToHeaders UpdateFunctionConfiguration
-
-instance ToJSON UpdateFunctionConfiguration where
-    toJSON UpdateFunctionConfiguration{..} = object
-        [ "Role"        .= _ufcRole
-        , "Handler"     .= _ufcHandler
-        , "Description" .= _ufcDescription
-        , "Timeout"     .= _ufcTimeout
-        , "MemorySize"  .= _ufcMemorySize
-        ]
-
-instance AWSRequest UpdateFunctionConfiguration where
-    type Sv UpdateFunctionConfiguration = Lambda
-    type Rs UpdateFunctionConfiguration = UpdateFunctionConfigurationResponse
-
-    request  = put
-    response = jsonResponse
-
-instance FromJSON UpdateFunctionConfigurationResponse where
-    parseJSON = withObject "UpdateFunctionConfigurationResponse" $ \o -> UpdateFunctionConfigurationResponse
-        <$> o .:? "CodeSize"
-        <*> o .:? "Description"
-        <*> o .:? "FunctionArn"
-        <*> o .:? "FunctionName"
-        <*> o .:? "Handler"
-        <*> o .:? "LastModified"
-        <*> o .:? "MemorySize"
-        <*> o .:? "Role"
-        <*> o .:? "Runtime"
-        <*> o .:? "Timeout"
+        toQuery = const mempty
diff --git a/gen/Network/AWS/Lambda/Waiters.hs b/gen/Network/AWS/Lambda/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Lambda/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.Lambda.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.Lambda.Waiters where
+
+import           Network.AWS.Lambda.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.Lambda
+import Test.AWS.Lambda.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "Lambda"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/Gen/Lambda.hs b/test/Test/AWS/Gen/Lambda.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/Lambda.hs
@@ -0,0 +1,311 @@
+{-# 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.Lambda
+-- 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.Lambda where
+
+import Data.Proxy
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+import Network.AWS.Lambda
+import Test.AWS.Lambda.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"
+--         [ testGetFunctionConfiguration $
+--             getFunctionConfiguration
+--
+--         , testUpdateEventSourceMapping $
+--             updateEventSourceMapping
+--
+--         , testDeleteEventSourceMapping $
+--             deleteEventSourceMapping
+--
+--         , testRemovePermission $
+--             removePermission
+--
+--         , testInvoke $
+--             invoke
+--
+--         , testGetEventSourceMapping $
+--             getEventSourceMapping
+--
+--         , testCreateFunction $
+--             createFunction
+--
+--         , testCreateEventSourceMapping $
+--             createEventSourceMapping
+--
+--         , testGetFunction $
+--             getFunction
+--
+--         , testListEventSourceMappings $
+--             listEventSourceMappings
+--
+--         , testAddPermission $
+--             addPermission
+--
+--         , testDeleteFunction $
+--             deleteFunction
+--
+--         , testUpdateFunctionConfiguration $
+--             updateFunctionConfiguration
+--
+--         , testListFunctions $
+--             listFunctions
+--
+--         , testUpdateFunctionCode $
+--             updateFunctionCode
+--
+--         , testGetPolicy $
+--             getPolicy
+--
+--           ]
+
+--     , testGroup "response"
+--         [ testGetFunctionConfigurationResponse $
+--             functionConfiguration
+--
+--         , testUpdateEventSourceMappingResponse $
+--             eventSourceMappingConfiguration
+--
+--         , testDeleteEventSourceMappingResponse $
+--             eventSourceMappingConfiguration
+--
+--         , testRemovePermissionResponse $
+--             removePermissionResponse
+--
+--         , testInvokeResponse $
+--             invokeResponse
+--
+--         , testGetEventSourceMappingResponse $
+--             eventSourceMappingConfiguration
+--
+--         , testCreateFunctionResponse $
+--             functionConfiguration
+--
+--         , testCreateEventSourceMappingResponse $
+--             eventSourceMappingConfiguration
+--
+--         , testGetFunctionResponse $
+--             getFunctionResponse
+--
+--         , testListEventSourceMappingsResponse $
+--             listEventSourceMappingsResponse
+--
+--         , testAddPermissionResponse $
+--             addPermissionResponse
+--
+--         , testDeleteFunctionResponse $
+--             deleteFunctionResponse
+--
+--         , testUpdateFunctionConfigurationResponse $
+--             functionConfiguration
+--
+--         , testListFunctionsResponse $
+--             listFunctionsResponse
+--
+--         , testUpdateFunctionCodeResponse $
+--             functionConfiguration
+--
+--         , testGetPolicyResponse $
+--             getPolicyResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+testGetFunctionConfiguration :: GetFunctionConfiguration -> TestTree
+testGetFunctionConfiguration = req
+    "GetFunctionConfiguration"
+    "fixture/GetFunctionConfiguration"
+
+testUpdateEventSourceMapping :: UpdateEventSourceMapping -> TestTree
+testUpdateEventSourceMapping = req
+    "UpdateEventSourceMapping"
+    "fixture/UpdateEventSourceMapping"
+
+testDeleteEventSourceMapping :: DeleteEventSourceMapping -> TestTree
+testDeleteEventSourceMapping = req
+    "DeleteEventSourceMapping"
+    "fixture/DeleteEventSourceMapping"
+
+testRemovePermission :: RemovePermission -> TestTree
+testRemovePermission = req
+    "RemovePermission"
+    "fixture/RemovePermission"
+
+testInvoke :: Invoke -> TestTree
+testInvoke = req
+    "Invoke"
+    "fixture/Invoke"
+
+testGetEventSourceMapping :: GetEventSourceMapping -> TestTree
+testGetEventSourceMapping = req
+    "GetEventSourceMapping"
+    "fixture/GetEventSourceMapping"
+
+testCreateFunction :: CreateFunction -> TestTree
+testCreateFunction = req
+    "CreateFunction"
+    "fixture/CreateFunction"
+
+testCreateEventSourceMapping :: CreateEventSourceMapping -> TestTree
+testCreateEventSourceMapping = req
+    "CreateEventSourceMapping"
+    "fixture/CreateEventSourceMapping"
+
+testGetFunction :: GetFunction -> TestTree
+testGetFunction = req
+    "GetFunction"
+    "fixture/GetFunction"
+
+testListEventSourceMappings :: ListEventSourceMappings -> TestTree
+testListEventSourceMappings = req
+    "ListEventSourceMappings"
+    "fixture/ListEventSourceMappings"
+
+testAddPermission :: AddPermission -> TestTree
+testAddPermission = req
+    "AddPermission"
+    "fixture/AddPermission"
+
+testDeleteFunction :: DeleteFunction -> TestTree
+testDeleteFunction = req
+    "DeleteFunction"
+    "fixture/DeleteFunction"
+
+testUpdateFunctionConfiguration :: UpdateFunctionConfiguration -> TestTree
+testUpdateFunctionConfiguration = req
+    "UpdateFunctionConfiguration"
+    "fixture/UpdateFunctionConfiguration"
+
+testListFunctions :: ListFunctions -> TestTree
+testListFunctions = req
+    "ListFunctions"
+    "fixture/ListFunctions"
+
+testUpdateFunctionCode :: UpdateFunctionCode -> TestTree
+testUpdateFunctionCode = req
+    "UpdateFunctionCode"
+    "fixture/UpdateFunctionCode"
+
+testGetPolicy :: GetPolicy -> TestTree
+testGetPolicy = req
+    "GetPolicy"
+    "fixture/GetPolicy"
+
+-- Responses
+
+testGetFunctionConfigurationResponse :: FunctionConfiguration -> TestTree
+testGetFunctionConfigurationResponse = res
+    "GetFunctionConfigurationResponse"
+    "fixture/GetFunctionConfigurationResponse"
+    (Proxy :: Proxy GetFunctionConfiguration)
+
+testUpdateEventSourceMappingResponse :: EventSourceMappingConfiguration -> TestTree
+testUpdateEventSourceMappingResponse = res
+    "UpdateEventSourceMappingResponse"
+    "fixture/UpdateEventSourceMappingResponse"
+    (Proxy :: Proxy UpdateEventSourceMapping)
+
+testDeleteEventSourceMappingResponse :: EventSourceMappingConfiguration -> TestTree
+testDeleteEventSourceMappingResponse = res
+    "DeleteEventSourceMappingResponse"
+    "fixture/DeleteEventSourceMappingResponse"
+    (Proxy :: Proxy DeleteEventSourceMapping)
+
+testRemovePermissionResponse :: RemovePermissionResponse -> TestTree
+testRemovePermissionResponse = res
+    "RemovePermissionResponse"
+    "fixture/RemovePermissionResponse"
+    (Proxy :: Proxy RemovePermission)
+
+testInvokeResponse :: InvokeResponse -> TestTree
+testInvokeResponse = res
+    "InvokeResponse"
+    "fixture/InvokeResponse"
+    (Proxy :: Proxy Invoke)
+
+testGetEventSourceMappingResponse :: EventSourceMappingConfiguration -> TestTree
+testGetEventSourceMappingResponse = res
+    "GetEventSourceMappingResponse"
+    "fixture/GetEventSourceMappingResponse"
+    (Proxy :: Proxy GetEventSourceMapping)
+
+testCreateFunctionResponse :: FunctionConfiguration -> TestTree
+testCreateFunctionResponse = res
+    "CreateFunctionResponse"
+    "fixture/CreateFunctionResponse"
+    (Proxy :: Proxy CreateFunction)
+
+testCreateEventSourceMappingResponse :: EventSourceMappingConfiguration -> TestTree
+testCreateEventSourceMappingResponse = res
+    "CreateEventSourceMappingResponse"
+    "fixture/CreateEventSourceMappingResponse"
+    (Proxy :: Proxy CreateEventSourceMapping)
+
+testGetFunctionResponse :: GetFunctionResponse -> TestTree
+testGetFunctionResponse = res
+    "GetFunctionResponse"
+    "fixture/GetFunctionResponse"
+    (Proxy :: Proxy GetFunction)
+
+testListEventSourceMappingsResponse :: ListEventSourceMappingsResponse -> TestTree
+testListEventSourceMappingsResponse = res
+    "ListEventSourceMappingsResponse"
+    "fixture/ListEventSourceMappingsResponse"
+    (Proxy :: Proxy ListEventSourceMappings)
+
+testAddPermissionResponse :: AddPermissionResponse -> TestTree
+testAddPermissionResponse = res
+    "AddPermissionResponse"
+    "fixture/AddPermissionResponse"
+    (Proxy :: Proxy AddPermission)
+
+testDeleteFunctionResponse :: DeleteFunctionResponse -> TestTree
+testDeleteFunctionResponse = res
+    "DeleteFunctionResponse"
+    "fixture/DeleteFunctionResponse"
+    (Proxy :: Proxy DeleteFunction)
+
+testUpdateFunctionConfigurationResponse :: FunctionConfiguration -> TestTree
+testUpdateFunctionConfigurationResponse = res
+    "UpdateFunctionConfigurationResponse"
+    "fixture/UpdateFunctionConfigurationResponse"
+    (Proxy :: Proxy UpdateFunctionConfiguration)
+
+testListFunctionsResponse :: ListFunctionsResponse -> TestTree
+testListFunctionsResponse = res
+    "ListFunctionsResponse"
+    "fixture/ListFunctionsResponse"
+    (Proxy :: Proxy ListFunctions)
+
+testUpdateFunctionCodeResponse :: FunctionConfiguration -> TestTree
+testUpdateFunctionCodeResponse = res
+    "UpdateFunctionCodeResponse"
+    "fixture/UpdateFunctionCodeResponse"
+    (Proxy :: Proxy UpdateFunctionCode)
+
+testGetPolicyResponse :: GetPolicyResponse -> TestTree
+testGetPolicyResponse = res
+    "GetPolicyResponse"
+    "fixture/GetPolicyResponse"
+    (Proxy :: Proxy GetPolicy)
diff --git a/test/Test/AWS/Lambda.hs b/test/Test/AWS/Lambda.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Lambda.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Module      : Test.AWS.Lambda
+-- 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.Lambda
+    ( tests
+    , fixtures
+    ) where
+
+import           Network.AWS.Lambda
+import           Test.AWS.Gen.Lambda
+import           Test.Tasty
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/Lambda/Internal.hs b/test/Test/AWS/Lambda/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Lambda/Internal.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Test.AWS.Lambda.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.Lambda.Internal where
+
+import Test.AWS.Prelude
